ZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggMzIyMGI4OS4uYmVhOTVmZCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTcsNyArNyw4IEBACiAgb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5LAogIG9yZy5hcGFjaGUuYW50O2J1bmRsZS12ZXJzaW9uPSIxLjcuMCIKIEltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0O3ZlcnNpb249IjIuNC4wIiwKLSBqYXZheC5zZXJ2bGV0Lmh0dHA7dmVyc2lvbj0iMi40LjAiCisgamF2YXguc2VydmxldC5odHRwO3ZlcnNpb249IjIuNC4wIiwKKyBvcmcuYXBhY2hlLmxvZzRqCiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyLAogIG9yZy5lY2xpcHNlLmVwcC53aXphcmQuam5scGJ1aWxkZXIsCiAgb3JnLmVjbGlwc2UuZXBwLndpemFyZC51dGlsCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0FjdGl2YXRvci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW5zdGFsbGVyYnVpbGRlci9BY3RpdmF0b3IuamF2YQppbmRleCAwMTlkOTI2Li5lNTI0ODJjIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0FjdGl2YXRvci5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2luc3RhbGxlcmJ1aWxkZXIvQWN0aXZhdG9yLmphdmEKQEAgLTEsMyArMSwxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXI7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKQEAgLTUsNjIgKzE1LDY2IEBACiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKIAoraW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOwogaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3I7CiBpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CiAKIHB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgaW1wbGVtZW50cyBCdW5kbGVBY3RpdmF0b3IgewogCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfQ09ORklHVVJBVElPTiA9ICJvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIuY29uZmlndXJhdGlvbiI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfQ09ORklHVVJBVElPTl9ERUZBVUxUX1ZBTFVFID0gImluc3RhbGxlcmJ1aWxkZXIucHJvcGVydGllcyI7Ci0JcHJpdmF0ZSBzdGF0aWMgQnVuZGxlQ29udGV4dCBjb250ZXh0OworICBzdGF0aWMgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoIEFjdGl2YXRvci5jbGFzcyApOworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWV9DT05GSUdVUkFUSU9OID0gIm9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci5jb25maWd1cmF0aW9uIjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfQ09ORklHVVJBVElPTl9ERUZBVUxUX1ZBTFVFID0gImluc3RhbGxlcmJ1aWxkZXIucHJvcGVydGllcyI7CisgIHByaXZhdGUgc3RhdGljIEJ1bmRsZUNvbnRleHQgY29udGV4dDsKIAotCXB1YmxpYyBzdGF0aWMgQnVuZGxlQ29udGV4dCBnZXRDb250ZXh0KCkgewotCQlyZXR1cm4gY29udGV4dDsKLQl9CisgIHB1YmxpYyBzdGF0aWMgQnVuZGxlQ29udGV4dCBnZXRDb250ZXh0KCkgeworICAgIHJldHVybiBjb250ZXh0OworICB9CisgIHByaXZhdGUgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOworICBwcml2YXRlIEluc3RhbGxlckNhY2hlIGluc3RhbGxlckNhY2hlOwogCi0JcHJpdmF0ZSBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKyAgcHVibGljIEluc3RhbGxlckNhY2hlIGdldEluc3RhbGxlckNhY2hlKCkgeworICAgIHJldHVybiBpbnN0YWxsZXJDYWNoZTsKKyAgfQorICBwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOwogCi0JcHVibGljIEFjdGl2YXRvcigpIHsKLQl9CisgIHB1YmxpYyBBY3RpdmF0b3IoKSB7CisgIH0KIAotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQorICAvKioKKyAgICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisgICAqIAorICAgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKyAgICovCisgIHB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisgICAgcmV0dXJuIHBsdWdpbjsKKyAgfQogCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJQWN0aXZhdG9yLmNvbnRleHQgPSBjb250ZXh0OwotCQlwbHVnaW4gPSB0aGlzOwotCX0KKyAgcHVibGljIHZvaWQgc3RhcnQoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBFeGNlcHRpb24geworICAgIEFjdGl2YXRvci5jb250ZXh0ID0gY29udGV4dDsKKyAgICBwbHVnaW4gPSB0aGlzOworICAgIGdldENvbmZpZ3VyYXRpb24oKTsKKyAgICBpbnN0YWxsZXJDYWNoZSA9IG5ldyBJbnN0YWxsZXJDYWNoZSggY29uZmlndXJhdGlvbi5nZXRJbnN0YWxsZXJDYWNoZVNpemUoKSApOworICB9CiAKLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUFjdGl2YXRvci5jb250ZXh0ID0gbnVsbDsKLQl9CisgIHB1YmxpYyB2b2lkIHN0b3AoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBFeGNlcHRpb24geworICAgIEFjdGl2YXRvci5jb250ZXh0ID0gbnVsbDsKKyAgfQogCi0JcHVibGljIHN5bmNocm9uaXplZCBDb25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKSB7Ci0JCWlmIChjb25maWd1cmF0aW9uID09IG51bGwpIHsKLQkJCVN0cmluZyBjb25maWd1cmF0aW9uRmlsZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgKLQkJCQkJUFJPUEVSVFlfQ09ORklHVVJBVElPTiwKLQkJCQkJUFJPUEVSVFlfQ09ORklHVVJBVElPTl9ERUZBVUxUX1ZBTFVFKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGluZyBjb25maWd1cmF0aW9uIGZyb20gZmlsZTogIgotCQkJCQkrIGNvbmZpZ3VyYXRpb25GaWxlKTsKLQkJCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCQl0cnkgewotCQkJCXByb3BlcnRpZXMubG9hZChuZXcgRmlsZUlucHV0U3RyZWFtKGNvbmZpZ3VyYXRpb25GaWxlKSk7Ci0JCQkJY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHByb3BlcnRpZXMpOwotCQkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGV4YykgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQlleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBleGMpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBjb25maWd1cmF0aW9uOwotCX0KKyAgcHVibGljIHN5bmNocm9uaXplZCBDb25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKSB7CisgICAgaWYoIGNvbmZpZ3VyYXRpb24gPT0gbnVsbCApIHsKKyAgICAgIFN0cmluZyBjb25maWd1cmF0aW9uRmlsZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSggUFJPUEVSVFlfQ09ORklHVVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVFlfQ09ORklHVVJBVElPTl9ERUZBVUxUX1ZBTFVFICk7CisgICAgICBsb2dnZXIuaW5mbyggIkxvYWRpbmcgY29uZmlndXJhdGlvbiBmcm9tIGZpbGU6ICIgKyBjb25maWd1cmF0aW9uRmlsZSApOworICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgIHRyeSB7CisgICAgICAgIHByb3BlcnRpZXMubG9hZCggbmV3IEZpbGVJbnB1dFN0cmVhbSggY29uZmlndXJhdGlvbkZpbGUgKSApOworICAgICAgICBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oIHByb3BlcnRpZXMgKTsKKyAgICAgIH0gY2F0Y2goIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBleGMgKSB7CisgICAgICAgIGxvZ2dlci5lcnJvciggIkNvdWxkIG5vdCBsb2FkIGNvbmZpZ3VyYXRpb24iLCBleGMgKTsKKyAgICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGV4YyApIHsKKyAgICAgICAgbG9nZ2VyLmVycm9yKCAiQ291bGQgbm90IGxvYWQgY29uZmlndXJhdGlvbiIsIGV4YyApOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKKyAgfQogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW5zdGFsbGVyYnVpbGRlci9CdWlsZEluc3RhbGxlci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW5zdGFsbGVyYnVpbGRlci9CdWlsZEluc3RhbGxlci5qYXZhCmluZGV4IDRkN2E4ZTMuLmMxOWE4NzQgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2luc3RhbGxlcmJ1aWxkZXIvQnVpbGRJbnN0YWxsZXIuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0J1aWxkSW5zdGFsbGVyLmphdmEKQEAgLTEsMyArMSwxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXI7CiAKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwpAQCAtNDEsMzUgKzUxLDM0IEBACiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkNPRElORyA9ICJVVEYtOCI7CiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVIgPSA1MTI7CiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAKKwogICBAT3ZlcnJpZGUKICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoIGZpbmFsIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgogICB7Ci0gICAgCiAgICAgU3RyaW5nIG9zID0gcmVxLmdldFBhcmFtZXRlciggIm9zIiApOwogICAgIFN0cmluZyBpdVBhcmFtID0gcmVxLmdldFBhcmFtZXRlciggIml1cyIgKTsKICAgICBTdHJpbmcgZmlsZW5hbWUgPSByZXEuZ2V0UGFyYW1ldGVyKCAiZmlsZW5hbWUiICk7Ci0KICAgICBleGVjdXRlKCBvcywgaXVQYXJhbSwgZmlsZW5hbWUgKTsKLQogICB9CiAKICAgcHVibGljIHN0YXRpYyB2b2lkIGV4ZWN1dGUoIGZpbmFsIFN0cmluZyBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBpdVBhcmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZpbGVuYW1lICkKLSAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBmaWxlbmFtZSApIHRocm93cyBJT0V4Y2VwdGlvbgogICB7Ci0gICAgRmlsZSBkb3dubG9hZERpciA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldERvd25sb2Fkc0RpcmVjdG9yeSgpOwotICAgIElQYXRoIG91dERpclBhdGggPSBuZXcgUGF0aCggbmV3IEZpbGUoZG93bmxvYWREaXIsIE9VVFBVVF9QQVRIKS5nZXRBYnNvbHV0ZVBhdGgoKSApOwotICAgIElQYXRoIHJhd0luc3RhbGxlckRpclBhdGggPSBuZXcgUGF0aCggbmV3IEZpbGUoZG93bmxvYWREaXIsIElOU1RBTExFUl9URU1QTEFURV9QQVRIKS5nZXRBYnNvbHV0ZVBhdGgoKSApOworICAgIEZpbGUgZG93bmxvYWREaXIgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisgICAgICAuZ2V0Q29uZmlndXJhdGlvbigpCisgICAgICAuZ2V0RG93bmxvYWRzRGlyZWN0b3J5KCk7CisgICAgSVBhdGggb3V0RGlyUGF0aCA9IG5ldyBQYXRoKCBuZXcgRmlsZSggZG93bmxvYWREaXIsIE9VVFBVVF9QQVRIICkuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKKyAgICBJUGF0aCByYXdJbnN0YWxsZXJEaXJQYXRoID0gbmV3IFBhdGgoIG5ldyBGaWxlKCBkb3dubG9hZERpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNUQUxMRVJfVEVNUExBVEVfUEFUSCApLmdldEFic29sdXRlUGF0aCgpICk7CiAgICAgU3RyaW5nW10gaXVzID0gZ2V0SVVzKCBpdVBhcmFtICk7CiAgICAgRmlsZSB0ZW1wbGF0ZSA9IGZpbmRSYXdJbnN0YWxsZXJGaWxlKCByYXdJbnN0YWxsZXJEaXJQYXRoLCBvcyApOwogICAgIElQYXRoIG91dEZpbGVQYXRoID0gb3V0RGlyUGF0aC5hcHBlbmQoIGZpbGVuYW1lICk7CiAgICAgY2VhdGVDdXN0b21JbnN0YWxsZXIoIG9zLCB0ZW1wbGF0ZSwgaXVzLCBvdXRGaWxlUGF0aC50b0ZpbGUoKSApOwogICB9Ci0gIAorCiAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpbGVOYW1lKCBmaW5hbCBTdHJpbmcgb3MsIGZpbmFsIFN0cmluZ1tdIGlkcyApIHsKICAgICBTdHJpbmcgaGFzaCA9IGlkcy50b1N0cmluZygpOwogICAgIHRyeSB7CkBAIC04MSwxMiArOTAsMTEgQEAKICAgICByZXR1cm4gImVjbGlwc2UtIiArIG9zICsgIi0iICsgaGFzaCArICIuIiArIE9zVXRpbC5nZXRBcmNoaXZlRXh0ZW5zaW9uKCBvcyApOwogICB9CiAKLSAgLy8vLy8vLy8vLy8vLy8vLy8vCisgIC8vIC8vLy8vLy8vLy8vLy8vLy8KICAgLy8gaGVscGluZyBtZXRob2RzCi0gIC8vLy8vLy8vLy8vLy8vLy8vLwotCisgIC8vIC8vLy8vLy8vLy8vLy8vLy8KICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZ2V0SVVzKCBmaW5hbCBTdHJpbmcgcGFyYW0gKSB7Ci0gICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAKKyAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAgICAgU3RyaW5nVG9rZW5pemVyIHRrbml6ciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoIHBhcmFtLCAiLCIsIGZhbHNlICk7CiAgICAgd2hpbGUoIHRrbml6ci5oYXNNb3JlVG9rZW5zKCkgKSB7CiAgICAgICBTdHJpbmcgdG9rZW4gPSB0a25penIubmV4dFRva2VuKCk7CkBAIC05OSw3ICsxMDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGaWxlIGluRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGl1c1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGaWxlIG91dEZpbGUgKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbiAvL0ZJWE1FCisgICAgdGhyb3dzIElPRXhjZXB0aW9uIC8vIEZJWE1FCiAgIHsKICAgICBJbnB1dFN0cmVhbSBpbiA9IG51bGw7CiAgICAgT3V0cHV0U3RyZWFtIG91dCA9IG51bGw7CkBAIC0xMjEsMTMgKzEyOSwxMSBAQAogICAgICAgICAgICAgZW50cnkgPSB6aXMuZ2V0TmV4dEVudHJ5KCk7CiAgICAgICAgICAgfQogICAgICAgICAgIHpvcy5wdXROZXh0RW50cnkoIG5ldyBaaXBFbnRyeSggImVjbGlwc2UvaW5zdGFsbGVyLnByb3BlcnRpZXMiICkgKTsKLSAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBjb25mU3RyZWFtCi0gICAgICAgICAgICA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSggYnl0ZXMgKTsKKyAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBjb25mU3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKCBieXRlcyApOwogICAgICAgICAgIGNvcHkoIGNvbmZTdHJlYW0sIHpvcyApOwogICAgICAgICAgIHpvcy5jbG9zZUVudHJ5KCk7Ci0gICAgICAgICAgCiAgICAgICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGUgKSB7Ci0gICAgICAgICAgLy9UT0RPCisgICAgICAgICAgLy8gVE9ETwogICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgdHJ5Q2xvc2UoIHppcyApOwpAQCAtMTUyLDE5ICsxNTgsMTcgQEAKICAgICAgICAgICAgIGVudHJ5ID0gdGlzLmdldE5leHRFbnRyeSgpOwogICAgICAgICAgIH0KICAgICAgICAgICBTdHJpbmcgZW50cnlOYW1lID0gImVjbGlwc2UvaW5zdGFsbGVyLnByb3BlcnRpZXMiOwotICAgICAgICAgIGlmIChvcyA9PSAibWFjb3N4IikgeworICAgICAgICAgIGlmKCBvcyA9PSAibWFjb3N4IiApIHsKICAgICAgICAgICAgIGVudHJ5TmFtZSA9ICJlY2xpcHNlL3AyaW5zdGFsbGVyLmFwcC9Db250ZW50cy9NYWNPUy9pbnN0YWxsZXIucHJvcGVydGllcyI7CiAgICAgICAgICAgfQogICAgICAgICAgIFRhckVudHJ5IHRhckVudHJ5ID0gbmV3IFRhckVudHJ5KCBlbnRyeU5hbWUgKTsKLSAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBjb25mU3RyZWFtCi0gICAgICAgICAgICA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSggYnl0ZXMgKTsKKyAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBjb25mU3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKCBieXRlcyApOwogICAgICAgICAgIHRhckVudHJ5LnNldFNpemUoIGJ5dGVzLmxlbmd0aCApOwogICAgICAgICAgIHRvcy5wdXROZXh0RW50cnkoIHRhckVudHJ5ICk7CiAgICAgICAgICAgY29weSggY29uZlN0cmVhbSwgdG9zICk7CiAgICAgICAgICAgdG9zLmNsb3NlRW50cnkoKTsKLSAgICAgICAgICAKICAgICAgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gZSApIHsKLSAgICAgICAgICAvL1RPRE8KKyAgICAgICAgICAvLyBUT0RPCiAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICB0cnlDbG9zZSggdGlzICk7CkBAIC0xODIsMzUgKzE4Niw1MSBAQAogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxlckNvbmZpZ3VyYXRpb24oIGZpbmFsIFN0cmluZyBpdXNbXSApCi0gICAgdGhyb3dzIElPRXhjZXB0aW9uIC8vRklYTUUKKyAgICB0aHJvd3MgSU9FeGNlcHRpb24gLy8gRklYTUUKICAgewogICAgIFN0cmluZyByZXN1bHQgPSAiIjsKLSAgICBGaWxlIGRvd25sb2FkRGlyID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0RG93bmxvYWRzRGlyZWN0b3J5KCk7Ci0gICAgSVBhdGggdGVtcGxhdGVEaXJQYXRoID0gbmV3IFBhdGgoIG5ldyBGaWxlKGRvd25sb2FkRGlyLCBJTlNUQUxMRVJfVEVNUExBVEVfUEFUSCkuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKKyAgICBGaWxlIGRvd25sb2FkRGlyID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQorICAgICAgLmdldENvbmZpZ3VyYXRpb24oKQorICAgICAgLmdldERvd25sb2Fkc0RpcmVjdG9yeSgpOworICAgIElQYXRoIHRlbXBsYXRlRGlyUGF0aCA9IG5ldyBQYXRoKCBuZXcgRmlsZSggZG93bmxvYWREaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNUQUxMRVJfVEVNUExBVEVfUEFUSCApLmdldEFic29sdXRlUGF0aCgpICk7CiAgICAgRmlsZSBpbkZpbGUgPSB0ZW1wbGF0ZURpclBhdGguYXBwZW5kKCAiaW5zdGFsbGVyLnByb3BlcnRpZXMiICkudG9GaWxlKCk7CiAgICAgSW5wdXRTdHJlYW0gaW4gPSBudWxsOwogICAgIHRyeSB7Ci0gICAgIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbSggaW5GaWxlICAgICk7Ci0gICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBidWZmZXJTdHJlYW0gPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgIGNvcHkoIGluLCBidWZmZXJTdHJlYW0gKTsKLSAgICAgcmVzdWx0ID0gY3VzdG9taXplKCBidWZmZXJTdHJlYW0udG9TdHJpbmcoIEVOQ09ESU5HICksIGl1cyApOworICAgICAgaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBpbkZpbGUgKTsKKyAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBidWZmZXJTdHJlYW0gPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICBjb3B5KCBpbiwgYnVmZmVyU3RyZWFtICk7CisgICAgICByZXN1bHQgPSBjdXN0b21pemUoIGJ1ZmZlclN0cmVhbS50b1N0cmluZyggRU5DT0RJTkcgKSwgaXVzICk7CiAgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gaW9lICkgewotICAgICBpb2UucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICBpb2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgfSBmaW5hbGx5IHsKLSAgICAgdHJ5Q2xvc2UoIGluICk7CisgICAgICB0cnlDbG9zZSggaW4gKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQotICAKKwogICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3VzdG9taXplKCBmaW5hbCBTdHJpbmcgaW5wdXQsIGZpbmFsIFN0cmluZ1tdIGl1cyApIHsKICAgICBTdHJpbmcgcmVzdWx0ID0gaW5wdXQ7Ci0gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2VBbGwoICJcXCRcXHtyb290c1xcfSIsIFN0cmluZ1V0aWwudG9Db21tYUxpc3QoIGl1cywgZmFsc2UgKSApOwotICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKCAiXFwkXFx7cHJvZmlsZU5hbWVcXH0iLCAiUHJvZmlsZU5hbWVIZXJlIiApOyAvL0ZJWE1FOiAoamIpIGdldCB0aGlzIGZyb20gaW5pdGlhbCBzZWxlY3Rpb24gb24gZWNsaXNwZS5vcmcKKyAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZUFsbCggIlxcJFxce3Jvb3RzXFx9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nVXRpbC50b0NvbW1hTGlzdCggaXVzLCBmYWxzZSApICk7CisgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2VBbGwoICJcXCRcXHtwcm9maWxlTmFtZVxcfSIsICJQcm9maWxlTmFtZUhlcmUiICk7IC8vIEZJWE1FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWNsaXNwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yZwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIEZpbGUgZmluZFJhd0luc3RhbGxlckZpbGUoIGZpbmFsIElQYXRoIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBvcyApCisKKyAgcHJpdmF0ZSBzdGF0aWMgRmlsZSBmaW5kUmF3SW5zdGFsbGVyRmlsZSggZmluYWwgSVBhdGggcGF0aCwgZmluYWwgU3RyaW5nIG9zICkKICAgewogICAgIEZpbGUgcmVzdWx0ID0gbnVsbDsKICAgICBGaWxlIGRpciA9IHBhdGgudG9GaWxlKCk7CkBAIC0yMjIsMTQgKzI0MiwxNCBAQAogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogICB9Ci0gIAorCiAgIHByaXZhdGUgc3RhdGljIHZvaWQgdHJ5Q2xvc2UoIGZpbmFsIElucHV0U3RyZWFtIHN0cmVhbSApIHsKICAgICBpZiggc3RyZWFtICE9IG51bGwgKSB7CiAgICAgICB0cnkgewogICAgICAgICBzdHJlYW0uY2xvc2UoKTsKICAgICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGUgKSB7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIC8vVE9ETyBBY3RpdmF0b3IubG9nKCBlICk7CisgICAgICAgIC8vIFRPRE8gQWN0aXZhdG9yLmxvZyggZSApOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMjQwLDEzICsyNjAsMTIgQEAKICAgICAgICAgc3RyZWFtLmNsb3NlKCk7CiAgICAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBlICkgewogICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAvL1RPRE8gQWN0aXZhdG9yLmxvZyggZSApOworICAgICAgICAvLyBUT0RPIEFjdGl2YXRvci5sb2coIGUgKTsKICAgICAgIH0KICAgICB9CiAgIH0KIAotICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHkoIGZpbmFsIElucHV0U3RyZWFtIGluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE91dHB1dFN0cmVhbSBvdXQgKQorICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHkoIGZpbmFsIElucHV0U3RyZWFtIGluLCBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0ICkKICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAgewogICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbIEJVRkZFUiBdOwpAQCAtMjY0LDUgKzI4Myw0IEBACiAgICAgY29weSggaXMsIGJhb3MgKTsKICAgICByZXR1cm4gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKCBiYW9zLnRvQnl0ZUFycmF5KCkgKTsKICAgfQotICAKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0NvbmZpZ3VyYXRpb24uamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2luc3RhbGxlcmJ1aWxkZXIvQ29uZmlndXJhdGlvbi5qYXZhCmluZGV4IDQ3ZmNjZDkuLjUxMDMxYzEgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2luc3RhbGxlcmJ1aWxkZXIvQ29uZmlndXJhdGlvbi5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2luc3RhbGxlcmJ1aWxkZXIvQ29uZmlndXJhdGlvbi5qYXZhCkBAIC0xLDQ2ICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlcjsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKIAoraW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOworCiBwdWJsaWMgY2xhc3MgQ29uZmlndXJhdGlvbiB7Ci0JZmluYWwgc3RhdGljIFN0cmluZyBET1dOTE9BRFMgPSAiZG93bmxvYWRzIjsKLQlmaW5hbCBzdGF0aWMgU3RyaW5nIFRNUERJUiA9ICJ0bXBkaXIiOwotCXByb3RlY3RlZCBGaWxlIGRvd25sb2Fkc0RpcmVjdG9yeTsKLQlwcm90ZWN0ZWQgRmlsZSB0ZW1wRGlyZWN0b3J5OwogCi0JcHVibGljIEZpbGUgZ2V0VGVtcERpcmVjdG9yeSgpIHsKLQkJcmV0dXJuIHRlbXBEaXJlY3Rvcnk7Ci0JfQorICBzdGF0aWMgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoIENvbmZpZ3VyYXRpb24uY2xhc3MgKTsKKyAgZmluYWwgc3RhdGljIFN0cmluZyBET1dOTE9BRFMgPSAiZG93bmxvYWRzIjsKKyAgZmluYWwgc3RhdGljIFN0cmluZyBUTVBESVIgPSAidG1wZGlyIjsKKyAgZmluYWwgc3RhdGljIFN0cmluZyBJTlNUQUxMRVJfQ0FDSEVfU0laRSA9ICJpbnN0YWxsZXIuY2FjaGUuc2l6ZSI7CisgIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU5TVEFMTEVSX0NBQ0hFX1NJWkVfREVGQVVMVCA9ICIxMDAiOworICBwcm90ZWN0ZWQgaW50IGluc3RhbGxlckNhY2hlU2l6ZTsKIAotCXByaXZhdGUgUHJvcGVydGllcyBwcm9wZXJ0aWVzOworICBwdWJsaWMgaW50IGdldEluc3RhbGxlckNhY2hlU2l6ZSgpIHsKKyAgICByZXR1cm4gaW5zdGFsbGVyQ2FjaGVTaXplOworICB9CisgIHByb3RlY3RlZCBGaWxlIGRvd25sb2Fkc0RpcmVjdG9yeTsKKyAgcHJvdGVjdGVkIEZpbGUgdGVtcERpcmVjdG9yeTsKIAotCXB1YmxpYyBDb25maWd1cmF0aW9uKFByb3BlcnRpZXMgcHJvcGVydGllcykgewotCQl0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotCQlkb3dubG9hZHNEaXJlY3RvcnkgPSBjcmVhdGVEaXJlY3RvcnlPYmplY3QoRE9XTkxPQURTKTsKLQkJdGVtcERpcmVjdG9yeSA9IGNyZWF0ZURpcmVjdG9yeU9iamVjdChUTVBESVIpOwotCX0KKyAgcHVibGljIEZpbGUgZ2V0VGVtcERpcmVjdG9yeSgpIHsKKyAgICByZXR1cm4gdGVtcERpcmVjdG9yeTsKKyAgfQorICBwcml2YXRlIFByb3BlcnRpZXMgcHJvcGVydGllczsKIAotCXByaXZhdGUgRmlsZSBjcmVhdGVEaXJlY3RvcnlPYmplY3QoU3RyaW5nIGtleSkgewotCQlTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KGtleSk7Ci0JCWlmICh2YWx1ZSA9PSBudWxsKSB7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ29uZmlndXJhdGlvbiB2YWx1ZSBmb3IgJyIgKyBrZXkKLQkJCQkJKyAiJyBub3QgZGVmaW5lZCBpbiBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMiKTsKLQkJfQotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZSh2YWx1ZSk7Ci0JCWlmICghZmlsZS5jYW5SZWFkKCkpIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW5ub3QgcmVhZCBmcm9tIGZpbGUgJyIKLQkJCQkJKyBmaWxlLmdldEFic29sdXRlUGF0aCgpICsgIiciKTsKLQkJfQotCQlpZiAoIWZpbGUuaXNEaXJlY3RvcnkoKSkgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIiciICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKQotCQkJCQkrICInIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KKyAgcHVibGljIENvbmZpZ3VyYXRpb24oIFByb3BlcnRpZXMgcHJvcGVydGllcyApIHsKKyAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworICAgIGRvd25sb2Fkc0RpcmVjdG9yeSA9IGNyZWF0ZURpcmVjdG9yeU9iamVjdCggRE9XTkxPQURTICk7CisgICAgdGVtcERpcmVjdG9yeSA9IGNyZWF0ZURpcmVjdG9yeU9iamVjdCggVE1QRElSICk7CisgICAgaW5zdGFsbGVyQ2FjaGVTaXplID0gSW50ZWdlci5wYXJzZUludCggcHJvcGVydGllcy5nZXRQcm9wZXJ0eSggSU5TVEFMTEVSX0NBQ0hFX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5TVEFMTEVSX0NBQ0hFX1NJWkVfREVGQVVMVCApICk7CisgICAgaWYoIGxvZ2dlci5pc0luZm9FbmFibGVkKCkgKSB7CisgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgIHNiLmFwcGVuZCggIkVQUCBXaXphcmQgSW5zdGFsbGVyIGJ1aWxkZXIgY29uZmlndXJhdGlvbjoiICk7CisgICAgICBzYi5hcHBlbmQoICJcblx0IGRvd25sb2Fkc0RpcmVjdG9yeTogIgorICAgICAgICAgICAgICAgICArIGRvd25sb2Fkc0RpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSApOworICAgICAgc2IuYXBwZW5kKCAiXG5cdCB0ZW1wRGlyZWN0b3J5OiAgICAgICIgKyB0ZW1wRGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpICk7CisgICAgICBzYi5hcHBlbmQoICJcblx0IGluc3RhbGxlckNhY2hlU2l6ZTogIiArIGluc3RhbGxlckNhY2hlU2l6ZSApOworICAgICAgbG9nZ2VyLmluZm8oIHNiICk7CisgICAgfQorICB9CiAKLQlwdWJsaWMgRmlsZSBnZXREb3dubG9hZHNEaXJlY3RvcnkoKSB7Ci0JCXJldHVybiBkb3dubG9hZHNEaXJlY3Rvcnk7Ci0JfQorICBwcml2YXRlIEZpbGUgY3JlYXRlRGlyZWN0b3J5T2JqZWN0KCBTdHJpbmcga2V5ICkgeworICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkoIGtleSApOworICAgIGlmKCB2YWx1ZSA9PSBudWxsICkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJDb25maWd1cmF0aW9uIHZhbHVlIGZvciAnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsga2V5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiJyBub3QgZGVmaW5lZCBpbiBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMiICk7CisgICAgfQorICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKCB2YWx1ZSApOworICAgIGlmKCAhZmlsZS5jYW5SZWFkKCkgKSB7CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIkNhbm5vdCByZWFkIGZyb20gZmlsZSAnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiciICk7CisgICAgfQorICAgIGlmKCAhZmlsZS5pc0RpcmVjdG9yeSgpICkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICInIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIicgaXMgbm90IGEgZGlyZWN0b3J5IiApOworICAgIH0KKyAgICByZXR1cm4gZmlsZTsKKyAgfQogCisgIHB1YmxpYyBGaWxlIGdldERvd25sb2Fkc0RpcmVjdG9yeSgpIHsKKyAgICByZXR1cm4gZG93bmxvYWRzRGlyZWN0b3J5OworICB9CiB9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0Rvd25sb2FkLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0Rvd25sb2FkLmphdmEKaW5kZXggYjE1OThhYy4uOGExNWQ0OSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW5zdGFsbGVyYnVpbGRlci9Eb3dubG9hZC5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2luc3RhbGxlcmJ1aWxkZXIvRG93bmxvYWQuamF2YQpAQCAtMSwzICsxLDEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlcjsKIAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07CkBAIC0yNywxODUgKzM3LDE5NyBAQAogICovCiBwdWJsaWMgY2xhc3MgRG93bmxvYWQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQotCQkJdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9HZXQocmVxLCByZXNwKTsKLQl9CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCApCisgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCisgIHsKKyAgICBkb0dldCggcmVxLCByZXNwICk7CisgIH0KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVOQ09ESU5HID0gIlVURi04IjsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVIgPSAxMDI0OwogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVOQ09ESU5HID0gIlVURi04IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSID0gMTAyNDsKKyAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBkb0dldCggZmluYWwgSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCApCisgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCisgIHsKKyAgICByZXNwLnNldEhlYWRlciggIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiYXR0YWNobWVudDsgZmlsZW5hbWU9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm91dC50eHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiOyIgKTsKKyAgICBQcmludFN0cmVhbSBwcmludFN0cmVhbSA9IG5ldyBQcmludFN0cmVhbSggbmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKCByZXNwLmdldE91dHB1dFN0cmVhbSgpICkgKTsKKyAgICBwcmludFN0cmVhbS5wcmludCggImZvby5iYXIiICk7CisgICAgcHJpbnRTdHJlYW0uY2xvc2UoKTsKKyAgICBpZiggdHJ1ZSApCisgICAgICByZXR1cm47CisgICAgTWFwPE9iamVjdCwgT2JqZWN0PiBtYXAgPSByZXEuZ2V0UGFyYW1ldGVyTWFwKCk7CisgICAgU3RyaW5nIHJlcXVlc3RlZFBhdGggPSByZXEuZ2V0UGF0aEluZm8oKTsKKyAgICBTdHJpbmcgcmVxVVJMID0gcmVxLmdldFJlcXVlc3RVUkwoKS50b1N0cmluZygpOworICAgIFN0cmluZyBjb2RlYmFzZSA9IHJlcVVSTC5zdWJzdHJpbmcoIDAsIHJlcVVSTC5sZW5ndGgoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcmVxdWVzdGVkUGF0aC5sZW5ndGgoKSApOworICAgIElQYXRoIHBhdGggPSBuZXcgUGF0aCggIiIgKTsKKyAgICBpZiggcmVxdWVzdGVkUGF0aCAhPSBudWxsICkgeworICAgICAgcGF0aCA9IG5ldyBQYXRoKCByZXF1ZXN0ZWRQYXRoICk7CisgICAgfQorICAgIGlmKCAhdHJ5U2VuZEdlbmVyYXRlZEZpbGUoIHJlc3AsIHBhdGgsIGNvZGViYXNlICkgKSB7CisgICAgICBpZiggIWlzVGVtcGxhdGVGaWxlKCByZXNwLCBwYXRoLCBjb2RlYmFzZSApICkgeworICAgICAgICBzZW5kNDA0KCByZXNwICk7CisgICAgICB9CisgICAgfQorICAgIHJlc3AuZmx1c2hCdWZmZXIoKTsKKyAgfQogCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZG9HZXQoZmluYWwgSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKLQkJCWZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sCi0JCQlJT0V4Y2VwdGlvbiB7Ci0JCXJlc3Auc2V0SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIiwgImF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIKLQkJCQkrICJvdXQudHh0IiArICI7Iik7Ci0JCVByaW50U3RyZWFtIHByaW50U3RyZWFtID0gbmV3IFByaW50U3RyZWFtKG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShyZXNwCi0JCQkJLmdldE91dHB1dFN0cmVhbSgpKSk7Ci0JCXByaW50U3RyZWFtLnByaW50KCJmb28uYmFyIik7Ci0JCXByaW50U3RyZWFtLmNsb3NlKCk7Ci0JCWlmICh0cnVlKQotCQkJcmV0dXJuOworICAvLyAvLy8vLy8vLy8vLy8vLy8vCisgIC8vIGhlbHBpbmcgbWV0aG9kcworICAvLyAvLy8vLy8vLy8vLy8vLy8vCisgIHByaXZhdGUgdm9pZCBzZW5kNDA0KCBmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKSB7CisgICAgdHJ5IHsKKyAgICAgIHJlc3Auc2VuZEVycm9yKCA0MDQgKTsKKyAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBleGMgKSB7CisgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICAgIHJlc3AuYWRkSGVhZGVyKCAiU3RhdHVzIiwgIjQwNCBOb3QgRm91bmQiICk7CisgIH0KIAotCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG1hcCA9IHJlcS5nZXRQYXJhbWV0ZXJNYXAoKTsKLQkJU3RyaW5nIHJlcXVlc3RlZFBhdGggPSByZXEuZ2V0UGF0aEluZm8oKTsKLQkJU3RyaW5nIHJlcVVSTCA9IHJlcS5nZXRSZXF1ZXN0VVJMKCkudG9TdHJpbmcoKTsKLQkJU3RyaW5nIGNvZGViYXNlID0gcmVxVVJMLnN1YnN0cmluZygwLCByZXFVUkwubGVuZ3RoKCkKLQkJCQktIHJlcXVlc3RlZFBhdGgubGVuZ3RoKCkpOwotCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgoIiIpOwotCQlpZiAocmVxdWVzdGVkUGF0aCAhPSBudWxsKSB7Ci0JCQlwYXRoID0gbmV3IFBhdGgocmVxdWVzdGVkUGF0aCk7Ci0JCX0KLQkJaWYgKCF0cnlTZW5kR2VuZXJhdGVkRmlsZShyZXNwLCBwYXRoLCBjb2RlYmFzZSkpIHsKLQkJCWlmICghaXNUZW1wbGF0ZUZpbGUocmVzcCwgcGF0aCwgY29kZWJhc2UpKSB7Ci0JCQkJc2VuZDQwNChyZXNwKTsKLQkJCX0KLQkJfQotCQlyZXNwLmZsdXNoQnVmZmVyKCk7Ci0JfQorICBwcml2YXRlIGJvb2xlYW4gaXNUZW1wbGF0ZUZpbGUoIGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBJUGF0aCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb2RlYmFzZSApCisgIHsKKyAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOworICAgIEZpbGUgZG93bmxvYWREaXIgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisgICAgICAuZ2V0Q29uZmlndXJhdGlvbigpCisgICAgICAuZ2V0RG93bmxvYWRzRGlyZWN0b3J5KCk7CisgICAgRmlsZSBqbmxwRGlyID0gbmV3IEZpbGUoIGRvd25sb2FkRGlyLCAidGVtcGxhdGVzL2pubHAiICk7CisgICAgRmlsZSBpdGVtID0gbmV3IEZpbGUoIGpubHBEaXIsIHBhdGgudG9TdHJpbmcoKSApOworICAgIFVSTCBlbnRyeSA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgIGVudHJ5ID0gaXRlbS50b1VSSSgpLnRvVVJMKCk7CisgICAgfSBjYXRjaCggTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGV4YzEgKSB7CisgICAgICBleGMxLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICBpZiggZW50cnkgIT0gbnVsbCApIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHNlbmRGaWxlKCByZXNwLCBlbnRyeSwgY29kZWJhc2UgKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGV4YyApIHsKKyAgICAgICAgLy8gdGhhdHMgb2ssIHdpbGwgdHJ5IHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QgbGF0ZXIKKyAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CiAKLQkvLyAvLy8vLy8vLy8vLy8vLy8vCi0JLy8gaGVscGluZyBtZXRob2RzCi0JLy8gLy8vLy8vLy8vLy8vLy8vLworICBwcml2YXRlIHZvaWQgc2VuZEZpbGUoIGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGaWxlIGFyY2hpdmVGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb2RlYmFzZSApCisgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KKyAgeworICAgIFN0cmluZyBleHQgPSBuZXcgUGF0aCggYXJjaGl2ZUZpbGUudG9TdHJpbmcoKSApLmdldEZpbGVFeHRlbnNpb24oKTsKKyAgICBzZW5kRmlsZSggcmVzcCwgbmV3IEZpbGVJbnB1dFN0cmVhbSggYXJjaGl2ZUZpbGUgKSwgY29kZWJhc2UsIGV4dCApOworICB9CiAKLQlwcml2YXRlIHZvaWQgc2VuZDQwNChmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIHsKLQkJdHJ5IHsKLQkJCXJlc3Auc2VuZEVycm9yKDQwNCk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4YykgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJlc3AuYWRkSGVhZGVyKCJTdGF0dXMiLCAiNDA0IE5vdCBGb3VuZCIpOwotCX0KKyAgcHJpdmF0ZSB2b2lkIHNlbmRGaWxlKCBmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVVJMIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb2RlYmFzZSApIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgU3RyaW5nIGV4dCA9IG5ldyBQYXRoKCBlbnRyeS5nZXRGaWxlKCkgKS5nZXRGaWxlRXh0ZW5zaW9uKCk7CisgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ1ZmZlclN0cmVhbSA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICBjb3B5KCBlbnRyeS5vcGVuU3RyZWFtKCksIGJ1ZmZlclN0cmVhbSApOworICAgIHNlbmRGaWxlKCByZXNwLAorICAgICAgICAgICAgICBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oIGJ1ZmZlclN0cmVhbS50b0J5dGVBcnJheSgpICksCisgICAgICAgICAgICAgIGNvZGViYXNlLAorICAgICAgICAgICAgICBleHQgKTsKKyAgfQogCi0JcHJpdmF0ZSBib29sZWFuIGlzVGVtcGxhdGVGaWxlKGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCwKLQkJCWZpbmFsIElQYXRoIHBhdGgsIGZpbmFsIFN0cmluZyBjb2RlYmFzZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlGaWxlIGRvd25sb2FkRGlyID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRDb25maWd1cmF0aW9uKCkKLQkJCQkuZ2V0RG93bmxvYWRzRGlyZWN0b3J5KCk7Ci0JCUZpbGUgam5scERpciA9IG5ldyBGaWxlKGRvd25sb2FkRGlyLCAidGVtcGxhdGVzL2pubHAiKTsKLQkJRmlsZSBpdGVtID0gbmV3IEZpbGUoam5scERpciwgcGF0aC50b1N0cmluZygpKTsKLQkJVVJMIGVudHJ5ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWVudHJ5ID0gaXRlbS50b1VSSSgpLnRvVVJMKCk7Ci0JCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBleGMxKSB7Ci0JCQlleGMxLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCXNlbmRGaWxlKHJlc3AsIGVudHJ5LCBjb2RlYmFzZSk7Ci0JCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4YykgewotCQkJCS8vIHRoYXRzIG9rLCB3aWxsIHRyeSB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0IGxhdGVyCi0JCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQorICBwcml2YXRlIHZvaWQgc2VuZEZpbGUoIGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBJbnB1dFN0cmVhbSBpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY29kZWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGV4dCApIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBpczsKKyAgICBpZiggZXh0LmVxdWFscyggImpubHAiICkgKSB7CisgICAgICBTdHJpbmcgcmVzdWx0ID0gIiI7CisgICAgICB0cnkgeworICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnVmZmVyU3RyZWFtID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICBjb3B5KCBpcywgYnVmZmVyU3RyZWFtICk7CisgICAgICAgIHJlc3VsdCA9IGJ1ZmZlclN0cmVhbS50b1N0cmluZyggRU5DT0RJTkcgKQorICAgICAgICAgIC5yZXBsYWNlQWxsKCAiXFwkXFx7Y29kZWJhc2VcXH0iLCBjb2RlYmFzZSApOworICAgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gaW9lICkgeworICAgICAgICBpb2UucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnlDbG9zZSggaXMgKTsKKyAgICAgIH0KKyAgICAgIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKCByZXN1bHQuZ2V0Qnl0ZXMoIEVOQ09ESU5HICkgKTsKKyAgICB9CisgICAgcmVzcC5hZGRIZWFkZXIoICJDb250ZW50LVR5cGUiLCBnZXRDb250ZW50VHlwZSggZXh0ICkgKTsKKyAgICByZXNwLmFkZEhlYWRlciggIkNvbnRlbnQtTGVuZ3RoIiwgU3RyaW5nLnZhbHVlT2YoIGlucHV0U3RyZWFtLmF2YWlsYWJsZSgpICkgKTsKKyAgICByZXNwLmZsdXNoQnVmZmVyKCk7CisgICAgT3V0cHV0U3RyZWFtIG9zID0gcmVzcC5nZXRPdXRwdXRTdHJlYW0oKTsgLy8gVE9ETzogKGpiKSBlcnJvcmhhbmRsaW5nCisgICAgY29weSggaW5wdXRTdHJlYW0sIG9zICk7CisgICAgb3MuZmx1c2goKTsKKyAgfQogCi0JcHJpdmF0ZSB2b2lkIHNlbmRGaWxlKGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCwKLQkJCWZpbmFsIEZpbGUgYXJjaGl2ZUZpbGUsIGZpbmFsIFN0cmluZyBjb2RlYmFzZSkKLQkJCXRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGV4dCA9IG5ldyBQYXRoKGFyY2hpdmVGaWxlLnRvU3RyaW5nKCkpLmdldEZpbGVFeHRlbnNpb24oKTsKLQkJc2VuZEZpbGUocmVzcCwgbmV3IEZpbGVJbnB1dFN0cmVhbShhcmNoaXZlRmlsZSksIGNvZGViYXNlLCBleHQpOwotCX0KKyAgcHJpdmF0ZSBib29sZWFuIHRyeVNlbmRHZW5lcmF0ZWRGaWxlKCBmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgSVBhdGggcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY29kZWJhc2UgKQorICB7CisgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICBGaWxlIGRvd25sb2FkRGlyID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQorICAgICAgLmdldENvbmZpZ3VyYXRpb24oKQorICAgICAgLmdldERvd25sb2Fkc0RpcmVjdG9yeSgpOworICAgIFBhdGggb3V0UGF0aCA9IG5ldyBQYXRoKCBuZXcgRmlsZSggZG93bmxvYWREaXIsIEJ1aWxkSW5zdGFsbGVyLk9VVFBVVF9QQVRIICkuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKKyAgICBGaWxlIGFyY2hpdmVGaWxlID0gb3V0UGF0aC5hcHBlbmQoIHBhdGgubGFzdFNlZ21lbnQoKSApLnRvRmlsZSgpOworICAgIGlmKCBhcmNoaXZlRmlsZS5pc0ZpbGUoKSApIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHNlbmRGaWxlKCByZXNwLCBhcmNoaXZlRmlsZSwgY29kZWJhc2UgKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgIH0gY2F0Y2goIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBleGMgKSB7CisgICAgICAgIC8vIHRoYXRzIG9rLCB3aWxsIHRyeSB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0IGxhdGVyCisgICAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBleGMgKSB7CisgICAgICAgIC8vIHRoYXRzIG9rLCB3aWxsIHRyeSB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0IGxhdGVyCisgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQogCi0JcHJpdmF0ZSB2b2lkIHNlbmRGaWxlKGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCwgZmluYWwgVVJMIGVudHJ5LAotCQkJZmluYWwgU3RyaW5nIGNvZGViYXNlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZXh0ID0gbmV3IFBhdGgoZW50cnkuZ2V0RmlsZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBidWZmZXJTdHJlYW0gPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCWNvcHkoZW50cnkub3BlblN0cmVhbSgpLCBidWZmZXJTdHJlYW0pOwotCQlzZW5kRmlsZShyZXNwLCBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYnVmZmVyU3RyZWFtLnRvQnl0ZUFycmF5KCkpLAotCQkJCWNvZGViYXNlLCBleHQpOwotCX0KKyAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udGVudFR5cGUoIGZpbmFsIFN0cmluZyBmaWxlRXh0ICkgeworICAgIFN0cmluZyByZXN1bHQgPSAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKKyAgICBpZiggZmlsZUV4dC5lcXVhbHNJZ25vcmVDYXNlKCAiemlwIiApICkgeworICAgICAgcmVzdWx0ID0gImFwcGxpY2F0aW9uL3gtemlwIjsKKyAgICB9IGVsc2UgaWYoIGZpbGVFeHQuZXF1YWxzSWdub3JlQ2FzZSggImd6IiApICkgeworICAgICAgcmVzdWx0ID0gImFwcGxpY2F0aW9uL3gtZ3ppcCI7CisgICAgfSBlbHNlIGlmKCBmaWxlRXh0LmVxdWFsc0lnbm9yZUNhc2UoICJ0YXIiICkgKSB7CisgICAgICByZXN1bHQgPSAiYXBwbGljYXRpb24veC10YXIiOworICAgIH0gZWxzZSBpZiggZmlsZUV4dC5lcXVhbHNJZ25vcmVDYXNlKCAiam5scCIgKSApIHsKKyAgICAgIHJlc3VsdCA9ICJhcHBsaWNhdGlvbi94LWphdmEtam5scC1maWxlIjsKKyAgICB9IGVsc2UgaWYoIGZpbGVFeHQuZXF1YWxzSWdub3JlQ2FzZSggImphciIgKSApIHsKKyAgICAgIHJlc3VsdCA9ICJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUiOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CiAKLQlwcml2YXRlIHZvaWQgc2VuZEZpbGUoZmluYWwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwLCBmaW5hbCBJbnB1dFN0cmVhbSBpcywKLQkJCWZpbmFsIFN0cmluZyBjb2RlYmFzZSwgZmluYWwgU3RyaW5nIGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBpczsKLQkJaWYgKGV4dC5lcXVhbHMoImpubHAiKSkgewotCQkJU3RyaW5nIHJlc3VsdCA9ICIiOwotCQkJdHJ5IHsKLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnVmZmVyU3RyZWFtID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCWNvcHkoaXMsIGJ1ZmZlclN0cmVhbSk7Ci0JCQkJcmVzdWx0ID0gYnVmZmVyU3RyZWFtLnRvU3RyaW5nKEVOQ09ESU5HKS5yZXBsYWNlQWxsKAotCQkJCQkJIlxcJFxce2NvZGViYXNlXFx9IiwgY29kZWJhc2UpOwotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfSBmaW5hbGx5IHsKLQkJCQl0cnlDbG9zZShpcyk7Ci0JCQl9Ci0JCQlpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShyZXN1bHQuZ2V0Qnl0ZXMoRU5DT0RJTkcpKTsKLQkJfQotCQlyZXNwLmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgZ2V0Q29udGVudFR5cGUoZXh0KSk7Ci0JCXJlc3AuYWRkSGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIFN0cmluZwotCQkJCS52YWx1ZU9mKGlucHV0U3RyZWFtLmF2YWlsYWJsZSgpKSk7Ci0JCXJlc3AuZmx1c2hCdWZmZXIoKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gcmVzcC5nZXRPdXRwdXRTdHJlYW0oKTsgLy8gVE9ETzogKGpiKSBlcnJvcmhhbmRsaW5nCi0JCWNvcHkoaW5wdXRTdHJlYW0sIG9zKTsKLQkJb3MuZmx1c2goKTsKLQl9CisgIHByaXZhdGUgc3RhdGljIHZvaWQgY29weSggZmluYWwgSW5wdXRTdHJlYW0gaW4sIGZpbmFsIE91dHB1dFN0cmVhbSBvdXQgKQorICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVsgQlVGRkVSIF07CisgICAgaW50IGN1cnJlbnRCeXRlID0gaW4ucmVhZCggZGF0YSwgMCwgQlVGRkVSICk7CisgICAgd2hpbGUoIGN1cnJlbnRCeXRlICE9IC0xICkgeworICAgICAgb3V0LndyaXRlKCBkYXRhLCAwLCBjdXJyZW50Qnl0ZSApOworICAgICAgY3VycmVudEJ5dGUgPSBpbi5yZWFkKCBkYXRhLCAwLCBCVUZGRVIgKTsKKyAgICB9CisgIH0KIAotCXByaXZhdGUgYm9vbGVhbiB0cnlTZW5kR2VuZXJhdGVkRmlsZShmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AsCi0JCQlmaW5hbCBJUGF0aCBwYXRoLCBmaW5hbCBTdHJpbmcgY29kZWJhc2UpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJRmlsZSBkb3dubG9hZERpciA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0Q29uZmlndXJhdGlvbigpCi0JCQkJLmdldERvd25sb2Fkc0RpcmVjdG9yeSgpOwotCQlQYXRoIG91dFBhdGggPSBuZXcgUGF0aChuZXcgRmlsZShkb3dubG9hZERpciwKLQkJCQlCdWlsZEluc3RhbGxlci5PVVRQVVRfUEFUSCkuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCQlGaWxlIGFyY2hpdmVGaWxlID0gb3V0UGF0aC5hcHBlbmQocGF0aC5sYXN0U2VnbWVudCgpKS50b0ZpbGUoKTsKLQkJaWYgKGFyY2hpdmVGaWxlLmlzRmlsZSgpKSB7Ci0JCQl0cnkgewotCQkJCXNlbmRGaWxlKHJlc3AsIGFyY2hpdmVGaWxlLCBjb2RlYmFzZSk7Ci0JCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBleGMpIHsKLQkJCQkvLyB0aGF0cyBvaywgd2lsbCB0cnkgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdCBsYXRlcgotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjKSB7Ci0JCQkJLy8gdGhhdHMgb2ssIHdpbGwgdHJ5IHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QgbGF0ZXIKLQkJCQlleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRDb250ZW50VHlwZShmaW5hbCBTdHJpbmcgZmlsZUV4dCkgewotCQlTdHJpbmcgcmVzdWx0ID0gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7Ci0JCWlmIChmaWxlRXh0LmVxdWFsc0lnbm9yZUNhc2UoInppcCIpKSB7Ci0JCQlyZXN1bHQgPSAiYXBwbGljYXRpb24veC16aXAiOwotCQl9IGVsc2UgaWYgKGZpbGVFeHQuZXF1YWxzSWdub3JlQ2FzZSgiZ3oiKSkgewotCQkJcmVzdWx0ID0gImFwcGxpY2F0aW9uL3gtZ3ppcCI7Ci0JCX0gZWxzZSBpZiAoZmlsZUV4dC5lcXVhbHNJZ25vcmVDYXNlKCJ0YXIiKSkgewotCQkJcmVzdWx0ID0gImFwcGxpY2F0aW9uL3gtdGFyIjsKLQkJfSBlbHNlIGlmIChmaWxlRXh0LmVxdWFsc0lnbm9yZUNhc2UoImpubHAiKSkgewotCQkJcmVzdWx0ID0gImFwcGxpY2F0aW9uL3gtamF2YS1qbmxwLWZpbGUiOwotCQl9IGVsc2UgaWYgKGZpbGVFeHQuZXF1YWxzSWdub3JlQ2FzZSgiamFyIikpIHsKLQkJCXJlc3VsdCA9ICJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUiOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb3B5KGZpbmFsIElucHV0U3RyZWFtIGluLCBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0KQotCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtCVUZGRVJdOwotCQlpbnQgY3VycmVudEJ5dGUgPSBpbi5yZWFkKGRhdGEsIDAsIEJVRkZFUik7Ci0JCXdoaWxlIChjdXJyZW50Qnl0ZSAhPSAtMSkgewotCQkJb3V0LndyaXRlKGRhdGEsIDAsIGN1cnJlbnRCeXRlKTsKLQkJCWN1cnJlbnRCeXRlID0gaW4ucmVhZChkYXRhLCAwLCBCVUZGRVIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cnlDbG9zZShmaW5hbCBJbnB1dFN0cmVhbSBzdHJlYW0pIHsKLQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCXN0cmVhbS5jbG9zZSgpOwotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJLy8gVE9ETyBBY3RpdmF0b3IubG9nKCBlICk7Ci0JCQl9Ci0JCX0KLQl9Ci0KKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cnlDbG9zZSggZmluYWwgSW5wdXRTdHJlYW0gc3RyZWFtICkgeworICAgIGlmKCBzdHJlYW0gIT0gbnVsbCApIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN0cmVhbS5jbG9zZSgpOworICAgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gZSApIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgLy8gVE9ETyBBY3RpdmF0b3IubG9nKCBlICk7CisgICAgICB9CisgICAgfQorICB9CiB9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0luc3RhbGxlci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW5zdGFsbGVyYnVpbGRlci9JbnN0YWxsZXIuamF2YQppbmRleCBhZTViOTkyLi4xNjU0ZDRlIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0luc3RhbGxlci5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2luc3RhbGxlcmJ1aWxkZXIvSW5zdGFsbGVyLmphdmEKQEAgLTEsMjggKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyOwogCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuemlwLkdaSVBJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLkdaSVBPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwT3V0cHV0U3RyZWFtOwogCiBpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOwogaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKIGltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwogaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy50YXIuVGFyRW50cnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy50YXIuVGFySW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy50YXIuVGFyT3V0cHV0U3RyZWFtOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQudXRpbC5Pc1V0aWw7CiAKIC8qKgpAQCAtMzAsMjY1ICszMCwxMjIgQEAKICAqLwogcHVibGljIGNsYXNzIEluc3RhbGxlciBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTlNUQUxMRVJfUFJPUEVSVElFU19GSUxFTkFNRSA9ICJpbnN0YWxsZXIucHJvcGVydGllcyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX1BMQUNFSE9MREVSX01BUktFUiA9ICIlPyUiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgRklMRV9FWFRFTlNJT05fU0VQQVJBVE9SID0gJy4nOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURU1QRklMRV9FWFRFTlNJT04gPSAiLnRtcCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFTVBGSUxFX05BTUUgPSAiaW5zdGFsbGVyIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSID0gMTAyNDsKLQlwcml2YXRlIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKLQlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0OwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkNPRElORyA9ICJVVEYtOCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOU1RBTExFUl9URU1QTEFURV9QQVRIID0gInRlbXBsYXRlcy9pbnN0YWxsZXIiOworICBzdGF0aWMgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoIEluc3RhbGxlci5jbGFzcyApOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIEZJTEVfRVhURU5TSU9OX1NFUEFSQVRPUiA9ICcuJzsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVIgPSAxMDI0OworICBwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0OworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBQMl9QUk9QRVJUSUVTID0geworICAgICJlY2xpcHNlLnAyLnJvb3RzIiwgImVjbGlwc2UucDIubWV0YWRhdGEiLCAiZWNsaXBzZS5wMi5hcnRpZmFjdHMiCisgIH07CiAKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQotCQkJdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9HZXQocmVxLCByZXNwKTsKLQl9CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCApCisgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCisgIHsKKyAgICBkb0dldCggcmVxLCByZXNwICk7CisgIH0KIAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoIGZpbmFsIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKQorICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgorICB7CisgICAgdHJ5IHsKKyAgICAgIFN0cmluZyBvcyA9IHJlcS5nZXRQYXJhbWV0ZXIoICJvcyIgKTsKKyAgICAgIHJlcXVlc3QgPSByZXE7CisgICAgICBQcm9wZXJ0aWVzIHAyUHJvcGVydGllcyA9IGV4dHJhY3RQMlByb3BlcnRpZXMoKTsKKyAgICAgIFN0cmluZyBleHRlbnNpb24gPSBPc1V0aWwuZ2V0QXJjaGl2ZUV4dGVuc2lvbiggb3MgKTsKKyAgICAgIEluc3RhbGxlckNhY2hlLkVudHJ5IGluc3RhbGxlckZpbGUgPSBnZXRDdXN0b21JbnN0YWxsZXIoIG9zLCBwMlByb3BlcnRpZXMgKTsKKyAgICAgIHRyeSB7CisgICAgICAgIHNlbmRGaWxlKCByZXNwLAorICAgICAgICAgICAgICAgICAgbmV3IEZpbGVJbnB1dFN0cmVhbSggaW5zdGFsbGVyRmlsZS5nZXRGaWxlKCkgKSwKKyAgICAgICAgICAgICAgICAgICJlY2xpcHNlLXdpemFyZC1pbnN0YWxsZXIiLAorICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uICk7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICBpbnN0YWxsZXJGaWxlLnJlbGVhc2UoKTsKKyAgICAgIH0KKyAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBleCApIHsKKyAgICAgIC8vIFRoaXMgaGFwcGVucyB1c3VhbGx5IHdoZW4gdGhlIGRvd25sb2FkIGlzIGFib3J0ZWQgYnkgdGhlIGNsaWVudAorICAgICAgbG9nZ2VyLndhcm4oICJJTyBleGNlcHRpb24gaGFuZGxpbmcgaW5zdGFsbGVyIHJlcXVlc3QiLCBleCApOworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJJTyBlcnJvciBoYW5kbGluZyBpbnN0YWxsZXIgcmVxdWVzdCIsIGV4ICk7CisgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CisgICAgICBsb2dnZXIuZXJyb3IoICJJbnRlcm5hbCBlcnJvciBoYW5kbGluZyBpbnN0YWxsZXIgcmVxdWVzdCIsIHQgKTsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiSW50ZXJuYWwgZXJyb3IgaGFuZGxpbmcgaW5zdGFsbGVyIHJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgKTsKKyAgICB9CisgIH0KIAotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGRvR2V0KGZpbmFsIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCi0JCQlmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLAotCQkJSU9FeGNlcHRpb24gewotCQljb25maWd1cmF0aW9uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRDb25maWd1cmF0aW9uKCk7Ci0JCVN0cmluZyBvcyA9IHJlcS5nZXRQYXJhbWV0ZXIoIm9zIik7Ci0JCXJlcXVlc3QgPSByZXE7CisgIHByaXZhdGUgUHJvcGVydGllcyBleHRyYWN0UDJQcm9wZXJ0aWVzKCkgeworICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgZm9yKCBTdHJpbmcga2V5IDogUDJfUFJPUEVSVElFUyApIHsKKyAgICAgIFN0cmluZyB2YWx1ZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCBrZXkgKTsKKyAgICAgIHByb3BlcnRpZXMuc2V0UHJvcGVydHkoIGtleSwgdmFsdWUgKTsKKyAgICB9CisgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgIH0KIAotCQlGaWxlIHRlbXBGaWxlID0gY3JlYXRlVGVtcEZpbGUoKTsKLQkJRmlsZSByYXdGaWxlID0gZmluZFJhd0luc3RhbGxlckZpbGUobmV3IEZpbGUoY29uZmlndXJhdGlvbgotCQkJCS5nZXREb3dubG9hZHNEaXJlY3RvcnkoKSwgInRlbXBsYXRlcy9pbnN0YWxsZXIiKSwgb3MpOwotCQlTdHJpbmcgZXh0ZW5zaW9uID0gT3NVdGlsLmdldEFyY2hpdmVFeHRlbnNpb24ob3MpOwotCQkKLQkJY2VhdGVDdXN0b21JbnN0YWxsZXIob3MsIHJhd0ZpbGUsIG5ldyBTdHJpbmdbXSB7ICJJVVMiIH0sIHRlbXBGaWxlKTsKLQkJCi0JCXNlbmRGaWxlKHJlc3AsIG5ldyBGaWxlSW5wdXRTdHJlYW0odGVtcEZpbGUpLAotCQkJCSJlY2xpcHNlLXdpemFyZC1pbnN0YWxsZXIiLCBleHRlbnNpb24pOwotCQl0ZW1wRmlsZS5kZWxldGUoKTsKLQl9CisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVuc2lvbiggRmlsZSBmaWxlICkgeworICAgIFN0cmluZyBleHRlbnNpb24gPSBudWxsOworICAgIFN0cmluZyBmaWxlbmFtZSA9IGZpbGUuZ2V0TmFtZSgpOworICAgIGludCBpbmRleCA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKCBGSUxFX0VYVEVOU0lPTl9TRVBBUkFUT1IgKTsKKyAgICBpZiggaW5kZXggPiAwICYmIGluZGV4IDwgZmlsZW5hbWUubGVuZ3RoKCkgLSAxICkgeworICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKCBpbmRleCArIDEgKS50b0xvd2VyQ2FzZSgpOworICAgIH0KKyAgICByZXR1cm4gZXh0ZW5zaW9uOworICB9CiAKLQlwcml2YXRlIEZpbGUgY3JlYXRlVGVtcEZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGRvd25sb2Fkc0RpcmVjdG9yeSA9IGNvbmZpZ3VyYXRpb24uZ2V0VGVtcERpcmVjdG9yeSgpOwotCQlGaWxlIHRlbXBGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZShURU1QRklMRV9OQU1FLCBURU1QRklMRV9FWFRFTlNJT04sCi0JCQkJZG93bmxvYWRzRGlyZWN0b3J5KTsKKyAgcHJpdmF0ZSB2b2lkIHNlbmRGaWxlKCBmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBleHQgKSB0aHJvd3MgSU9FeGNlcHRpb24KKyAgeworICAgIHJlc3AuYWRkSGVhZGVyKCAiQ29udGVudC1UeXBlIiwgZ2V0Q29udGVudFR5cGUoIGV4dCApICk7CisgICAgcmVzcC5hZGRIZWFkZXIoICJDb250ZW50LUxlbmd0aCIsIFN0cmluZy52YWx1ZU9mKCBpbnB1dFN0cmVhbS5hdmFpbGFibGUoKSApICk7CisgICAgcmVzcC5zZXRIZWFkZXIoICJDb250ZW50LURpc3Bvc2l0aW9uIiwgImF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIjsiICk7CisgICAgcmVzcC5mbHVzaEJ1ZmZlcigpOworICAgIE91dHB1dFN0cmVhbSBvcyA9IHJlc3AuZ2V0T3V0cHV0U3RyZWFtKCk7IC8vIFRPRE86IChqYikgZXJyb3JoYW5kbGluZworICAgIGNvcHkoIGlucHV0U3RyZWFtLCBvcyApOworICAgIG9zLmZsdXNoKCk7CisgICAgaW5wdXRTdHJlYW0uY2xvc2UoKTsKKyAgfQogCi0JCXJldHVybiB0ZW1wRmlsZTsKLQl9CisgIHByaXZhdGUgU3RyaW5nIGdldENvbnRlbnRUeXBlKCBmaW5hbCBTdHJpbmcgZmlsZUV4dCApIHsKKyAgICBTdHJpbmcgcmVzdWx0ID0gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CisgICAgaWYoIGZpbGVFeHQuZXF1YWxzSWdub3JlQ2FzZSggInppcCIgKSApIHsKKyAgICAgIHJlc3VsdCA9ICJhcHBsaWNhdGlvbi94LXppcCI7CisgICAgfSBlbHNlIGlmKCBmaWxlRXh0LmVxdWFsc0lnbm9yZUNhc2UoICJneiIgKSApIHsKKyAgICAgIHJlc3VsdCA9ICJhcHBsaWNhdGlvbi94LWd6aXAiOworICAgIH0gZWxzZSBpZiggZmlsZUV4dC5lcXVhbHNJZ25vcmVDYXNlKCAidGFyIiApICkgeworICAgICAgcmVzdWx0ID0gImFwcGxpY2F0aW9uL3gtdGFyIjsKKyAgICB9IGVsc2UgaWYoIGZpbGVFeHQuZXF1YWxzSWdub3JlQ2FzZSggImpubHAiICkgKSB7CisgICAgICByZXN1bHQgPSAiYXBwbGljYXRpb24veC1qYXZhLWpubHAtZmlsZSI7CisgICAgfSBlbHNlIGlmKCBmaWxlRXh0LmVxdWFsc0lnbm9yZUNhc2UoICJqYXIiICkgKSB7CisgICAgICByZXN1bHQgPSAiYXBwbGljYXRpb24vamF2YS1hcmNoaXZlIjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQogCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RXh0ZW5zaW9uKEZpbGUgZmlsZSkgewotCQlTdHJpbmcgZXh0ZW5zaW9uID0gbnVsbDsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZS5nZXROYW1lKCk7Ci0JCWludCBpbmRleCA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKEZJTEVfRVhURU5TSU9OX1NFUEFSQVRPUik7CisgIHByaXZhdGUgSW5zdGFsbGVyQ2FjaGUuRW50cnkgZ2V0Q3VzdG9tSW5zdGFsbGVyKCBmaW5hbCBTdHJpbmcgb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgKQorICB7CisgICAgSW5zdGFsbGVyQ2FjaGUuS2V5IGtleSA9IG5ldyBJbnN0YWxsZXJDYWNoZS5LZXkoIG9zLCBwcm9wZXJ0aWVzICk7CisgICAgbG9nZ2VyLmRlYnVnKCAiUmVxdWVzdCBmb3IgIiArIGtleSApOworICAgIHJldHVybiBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEluc3RhbGxlckNhY2hlKCkuZ2V0SW5zdGFsbGVyKCBrZXkgKTsKKyAgfQogCi0JCWlmIChpbmRleCA+IDAgJiYgaW5kZXggPCBmaWxlbmFtZS5sZW5ndGgoKSAtIDEpIHsKLQkJCWV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhpbmRleCArIDEpLnRvTG93ZXJDYXNlKCk7Ci0JCX0KLQkJcmV0dXJuIGV4dGVuc2lvbjsKLQl9Ci0KLQlwcml2YXRlIEZpbGUgZmluZFJhd0luc3RhbGxlckZpbGUoZmluYWwgRmlsZSBkaXIsIGZpbmFsIFN0cmluZyBvcykgewotCQlGaWxlIHJlc3VsdCA9IG51bGw7Ci0JCUZpbGVbXSBmaWxlcyA9IGRpci5saXN0RmlsZXMoKTsKLQkJZm9yIChGaWxlIGZvdW5kIDogZmlsZXMpIHsKLQkJCWlmIChmb3VuZC5nZXROYW1lKCkuaW5kZXhPZihvcykgPiAtMSkgewotCQkJCXJlc3VsdCA9IGZvdW5kOwotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNlbmRGaWxlKGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCwKLQkJCWZpbmFsIElucHV0U3RyZWFtIGlucHV0U3RyZWFtLCBmaW5hbCBTdHJpbmcgZmlsZW5hbWUsCi0JCQlmaW5hbCBTdHJpbmcgZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXNwLmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgZ2V0Q29udGVudFR5cGUoZXh0KSk7Ci0JCXJlc3AuYWRkSGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIFN0cmluZwotCQkJCS52YWx1ZU9mKGlucHV0U3RyZWFtLmF2YWlsYWJsZSgpKSk7Ci0JCXJlc3Auc2V0SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIiwgImF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIKLQkJCQkrIGZpbGVuYW1lICsgIi4iICsgZXh0ICsgIjsiKTsKLQkJcmVzcC5mbHVzaEJ1ZmZlcigpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSByZXNwLmdldE91dHB1dFN0cmVhbSgpOyAvLyBUT0RPOiAoamIpIGVycm9yaGFuZGxpbmcKLQkJY29weShpbnB1dFN0cmVhbSwgb3MpOwotCQlvcy5mbHVzaCgpOwotCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldENvbnRlbnRUeXBlKGZpbmFsIFN0cmluZyBmaWxlRXh0KSB7Ci0JCVN0cmluZyByZXN1bHQgPSAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKLQkJaWYgKGZpbGVFeHQuZXF1YWxzSWdub3JlQ2FzZSgiemlwIikpIHsKLQkJCXJlc3VsdCA9ICJhcHBsaWNhdGlvbi94LXppcCI7Ci0JCX0gZWxzZSBpZiAoZmlsZUV4dC5lcXVhbHNJZ25vcmVDYXNlKCJneiIpKSB7Ci0JCQlyZXN1bHQgPSAiYXBwbGljYXRpb24veC1nemlwIjsKLQkJfSBlbHNlIGlmIChmaWxlRXh0LmVxdWFsc0lnbm9yZUNhc2UoInRhciIpKSB7Ci0JCQlyZXN1bHQgPSAiYXBwbGljYXRpb24veC10YXIiOwotCQl9IGVsc2UgaWYgKGZpbGVFeHQuZXF1YWxzSWdub3JlQ2FzZSgiam5scCIpKSB7Ci0JCQlyZXN1bHQgPSAiYXBwbGljYXRpb24veC1qYXZhLWpubHAtZmlsZSI7Ci0JCX0gZWxzZSBpZiAoZmlsZUV4dC5lcXVhbHNJZ25vcmVDYXNlKCJqYXIiKSkgewotCQkJcmVzdWx0ID0gImFwcGxpY2F0aW9uL2phdmEtYXJjaGl2ZSI7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2VhdGVDdXN0b21JbnN0YWxsZXIoZmluYWwgU3RyaW5nIG9zLCBmaW5hbCBGaWxlIGluRmlsZSwKLQkJCWZpbmFsIFN0cmluZyBpdXNbXSwgZmluYWwgRmlsZSBvdXRGaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24gLy8gRklYTUUKLQl7Ci0JCUlucHV0U3RyZWFtIGluID0gbnVsbDsKLQkJT3V0cHV0U3RyZWFtIG91dCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRGaWxlKTsKLQkJCWluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShpbkZpbGUpOwotCQkJU3RyaW5nIGNvbmZpZyA9IGdldEluc3RhbGxlckNvbmZpZ3VyYXRpb24oKTsKLQkJCWJ5dGVbXSBieXRlcyA9IGNvbmZpZy5nZXRCeXRlcyhFTkNPRElORyk7Ci0JCQlpZiAoaW5GaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiLnppcCIpKSB7Ci0JCQkJWmlwSW5wdXRTdHJlYW0gemlzID0gbnVsbDsKLQkJCQlaaXBPdXRwdXRTdHJlYW0gem9zID0gbnVsbDsKLQkJCQl0cnkgewotCQkJCQl6aXMgPSBuZXcgWmlwSW5wdXRTdHJlYW0oaW4pOwotCQkJCQl6b3MgPSBuZXcgWmlwT3V0cHV0U3RyZWFtKG91dCk7Ci0JCQkJCVppcEVudHJ5IGVudHJ5ID0gemlzLmdldE5leHRFbnRyeSgpOwotCQkJCQl3aGlsZSAoZW50cnkgIT0gbnVsbCkgewotCQkJCQkJLy8gRG8gbm90IHN0b3JlIGRpcmVjdG9yaWVzIGV4cGxpY2l0bHkKLQkJCQkJCWlmICghZW50cnkuaXNEaXJlY3RvcnkoKSkgewotCQkJCQkJCVppcEVudHJ5IHppcEVudHJ5ID0gbmV3IFppcEVudHJ5KGVudHJ5LmdldE5hbWUoKSk7Ci0JCQkJCQkJem9zLnB1dE5leHRFbnRyeSh6aXBFbnRyeSk7Ci0JCQkJCQkJY29weShyZWFkU3ViU3RyZWFtKHppcyksIHpvcyk7Ci0JCQkJCQl9Ci0JCQkJCQllbnRyeSA9IHppcy5nZXROZXh0RW50cnkoKTsKLQkJCQkJfQotCQkJCQl6b3MucHV0TmV4dEVudHJ5KG5ldyBaaXBFbnRyeSgKLQkJCQkJCQkiZWNsaXBzZS9pbnN0YWxsZXIucHJvcGVydGllcyIpKTsKLQkJCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gY29uZlN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKLQkJCQkJCQlieXRlcyk7Ci0JCQkJCWNvcHkoY29uZlN0cmVhbSwgem9zKTsKLQkJCQkJem9zLmNsb3NlRW50cnkoKTsKLQotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gVE9ETwotCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0gZmluYWxseSB7Ci0JCQkJCXRyeUNsb3NlKHppcyk7Ci0JCQkJCXRyeUNsb3NlKHpvcyk7Ci0JCQkJfQotCQkJfSBlbHNlIGlmIChpbkZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIudGFyLmd6IikpIHsKLQkJCQlHWklQSW5wdXRTdHJlYW0gZ3ppcyA9IG51bGw7Ci0JCQkJVGFySW5wdXRTdHJlYW0gdGlzID0gbnVsbDsKLQkJCQlHWklQT3V0cHV0U3RyZWFtIGd6b3MgPSBudWxsOwotCQkJCVRhck91dHB1dFN0cmVhbSB0b3MgPSBudWxsOwotCQkJCXRyeSB7Ci0JCQkJCWd6aXMgPSBuZXcgR1pJUElucHV0U3RyZWFtKGluKTsKLQkJCQkJdGlzID0gbmV3IFRhcklucHV0U3RyZWFtKGd6aXMpOwotCQkJCQlnem9zID0gbmV3IEdaSVBPdXRwdXRTdHJlYW0ob3V0KTsKLQkJCQkJdG9zID0gbmV3IFRhck91dHB1dFN0cmVhbShnem9zKTsKLQkJCQkJdG9zLnNldExvbmdGaWxlTW9kZShUYXJPdXRwdXRTdHJlYW0uTE9OR0ZJTEVfR05VKTsKLQkJCQkJVGFyRW50cnkgZW50cnkgPSB0aXMuZ2V0TmV4dEVudHJ5KCk7Ci0JCQkJCXdoaWxlIChlbnRyeSAhPSBudWxsKSB7Ci0JCQkJCQl0b3MucHV0TmV4dEVudHJ5KGVudHJ5KTsKLQkJCQkJCWNvcHkocmVhZFN1YlN0cmVhbSh0aXMpLCB0b3MpOwotCQkJCQkJdG9zLmNsb3NlRW50cnkoKTsKLQkJCQkJCWVudHJ5ID0gdGlzLmdldE5leHRFbnRyeSgpOwotCQkJCQl9Ci0JCQkJCVN0cmluZyBlbnRyeU5hbWUgPSAiZWNsaXBzZS9pbnN0YWxsZXIucHJvcGVydGllcyI7Ci0JCQkJCWlmIChvcy5lcXVhbHMoIm1hY29zeCIpKSB7Ci0JCQkJCQllbnRyeU5hbWUgPSAiZWNsaXBzZS9wMmluc3RhbGxlci5hcHAvQ29udGVudHMvTWFjT1MvaW5zdGFsbGVyLnByb3BlcnRpZXMiOwotCQkJCQl9Ci0JCQkJCVRhckVudHJ5IHRhckVudHJ5ID0gbmV3IFRhckVudHJ5KGVudHJ5TmFtZSk7Ci0JCQkJCUJ5dGVBcnJheUlucHV0U3RyZWFtIGNvbmZTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oCi0JCQkJCQkJYnl0ZXMpOwotCQkJCQl0YXJFbnRyeS5zZXRTaXplKGJ5dGVzLmxlbmd0aCk7Ci0JCQkJCXRvcy5wdXROZXh0RW50cnkodGFyRW50cnkpOwotCQkJCQljb3B5KGNvbmZTdHJlYW0sIHRvcyk7Ci0JCQkJCXRvcy5jbG9zZUVudHJ5KCk7Ci0KLQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIFRPRE8KLQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9IGZpbmFsbHkgewotCQkJCQl0cnlDbG9zZSh0aXMpOwotCQkJCQl0cnlDbG9zZShnemlzKTsKLQkJCQkJdHJ5Q2xvc2UodG9zKTsKLQkJCQkJdHJ5Q2xvc2UoZ3pvcyk7Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXRyeUNsb3NlKGluKTsKLQkJCXRyeUNsb3NlKG91dCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHkoZmluYWwgSW5wdXRTdHJlYW0gaW4sIGZpbmFsIE91dHB1dFN0cmVhbSBvdXQpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlieXRlW10gZGF0YSA9IG5ldyBieXRlW0JVRkZFUl07Ci0JCWludCBjdXJyZW50Qnl0ZSA9IGluLnJlYWQoZGF0YSwgMCwgQlVGRkVSKTsKLQkJd2hpbGUgKGN1cnJlbnRCeXRlICE9IC0xKSB7Ci0JCQlvdXQud3JpdGUoZGF0YSwgMCwgY3VycmVudEJ5dGUpOwotCQkJY3VycmVudEJ5dGUgPSBpbi5yZWFkKGRhdGEsIDAsIEJVRkZFUik7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRJbnN0YWxsZXJDb25maWd1cmF0aW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIC8vIEZJWE1FCi0JewotCQlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0JCUZpbGUgZG93bmxvYWREaXIgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldENvbmZpZ3VyYXRpb24oKQotCQkJCS5nZXREb3dubG9hZHNEaXJlY3RvcnkoKTsKLQkJRmlsZSB0ZW1wbGF0ZURpciA9IG5ldyBGaWxlKGRvd25sb2FkRGlyLCBJTlNUQUxMRVJfVEVNUExBVEVfUEFUSCk7Ci0JCUZpbGUgaW5GaWxlID0gbmV3IEZpbGUodGVtcGxhdGVEaXIsIElOU1RBTExFUl9QUk9QRVJUSUVTX0ZJTEVOQU1FKTsKLQkJUHJvcGVydGllcyBpbnN0YWxsZXJQcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJaW5zdGFsbGVyUHJvcGVydGllcy5sb2FkKG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5GaWxlKSk7Ci0JCWZvciAoT2JqZWN0IG9rZXkgOiBpbnN0YWxsZXJQcm9wZXJ0aWVzLmtleVNldCgpKSB7Ci0JCQlTdHJpbmcga2V5ID0gKFN0cmluZykgb2tleTsKLQkJCWlmIChpbnN0YWxsZXJQcm9wZXJ0aWVzLmdldFByb3BlcnR5KGtleSkuZXF1YWxzKFBST1BFUlRZX1BMQUNFSE9MREVSX01BUktFUikpIHsKLQkJCQlTdHJpbmcgdmFsdWUgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihrZXkpOwotCQkJCWlmICh2YWx1ZSAhPSBudWxsKSB7Ci0JCQkJCWluc3RhbGxlclByb3BlcnRpZXMuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0JCQkJCQkJIk5vIHZhbHVlIGZvciBwbGFjZWhvbGRlciBwYXJhbWV0ZXIgaW4gcmVxdWVzdDogIgotCQkJCQkJCQkJKyBrZXkpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXRyeSB7Ci0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnVmZmVyU3RyZWFtID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJaW5zdGFsbGVyUHJvcGVydGllcy5zdG9yZShidWZmZXJTdHJlYW0sICIiKTsKLQkJCXJlc3VsdCA9IGJ1ZmZlclN0cmVhbS50b1N0cmluZygpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSBmaW5hbGx5IHsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIHJlYWRTdWJTdHJlYW0oZmluYWwgSW5wdXRTdHJlYW0gaXMpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJY29weShpcywgYmFvcyk7Ci0JCXJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYmFvcy50b0J5dGVBcnJheSgpKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHRyeUNsb3NlKGZpbmFsIElucHV0U3RyZWFtIHN0cmVhbSkgewotCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJc3RyZWFtLmNsb3NlKCk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLyBUT0RPIEFjdGl2YXRvci5sb2coIGUgKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgdHJ5Q2xvc2UoZmluYWwgT3V0cHV0U3RyZWFtIHN0cmVhbSkgewotCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJc3RyZWFtLmNsb3NlKCk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLyBUT0RPIEFjdGl2YXRvci5sb2coIGUgKTsKLQkJCX0KLQkJfQotCX0KLQorICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHkoIGZpbmFsIElucHV0U3RyZWFtIGluLCBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0ICkKKyAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgeworICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbIEJVRkZFUiBdOworICAgIGludCBjdXJyZW50Qnl0ZSA9IGluLnJlYWQoIGRhdGEsIDAsIEJVRkZFUiApOworICAgIHdoaWxlKCBjdXJyZW50Qnl0ZSAhPSAtMSApIHsKKyAgICAgIG91dC53cml0ZSggZGF0YSwgMCwgY3VycmVudEJ5dGUgKTsKKyAgICAgIGN1cnJlbnRCeXRlID0gaW4ucmVhZCggZGF0YSwgMCwgQlVGRkVSICk7CisgICAgfQorICB9CiB9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0luc3RhbGxlckNhY2hlLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnN0YWxsZXJidWlsZGVyL0luc3RhbGxlckNhY2hlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyYzc3NgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2luc3RhbGxlcmJ1aWxkZXIvSW5zdGFsbGVyQ2FjaGUuamF2YQpAQCAtMCwwICsxLDM5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXI7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLnppcC5HWklQSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLnppcC5HWklQT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7CitpbXBvcnQgamF2YS51dGlsLnppcC5aaXBJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuemlwLlppcE91dHB1dFN0cmVhbTsKKworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOworaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMudGFyLlRhckVudHJ5OworaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMudGFyLlRhcklucHV0U3RyZWFtOworaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMudGFyLlRhck91dHB1dFN0cmVhbTsKKworLyoqCisgKiBDYWNoZSBmb3IgZ2VuZXJhdGVkIGluc3RhbGxlcnMsIHVzZXMgdGhlIGZpbGVzeXN0ZW0gYXMgYSBiYWNraW5nIHN0b3JlCisgKiAKKyAqIEBhdXRob3IgbXdvZWxrZXIKKyAqLworcHVibGljIGNsYXNzIEluc3RhbGxlckNhY2hlIHsKKworICBzdGF0aWMgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoIEluc3RhbGxlckNhY2hlLmNsYXNzICk7CisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgS2V5IHsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICByZXR1cm4gIm9zPSIgKyBvcyArICI7IiArIHByb3BlcnRpZXMudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldE9zKCkgeworICAgICAgcmV0dXJuIG9zOworICAgIH0KKworICAgIHB1YmxpYyBQcm9wZXJ0aWVzIGdldFByb3BlcnRpZXMoKSB7CisgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgZmluYWwgaW50IHByaW1lID0gMzE7CisgICAgICBpbnQgcmVzdWx0ID0gMTsKKyAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgKCAoIG9zID09IG51bGwgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9zLmhhc2hDb2RlKCkgKTsKKyAgICAgIHJlc3VsdCA9IHByaW1lCisgICAgICAgICAgICAgICAqIHJlc3VsdAorICAgICAgICAgICAgICAgKyAoICggcHJvcGVydGllcyA9PSBudWxsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvcGVydGllcy5oYXNoQ29kZSgpICk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyggT2JqZWN0IG9iaiApIHsKKyAgICAgIGlmKCB0aGlzID09IG9iaiApCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgaWYoIG9iaiA9PSBudWxsICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgaWYoIGdldENsYXNzKCkgIT0gb2JqLmdldENsYXNzKCkgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBLZXkgb3RoZXIgPSAoIEtleSApb2JqOworICAgICAgaWYoIG9zID09IG51bGwgKSB7CisgICAgICAgIGlmKCBvdGhlci5vcyAhPSBudWxsICkKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9IGVsc2UgaWYoICFvcy5lcXVhbHMoIG90aGVyLm9zICkgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBpZiggcHJvcGVydGllcyA9PSBudWxsICkgeworICAgICAgICBpZiggb3RoZXIucHJvcGVydGllcyAhPSBudWxsICkKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9IGVsc2UgaWYoICFwcm9wZXJ0aWVzLmVxdWFscyggb3RoZXIucHJvcGVydGllcyApICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFN0cmluZyBvczsKKworICAgIHB1YmxpYyBLZXkoIFN0cmluZyBvcywgUHJvcGVydGllcyBwcm9wZXJ0aWVzICkgeworICAgICAgc3VwZXIoKTsKKyAgICAgIHRoaXMub3MgPSBvczsKKyAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisgICAgfQorICAgIFByb3BlcnRpZXMgcHJvcGVydGllczsKKyAgfQorICAvKioKKyAgICogRW50cnkgaW4gdGhlIGNhY2hlLCB0aGUgYWN0dWFsIGluc3RhbGxlciBmaWxlIGlzIGNyZWF0ZWQgbGF6aWx5LCB0byByZWR1Y2UKKyAgICogbW9uaXRvciBjb250ZW50aW9uIG9uIHRoZSBjYWNoZU1hcAorICAgKiAKKyAgICogQGF1dGhvciBtd29lbGtlcgorICAgKi8KKyAgcHVibGljIGNsYXNzIEVudHJ5IHsKKworICAgIHByaXZhdGUgS2V5IGtleTsKKworICAgIHB1YmxpYyBFbnRyeSggS2V5IGtleSApIHsKKyAgICAgIHN1cGVyKCk7CisgICAgICB0aGlzLmtleSA9IGtleTsKKyAgICB9CisgICAgbG9uZyBhY3F1aXNpdGlvbkNvdW50ID0gMDsKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgRmlsZSBnZXRGaWxlKCkgeworICAgICAgaWYoIGZpbGUgPT0gbnVsbCApIHsKKyAgICAgICAgZmlsZSA9IGNyZWF0ZUluc3RhbGxlcigga2V5ICk7CisgICAgICB9CisgICAgICByZXR1cm4gZmlsZTsKKyAgICB9CisgICAgRmlsZSBmaWxlOworICAgIGJvb2xlYW4gZXZpY3RlZCA9IGZhbHNlOworICAgIGJvb2xlYW4gZGlzcG9zZWQgPSBmYWxzZTsKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBhY3F1aXJlKCkgeworICAgICAgYWNxdWlzaXRpb25Db3VudCsrOworICAgIH0KKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZWxlYXNlKCkgeworICAgICAgYWNxdWlzaXRpb25Db3VudC0tOworICAgICAgaWYoIGFjcXVpc2l0aW9uQ291bnQgPT0gMCAmJiBldmljdGVkICkgeworICAgICAgICAvLyBQZXJmb3JtIHBvc3Rwb25lZCBldmljdGlvbgorICAgICAgICBsb2dnZXIuZGVidWcoICJFdmljdGluZyAoYWN0dWFsKTogIiArIGtleSApOworICAgICAgICBkZWxldGVGaWxlKCk7CisgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUZpbGUoKSB7CisgICAgICBpZiggZmlsZSAhPSBudWxsICkgeworICAgICAgICBmaWxlLmRlbGV0ZSgpOworICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBldmljdCgpIHsKKyAgICAgIGV2aWN0ZWQgPSB0cnVlOworICAgICAgaWYoIGFjcXVpc2l0aW9uQ291bnQgPT0gMCApIHsKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCAiRXZpY3RpbmcgZGlyZWN0bHk6ICIgKyBrZXkgKTsKKyAgICAgICAgZGVsZXRlRmlsZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRmlsZSBzdGlsbCBpbiB1c2UsIGV2aWN0IGxhdGVyCisgICAgICAgIGxvZ2dlci5kZWJ1ZyggIkV2aWN0aW5nIChwb3N0cG9uZWQpOiAiICsga2V5ICk7CisgICAgICB9CisgICAgfQorICB9CisgIHByb3RlY3RlZCBjbGFzcyBDYWNoZU1hcCBleHRlbmRzIExpbmtlZEhhc2hNYXA8S2V5LCBFbnRyeT4geworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgY2FwYWNpdHk7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVFbGRlc3RFbnRyeSggTWFwLkVudHJ5PEtleSwgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyLkluc3RhbGxlckNhY2hlLkVudHJ5PiBlbGRlc3QgKQorICAgIHsKKyAgICAgIGJvb2xlYW4gcmVtb3ZlID0gZmFsc2U7CisgICAgICBpZiggdGhpcy5zaXplKCkgPiB0aGlzLmNhcGFjaXR5ICkgeworICAgICAgICAvLyByZW1vdmUgTGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeSwgYW5kIGV2aWN0IHZhbHVlIGZyb20gY2FjaGUKKyAgICAgICAgcmVtb3ZlID0gdHJ1ZTsKKyAgICAgICAgZWxkZXN0LmdldFZhbHVlKCkuZXZpY3QoKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiByZW1vdmU7CisgICAgfQorCisgICAgcHVibGljIENhY2hlTWFwKCBpbnQgY2FwYWNpdHksIGZsb2F0IGxvYWRGYWN0b3IsIGJvb2xlYW4gYWNjZXNzT3JkZXIgKSB7CisgICAgICBzdXBlciggY2FwYWNpdHksIGxvYWRGYWN0b3IsIGFjY2Vzc09yZGVyICk7CisgICAgICB0aGlzLmNhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgfQorICB9CisgIGZpbmFsIENhY2hlTWFwIGNhY2hlTWFwOworICBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldENvbmZpZ3VyYXRpb24oKTsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOU1RBTExFUl9QUk9QRVJUSUVTX0ZJTEVOQU1FID0gImluc3RhbGxlci5wcm9wZXJ0aWVzIjsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOU1RBTExFUl9URU1QTEFURV9QQVRIID0gInRlbXBsYXRlcy9pbnN0YWxsZXIiOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfUExBQ0VIT0xERVJfTUFSS0VSID0gIiU/JSI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkNPRElORyA9ICJVVEYtOCI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURU1QRklMRV9FWFRFTlNJT04gPSAiLnRtcCI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURU1QRklMRV9OQU1FID0gImluc3RhbGxlciI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVIgPSAxMDI0OworCisgIHB1YmxpYyBJbnN0YWxsZXJDYWNoZSggaW50IGluc3RhbGxlckNhY2hlU2l6ZSApIHsKKyAgICBjYWNoZU1hcCA9IG5ldyBDYWNoZU1hcCggaW5zdGFsbGVyQ2FjaGVTaXplLCAxLjc1ZiwgdHJ1ZSApOworICB9CisKKyAgcHVibGljIEVudHJ5IGdldEluc3RhbGxlciggS2V5IGtleSApIHsKKyAgICBFbnRyeSBlbnRyeTsKKyAgICBzeW5jaHJvbml6ZWQoIGNhY2hlTWFwICkgeworICAgICAgZW50cnkgPSBjYWNoZU1hcC5nZXQoIGtleSApOworICAgICAgaWYoIGVudHJ5ID09IG51bGwgKSB7CisgICAgICAgIGVudHJ5ID0gbmV3IEVudHJ5KCBrZXkgKTsKKyAgICAgICAgY2FjaGVNYXAucHV0KCBrZXksIGVudHJ5ICk7CisgICAgICB9CisgICAgICBlbnRyeS5hY3F1aXJlKCk7CisgICAgfQorICAgIHJldHVybiBlbnRyeTsKKyAgfQorCisgIHByb3RlY3RlZCBGaWxlIGNyZWF0ZUluc3RhbGxlciggS2V5IGtleSApIHsKKyAgICBGaWxlIG91dEZpbGUgPSBjcmVhdGVUZW1wRmlsZSgpOworICAgIEZpbGUgaW5GaWxlID0gZmluZFJhd0luc3RhbGxlckZpbGUoIG5ldyBGaWxlKCBjb25maWd1cmF0aW9uLmdldERvd25sb2Fkc0RpcmVjdG9yeSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVtcGxhdGVzL2luc3RhbGxlciIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuZ2V0T3MoKSApOworICAgIElucHV0U3RyZWFtIGluID0gbnVsbDsKKyAgICBPdXRwdXRTdHJlYW0gb3V0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIG91dEZpbGUgKTsKKyAgICAgIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbSggaW5GaWxlICk7CisgICAgICBTdHJpbmcgY29uZmlnID0gZ2V0SW5zdGFsbGVyQ29uZmlndXJhdGlvbigga2V5LmdldE9zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmdldFByb3BlcnRpZXMoKSApOworICAgICAgYnl0ZVtdIGJ5dGVzID0gY29uZmlnLmdldEJ5dGVzKCBFTkNPRElORyApOworICAgICAgaWYoIGluRmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoICIuemlwIiApICkgeworICAgICAgICBaaXBJbnB1dFN0cmVhbSB6aXMgPSBudWxsOworICAgICAgICBaaXBPdXRwdXRTdHJlYW0gem9zID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICB6aXMgPSBuZXcgWmlwSW5wdXRTdHJlYW0oIGluICk7CisgICAgICAgICAgem9zID0gbmV3IFppcE91dHB1dFN0cmVhbSggb3V0ICk7CisgICAgICAgICAgWmlwRW50cnkgZW50cnkgPSB6aXMuZ2V0TmV4dEVudHJ5KCk7CisgICAgICAgICAgd2hpbGUoIGVudHJ5ICE9IG51bGwgKSB7CisgICAgICAgICAgICAvLyBEbyBub3Qgc3RvcmUgZGlyZWN0b3JpZXMgZXhwbGljaXRseQorICAgICAgICAgICAgaWYoICFlbnRyeS5pc0RpcmVjdG9yeSgpICkgeworICAgICAgICAgICAgICBaaXBFbnRyeSB6aXBFbnRyeSA9IG5ldyBaaXBFbnRyeSggZW50cnkuZ2V0TmFtZSgpICk7CisgICAgICAgICAgICAgIHpvcy5wdXROZXh0RW50cnkoIHppcEVudHJ5ICk7CisgICAgICAgICAgICAgIGNvcHkoIHJlYWRTdWJTdHJlYW0oIHppcyApLCB6b3MgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVudHJ5ID0gemlzLmdldE5leHRFbnRyeSgpOworICAgICAgICAgIH0KKyAgICAgICAgICB6b3MucHV0TmV4dEVudHJ5KCBuZXcgWmlwRW50cnkoICJlY2xpcHNlL2luc3RhbGxlci5wcm9wZXJ0aWVzIiApICk7CisgICAgICAgICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gY29uZlN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSggYnl0ZXMgKTsKKyAgICAgICAgICBjb3B5KCBjb25mU3RyZWFtLCB6b3MgKTsKKyAgICAgICAgICB6b3MuY2xvc2VFbnRyeSgpOworICAgICAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBlICkgeworICAgICAgICAgIGxvZ2dlci5lcnJvciggIkNvdWxkIG5vdCBjcmVhdGUgaW5zdGFsbGVyIiwgZSApOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgIHRyeUNsb3NlKCB6aXMgKTsKKyAgICAgICAgICB0cnlDbG9zZSggem9zICk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiggaW5GaWxlLmdldE5hbWUoKS5lbmRzV2l0aCggIi50YXIuZ3oiICkgKSB7CisgICAgICAgIEdaSVBJbnB1dFN0cmVhbSBnemlzID0gbnVsbDsKKyAgICAgICAgVGFySW5wdXRTdHJlYW0gdGlzID0gbnVsbDsKKyAgICAgICAgR1pJUE91dHB1dFN0cmVhbSBnem9zID0gbnVsbDsKKyAgICAgICAgVGFyT3V0cHV0U3RyZWFtIHRvcyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgZ3ppcyA9IG5ldyBHWklQSW5wdXRTdHJlYW0oIGluICk7CisgICAgICAgICAgdGlzID0gbmV3IFRhcklucHV0U3RyZWFtKCBnemlzICk7CisgICAgICAgICAgZ3pvcyA9IG5ldyBHWklQT3V0cHV0U3RyZWFtKCBvdXQgKTsKKyAgICAgICAgICB0b3MgPSBuZXcgVGFyT3V0cHV0U3RyZWFtKCBnem9zICk7CisgICAgICAgICAgdG9zLnNldExvbmdGaWxlTW9kZSggVGFyT3V0cHV0U3RyZWFtLkxPTkdGSUxFX0dOVSApOworICAgICAgICAgIFRhckVudHJ5IGVudHJ5ID0gdGlzLmdldE5leHRFbnRyeSgpOworICAgICAgICAgIHdoaWxlKCBlbnRyeSAhPSBudWxsICkgeworICAgICAgICAgICAgdG9zLnB1dE5leHRFbnRyeSggZW50cnkgKTsKKyAgICAgICAgICAgIGNvcHkoIHJlYWRTdWJTdHJlYW0oIHRpcyApLCB0b3MgKTsKKyAgICAgICAgICAgIHRvcy5jbG9zZUVudHJ5KCk7CisgICAgICAgICAgICBlbnRyeSA9IHRpcy5nZXROZXh0RW50cnkoKTsKKyAgICAgICAgICB9CisgICAgICAgICAgU3RyaW5nIGVudHJ5TmFtZSA9ICJlY2xpcHNlL2luc3RhbGxlci5wcm9wZXJ0aWVzIjsKKyAgICAgICAgICBpZigga2V5LmdldE9zKCkuZXF1YWxzKCAibWFjb3N4IiApICkgeworICAgICAgICAgICAgZW50cnlOYW1lID0gImVjbGlwc2UvcDJpbnN0YWxsZXIuYXBwL0NvbnRlbnRzL01hY09TL2luc3RhbGxlci5wcm9wZXJ0aWVzIjsKKyAgICAgICAgICB9CisgICAgICAgICAgVGFyRW50cnkgdGFyRW50cnkgPSBuZXcgVGFyRW50cnkoIGVudHJ5TmFtZSApOworICAgICAgICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGNvbmZTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oIGJ5dGVzICk7CisgICAgICAgICAgdGFyRW50cnkuc2V0U2l6ZSggYnl0ZXMubGVuZ3RoICk7CisgICAgICAgICAgdG9zLnB1dE5leHRFbnRyeSggdGFyRW50cnkgKTsKKyAgICAgICAgICBjb3B5KCBjb25mU3RyZWFtLCB0b3MgKTsKKyAgICAgICAgICB0b3MuY2xvc2VFbnRyeSgpOworICAgICAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBlICkgeworICAgICAgICAgIGxvZ2dlci5lcnJvciggIkNvdWxkIG5vdCBjcmVhdGUgaW5zdGFsbGVyIiwgZSApOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgIHRyeUNsb3NlKCB0aXMgKTsKKyAgICAgICAgICB0cnlDbG9zZSggZ3ppcyApOworICAgICAgICAgIHRyeUNsb3NlKCB0b3MgKTsKKyAgICAgICAgICB0cnlDbG9zZSggZ3pvcyApOworICAgICAgICB9CisgICAgICB9CisgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gaW9lICkgeworICAgICAgbG9nZ2VyLmVycm9yKCAiQ291bGQgbm90IGNyZWF0ZSBpbnN0YWxsZXIiLCBpb2UgKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgdHJ5Q2xvc2UoIGluICk7CisgICAgICB0cnlDbG9zZSggb3V0ICk7CisgICAgfQorICAgIHJldHVybiBvdXRGaWxlOworICB9CisKKyAgcHJpdmF0ZSBGaWxlIGZpbmRSYXdJbnN0YWxsZXJGaWxlKCBmaW5hbCBGaWxlIGRpciwgZmluYWwgU3RyaW5nIG9zICkgeworICAgIEZpbGUgcmVzdWx0ID0gbnVsbDsKKyAgICBGaWxlW10gZmlsZXMgPSBkaXIubGlzdEZpbGVzKCk7CisgICAgZm9yKCBGaWxlIGZvdW5kIDogZmlsZXMgKSB7CisgICAgICBpZiggZm91bmQuZ2V0TmFtZSgpLmluZGV4T2YoIG9zICkgPiAtMSApIHsKKyAgICAgICAgcmVzdWx0ID0gZm91bmQ7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBnZXRJbnN0YWxsZXJDb25maWd1cmF0aW9uKCBTdHJpbmcgb3MsIFByb3BlcnRpZXMgcDJQcm9wZXJ0aWVzICkKKyAgICB0aHJvd3MgSU9FeGNlcHRpb24gLy8gRklYTUUKKyAgeworICAgIFN0cmluZyByZXN1bHQgPSAiIjsKKyAgICBGaWxlIGRvd25sb2FkRGlyID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQorICAgICAgLmdldENvbmZpZ3VyYXRpb24oKQorICAgICAgLmdldERvd25sb2Fkc0RpcmVjdG9yeSgpOworICAgIEZpbGUgdGVtcGxhdGVEaXIgPSBuZXcgRmlsZSggZG93bmxvYWREaXIsIElOU1RBTExFUl9URU1QTEFURV9QQVRIICk7CisgICAgRmlsZSBpbkZpbGUgPSBuZXcgRmlsZSggdGVtcGxhdGVEaXIsIElOU1RBTExFUl9QUk9QRVJUSUVTX0ZJTEVOQU1FICk7CisgICAgUHJvcGVydGllcyBpbnN0YWxsZXJQcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICBpbnN0YWxsZXJQcm9wZXJ0aWVzLmxvYWQoIG5ldyBGaWxlSW5wdXRTdHJlYW0oIGluRmlsZSApICk7CisgICAgZm9yKCBPYmplY3Qgb2tleSA6IGluc3RhbGxlclByb3BlcnRpZXMua2V5U2V0KCkgKSB7CisgICAgICBTdHJpbmcga2V5ID0gKCBTdHJpbmcgKW9rZXk7CisgICAgICBpZiggaW5zdGFsbGVyUHJvcGVydGllcy5nZXRQcm9wZXJ0eSgga2V5ICkKKyAgICAgICAgLmVxdWFscyggUFJPUEVSVFlfUExBQ0VIT0xERVJfTUFSS0VSICkgKQorICAgICAgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSBwMlByb3BlcnRpZXMuZ2V0UHJvcGVydHkoIGtleSApOworICAgICAgICBpZiggdmFsdWUgIT0gbnVsbCApIHsKKyAgICAgICAgICBpbnN0YWxsZXJQcm9wZXJ0aWVzLnNldFByb3BlcnR5KCBrZXksIHZhbHVlICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJObyB2YWx1ZSBmb3IgcGxhY2Vob2xkZXIgcGFyYW1ldGVyIGluIHJlcXVlc3Q6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBrZXkgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICB0cnkgeworICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ1ZmZlclN0cmVhbSA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgIGluc3RhbGxlclByb3BlcnRpZXMuc3RvcmUoIGJ1ZmZlclN0cmVhbSwgIiIgKTsKKyAgICAgIHJlc3VsdCA9IGJ1ZmZlclN0cmVhbS50b1N0cmluZygpOworICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGUgKSB7CisgICAgICBsb2dnZXIuZXJyb3IoICJDb3VsZCBub3QgY3JlYXRlIGluc3RhbGxlciIsIGUgKTsKKyAgICB9IGZpbmFsbHkgeworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gcmVhZFN1YlN0cmVhbSggZmluYWwgSW5wdXRTdHJlYW0gaXMgKQorICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICB7CisgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgY29weSggaXMsIGJhb3MgKTsKKyAgICByZXR1cm4gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKCBiYW9zLnRvQnl0ZUFycmF5KCkgKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgdHJ5Q2xvc2UoIGZpbmFsIElucHV0U3RyZWFtIHN0cmVhbSApIHsKKyAgICBpZiggc3RyZWFtICE9IG51bGwgKSB7CisgICAgICB0cnkgeworICAgICAgICBzdHJlYW0uY2xvc2UoKTsKKyAgICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIGxvZ2dlci5lcnJvciggIkNvdWxkIG5vdCBjcmVhdGUgaW5zdGFsbGVyIiwgZSApOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgdHJ5Q2xvc2UoIGZpbmFsIE91dHB1dFN0cmVhbSBzdHJlYW0gKSB7CisgICAgaWYoIHN0cmVhbSAhPSBudWxsICkgeworICAgICAgdHJ5IHsKKyAgICAgICAgc3RyZWFtLmNsb3NlKCk7CisgICAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBlICkgeworICAgICAgICBsb2dnZXIuZXJyb3IoICJDb3VsZCBub3QgY3JlYXRlIGluc3RhbGxlciIsIGUgKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwcml2YXRlIEZpbGUgY3JlYXRlVGVtcEZpbGUoKSB7CisgICAgRmlsZSBkb3dubG9hZHNEaXJlY3RvcnkgPSBjb25maWd1cmF0aW9uLmdldFRlbXBEaXJlY3RvcnkoKTsKKyAgICBGaWxlIHRlbXBGaWxlOworICAgIHRyeSB7CisgICAgICB0ZW1wRmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoIFRFTVBGSUxFX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTVBGSUxFX0VYVEVOU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRzRGlyZWN0b3J5ICk7CisgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gZSApIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiVW5hYmxlIHRvIGNyZWF0ZSBpbnN0YWxsZXIgdGVtcCBmaWxlIiwgZSApOworICAgIH0KKyAgICByZXR1cm4gdGVtcEZpbGU7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHkoIGZpbmFsIElucHV0U3RyZWFtIGluLCBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0ICkKKyAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgeworICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbIEJVRkZFUiBdOworICAgIGludCBjdXJyZW50Qnl0ZSA9IGluLnJlYWQoIGRhdGEsIDAsIEJVRkZFUiApOworICAgIHdoaWxlKCBjdXJyZW50Qnl0ZSAhPSAtMSApIHsKKyAgICAgIG91dC53cml0ZSggZGF0YSwgMCwgY3VycmVudEJ5dGUgKTsKKyAgICAgIGN1cnJlbnRCeXRlID0gaW4ucmVhZCggZGF0YSwgMCwgQlVGRkVSICk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9qbmxwYnVpbGRlci9DdXN0b21KbmxwLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9qbmxwYnVpbGRlci9DdXN0b21KbmxwLmphdmEKaW5kZXggOWI0OGMwZS4uOTk0NGNmZCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvam5scGJ1aWxkZXIvQ3VzdG9tSm5scC5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2pubHBidWlsZGVyL0N1c3RvbUpubHAuamF2YQpAQCAtMSwzICsxLDEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQuam5scGJ1aWxkZXI7CiAKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKQEAgLTI4LDUwICszOCw2MCBAQAogICovCiBwdWJsaWMgY2xhc3MgQ3VzdG9tSm5scCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotLy8gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9VVF9QQVRIID0gIi9vcHQvZXBwL2h0ZG9jcyI7Ci0vLyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1VUX1BBVEggPSAiQzovb3B0L2VwcC9odGRvY3MiOworICAvLyBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRfUEFUSCA9ICIvb3B0L2VwcC9odGRvY3MiOworICAvLyBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRfUEFUSCA9ICJDOi9vcHQvZXBwL2h0ZG9jcyI7CiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpOTFBfVEVNUExBVEVfUEFUSCA9ICJ0ZW1wbGF0ZXMvam5scC9lcHAuam5scCI7CiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkNPRElORyA9ICJVVEYtOCI7CiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVIgPSA1MTI7CiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAKKwogICBAT3ZlcnJpZGUKICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoIGZpbmFsIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgogICB7Ci0gICAgCi0gICAgU3RyaW5nIGNvZGViYXNlID0gImh0dHA6Ly8iICsgcmVxLmdldFNlcnZlck5hbWUoKSArICI6IiArIHJlcS5nZXRTZXJ2ZXJQb3J0KCkgKyAiL2Rvd25sb2FkIjsKKyAgICBTdHJpbmcgY29kZWJhc2UgPSAiaHR0cDovLyIKKyAgICAgICAgICAgICAgICAgICAgICArIHJlcS5nZXRTZXJ2ZXJOYW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICArICI6IgorICAgICAgICAgICAgICAgICAgICAgICsgcmVxLmdldFNlcnZlclBvcnQoKQorICAgICAgICAgICAgICAgICAgICAgICsgIi9kb3dubG9hZCI7CiAgICAgU3RyaW5nIGl1UGFyYW0gPSByZXEuZ2V0UGFyYW1ldGVyKCAiaXVzIiApOwotICAgIAotICAgIFN0cmluZyBocmVmID0gcmVxLmdldFJlcXVlc3RVUkwoKS5hcHBlbmQoICI/IiArIHJlcS5nZXRRdWVyeVN0cmluZygpICkudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgaHJlZiA9IHJlcS5nZXRSZXF1ZXN0VVJMKCkKKyAgICAgIC5hcHBlbmQoICI/IiArIHJlcS5nZXRRdWVyeVN0cmluZygpICkKKyAgICAgIC50b1N0cmluZygpOwogICAgIHJlc3AuYWRkSGVhZGVyKCAiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtamF2YS1qbmxwLWZpbGUiICk7CiAgICAgZXhlY3V0ZSggY29kZWJhc2UsIGl1UGFyYW0sIGhyZWYgKTsKICAgICByZXNwLmZsdXNoQnVmZmVyKCk7CiAgIH0KIAogICBwdWJsaWMgc3RhdGljIHZvaWQgZXhlY3V0ZSggZmluYWwgU3RyaW5nIGNvZGViYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaXVQYXJhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZpbGVuYW1lICkgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaXVQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBmaWxlbmFtZSApIHRocm93cyBJT0V4Y2VwdGlvbgogICB7Ci0gICAgRmlsZSBkb3dubG9hZERpciA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldERvd25sb2Fkc0RpcmVjdG9yeSgpOwotICAgIElQYXRoIG91dERpclBhdGggPSBuZXcgUGF0aCggbmV3IEZpbGUoZG93bmxvYWREaXIsIEJ1aWxkSW5zdGFsbGVyLk9VVFBVVF9QQVRIKS5nZXRBYnNvbHV0ZVBhdGgoKSApOworICAgIEZpbGUgZG93bmxvYWREaXIgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisgICAgICAuZ2V0Q29uZmlndXJhdGlvbigpCisgICAgICAuZ2V0RG93bmxvYWRzRGlyZWN0b3J5KCk7CisgICAgSVBhdGggb3V0RGlyUGF0aCA9IG5ldyBQYXRoKCBuZXcgRmlsZSggZG93bmxvYWREaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGRJbnN0YWxsZXIuT1VUUFVUX1BBVEggKS5nZXRBYnNvbHV0ZVBhdGgoKSApOwogICAgIFN0cmluZ1tdIGl1cyA9IGdldElVcyggaXVQYXJhbSApOwotLy8gICAgVVJMIHRlbXBsYXRlID0gQWN0aXZhdG9yLmdldENvbnRleHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShURU1QTEFURV9QQVRIKTsKKyAgICAvLyBVUkwgdGVtcGxhdGUgPQorICAgIC8vIEFjdGl2YXRvci5nZXRDb250ZXh0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoVEVNUExBVEVfUEFUSCk7CiAgICAgSVBhdGggb3V0RmlsZVBhdGggPSBvdXREaXJQYXRoLmFwcGVuZCggZmlsZW5hbWUgKTsKLSAgICBGaWxlIHRlbXBsYXRlRmlsZSA9IG5ldyBGaWxlKGRvd25sb2FkRGlyLCBKTkxQX1RFTVBMQVRFX1BBVEggKTsKLSAgICBTdHJpbmcgam5scCA9IGNlYXRlQ3VzdG9tSm5scCggdGVtcGxhdGVGaWxlLnRvVVJJKCkudG9VUkwoKSwgaXVzLCBjb2RlYmFzZSwgZmlsZW5hbWUgKTsKKyAgICBGaWxlIHRlbXBsYXRlRmlsZSA9IG5ldyBGaWxlKCBkb3dubG9hZERpciwgSk5MUF9URU1QTEFURV9QQVRIICk7CisgICAgU3RyaW5nIGpubHAgPSBjZWF0ZUN1c3RvbUpubHAoIHRlbXBsYXRlRmlsZS50b1VSSSgpLnRvVVJMKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lICk7CiAgICAgT3V0cHV0U3RyZWFtIG9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIG91dEZpbGVQYXRoLnRvRmlsZSgpICk7CiAgICAgb3Mud3JpdGUoIGpubHAuZ2V0Qnl0ZXMoIEVOQ09ESU5HICkgKTsKICAgICB0cnlDbG9zZSggb3MgKTsKICAgfQotICAKLSAgLy8vLy8vLy8vLy8vLy8vLy8vCi0gIC8vIGhlbHBpbmcgbWV0aG9kcwotICAvLy8vLy8vLy8vLy8vLy8vLy8KIAorICAvLyAvLy8vLy8vLy8vLy8vLy8vCisgIC8vIGhlbHBpbmcgbWV0aG9kcworICAvLyAvLy8vLy8vLy8vLy8vLy8vCiAgIHByaXZhdGUgc3RhdGljIFN0cmluZ1tdIGdldElVcyggZmluYWwgU3RyaW5nIHBhcmFtICkgewotICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsgCisgICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogICAgIFN0cmluZ1Rva2VuaXplciB0a25penIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKCBwYXJhbSwgIiwiLCBmYWxzZSApOwogICAgIHdoaWxlKCB0a25penIuaGFzTW9yZVRva2VucygpICkgewogICAgICAgU3RyaW5nIHRva2VuID0gdGtuaXpyLm5leHRUb2tlbigpOwpAQCAtODEsOSArMTAxLDkgQEAKICAgfQogCiAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjZWF0ZUN1c3RvbUpubHAoIGZpbmFsIFVSTCB0ZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGl1c1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY29kZWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBmaWxlbmFtZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBpdXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvZGViYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZmlsZW5hbWUgKQogICB7CiAgICAgU3RyaW5nIHJlc3VsdCA9ICIiOwogICAgIElucHV0U3RyZWFtIGluID0gbnVsbDsKQEAgLTkyLDkgKzExMiw5IEBACiAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnVmZmVyU3RyZWFtID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwogICAgICAgY29weSggaW4sIGJ1ZmZlclN0cmVhbSApOwogICAgICAgcmVzdWx0ID0gY3VzdG9taXplKCBidWZmZXJTdHJlYW0udG9TdHJpbmcoIEVOQ09ESU5HICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lICk7CiAgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gaW9lICkgewogICAgICAgaW9lLnByaW50U3RhY2tUcmFjZSgpOwogICAgIH0gZmluYWxseSB7CkBAIC0xMDYsMTIgKzEyNiwyNyBAQAogICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3VzdG9taXplKCBmaW5hbCBTdHJpbmcgaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIGl1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvZGViYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaHJlZiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGhyZWYgKQorICB7CiAgICAgU3RyaW5nIHJlc3VsdCA9IGlucHV0OwogICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKCAiXFwkXFx7Y29kZWJhc2VcXH0iLCBjb2RlYmFzZSApOwogICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKCAiXFwkXFx7aHJlZlxcfSIsIGhyZWYgKTsKLSAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZUFsbCggIlxcJFxce3Jvb3RzXFx9IiwgU3RyaW5nVXRpbC50b0NvbW1hTGlzdCggaXVzLCBmYWxzZSApICk7Ci0gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2VBbGwoICJcXCRcXHtwcm9maWxlTmFtZVxcfSIsICJQcm9maWxlTmFtZUhlcmUiICk7IC8vRklYTUU6IChqYikgZ2V0IHRoaXMgZnJvbSBpbml0aWFsIHNlbGVjdGlvbiBvbiBlY2xpc3BlLm9yZworICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKCAiXFwkXFx7cm9vdHNcXH0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdVdGlsLnRvQ29tbWFMaXN0KCBpdXMsIGZhbHNlICkgKTsKKyAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZUFsbCggIlxcJFxce3Byb2ZpbGVOYW1lXFx9IiwgIlByb2ZpbGVOYW1lSGVyZSIgKTsgLy8gRklYTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGpiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlY2xpc3BlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JnCiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCkBAIC0xMjEsNyArMTU2LDcgQEAKICAgICAgICAgc3RyZWFtLmNsb3NlKCk7CiAgICAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBlICkgewogICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAvL1RPRE8gQWN0aXZhdG9yLmxvZyggZSApOworICAgICAgICAvLyBUT0RPIEFjdGl2YXRvci5sb2coIGUgKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTEzMiwxMyArMTY3LDEyIEBACiAgICAgICAgIHN0cmVhbS5jbG9zZSgpOwogICAgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gZSApIHsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgLy9UT0RPIEFjdGl2YXRvci5sb2coIGUgKTsKKyAgICAgICAgLy8gVE9ETyBBY3RpdmF0b3IubG9nKCBlICk7CiAgICAgICB9CiAgICAgfQogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb3B5KCBmaW5hbCBJbnB1dFN0cmVhbSBpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0ICkKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb3B5KCBmaW5hbCBJbnB1dFN0cmVhbSBpbiwgZmluYWwgT3V0cHV0U3RyZWFtIG91dCApCiAgICAgdGhyb3dzIElPRXhjZXB0aW9uCiAgIHsKICAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlWyBCVUZGRVIgXTsKQEAgLTE1OSw1ICsxOTMsNCBAQAogICAgIH0KICAgICByZXR1cm4gInN0YXJ0aW5zdGFsbGVyLSIgKyBoYXNoICsgIi5qbmxwIjsKICAgfQotICAKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC91dGlsL0NyeXB0LmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC91dGlsL0NyeXB0LmphdmEKaW5kZXggMjY1MjQ2My4uN2U0ZTE5MyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvdXRpbC9DcnlwdC5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL3V0aWwvQ3J5cHQuamF2YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC91dGlsL09zVXRpbC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvdXRpbC9Pc1V0aWwuamF2YQppbmRleCA2ZTQ1NWZmLi5lNDg3ZDM4IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC91dGlsL09zVXRpbC5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL3V0aWwvT3NVdGlsLmphdmEKQEAgLTEsMyArMSwxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLnV0aWw7CiAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKQEAgLTgsMjUgKzE4LDIxIEBACiAgKi8KIHB1YmxpYyBjbGFzcyBPc1V0aWwgewogCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFBMQVRGT1JNUwotICAgID0gbmV3IFN0cmluZ1tdIHsgIndpbjMyIiwgImxpbnV4IiwKLQkJCSJtYWNvc3giIH07CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFBMQVRGT1JNUyA9IG5ldyBTdHJpbmdbXXsKKyAgICAid2luMzIiLCAibGludXgiLCAibWFjb3N4IgorICB9OwogICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IEVYVFMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLQogICBzdGF0aWMgewogICAgIEVYVFMucHV0KCAid2luMzIiLCAiemlwIiApOwogICAgIEVYVFMucHV0KCAibGludXgiLCAidGFyLmd6IiApOwotICAgIEVYVFMucHV0KCJtYWNvc3giLCAidGFyLmd6Iik7CisgICAgRVhUUy5wdXQoICJtYWNvc3giLCAidGFyLmd6IiApOwogICB9Ci0gIAorCiAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UGxhdGZvcm1zKCkgewogICAgIHJldHVybiBQTEFURk9STVM7CiAgIH0KLSAgCisKICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXJjaGl2ZUV4dGVuc2lvbiggZmluYWwgU3RyaW5nIG9zICkgewogICAgIHJldHVybiBFWFRTLmdldCggb3MgKTsKICAgfQotICAKLSAgCi0gIAogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvdXRpbC9TdHJlc3NUZXN0LmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC91dGlsL1N0cmVzc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDBhYTc2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvdXRpbC9TdHJlc3NUZXN0LmphdmEKQEAgLTAsMCArMSwxMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC51dGlsOworCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK3B1YmxpYyBjbGFzcyBTdHJlc3NUZXN0IGltcGxlbWVudHMgUnVubmFibGUgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSFJFQURTID0gMTA7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FUyA9IDEwOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1BSRUFEID0gMTA7CisgIHN0YXRpYyBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworCisgIC8qKgorICAgKiBAcGFyYW0gYXJncworICAgKi8KKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKSB7CisgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBUSFJFQURTOyBpKysgKSB7CisgICAgICBUaHJlYWQgdGhyZWFkID0gbmV3IFRocmVhZCggbmV3IFN0cmVzc1Rlc3QoKSApOworICAgICAgdGhyZWFkLnNldE5hbWUoIFN0cmluZy5mb3JtYXQoICJTdHJlc3NlciAlM2QiLCBpICkgKTsKKyAgICAgIHRocmVhZC5zdGFydCgpOworICAgIH0KKyAgfQorICBzdGF0aWMgZG91YmxlIHRvdGFsID0gMDsKKyAgc3RhdGljIGRvdWJsZSBjb3VudCA9IDA7CisKKyAgcHJpdmF0ZSBzdGF0aWMgc3luY2hyb25pemVkIGRvdWJsZSBnZXRBdmVyYWdlKCBkb3VibGUgZGF0YXBvaW50ICkgeworICAgIHRvdGFsICs9IGRhdGFwb2ludDsKKyAgICBjb3VudCsrOworICAgIHJldHVybiB0b3RhbCAvIGNvdW50OworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBydW5UZXN0KCkgeworICAgIHRyeSB7CisgICAgICBpbnQgdmFsdWUgPSBNYXRoLmFicyggKCBpbnQgKSggU1BSRUFEICogcmFuZG9tLm5leHRHYXVzc2lhbigpICkgKTsKKyAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0ubmFub1RpbWUoKTsKKyAgICAgIC8vIENvbnN0cnVjdCBkYXRhCisgICAgICBTdHJpbmcgZGF0YSA9IFVSTEVuY29kZXIuZW5jb2RlKCAib3MiLCAiVVRGLTgiICkKKyAgICAgICAgICAgICAgICAgICAgKyAiPSIKKyAgICAgICAgICAgICAgICAgICAgKyBVUkxFbmNvZGVyLmVuY29kZSggImxpbnV4IiwgIlVURi04IiApOworICAgICAgZGF0YSArPSAiJiIKKyAgICAgICAgICAgICAgKyBVUkxFbmNvZGVyLmVuY29kZSggImVjbGlwc2UucDIucm9vdHMiLCAiVVRGLTgiICkKKyAgICAgICAgICAgICAgKyAiPSIKKyAgICAgICAgICAgICAgKyBVUkxFbmNvZGVyLmVuY29kZSggInZhbHVlMiIsICJVVEYtOCIgKTsKKyAgICAgIGRhdGEgKz0gIiYiCisgICAgICAgICAgICAgICsgVVJMRW5jb2Rlci5lbmNvZGUoICJlY2xpcHNlLnAyLm1ldGFkYXRhIiwgIlVURi04IiApCisgICAgICAgICAgICAgICsgIj0iCisgICAgICAgICAgICAgICsgVVJMRW5jb2Rlci5lbmNvZGUoICJ2YWx1ZTIiLCAiVVRGLTgiICk7CisgICAgICBkYXRhICs9ICImIgorICAgICAgICAgICAgICArIFVSTEVuY29kZXIuZW5jb2RlKCAiZWNsaXBzZS5wMi5hcnRpZmFjdHMiLCAiVVRGLTgiICkKKyAgICAgICAgICAgICAgKyAiPSIKKyAgICAgICAgICAgICAgKyBVUkxFbmNvZGVyLmVuY29kZSggInZhbHVlIiArIHZhbHVlLCAiVVRGLTgiICk7CisgICAgICAvLyBTZW5kIGRhdGEKKyAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCAiaHR0cDovL2xvY2FsaG9zdDo4ODg4L2luc3RhbGxlci8iICk7CisgICAgICBVUkxDb25uZWN0aW9uIGNvbm4gPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgIGNvbm4uc2V0RG9PdXRwdXQoIHRydWUgKTsKKyAgICAgIE91dHB1dFN0cmVhbVdyaXRlciB3ciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoIGNvbm4uZ2V0T3V0cHV0U3RyZWFtKCkgKTsKKyAgICAgIHdyLndyaXRlKCBkYXRhICk7CisgICAgICB3ci5mbHVzaCgpOworICAgICAgLy8gR2V0IHRoZSByZXNwb25zZQorICAgICAgaWYoIHRydWUgKSB7CisgICAgICAgIC8vIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIm91dC50YXIuZ3oiKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsgMTAyNCBdOworICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKyAgICAgICAgaW50IGJ5dGVzOworICAgICAgICB3aGlsZSggLTEgIT0gKCBieXRlcyA9IGlzLnJlYWQoIGJ1ZmZlciApICkgKSB7CisgICAgICAgICAgLy8gZm9zLndyaXRlKGJ1ZmZlciwgMCwgYnl0ZXMpOworICAgICAgICB9CisgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgIC8vIGZvcy5jbG9zZSgpOworICAgICAgfQorICAgICAgd3IuY2xvc2UoKTsKKyAgICAgIGxvbmcgZW5kID0gU3lzdGVtLm5hbm9UaW1lKCk7CisgICAgICBkb3VibGUgYXZlcmFnZSA9IGdldEF2ZXJhZ2UoICggZW5kIC0gc3RhcnQgKSAvIDEwMDAgKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggU3RyaW5nLmZvcm1hdCggIiVzIFRpbWUgWyU1ZF0gJTIwZCAoYXZnOiAlMTIuM2YpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGVuZCAtIHN0YXJ0ICkgLyAxMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmVyYWdlICkgKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgcnVuKCkgeworICAgIGZvciggaW50IGkgPSAwOyBpIDwgVElNRVM7IGkrKyApIHsKKyAgICAgIHJ1blRlc3QoKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL3V0aWwvU3RyaW5nVXRpbC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvdXRpbC9TdHJpbmdVdGlsLmphdmEKaW5kZXggYzQzOTllOS4uMGNhYTk4YiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvdXRpbC9TdHJpbmdVdGlsLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvdXRpbC9TdHJpbmdVdGlsLmphdmEKQEAgLTEsMTQgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC51dGlsOwogCiBpbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CiAKLQogLyoqCiAgKiBAYXV0aG9yIEpvcmRpIEJvZWhtZSBMb3BleiA8amJvZWhtZUBpbm5vb3ByYWN0LmNvbT4KICAqLwogcHVibGljIGNsYXNzIFN0cmluZ1V0aWwgewogCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvQ29tbWFMaXN0KCBmaW5hbCBTdHJpbmdbXSBpdGVtcywgZmluYWwgYm9vbGVhbiBzcGFjZSApIHsKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9Db21tYUxpc3QoIGZpbmFsIFN0cmluZ1tdIGl0ZW1zLCBmaW5hbCBib29sZWFuIHNwYWNlICkKKyAgewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICBmb3IoIGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrICkgewogICAgICAgaWYoIGkgPiAwICkgewpAQCAtMzMsNSArNDMsNCBAQAogICB7CiAgICAgcmV0dXJuIENyeXB0Lm1kNWVuY3J5cHQoIHZhbHVlICk7CiAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyLy5jbGFzc3BhdGggYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXIvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDFhNDMwCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxjbGFzc3BhdGg+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4NCis8L2NsYXNzcGF0aD4NCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXIvLmdpdGlnbm9yZSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNTUyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXIvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitvcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2UvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyLy5wcm9qZWN0IGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYThmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXIvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyNWEwOQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw3IEBACisjRnJpIEF1ZyAxNSAwOTozNTowNiBDRVNUIDIwMDgNCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3INCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQ0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTkwYzc2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsOSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogS2lja3N0YXJ0ZXIgUGx1Zy1pbgorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlcgorQnVuZGxlLVZlcnNpb246IDEuMC4wCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyLkFjdGl2YXRvcgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitJbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS5sb2c0agpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyL2J1aWxkLnByb3BlcnRpZXMgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXIvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWViNmFkCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0IEBACitzb3VyY2UuLiA9IHNyYy8NCitvdXRwdXQuLiA9IGJpbi8NCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXA0KKyAgICAgICAgICAgICAgIC4NCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQva2lja3N0YXJ0ZXIvQWN0aXZhdG9yLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXIvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQva2lja3N0YXJ0ZXIvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3MTllOAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9raWNrc3RhcnRlci9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOCBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSC4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuaW50ZXJuYWwuY29yZS5CdW5kbGVGcmFnbWVudDsNCitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsNCitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7DQoraW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5GcmFtZXdvcmtFdmVudDsNCitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkZyYW1ld29ya0xpc3RlbmVyOw0KKw0KKy8qKg0KKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQ0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpDQorcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiBpbXBsZW1lbnRzIEZyYW1ld29ya0xpc3RlbmVyIHsNCisJc3RhdGljIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKEFjdGl2YXRvci5jbGFzcyk7DQorDQorCS8vIFRoZSBwbHVnLWluIElEDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyIjsNCisNCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQ0KKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOw0KKw0KKwlwcml2YXRlIEJ1bmRsZUNvbnRleHQgY29udGV4dDsNCisNCisJLyoqDQorCSAqIFRoZSBjb25zdHJ1Y3Rvcg0KKwkgKi8NCisJcHVibGljIEFjdGl2YXRvcigpIHsNCisJfQ0KKw0KKwkvKg0KKwkgKiAobm9uLUphdmFkb2MpDQorCSAqIA0KKwkgKiBAc2VlDQorCSAqIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQ0KKwkgKi8NCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOw0KKwkJY29udGV4dC5hZGRGcmFtZXdvcmtMaXN0ZW5lcih0aGlzKTsNCisJCXBsdWdpbiA9IHRoaXM7DQorCQl0aGlzLmNvbnRleHQgPSBjb250ZXh0Ow0KKwkJa2lja3N0YXJ0QnVuZGxlcygpOw0KKwl9DQorDQorCXByaXZhdGUgdm9pZCBraWNrc3RhcnRCdW5kbGVzKCkgew0KKwkJZm9yIChCdW5kbGUgYnVuZGxlIDogY29udGV4dC5nZXRCdW5kbGVzKCkpIHsNCisJCQl0cnkgew0KKwkJCQkvLyBEbyBub3Qgc3RhcnQgZnJhZ21lbnRzICYgYWxyZWFkeSBzdGFydGluZyBidW5kbGVzDQorCQkJCWlmICghKGJ1bmRsZSBpbnN0YW5jZW9mIEJ1bmRsZUZyYWdtZW50KQ0KKwkJCQkJCSYmIChidW5kbGUuZ2V0U3RhdGUoKSAhPSBCdW5kbGUuU1RBUlRJTkcpKSB7DQorCQkJCQlsb2dnZXIuaW5mbygiS2lja3N0YXJ0aW5nICINCisJCQkJCQkJKyBTdHJpbmcuZm9ybWF0KCIlLTQ1cyIsIGJ1bmRsZS5nZXRTeW1ib2xpY05hbWUoKSkgKyAiICAiDQorCQkJCQkJCSsgYnVuZGxlLmdldEhlYWRlcnMoKS5nZXQoIkJ1bmRsZS1WZXJzaW9uIikpOw0KKwkJCQkJYnVuZGxlLnN0YXJ0KCk7DQorCQkJCX0NCisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCX0NCisJCX0NCisJCWxvZ2dlci5pbmZvKCJLaWNrc3RhcnQgY29tcGxldGVkIik7DQorCX0NCisNCisJLyoNCisJICogKG5vbi1KYXZhZG9jKQ0KKwkgKiANCisJICogQHNlZQ0KKwkgKiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlwbHVnaW4gPSBudWxsOw0KKwkJc3VwZXIuc3RvcChjb250ZXh0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlDQorCSAqIA0KKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UNCisJICovDQorCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIGZyYW1ld29ya0V2ZW50KEZyYW1ld29ya0V2ZW50IGV2ZW50KSB7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggODc1NzdjNi4uYzM5Y2IzNCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC03LDggKzcsMTMgQEAKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUubG9nNGosCiAgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbCwKKyBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmNvcmUuaGVscGVycywKKyBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLAorIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeSwKKyBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuaW8sCisgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5wZXJzaXN0ZW5jZSwKICBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmNvcmUsCiAgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5tZXRhZGF0YSwKICBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnksCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL01ldGFkYXRhIGdlbmVyYXRvci5sYXVuY2ggYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL01ldGFkYXRhIGdlbmVyYXRvci5sYXVuY2gKaW5kZXggYTUwMzI2OS4uNzhiOTdjMyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9NZXRhZGF0YSBnZW5lcmF0b3IubGF1bmNoCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3IvTWV0YWRhdGEgZ2VuZXJhdG9yLmxhdW5jaApAQCAtMSwyNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQotPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UucGRlLnVpLkVxdWlub3hMYXVuY2hlciI+DQotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJhcHBlbmQuYXJncyIgdmFsdWU9InRydWUiLz4NCi08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImF1dG9tYXRpY0FkZCIgdmFsdWU9InRydWUiLz4NCi08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImF1dG9tYXRpY1ZhbGlkYXRlIiB2YWx1ZT0iZmFsc2UiLz4NCi08c3RyaW5nQXR0cmlidXRlIGtleT0iYm9vdHN0cmFwIiB2YWx1ZT0iIi8+DQotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9ImNoZWNrZWQiIHZhbHVlPSJbTk9ORV0iLz4NCi08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImNsZWFyQ29uZmlnIiB2YWx1ZT0iZmFsc2UiLz4NCi08c3RyaW5nQXR0cmlidXRlIGtleT0iY29uZmlnTG9jYXRpb24iIHZhbHVlPSIke3dvcmtzcGFjZV9sb2N9Ly5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5wZGUuY29yZS9NZXRhZGF0YSBnZW5lcmF0b3IiLz4NCi08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImRlZmF1bHRfYXV0b19zdGFydCIgdmFsdWU9InRydWUiLz4NCi08aW50QXR0cmlidXRlIGtleT0iZGVmYXVsdF9zdGFydF9sZXZlbCIgdmFsdWU9IjQiLz4NCi08c3RyaW5nQXR0cmlidXRlIGtleT0iZGVzZWxlY3RlZF93b3Jrc3BhY2VfcGx1Z2lucyIgdmFsdWU9Im9yZy5lY2xpcHNlLmVwcC53aXphcmQucDIuZ2VuZXJhdG9yLG9yZy5lY2xpcHNlLnJhcC51aS5mb3JtcyxvcmcubW9ydGJheS5qZXR0eSxvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuamV0dHksb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmciLz4NCi08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImluY2x1ZGVPcHRpb25hbCIgdmFsdWU9InRydWUiLz4NCi08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9HUkFNX0FSR1VNRU5UUyIgdmFsdWU9Ii1vcyAke3RhcmdldC5vc30gLXdzICR7dGFyZ2V0LndzfSAtYXJjaCAke3RhcmdldC5hcmNofSAtbmwgJHt0YXJnZXQubmx9IC1jb25zb2xlIC1jb25zb2xlTG9nIi8+DQotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuU09VUkNFX1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5wZGUudWkud29ya2JlbmNoQ2xhc3NwYXRoUHJvdmlkZXIiLz4NCi08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5WTV9BUkdVTUVOVFMiIHZhbHVlPSItRGVjbGlwc2UuaWdub3JlQXBwPXRydWUgLURvc2dpLm5vU2h1dGRvd249dHJ1ZSIvPg0KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHt3b3Jrc3BhY2VfbG9jOm9yZy5lY2xpcHNlLmVwcC53aXphcmR9Ii8+DQotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9InBkZS52ZXJzaW9uIiB2YWx1ZT0iMy4zIi8+DQotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJzaG93X3NlbGVjdGVkX29ubHkiIHZhbHVlPSJmYWxzZSIvPg0KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJ0YXJnZXRfYnVuZGxlcyIgdmFsdWU9ImphdmF4LnhtbEBkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS54ZXJjZXNAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb21wYXRpYmlsaXR5LmF1dGhAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3guc2VjdXJpdHkud2luMzIueDg2QGRlZmF1bHQ6ZmFsc2Usb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmFydGlmYWN0LnJlcG9zaXRvcnlAZGVmYXVsdDpkZWZhdWx0LG9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVjZkBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZWNmLnNzbEBkZWZhdWx0OmZhbHNlLG9yZy5lY2xpcHNlLnVpQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wcmVmZXJlbmNlc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9uc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmphcnByb2Nlc3NvckBkZWZhdWx0OmRlZmF1bHQsb3JnLmp1bml0QGRlZmF1bHQ6ZGVmYXVsdCxjb20uaWJtLmljdUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbXBhdGliaWxpdHkucmVnaXN0cnlAZGVmYXVsdDpmYWxzZSxvcmcuZWNsaXBzZS5vc2dpQDosb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuaGVscEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5hcHBAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUuam9ic0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5mcmFtZXdvcmthZG1pbi5lcXVpbm94QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUuY29udGVudHR5cGVAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuYXBhY2hlLmFudEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5jb3JlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnNlY3VyaXR5QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lY2YuaWRlbnRpdHlAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODZAZGVmYXVsdDpmYWxzZSxvcmcuZWNsaXBzZS5lcXVpbm94LnJlZ2lzdHJ5QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5hbnQuY29yZUBkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS54bWwucmVzb2x2ZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnN3dEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuamZhY2UuZGF0YWJpbmRpbmdAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmpmYWNlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lY2YuZmlsZXRyYW5zZmVyQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LmZyYW1ld29ya2FkbWluQGRlZmF1bHQ6ZGVmYXVsdCIvPg0KLTxib29sZWFuQXR0cmlidXRlIGtleT0idHJhY2luZyIgdmFsdWU9ImZhbHNlIi8+DQotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJ1c2VEZWZhdWx0Q29uZmlnQXJlYSIgdmFsdWU9InRydWUiLz4NCi08c3RyaW5nQXR0cmlidXRlIGtleT0id29ya3NwYWNlX2J1bmRsZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS5yYXAucnd0LnEwN0BkZWZhdWx0OmZhbHNlLG9yZy5lY2xpcHNlLmVxdWlub3gucDIubWV0YWRhdGEuZ2VuZXJhdG9yQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5yYXAudWkud29ya2JlbmNoQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWxAZGVmYXVsdDpkZWZhdWx0LGphdmF4LnNlcnZsZXRAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnJhcC5yd3RAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UucmFwLmpmYWNlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvckBkZWZhdWx0OnRydWUsb3JnLmpkb21AZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5zZXJ2bGV0QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhLnJlcG9zaXRvcnlAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVwcC53aXphcmRAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3gucDIubWV0YWRhdGFAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnJhcC51aUBkZWZhdWx0OmRlZmF1bHQiLz4NCi08L2xhdW5jaENvbmZpZ3VyYXRpb24+DQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5wZGUudWkuRXF1aW5veExhdW5jaGVyIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iYXBwZW5kLmFyZ3MiIHZhbHVlPSJ0cnVlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImF1dG9tYXRpY0FkZCIgdmFsdWU9InRydWUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iYXV0b21hdGljVmFsaWRhdGUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9ImJvb3RzdHJhcCIgdmFsdWU9IiIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9ImNoZWNrZWQiIHZhbHVlPSJbTk9ORV0iLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iY2xlYXJDb25maWciIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9ImNvbmZpZ0xvY2F0aW9uIiB2YWx1ZT0iJHt3b3Jrc3BhY2VfbG9jfS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucGRlLmNvcmUvTWV0YWRhdGEgZ2VuZXJhdG9yIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImRlZmF1bHRfYXV0b19zdGFydCIgdmFsdWU9InRydWUiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJkZWZhdWx0X3N0YXJ0X2xldmVsIiB2YWx1ZT0iNCIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9ImRlc2VsZWN0ZWRfd29ya3NwYWNlX3BsdWdpbnMiIHZhbHVlPSJvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZyxvcmcuZWNsaXBzZS5yYXAudWkuZm9ybXMsb3JnLm1vcnRiYXkuamV0dHksb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLmpldHR5Ii8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImluY2x1ZGVPcHRpb25hbCIgdmFsdWU9InRydWUiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBST0dSQU1fQVJHVU1FTlRTIiB2YWx1ZT0iLW9zICR7dGFyZ2V0Lm9zfSAtd3MgJHt0YXJnZXQud3N9IC1hcmNoICR7dGFyZ2V0LmFyY2h9IC1ubCAke3RhcmdldC5ubH0gLWNvbnNvbGUgLWNvbnNvbGVMb2ciLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlNPVVJDRV9QQVRIX1BST1ZJREVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UucGRlLnVpLndvcmtiZW5jaENsYXNzcGF0aFByb3ZpZGVyIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5WTV9BUkdVTUVOVFMiIHZhbHVlPSItRGVjbGlwc2UuaWdub3JlQXBwPXRydWUgLURvc2dpLm5vU2h1dGRvd249dHJ1ZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3dvcmtzcGFjZV9sb2M6b3JnLmVjbGlwc2UuZXBwLndpemFyZH0iLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJwZGUudmVyc2lvbiIgdmFsdWU9IjMuMyIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJzaG93X3NlbGVjdGVkX29ubHkiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9InRhcmdldF9idW5kbGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWNmLmZpbGV0cmFuc2ZlckBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5jb3JlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29tcGF0aWJpbGl0eS5hdXRoQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hAZGVmYXVsdDpkZWZhdWx0LG9yZy5hcGFjaGUueGVyY2VzKjIuOS4wLnYyMDA4MDUyNzA0MDBAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmhlbHBAZGVmYXVsdDpkZWZhdWx0LGNvbS5pYm0uaWN1QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LmZyYW1ld29ya2FkbWluLmVxdWlub3hAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmpmYWNlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LmFwcEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5jb250ZW50dHlwZUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZWNmQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuYXBhY2hlLnhtbC5yZXNvbHZlcioxLjIuMC52MjAwODA2MDMwMzEyQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lY2Yuc3NsQGRlZmF1bHQ6ZmFsc2Usb3JnLmVjbGlwc2UuY29yZS5qb2JzQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuYXBhY2hlLnhtbC5yZXNvbHZlcioxLjEuMC4yMDA4MDUwOC0xNDMwUFJEQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lY2YuaWRlbnRpdHlAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmFudC5jb3JlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuYXBhY2hlLmFudEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbXBhdGliaWxpdHkucmVnaXN0cnlAZGVmYXVsdDpmYWxzZSxvcmcuZWNsaXBzZS5lcXVpbm94LmZyYW1ld29ya2FkbWluQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5vc2dpQDosb3JnLmVjbGlwc2UuZXF1aW5veC5wcmVmZXJlbmNlc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5yZWdpc3RyeUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UudWlAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnNAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3guc2VjdXJpdHlAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnN3dEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5qYXJwcm9jZXNzb3JAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZXNAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUucnVudGltZUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemVyQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuYXBhY2hlLnhlcmNlcyoyLjguMC4yMDA4MDUwOC0xNDMwUFJEQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5hcnRpZmFjdC5yZXBvc2l0b3J5QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5qZmFjZS5kYXRhYmluZGluZ0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb25AZGVmYXVsdDpkZWZhdWx0LGphdmF4LnhtbEBkZWZhdWx0OmRlZmF1bHQsb3JnLmp1bml0QGRlZmF1bHQ6ZGVmYXVsdCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJ0cmFjaW5nIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0idXNlRGVmYXVsdENvbmZpZ0FyZWEiIHZhbHVlPSJ0cnVlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0id29ya3NwYWNlX2J1bmRsZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnlAZGVmYXVsdDpkZWZhdWx0LHAydGVzdEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlckBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5yYXAucnd0LnEwN0BkZWZhdWx0OmZhbHNlLG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZGlyZWN0b3IuYXBwQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuc2VydmxldEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UucmFwLmpmYWNlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcHAud2l6YXJkQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5yYXAudWlAZGVmYXVsdDpkZWZhdWx0LG9yZy5hcGFjaGUubG9nNGpAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnJhcC51aS53b3JrYmVuY2hAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yQGRlZmF1bHQ6dHJ1ZSxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmRpcmVjdG9yQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXJAZGVmYXVsdDpkZWZhdWx0LGphdmF4LnNlcnZsZXRAZGVmYXVsdDpkZWZhdWx0LG9yZy5qZG9tQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UucmFwLnJ3dEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pbnN0YWxsZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5zZXJ2bGV0YnJpZGdlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnRvb2xzQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnVwZGF0ZWNoZWNrZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3gucDIuY29yZUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbEBkZWZhdWx0OmRlZmF1bHQiLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3IvYnVpbGQucHJvcGVydGllcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCBlYzNjNTg2Li5iNWE5NGQ1IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xLDUgKzEsNiBAQAotc291cmNlLi4gPSBzcmMvDQotb3V0cHV0Li4gPSBiaW4vDQotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwNCi0gICAgICAgICAgICAgICAuDQotDQorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwKKwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9wbHVnaW4ueG1sIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNDg4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBpZD0iaWQxIgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hcHBsaWNhdGlvbnMiPgorICAgICAgPGFwcGxpY2F0aW9uCisgICAgICAgICAgICBjYXJkaW5hbGl0eT0ic2luZ2xldG9uLWdsb2JhbCIKKyAgICAgICAgICAgIHRocmVhZD0ibWFpbiIKKyAgICAgICAgICAgIHZpc2libGU9InRydWUiPgorICAgICAgICAgPHJ1bgorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yLkFwcGxpY2F0aW9uIj4KKyAgICAgICAgIDwvcnVuPgorICAgICAgPC9hcHBsaWNhdGlvbj4KKyAgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3Ivc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbWV0YWRhdGEvZ2VuZXJhdG9yL0FjdGl2YXRvci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tZXRhZGF0YS9nZW5lcmF0b3IvQWN0aXZhdG9yLmphdmEKaW5kZXggYzI3NWJiNi4uOThlZjIxMCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tZXRhZGF0YS9nZW5lcmF0b3IvQWN0aXZhdG9yLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tZXRhZGF0YS9nZW5lcmF0b3IvQWN0aXZhdG9yLmphdmEKQEAgLTEsNjkgKzEsNTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4IElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJILg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yOw0KLQ0KLWltcG9ydCBqYXZhLmlvLkZpbGU7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47DQotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ow0KLQ0KLS8qKg0KLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQ0KLSAqLw0KLXB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBQbHVnaW4gew0KLQ0KLQkvLyBUaGUgcGx1Zy1pbiBJRA0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3IiOw0KLQ0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlDQotCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47DQotCQ0KLQkvKioNCi0JICogVGhlIGNvbnN0cnVjdG9yDQotCSAqLw0KLQlwdWJsaWMgQWN0aXZhdG9yKCkgew0KLQl9DQotDQotCS8qDQotCSAqIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkNCi0JICovDQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlzdXBlci5zdGFydChjb250ZXh0KTsNCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiPT09IEdlbmVyYXRpbmcgbWV0YWRhdGEiKTsNCi0JCXBsdWdpbiA9IHRoaXM7DQotCQlGaWxlIGluID0gbmV3IEZpbGUoIi4uL29yZy5lY2xpcHNlLmVwcC53aXphcmQvZGF0YS9tb2RlbC9JVXMiKTsNCi0JCUZpbGUgb3V0ID0gbmV3IEZpbGUoIi4uL29yZy5lY2xpcHNlLmVwcC53aXphcmQvZGF0YS9tZXRhZGF0YSIpOw0KLQkJTWV0YWRhdGFHZW5lcmF0b3IgbWV0YWRhdGFHZW5lcmF0b3IgPSBuZXcgTWV0YWRhdGFHZW5lcmF0b3IoaW4sIG91dCk7DQotCQltZXRhZGF0YUdlbmVyYXRvci5ydW4oKTsNCi0JCQ0KLQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT0gZG9uZSIpOw0KLQl9DQotDQotCS8qDQotCSAqIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQotCSAqLw0KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlwbHVnaW4gPSBudWxsOw0KLQkJc3VwZXIuc3RvcChjb250ZXh0KTsNCi0JfQ0KLQ0KLQkvKioNCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlDQotCSAqDQotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQ0KLQkgKi8NCi0JcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsNCi0JCXJldHVybiBwbHVnaW47DQotCX0NCi0NCi19DQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBQbHVnaW4geworCisgIC8vIFRoZSBwbHVnLWluIElECisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvciI7CisgIC8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKyAgcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworICAvKioKKyAgICogVGhlIGNvbnN0cnVjdG9yCisgICAqLworICBwdWJsaWMgQWN0aXZhdG9yKCkgeworICB9CisKKyAgLyoKKyAgICogKG5vbi1KYXZhZG9jKQorICAgKiBAc2VlCisgICAqIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorICAgKi8KKyAgcHVibGljIHZvaWQgc3RhcnQoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnN0YXJ0KCBjb250ZXh0ICk7CisgICAgcGx1Z2luID0gdGhpczsKKyAgfQorCisgIC8qCisgICAqIChub24tSmF2YWRvYykKKyAgICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisgICAqLworICBwdWJsaWMgdm9pZCBzdG9wKCBCdW5kbGVDb250ZXh0IGNvbnRleHQgKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwbHVnaW4gPSBudWxsOworICAgIHN1cGVyLnN0b3AoIGNvbnRleHQgKTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKyAgICogCisgICAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKyAgICByZXR1cm4gcGx1Z2luOworICB9Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21ldGFkYXRhL2dlbmVyYXRvci9BcHBsaWNhdGlvbi5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tZXRhZGF0YS9nZW5lcmF0b3IvQXBwbGljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2U2MmQxCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tZXRhZGF0YS9nZW5lcmF0b3IvQXBwbGljYXRpb24uamF2YQpAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbkNvbnRleHQ7CisKK3B1YmxpYyBjbGFzcyBBcHBsaWNhdGlvbiBpbXBsZW1lbnRzIElBcHBsaWNhdGlvbiB7CisKKyAgcHVibGljIE9iamVjdCBzdGFydCggSUFwcGxpY2F0aW9uQ29udGV4dCBjb250ZXh0ICkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZSBpbiA9IG5ldyBGaWxlKCAiZGF0YS9tb2RlbC9JVXMiICk7CisgICAgRmlsZSBvdXQgPSBuZXcgRmlsZSggImRhdGEvbWV0YWRhdGEiICk7CisgICAgTWV0YWRhdGFHZW5lcmF0b3IgbWV0YWRhdGFHZW5lcmF0b3IgPSBuZXcgTWV0YWRhdGFHZW5lcmF0b3IoIGluLCBvdXQgKTsKKyAgICBtZXRhZGF0YUdlbmVyYXRvci5ydW4oKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHN0b3AoKSB7CisgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICB9Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21ldGFkYXRhL2dlbmVyYXRvci9NZXRhZGF0YUdlbmVyYXRvci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tZXRhZGF0YS9nZW5lcmF0b3IvTWV0YWRhdGFHZW5lcmF0b3IuamF2YQppbmRleCA2ZjhkZmM0Li4xOTc2NDQzIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21ldGFkYXRhL2dlbmVyYXRvci9NZXRhZGF0YUdlbmVyYXRvci5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3Ivc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbWV0YWRhdGEvZ2VuZXJhdG9yL01ldGFkYXRhR2VuZXJhdG9yLmphdmEKQEAgLTEsNjUgKzEsNzIgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4IElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJILg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yOw0KLQ0KLWltcG9ydCBqYXZhLmlvLkZpbGU7DQotaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7DQotaW1wb3J0IGphdmEubmV0LlVSTDsNCi1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLlAyTWV0YWRhdGFSZWFkZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIubWV0YWRhdGEuSUluc3RhbGxhYmxlVW5pdDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5LklNZXRhZGF0YVJlcG9zaXRvcnk7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwuc3BpLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuU2ltcGxlTWV0YWRhdGFSZXBvc2l0b3J5RmFjdG9yeTsNCi0NCi1AU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKQ0KLXB1YmxpYyBjbGFzcyBNZXRhZGF0YUdlbmVyYXRvciB7DQotDQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJVV9FWFRFTlNJT04gPSAiLml1IjsNCi0JcHJpdmF0ZSBGaWxlIG91dDsNCi0JcHJpdmF0ZSBGaWxlIGluOw0KLQlwcml2YXRlIFN0cmluZyByZXBvc2l0b3J5VGl0bGUgPSAiRVBQIFdpemFyZCBNZXRhZGF0YSByZXBvc2l0b3J5IjsNCi0NCi0JcHVibGljIE1ldGFkYXRhR2VuZXJhdG9yKEZpbGUgaW4sIEZpbGUgb3V0KSB7DQotCQl0aGlzLmluID0gaW47DQotCQl0aGlzLm91dCA9IG91dDsNCi0JfQ0KLQ0KLQlwdWJsaWMgdm9pZCBydW4oKSB7DQotCQl0cnkgew0KLQkJCUZpbGUgY29udGVudEZpbGUgPSBvdXQ7DQotCQkJRmlsZVtdIGZpbGVzID0gaW4ubGlzdEZpbGVzKG5ldyBGaWxlbmFtZUZpbHRlcigpIHsNCi0NCi0JCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZGlyLCBTdHJpbmcgbmFtZSkgew0KLQkJCQkJcmV0dXJuIG5hbWUuZW5kc1dpdGgoSVVfRVhURU5TSU9OKTsNCi0JCQkJfQ0KLQ0KLQkJCX0pOw0KLQ0KLQkJCUlNZXRhZGF0YVJlcG9zaXRvcnkgbWV0YWRhdGFSZXBvc2l0b3J5ID0gbmV3IFNpbXBsZU1ldGFkYXRhUmVwb3NpdG9yeUZhY3RvcnkoKQ0KLQkJCQkJLmNyZWF0ZShjb250ZW50RmlsZS50b1VSSSgpLnRvVVJMKCksDQotCQkJCQkJCXJlcG9zaXRvcnlUaXRsZSwgIiIsDQotCQkJCQkJCW5ldyBQcm9wZXJ0aWVzKCkpOw0KLQkJCWZvciAoRmlsZSBmaWxlIDogZmlsZXMpIHsNCi0JCQkJVVJMIHVybCA9IGZpbGUudG9VUkkoKS50b1VSTCgpOw0KLQkJCQlJSW5zdGFsbGFibGVVbml0IHVuaXQgPSBQMk1ldGFkYXRhUmVhZGVyLnJlYWRJbnN0YWxsYWJsZVVuaXQoDQotCQkJCQkJdXJsLCB1cmwub3BlblN0cmVhbSgpLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsNCi0JCQkJbWV0YWRhdGFSZXBvc2l0b3J5DQotCQkJCQkJLmFkZEluc3RhbGxhYmxlVW5pdHMobmV3IElJbnN0YWxsYWJsZVVuaXRbXSB7IHVuaXQgfSk7DQotCQkJfQ0KLQkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsNCi0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrDQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCX0NCi0JfQ0KLQ0KLX0NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5tZXRhZGF0YS5JSW5zdGFsbGFibGVVbml0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5JTWV0YWRhdGFSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwuc3BpLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuU2ltcGxlTWV0YWRhdGFSZXBvc2l0b3J5RmFjdG9yeTsKKworQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKK3B1YmxpYyBjbGFzcyBNZXRhZGF0YUdlbmVyYXRvciB7CisKKyAgc3RhdGljIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCBNZXRhZGF0YUdlbmVyYXRvci5jbGFzcyApOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVVfRVhURU5TSU9OID0gIi5pdSI7CisgIHByaXZhdGUgRmlsZSBvdXQ7CisgIHByaXZhdGUgRmlsZSBpbjsKKyAgcHJpdmF0ZSBTdHJpbmcgcmVwb3NpdG9yeVRpdGxlID0gIkVQUCBXaXphcmQgTWV0YWRhdGEgcmVwb3NpdG9yeSI7CisKKyAgcHVibGljIE1ldGFkYXRhR2VuZXJhdG9yKCBGaWxlIGluLCBGaWxlIG91dCApIHsKKyAgICB0aGlzLmluID0gaW47CisgICAgdGhpcy5vdXQgPSBvdXQ7CisgIH0KKworICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgdHJ5IHsKKyAgICAgIEZpbGUgY29udGVudEZpbGUgPSBvdXQ7CisgICAgICBsb2dnZXIuaW5mbyggIkZpbmRpbmcgSVVzIGluIGRpcmVjdG9yeSA6ICIgKyBpbi5nZXRBYnNvbHV0ZVBhdGgoKSApOworICAgICAgRmlsZVtdIGZpbGVzID0gaW4ubGlzdEZpbGVzKCBuZXcgRmlsZW5hbWVGaWx0ZXIoKSB7CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KCBGaWxlIGRpciwgU3RyaW5nIG5hbWUgKSB7CisgICAgICAgICAgcmV0dXJuIG5hbWUuZW5kc1dpdGgoIElVX0VYVEVOU0lPTiApOworICAgICAgICB9CisgICAgICB9ICk7CisgICAgICBsb2dnZXIuaW5mbyggIkNyZWF0aW5nIG1ldGFkYXRhIHJlcG9zaXRvcnk6ICIKKyAgICAgICAgICAgICAgICAgICArIGNvbnRlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpICk7CisgICAgICBJTWV0YWRhdGFSZXBvc2l0b3J5IG1ldGFkYXRhUmVwb3NpdG9yeSA9IG5ldyBTaW1wbGVNZXRhZGF0YVJlcG9zaXRvcnlGYWN0b3J5KCkuY3JlYXRlKCBjb250ZW50RmlsZS50b1VSSSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1VSTCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeVRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUHJvcGVydGllcygpICk7CisgICAgICBmb3IoIEZpbGUgZmlsZSA6IGZpbGVzICkgeworICAgICAgICBsb2dnZXIuaW5mbyggIlJlYWRpbmcgaXUgZnJvbSBmaWxlOiAiICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSApOworICAgICAgICBVUkwgdXJsID0gZmlsZS50b1VSSSgpLnRvVVJMKCk7CisgICAgICAgIElJbnN0YWxsYWJsZVVuaXQgdW5pdCA9IFAyTWV0YWRhdGFSZWFkZXIucmVhZEluc3RhbGxhYmxlVW5pdCggdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5vcGVuU3RyZWFtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSApOworICAgICAgICBtZXRhZGF0YVJlcG9zaXRvcnkuYWRkSW5zdGFsbGFibGVVbml0cyggbmV3IElJbnN0YWxsYWJsZVVuaXRbXXsKKyAgICAgICAgICB1bml0CisgICAgICAgIH0gKTsKKyAgICAgICAgbG9nZ2VyLmluZm8oICJBZGRlZCBJVSBcIiIgKyB1bml0LmdldElkKCkgKyAiXCIgdG8gcmVwb3NpdG9yeSIgKTsKKyAgICAgIH0KKyAgICAgIGxvZ2dlci5pbmZvKCAiRmluaXNoZWQgZ2VuZXJhdGluZyByZXBvc2l0b3J5IiApOworICAgIH0gY2F0Y2goIFRocm93YWJsZSBlICkgeworICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3Ivc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbWV0YWRhdGEvZ2VuZXJhdG9yL1AyTWV0YWRhdGFDb25zdGFudHMuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3Ivc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbWV0YWRhdGEvZ2VuZXJhdG9yL1AyTWV0YWRhdGFDb25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWEyZjhhCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tZXRhZGF0YS9nZW5lcmF0b3IvUDJNZXRhZGF0YUNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgICBIZW5yaWsgTGluZGJlcmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3I7CisKKy8qKgorICogQGF1dGhvciBIZW5yaWsgTGluZGJlcmcKKyAqIAorICovCitwdWJsaWMgaW50ZXJmYWNlIFAyTWV0YWRhdGFDb25zdGFudHMKK3sKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVVfTUVUQURBVEFfRk9STUFUID0gIkluc3RhbGxhYmxlVW5pdCI7IC8vJE5PTi1OTFMtMSQKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TVEFMTEFCTEVfRUxFTUVOVCA9ICJpbnN0YWxsYWJsZSI7IC8vJE5PTi1OTFMtMSQKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TVEFMTEFCTEVfVkVSU0lPTiA9ICIxLjAuMCI7IC8vJE5PTi1OTFMtMSQKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVVfTUVUQURBVEFfRk9STUFUX1ZFUlNJT04gPSAiMS4wLjAiOyAvLyROT04tTkxTLTEkCisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSVVfVkVSU0lPTl9TVFJJTkcgPSAiMS4wLjAiOyAvLyROT04tTkxTLTEkCisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSVVfTElDRU5TRV9URU1QTEFURSA9ICJUaGUgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgbWF0ZXJpYWxzIGNvbnRhaW5lZCBoZXJlaW4gaGF2ZSBiZWVuIgorICAgICAgICAgICAgKyAiIGxpY2Vuc2VkIHVuZGVyIHRoZSBOQU1FT0ZMSUNFTlNFIC0gVkVSU0lPTiBieSB0aGUgY29weXJpZ2h0IGhvbGRlcihzKSIKKyAgICAgICAgICAgICsgIiBsaXN0ZWQgaW4gdGhlIENvcHlyaWdodCBzZWN0aW9uLiI7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSVVfQ09QWVJJR0hUX1RFTVBMQVRFID0gIkFubm90YXRpb24gdG8gY29weXJpZ2h0IFVSTCwgb3IgdGhlIGFjdHVhbCBjb3B5cmlnaHQgdGV4dC4iOworCit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21ldGFkYXRhL2dlbmVyYXRvci9QMk1ldGFkYXRhUmVhZGVyLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21ldGFkYXRhL2dlbmVyYXRvci9QMk1ldGFkYXRhUmVhZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3NDM2MwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3Ivc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbWV0YWRhdGEvZ2VuZXJhdG9yL1AyTWV0YWRhdGFSZWFkZXIuamF2YQpAQCAtMCwwICsxLDIzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgIEhlbnJpayBMaW5kYmVyZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvcjsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5jb3JlLmhlbHBlcnMuTG9nSGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEuSW5zdGFsbGFibGVVbml0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5pby5NZXRhZGF0YVBhcnNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnBlcnNpc3RlbmNlLlhNTFdyaXRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmNvcmUuUHJvdmlzaW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIubWV0YWRhdGEuTWV0YWRhdGFGYWN0b3J5Lkluc3RhbGxhYmxlVW5pdERlc2NyaXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5yZXNvbHZlci5WZXJzaW9uUmFuZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuVmVyc2lvbjsKK2ltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOworaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKKworLyoqCisgKiBQMiBNZXRhZGF0YSBSZWFkZXIgdXNlZCB0byBjZW50cmFsaXplIHJlYWRpbmcgb2YgUDIgbWV0YWRhdGEgYXMgQVBJIGlzIGxpa2VseSB0byBjaGFuZ2UuCisgKiBUaGUgSW5zdGFsbGFibGVVbml0IHJlYWRlciByZXVzZXMgdGhlIE1ldGFkYXRhUmVwb3NpdG9yeSBoYW5kbGVyIGZvciBJbnN0YWxsYWJsZVVuaXQgYnV0IGluIGFuIAorICogdWdseSB3YXkuCisgKiAKKyAqIFRPRE86IFRoZSBmb3JtYXQsIHBhcnNlciBhbmQgd3JpdGVyIHNob3VsZCBlaXRoZXIgYmUgcHJpdmF0ZSwgYW5kIHVzZSBpdHMgb3duIGltcGwgb2YKKyAqIHRoZSBJSW5zdGFsbGFibGVVbml0IGludGVyZmFjZSBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBlZGl0aW5nLCBvciB0aGUgTWV0YWRhdGEgQVBJIHNob3VsZAorICogYWxsb3cgY3JlYXRpb24gb2YgbXV0YWJsZSBpbnN0YW5jZXMuCisgKiAKKyAqIEBhdXRob3IgSGVucmlrIExpbmRiZXJnCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpCitwdWJsaWMgY2xhc3MgUDJNZXRhZGF0YVJlYWRlciBpbXBsZW1lbnRzIFAyTWV0YWRhdGFDb25zdGFudHMKK3sKKworICAgIC8qKgorICAgICAqIFJlYWRzIG1ldGFkYXRhIGZyb20gdGhlIGdpdmVuIHN0cmVhbSwgYW5kIHJldHVybnMgdGhlIGNvbnRhaW5lZCBhcnJheQorICAgICAqIG9mIGFic3RyYWN0IG1ldGFkYXRhIHJlcG9zaXRvcmllcy4KKyAgICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBidWZmZXJpbmcsIGFuZCBjbG9zZXMgdGhlIHN0cmVhbSB3aGVuIGZpbmlzaGVkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSW5zdGFsbGFibGVVbml0IHJlYWRJbnN0YWxsYWJsZVVuaXQoVVJMIGxvY2F0aW9uLCBJbnB1dFN0cmVhbSBpbnB1dCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgUHJvdmlzaW9uRXhjZXB0aW9uIHsKKyAgICAgICAgQnVmZmVyZWRJbnB1dFN0cmVhbSBidWZmZXJlZElucHV0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYnVmZmVyZWRJbnB1dCA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGlucHV0KTsKKworICAgICAgICAgICAgICAgIFBhcnNlciByZXBvc2l0b3J5UGFyc2VyID0gbmV3IFBhcnNlcihBY3RpdmF0b3IuZ2V0Q29udGV4dCgpLCBBY3RpdmF0b3IuSUQpOworICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlQYXJzZXIucGFyc2UoaW5wdXQsIG1vbml0b3IpOworICAgICAgICAgICAgICAgIElTdGF0dXMgcmVzdWx0ID0gcmVwb3NpdG9yeVBhcnNlci5nZXRTdGF0dXMoKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5nZXRTZXZlcml0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSVN0YXR1cy5DQU5DRUwgOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSVN0YXR1cy5FUlJPUiA6CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUHJvdmlzaW9uRXhjZXB0aW9uKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSVN0YXR1cy5XQVJOSU5HIDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJU3RhdHVzLklORk8gOgorICAgICAgICAgICAgICAgICAgICAgICAgTG9nSGVscGVyLmxvZyhyZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVwb3NpdG9yeVBhcnNlci5nZXRJbnN0YWxsYWJsZVVuaXQoKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAvLyBSRU1PVkUgRU5USVJFIENBVENICisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyZWRJbnB1dCAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICBidWZmZXJlZElucHV0LmNsb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworICAgICAgICAgICAgU3RyaW5nIG1zZyA9IE5MUy5iaW5kKE1lc3NhZ2VzLmlvX2ZhaWxlZFJlYWQsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBQcm92aXNpb25FeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBBY3RpdmF0b3IuSUQsIFByb3Zpc2lvbkV4Y2VwdGlvbi5SRVBPU0lUT1JZX0ZBSUxFRF9SRUFELCBtc2csIGlvZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnRlcmZhY2UgWE1MQ29uc3RhbnRzIGV4dGVuZHMgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5LmlvLlhNTENvbnN0YW50cyB7CisKKyAgICAgICAgLy8gQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFhNTCBmb3IgYSBNZXRhZGF0YVJlcG9zaXRvcnkKKworICAgICAgICAvLyBBIGZvcm1hdCB2ZXJzaW9uIG51bWJlciBmb3IgbWV0YWRhdGEgcmVwb3NpdG9yeSBYTUwuCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9WRVJTSU9OID0gIjEuMC4wIjsgLy8kTk9OLU5MUy0xJAorICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb24gQ1VSUkVOVF9WRVJTSU9OID0gbmV3IFZlcnNpb24oWE1MX1ZFUlNJT04pOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25SYW5nZSBYTUxfVE9MRVJBTkNFID0gbmV3IFZlcnNpb25SYW5nZShDVVJSRU5UX1ZFUlNJT04sIHRydWUsIG5ldyBWZXJzaW9uKDIsIDAsIDApLCBmYWxzZSk7CisKKyAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBwcm9jZXNzaW5nIEluc3RydWN0aW9ucworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQSV9JVV9UQVJHRVQgPSAiSW5zdGFsbGFibGVVbml0IjsgLy8kTk9OLU5MUy0xJAorCisgICAgICAgIC8vIENvbnN0YW50cyBmb3IgbWV0YWRhdGEgSVUgZWxlbWVudHMKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVVfRUxFTUVOVCA9ICJpbnN0YWxsYWJsZSI7IC8vJE5PTi1OTFMtMSQKKworICAgIH0KKworICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorICAgIHByb3RlY3RlZCBYTUxXcml0ZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uW10gY3JlYXRlUEkoQ2xhc3MgaXVDbGFzcykgeworICAgICAgICAvL1RPRE8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24sIGJ1dCBjdXJyZW50bHkgb2xkIGNsaWVudHMgcmVseSBvbiB0aGlzLiBTZWUgYnVnIDIxMDQ1MC4KKyAgICAgICAgcmV0dXJuIG5ldyBYTUxXcml0ZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uW10ge1hNTFdyaXRlci5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ubWFrZUNsYXNzVmVyc2lvbkluc3RydWN0aW9uKFhNTENvbnN0YW50cy5QSV9JVV9UQVJHRVQsIGl1Q2xhc3MsIFhNTENvbnN0YW50cy5DVVJSRU5UX1ZFUlNJT04pfTsKKyAgICB9CisKKworICAgIC8qCisgICAgICogIFBhcnNlciBmb3IgdGhlIGNvbnRlbnRzIG9mIGEgaW5zdGFsbGFibGUgdW5pdCwKKyAgICAgKiAgYXMgd3JpdHRlbiBieSB0aGUgV3JpdGVyIGNsYXNzLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFBhcnNlciBleHRlbmRzIE1ldGFkYXRhUGFyc2VyIGltcGxlbWVudHMgWE1MQ29uc3RhbnRzIHsKKworICAgICAgICBwcml2YXRlIEluc3RhbGxhYmxlVW5pdCB0aGVJbnN0YWxsYWJsZVVuaXQgPSBudWxsOworCisgICAgICAgIHB1YmxpYyBQYXJzZXIoQnVuZGxlQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgYnVuZGxlSWQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGJ1bmRsZUlkKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBwYXJzZShJbnB1dFN0cmVhbSBzdHJlYW0sIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbnVsbDsKKyAgICAgICAgICAgIHNldFByb2dyZXNzTW9uaXRvcihtb25pdG9yKTsKKyAgICAgICAgICAgIG1vbml0b3IuYmVnaW5UYXNrKCJMb2FkaW5nIGluc3RhbGxhYmxlIHVuaXQiLCBJUHJvZ3Jlc3NNb25pdG9yLlVOS05PV04pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBjdXJyZW50bHkgbm90IGNhY2hpbmcgdGhlIHBhcnNlciBzaW5jZSB3ZSBtYWtlIG5vIGFzc3VtcHRpb25zCisgICAgICAgICAgICAgICAgLy8gICAgICAgb3IgcmVzdHJpY3Rpb25zIG9uIGNvbmN1cnJlbnQgcGFyc2luZworICAgICAgICAgICAgICAgIGdldFBhcnNlcigpOworICAgICAgICAgICAgICAgIElVSGFuZGxlciBpdUhhbmRsZXIgPSBuZXcgSVVIYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgeG1sUmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKG5ldyBJVURvY0hhbmRsZXIoSVVfRUxFTUVOVCwgaXVIYW5kbGVyKSk7CisgICAgICAgICAgICAgICAgeG1sUmVhZGVyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShzdHJlYW0pKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZFhNTCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoZUluc3RhbGxhYmxlVW5pdCA9IGl1SGFuZGxlci5nZXRJbnN0YWxsYWJsZVVuaXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChTQVhFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBtb25pdG9yLmRvbmUoKTsKKyAgICAgICAgICAgICAgICBzdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJbnN0YWxsYWJsZVVuaXQgZ2V0SW5zdGFsbGFibGVVbml0KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoZUluc3RhbGxhYmxlVW5pdDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgT2JqZWN0IGdldFJvb3RPYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0SW5zdGFsbGFibGVVbml0KCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIElVRG9jSGFuZGxlciBleHRlbmRzIERvY0hhbmRsZXIgeworCisgICAgICAgICAgICBwdWJsaWMgSVVEb2NIYW5kbGVyKFN0cmluZyByb290TmFtZSwgUm9vdEhhbmRsZXIgcm9vdEhhbmRsZXIpIHsKKyAgICAgICAgICAgICAgICBzdXBlcihyb290TmFtZSwgcm9vdEhhbmRsZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmcgdGFyZ2V0LCBTdHJpbmcgZGF0YSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgaWYgKFBJX0lVX1RBUkdFVC5lcXVhbHModGFyZ2V0KSkgeworICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIHJlcG9zaXRvcnlWZXJzaW9uID0gZXh0cmFjdFBJVmVyc2lvbih0YXJnZXQsIGRhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAoIVAyTWV0YWRhdGFSZWFkZXIuWE1MQ29uc3RhbnRzLlhNTF9UT0xFUkFOQ0UuaXNJbmNsdWRlZChyZXBvc2l0b3J5VmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTQVhFeGNlcHRpb24oTkxTLmJpbmQoTWVzc2FnZXMuaW9fSW5jb21wYXRpYmxlVmVyc2lvbiwgcmVwb3NpdG9yeVZlcnNpb24sIFAyTWV0YWRhdGFSZWFkZXIuWE1MQ29uc3RhbnRzLlhNTF9UT0xFUkFOQ0UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBJVUhhbmRsZXIgZXh0ZW5kcyBSb290SGFuZGxlciB7CisgICAgICAgICAgICBwcml2YXRlIEluc3RhbGxhYmxlVW5pdEhhbmRsZXIgdW5pdEhhbmRsZXIgPSBudWxsOworICAgICAgICAgICAgQXJyYXlMaXN0PEluc3RhbGxhYmxlVW5pdERlc2NyaXB0aW9uPiB1bml0cyA9IG51bGw7CisKKyAgICAgICAgICAgIHByaXZhdGUgSW5zdGFsbGFibGVVbml0IGluc3RhbGxhYmxlVW5pdCA9IG51bGw7CisKKyAgICAgICAgICAgIHB1YmxpYyBJVUhhbmRsZXIoKSB7CisgICAgICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIEluc3RhbGxhYmxlVW5pdCBnZXRJbnN0YWxsYWJsZVVuaXQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFsbGFibGVVbml0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJvb3RBdHRyaWJ1dGVzKEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICAgICAgICAgICAgICAgIC8vIHJvb3QgZWxlbWVudCAqaXMqIHRoZSBJbnN0YWxsYWJsZSBVbml0IC0gdGhlIGRlZmF1bHQgcGFyc2VyIGlzIGZyb20KKyAgICAgICAgICAgICAgICAvLyB0aGUgbWV0YSBkYXRhIHJlcG9zaXRvcnkgcGFyc2VyLCBhbmQgaXQgZXhwZWN0cyB0byBwYXJzZSBhIG51bWJlciBvZgorICAgICAgICAgICAgICAgIC8vIHVuaXRzLCByZXR1cm5pbmcgSW5zdGFsbGFibGVVbml0RGVzY3JpcHRpb24gaW5zdGFuY2VzIGluIGEgTGlzdC4KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIG5hbWUsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICAgICAgICAgICAgICAgIGNoZWNrQ2FuY2VsKCk7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKElOU1RBTExBQkxFX1VOSVRfRUxFTUVOVCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy51bml0cyA9IG5ldyBBcnJheUxpc3Q8SW5zdGFsbGFibGVVbml0RGVzY3JpcHRpb24+KDEpOworICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXRIYW5kbGVyID0gbmV3IEluc3RhbGxhYmxlVW5pdEhhbmRsZXIodGhpcywgYXR0cmlidXRlcywgdW5pdHMpOyAKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgZmluaXNoZWQoKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRYTUwoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGFuIFVnbHkgY2FzdCBiZWNhdXNlIHRoZSB1bml0IGhhbmRsZXIgcmV0dXJucyBhbiBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gdGhlIG11dGFibGUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbGxhYmxlVW5pdCA9IChJbnN0YWxsYWJsZVVuaXQpIHRoaXMudW5pdEhhbmRsZXIuZ2V0SW5zdGFsbGFibGVVbml0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworICAgICAgICAgICAgcmV0dXJuIE1lc3NhZ2VzLmlvX3BhcnNlRXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIC8vIFRPRE86CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3Ivc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbWV0YWRhdGEvZ2VuZXJhdG9yL1BhY2thZ2UySVUuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3Ivc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbWV0YWRhdGEvZ2VuZXJhdG9yL1BhY2thZ2UySVUuamF2YQppbmRleCAzOTc4MzVhLi42NjhjNGE0IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubWV0YWRhdGEuZ2VuZXJhdG9yL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21ldGFkYXRhL2dlbmVyYXRvci9QYWNrYWdlMklVLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1ldGFkYXRhLmdlbmVyYXRvci9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tZXRhZGF0YS9nZW5lcmF0b3IvUGFja2FnZTJJVS5qYXZhCkBAIC0xLDEwNCArMSw5MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkguDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3I7DQotDQotaW1wb3J0IGphdmEuaW8uRmlsZTsNCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247DQotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsNCi1pbXBvcnQgamF2YS5pby5GaWxlbmFtZUZpbHRlcjsNCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7DQotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7DQotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOw0KLQ0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7DQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0Ow0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsNCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247DQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247DQotDQotcHVibGljIGNsYXNzIFBhY2thZ2UySVUgew0KLQ0KLQkvKioNCi0JICogQ29udmVydHMgRVBQIHBhY2thZ2UgZGVmaW5pdGlvbg0KLQkgKiAoaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRVBQL0NvbmZpZ3VyYXRpb25fRmlsZV9Gb3JtYXQpIHRvIElVIGZvcm1hdA0KLQkgKiANCi0JICogQHBhcmFtIGFyZ3MNCi0JICovDQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCi0NCi0JCUZpbGUgcGFja2FnZURpcmVjdG9yeSA9IG5ldyBGaWxlKA0KLQkJCQkiLi4vb3JnLmVjbGlwc2UuZXBwLndpemFyZC9kYXRhL21vZGVsL3BhY2thZ2VzIik7DQotCQlGaWxlIHhzbHRGaWxlID0gbmV3IEZpbGUoDQotCQkJCSIuLi9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL2RhdGEvbW9kZWwvcGFja2FnZXMvcGFja2FnZTJpdS54c2x0Iik7DQotCQlGaWxlW10gZmlsZXMgPSBwYWNrYWdlRGlyZWN0b3J5Lmxpc3RGaWxlcyhuZXcgRmlsZW5hbWVGaWx0ZXIoKSB7DQotDQotCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZGlyLCBTdHJpbmcgbmFtZSkgew0KLQkJCQlyZXR1cm4gbmFtZS5lbmRzV2l0aCgiLnhtbCIpOw0KLQkJCX0NCi0NCi0JCX0pOw0KLQkJU291cmNlIHhzbHRTb3VyY2UgPSBuZXcgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtU291cmNlKA0KLQkJCQl4c2x0RmlsZSk7DQotDQotCQkvLyBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgVHJhbnNmb3JtZXJGYWN0b3J5DQotCQlqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeSB0cmFuc0ZhY3QgPSBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeQ0KLQkJCQkubmV3SW5zdGFuY2UoKTsNCi0JCXRyYW5zRmFjdC5zZXRBdHRyaWJ1dGUoImluZGVudC1udW1iZXIiLCA0KTsNCi0JCXRyeSB7DQotCQkJamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lciB0cmFucyA9IHRyYW5zRmFjdC5uZXdUcmFuc2Zvcm1lcih4c2x0U291cmNlKTsNCi0JCQl0cmFucy5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOw0KLQkJCVBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiZWNsaXBzZV8oW2Etel0rKV8zNDAueG1sIik7DQotCQkJZm9yIChGaWxlIGZpbGUgOiBmaWxlcykgew0KLQkJCQlNYXRjaGVyIG1hdGNoZXIgPSBwYXR0ZXJuLm1hdGNoZXIoZmlsZS5nZXROYW1lKCkpOw0KLQkJCQlTdHJpbmcgcGtnID0gbnVsbDsNCi0JCQkJaWYobWF0Y2hlci5maW5kKCkpDQotCQkJCXsNCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihtYXRjaGVyLmdyb3VwKDEpKTsNCi0JCQkJCXBrZyA9IG1hdGNoZXIuZ3JvdXAoMSk7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQotCQkJCQljb250aW51ZTsNCi0JCQkJfQ0KLQkJCQl0cnkgew0KLQkJCQkJRmlsZSB4bWxGaWxlID0gZmlsZTsNCi0JCQkJCUZpbGUgb3V0RmlsZSA9IG5ldyBGaWxlKHBhY2thZ2VEaXJlY3RvcnkscGtnICsiLml1Iik7DQotDQotCQkJCQlTb3VyY2UgeG1sU291cmNlID0gbmV3IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVNvdXJjZSgNCi0JCQkJCQkJeG1sRmlsZSk7DQotCQkJCQlSZXN1bHQgcmVzdWx0ID0gbmV3IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdCgNCi0JCQkJCQkJbmV3IE91dHB1dFN0cmVhbVdyaXRlcigNCi0JCQkJCQkJCQluZXcgRmlsZU91dHB1dFN0cmVhbShvdXRGaWxlKSwgIlVURi04IikpOw0KLQkJCQkJdHJhbnMuc2V0UGFyYW1ldGVyKCJlcHAubmFtZSIsICJlcHAuIitwa2cpOw0KLQkJCQkJdHJhbnMuc2V0UGFyYW1ldGVyKCJlcHAudmVyc2lvbiIsICIzLjQuMC5xdWFsaWZpZXIiKTsNCi0JCQkJCXRyYW5zLnRyYW5zZm9ybSh4bWxTb3VyY2UsIHJlc3VsdCk7DQotCQkJCX0gY2F0Y2ggKFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7DQotCQkJCQkvLyBUT0RPIGggYmxvY2sNCi0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQotCQkJCX0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsNCi0JCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWRBdXRvLWdlbmVyYXRlZCBjYXRjIGNhdGNoIGJsb2NrDQotCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KLQkJCQl9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsNCi0JCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sNCi0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQotCQkJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7DQotCQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrDQotCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KLQkJCQl9DQotCQkJfQ0KLQkJfSBjYXRjaCAoVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUxKSB7DQotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaw0KLQkJCWUxLnByaW50U3RhY2tUcmFjZSgpOw0KLQkJfQ0KLQ0KLQl9DQotfQ0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3I7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOworaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOworCitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0OworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBQYWNrYWdlMklVIHsKKworICAvKioKKyAgICogQ29udmVydHMgRVBQIHBhY2thZ2UgZGVmaW5pdGlvbgorICAgKiAoaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRVBQL0NvbmZpZ3VyYXRpb25fRmlsZV9Gb3JtYXQpIHRvIElVIGZvcm1hdAorICAgKiAKKyAgICogQHBhcmFtIGFyZ3MKKyAgICovCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkgeworICAgIEZpbGUgcGFja2FnZURpcmVjdG9yeSA9IG5ldyBGaWxlKCAiLi4vb3JnLmVjbGlwc2UuZXBwLndpemFyZC9kYXRhL21vZGVsL3BhY2thZ2VzIiApOworICAgIEZpbGUgeHNsdEZpbGUgPSBuZXcgRmlsZSggIi4uL29yZy5lY2xpcHNlLmVwcC53aXphcmQvZGF0YS9tb2RlbC9wYWNrYWdlcy9wYWNrYWdlMml1LnhzbHQiICk7CisgICAgRmlsZVtdIGZpbGVzID0gcGFja2FnZURpcmVjdG9yeS5saXN0RmlsZXMoIG5ldyBGaWxlbmFtZUZpbHRlcigpIHsKKworICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KCBGaWxlIGRpciwgU3RyaW5nIG5hbWUgKSB7CisgICAgICAgIHJldHVybiBuYW1lLmVuZHNXaXRoKCAiLnhtbCIgKTsKKyAgICAgIH0KKyAgICB9ICk7CisgICAgU291cmNlIHhzbHRTb3VyY2UgPSBuZXcgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtU291cmNlKCB4c2x0RmlsZSApOworICAgIC8vIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBUcmFuc2Zvcm1lckZhY3RvcnkKKyAgICBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeSB0cmFuc0ZhY3QgPSBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgIHRyYW5zRmFjdC5zZXRBdHRyaWJ1dGUoICJpbmRlbnQtbnVtYmVyIiwgNCApOworICAgIHRyeSB7CisgICAgICBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyIHRyYW5zID0gdHJhbnNGYWN0Lm5ld1RyYW5zZm9ybWVyKCB4c2x0U291cmNlICk7CisgICAgICB0cmFucy5zZXRPdXRwdXRQcm9wZXJ0eSggT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiICk7CisgICAgICBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoICJlY2xpcHNlXyhbYS16XSspXzM0MC54bWwiICk7CisgICAgICBmb3IoIEZpbGUgZmlsZSA6IGZpbGVzICkgeworICAgICAgICBNYXRjaGVyIG1hdGNoZXIgPSBwYXR0ZXJuLm1hdGNoZXIoIGZpbGUuZ2V0TmFtZSgpICk7CisgICAgICAgIFN0cmluZyBwa2cgPSBudWxsOworICAgICAgICBpZiggbWF0Y2hlci5maW5kKCkgKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBtYXRjaGVyLmdyb3VwKCAxICkgKTsKKyAgICAgICAgICBwa2cgPSBtYXRjaGVyLmdyb3VwKCAxICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBGaWxlIHhtbEZpbGUgPSBmaWxlOworICAgICAgICAgIEZpbGUgb3V0RmlsZSA9IG5ldyBGaWxlKCBwYWNrYWdlRGlyZWN0b3J5LCBwa2cgKyAiLml1IiApOworICAgICAgICAgIFNvdXJjZSB4bWxTb3VyY2UgPSBuZXcgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtU291cmNlKCB4bWxGaWxlICk7CisgICAgICAgICAgUmVzdWx0IHJlc3VsdCA9IG5ldyBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQoIG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoIG5ldyBGaWxlT3V0cHV0U3RyZWFtKCBvdXRGaWxlICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVVEYtOCIgKSApOworICAgICAgICAgIHRyYW5zLnNldFBhcmFtZXRlciggImVwcC5uYW1lIiwgImVwcC4iICsgcGtnICk7CisgICAgICAgICAgdHJhbnMuc2V0UGFyYW1ldGVyKCAiZXBwLnZlcnNpb24iLCAiMy40LjAucXVhbGlmaWVyIiApOworICAgICAgICAgIHRyYW5zLnRyYW5zZm9ybSggeG1sU291cmNlLCByZXN1bHQgKTsKKyAgICAgICAgfSBjYXRjaCggVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUgKSB7CisgICAgICAgICAgLy8gVE9ETyBoIGJsb2NrCisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfSBjYXRjaCggVHJhbnNmb3JtZXJFeGNlcHRpb24gZSApIHsKKyAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkQXV0by1nZW5lcmF0ZWQgY2F0YyBjYXRjaCBibG9jaworICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0gY2F0Y2goIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSApIHsKKyAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfSBjYXRjaCggRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUgKSB7CisgICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGNhdGNoKCBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZTEgKSB7CisgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisgICAgICBlMS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAzNTRmMTk2Li4wZjJiOThlIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC00LDEzICs0LDE0IEBACiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsCiBCdW5kbGUtVmVyc2lvbjogMC4wLjEucXVhbGlmaWVyCiBCdW5kbGUtQ2xhc3NQYXRoOiBqZG9tLmphciwgZXBwbW9kZWwuamFyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0O3Jlc29sdXRpb246PW9wdGlvbmFsLAotIG9yZy5qZG9tLAorUmVxdWlyZS1CdW5kbGU6IG9yZy5qZG9tLAogIG9yZy5lY2xpcHNlLmVxdWlub3gucDIubWV0YWRhdGEucmVwb3NpdG9yeSwKLSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhCisgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YSwKKyBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IjMuOC4yIjtyZXNvbHV0aW9uOj1vcHRpb25hbAogRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTt2ZXJzaW9uPSIzLjQuMCIsCitJbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS5sb2c0aiwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7dmVyc2lvbj0iMy40LjAiLAogIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeSwKICBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmNvcmUsCiAgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5tZXRhZGF0YS5xdWVyeSwKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9FUFBNb2RlbC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL0VQUE1vZGVsLmphdmEKaW5kZXggYTUzNDI1NC4uODc2YjMxMyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL0VQUE1vZGVsLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL0VQUE1vZGVsLmphdmEKQEAgLTEyLDMwICsxMiw0MiBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLkluc3RhbGxhYmxlVW5pdDsKIGltcG9ydCBvcmcuamRvbS5KRE9NRXhjZXB0aW9uOwogCiAvKioKICAqIEBhdXRob3IgSm9yZGkgQm9laG1lIExvcGV6IDxqYm9laG1lQGlubm9vcHJhY3QuY29tPgogICovCitAU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKQogcHVibGljIGNsYXNzIEVQUE1vZGVsIHsKIAotCXB1YmxpYyBFUFBNb2RlbChTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7Ci0JCXN1cGVyKCk7Ci0JCXRoaXMuc3RydWN0dXJlID0gc3RydWN0dXJlOwotCX0KKyAgcHVibGljIEVQUE1vZGVsKCBTdHJ1Y3R1cmUgc3RydWN0dXJlICkgeworICAgIHN1cGVyKCk7CisgICAgdGhpcy5zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgIH0KKyAgcHJpdmF0ZSBTdHJ1Y3R1cmUgc3RydWN0dXJlOwogCi0JcHJpdmF0ZSBTdHJ1Y3R1cmUgc3RydWN0dXJlOworICBwdWJsaWMgU3RydWN0dXJlIGdldFN0cnVjdHVyZSgpIHsKKyAgICByZXR1cm4gc3RydWN0dXJlOworICB9CiAKLQlwdWJsaWMgU3RydWN0dXJlIGdldFN0cnVjdHVyZSgpIHsKLQkJcmV0dXJuIHN0cnVjdHVyZTsKLQl9CisgIHB1YmxpYyBMaXN0PElVUmVmPiBnZXRBbGxSZWZzKCBJVVJlZiByZWYgKSB7CisgICAgcmV0dXJuIHJlZk1hcC5nZXQoIHJlZi5nZXRJVSgpICk7CisgIH0KKyAgcHJpdmF0ZSBIYXNoTWFwPEluc3RhbGxhYmxlVW5pdCwgTGlzdDxJVVJlZj4+IHJlZk1hcCA9IG5ldyBIYXNoTWFwPEluc3RhbGxhYmxlVW5pdCwgTGlzdDxJVVJlZj4+KCk7CiAKLQlwdWJsaWMgc3RhdGljIEVQUE1vZGVsIHJlYWQoZmluYWwgVVJMIG1vZGVsTG9jYXRpb24sIGZpbmFsIFVSTCBtZXRhZGF0YVJlcG9zaXRvcnkpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24sCi0JCQlKRE9NRXhjZXB0aW9uIHsKLQkJcmV0dXJuIChuZXcgRVBQTW9kZWxEZXNlcmlhbGl6ZXIoKSkuZGVzZXJpYWxpemUobW9kZWxMb2NhdGlvbiwKLQkJCQltZXRhZGF0YVJlcG9zaXRvcnkpOwotCX0KKyAgcHVibGljIEhhc2hNYXA8SW5zdGFsbGFibGVVbml0LCBMaXN0PElVUmVmPj4gZ2V0UmVmTWFwKCkgeworICAgIHJldHVybiByZWZNYXA7CisgIH0KIAorICBwdWJsaWMgc3RhdGljIEVQUE1vZGVsIHJlYWQoIGZpbmFsIFVSTCBtb2RlbExvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFVSTCBtZXRhZGF0YVJlcG9zaXRvcnkgKQorICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgSkRPTUV4Y2VwdGlvbgorICB7CisgICAgcmV0dXJuICggbmV3IEVQUE1vZGVsRGVzZXJpYWxpemVyKCkgKS5kZXNlcmlhbGl6ZSggbW9kZWxMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YVJlcG9zaXRvcnkgKTsKKyAgfQogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL0VQUE1vZGVsRGVzZXJpYWxpemVyLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvRVBQTW9kZWxEZXNlcmlhbGl6ZXIuamF2YQppbmRleCA5ZDFkZDRlLi5kZTM4NTQ1IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvRVBQTW9kZWxEZXNlcmlhbGl6ZXIuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvRVBQTW9kZWxEZXNlcmlhbGl6ZXIuamF2YQpAQCAtMzMsMTA0ICszMywxMTMgQEAKIEBTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpCiBwdWJsaWMgY2xhc3MgRVBQTW9kZWxEZXNlcmlhbGl6ZXIgewogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19JTkZPID0gImluZm8iOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfU0NSRUVOID0gInNjcmVlbiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19HUk9VUCA9ICJncm91cCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19JVVJFRiA9ICJpdXJlZiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19SRUZJRCA9ICJyZWZpZCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19MQUJFTCA9ICJsYWJlbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19JQ09OID0gImljb24iOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfQUxJQVMgPSAiYWxpYXMiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfU1RSVUNUVVJFID0gInN0cnVjdHVyZSI7Ci0JcHJpdmF0ZSBJTWV0YWRhdGFSZXBvc2l0b3J5IHJlcG9zaXRvcnk7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfSU5GTyA9ICJpbmZvIjsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19TQ1JFRU4gPSAic2NyZWVuIjsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19HUk9VUCA9ICJncm91cCI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfSVVSRUYgPSAiaXVyZWYiOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1JFRklEID0gInJlZmlkIjsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19MQUJFTCA9ICJsYWJlbCI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfSUNPTiA9ICJpY29uIjsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19BTElBUyA9ICJhbGlhcyI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfU1RSVUNUVVJFID0gInN0cnVjdHVyZSI7CisgIHByaXZhdGUgSU1ldGFkYXRhUmVwb3NpdG9yeSByZXBvc2l0b3J5OwogCi0JcHVibGljIEVQUE1vZGVsIGRlc2VyaWFsaXplKGZpbmFsIFVSTCBtb2RlbFVybCwgZmluYWwgVVJMIG1ldGFkYXRhVVJMKQotCQkJdGhyb3dzIEpET01FeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShtb2RlbFVybC5vcGVuU3RyZWFtKCkpOwotCQlTQVhCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU0FYQnVpbGRlcigpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IGJ1aWxkZXIuYnVpbGQoaW5wdXQpOwotCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5nZXRSb290RWxlbWVudCgpOwotCQlFUFBNb2RlbCBtb2RlbCA9IHJlYWRNb2RlbChyb290KTsKLQkJTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlciByZXBvc2l0b3J5TWFuYWdlciA9IG5ldyBNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQlyZXBvc2l0b3J5ID0gcmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkobWV0YWRhdGFVUkwsCi0JCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcmVzb2x2ZVJlZmVyZW5jZXMobW9kZWwpOwotCQl9IGNhdGNoIChQcm92aXNpb25FeGNlcHRpb24gZSkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQorICBwdWJsaWMgRVBQTW9kZWwgZGVzZXJpYWxpemUoIGZpbmFsIFVSTCBtb2RlbFVybCwgZmluYWwgVVJMIG1ldGFkYXRhVVJMICkKKyAgICB0aHJvd3MgSkRPTUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KKyAgeworICAgIElucHV0U3RyZWFtIGlucHV0ID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG1vZGVsVXJsLm9wZW5TdHJlYW0oKSApOworICAgIFNBWEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBTQVhCdWlsZGVyKCk7CisgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBidWlsZGVyLmJ1aWxkKCBpbnB1dCApOworICAgIEVsZW1lbnQgcm9vdCA9IGRvY3VtZW50LmdldFJvb3RFbGVtZW50KCk7CisgICAgRVBQTW9kZWwgbW9kZWwgPSByZWFkTW9kZWwoIHJvb3QgKTsKKyAgICBNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyIHJlcG9zaXRvcnlNYW5hZ2VyID0gbmV3IE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIoKTsKKyAgICB0cnkgeworICAgICAgcmVwb3NpdG9yeSA9IHJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KCBtZXRhZGF0YVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSApOworICAgICAgcmVzb2x2ZVJlZmVyZW5jZXMoIG1vZGVsICk7CisgICAgfSBjYXRjaCggUHJvdmlzaW9uRXhjZXB0aW9uIGUgKSB7CisgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICByZXR1cm4gbW9kZWw7CisgIH0KIAotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgSW5zdGFsbGFibGVVbml0IGZpbmRJVShTdHJpbmcgaWQpIHsKLQkJQ29sbGVjdG9yIGNvbGxlY3RvciA9IG5ldyBDb2xsZWN0b3IoKTsKLQkJcmVwb3NpdG9yeS5xdWVyeShuZXcgSW5zdGFsbGFibGVVbml0UXVlcnkoaWQpLCBjb2xsZWN0b3IsCi0JCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCUNvbGxlY3Rpb248T2JqZWN0PiByZXN1bHRzID0gY29sbGVjdG9yLnRvQ29sbGVjdGlvbigpOwotCQlpZiAocmVzdWx0cy5zaXplKCkgIT0gMSkgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHJlc3VsdHMgZm9yIElVICIKLQkJCQkJKyBpZCArICIoIiArIHJlc3VsdHMuc2l6ZSgpICsgIikiKTsKLQkJfQotCQlyZXR1cm4gKEluc3RhbGxhYmxlVW5pdCkgcmVzdWx0cy5pdGVyYXRvcigpLm5leHQoKTsKLQl9CisgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorICBwcml2YXRlIEluc3RhbGxhYmxlVW5pdCBmaW5kSVUoIFN0cmluZyBpZCApIHsKKyAgICBDb2xsZWN0b3IgY29sbGVjdG9yID0gbmV3IENvbGxlY3RvcigpOworICAgIHJlcG9zaXRvcnkucXVlcnkoIG5ldyBJbnN0YWxsYWJsZVVuaXRRdWVyeSggaWQgKSwKKyAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSApOworICAgIENvbGxlY3Rpb248T2JqZWN0PiByZXN1bHRzID0gY29sbGVjdG9yLnRvQ29sbGVjdGlvbigpOworICAgIGlmKCByZXN1bHRzLnNpemUoKSAhPSAxICkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJVbmV4cGVjdGVkIG51bWJlciBvZiByZXN1bHRzIGZvciBJVSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIigiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByZXN1bHRzLnNpemUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIikiICk7CisgICAgfQorICAgIHJldHVybiAoIEluc3RhbGxhYmxlVW5pdCApcmVzdWx0cy5pdGVyYXRvcigpLm5leHQoKTsKKyAgfQogCi0JcHJpdmF0ZSB2b2lkIHJlc29sdmVSZWZlcmVuY2VzKEVQUE1vZGVsIG1vZGVsKSB7Ci0JCWZvciAoU2NyZWVuIHNjcmVlbiA6IG1vZGVsLmdldFN0cnVjdHVyZSgpLmdldFNjcmVlbnMoKSkgewotCQkJZm9yIChHcm91cCBncm91cCA6IHNjcmVlbi5nZXRHcm91cHMoKSkgewotCQkJCWZvciAoSVVSZWYgaXVSZWYgOiBncm91cC5nZXRJVVJlZnMoKSkgewotCQkJCQlJbnN0YWxsYWJsZVVuaXQgaXUgPSBmaW5kSVUoaXVSZWYuZ2V0UmVmSWQoKSk7Ci0JCQkJCWl1UmVmLnNldElVKGl1KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9CisgIHByaXZhdGUgdm9pZCByZXNvbHZlUmVmZXJlbmNlcyggRVBQTW9kZWwgbW9kZWwgKSB7CisgICAgZm9yKCBTY3JlZW4gc2NyZWVuIDogbW9kZWwuZ2V0U3RydWN0dXJlKCkuZ2V0U2NyZWVucygpICkgeworICAgICAgZm9yKCBHcm91cCBncm91cCA6IHNjcmVlbi5nZXRHcm91cHMoKSApIHsKKyAgICAgICAgZm9yKCBJVVJlZiBpdVJlZiA6IGdyb3VwLmdldElVUmVmcygpICkgeworICAgICAgICAgIEluc3RhbGxhYmxlVW5pdCBpdSA9IGZpbmRJVSggaXVSZWYuZ2V0UmVmSWQoKSApOworICAgICAgICAgIGl1UmVmLnNldElVKCBpdSApOworICAgICAgICAgIExpc3Q8SVVSZWY+IHJlZkxpc3QgPSBtb2RlbC5nZXRSZWZNYXAoKS5nZXQoIGl1ICk7CisgICAgICAgICAgaWYoIHJlZkxpc3QgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJlZkxpc3QgPSBuZXcgQXJyYXlMaXN0PElVUmVmPigpOworICAgICAgICAgICAgbW9kZWwuZ2V0UmVmTWFwKCkucHV0KCBpdSwgcmVmTGlzdCApOworICAgICAgICAgIH0KKyAgICAgICAgICByZWZMaXN0LmFkZCggaXVSZWYgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQogCi0JcHJpdmF0ZSBFUFBNb2RlbCByZWFkTW9kZWwoRWxlbWVudCByb290KSB7Ci0JCUVsZW1lbnQgc3RydWN0dXJlRWxlbWVudCA9IHJvb3QuZ2V0Q2hpbGQoVEFHX1NUUlVDVFVSRSk7Ci0JCVN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSByZWFkU3RydWN0dXJlKHN0cnVjdHVyZUVsZW1lbnQpOwotCQlFUFBNb2RlbCBtb2RlbCA9IG5ldyBFUFBNb2RlbChzdHJ1Y3R1cmUpOwotCQlyZXR1cm4gbW9kZWw7Ci0JfQorICBwcml2YXRlIEVQUE1vZGVsIHJlYWRNb2RlbCggRWxlbWVudCByb290ICkgeworICAgIEVsZW1lbnQgc3RydWN0dXJlRWxlbWVudCA9IHJvb3QuZ2V0Q2hpbGQoIFRBR19TVFJVQ1RVUkUgKTsKKyAgICBTdHJ1Y3R1cmUgc3RydWN0dXJlID0gcmVhZFN0cnVjdHVyZSggc3RydWN0dXJlRWxlbWVudCApOworICAgIEVQUE1vZGVsIG1vZGVsID0gbmV3IEVQUE1vZGVsKCBzdHJ1Y3R1cmUgKTsKKyAgICByZXR1cm4gbW9kZWw7CisgIH0KIAotCXByaXZhdGUgU3RydWN0dXJlIHJlYWRTdHJ1Y3R1cmUoRWxlbWVudCBzdHJ1Y3R1cmVFbGVtZW50KSB7Ci0JCUxpc3Q8U2NyZWVuPiBzY3JlZW5MaXN0ID0gbmV3IEFycmF5TGlzdDxTY3JlZW4+KCk7Ci0JCWZvciAoT2JqZWN0IHNjcmVlbk9iamVjdCA6IHN0cnVjdHVyZUVsZW1lbnQuZ2V0Q2hpbGRyZW4oVEFHX1NDUkVFTikpIHsKLQkJCUVsZW1lbnQgc2NyZWVuRWxlbWVudCA9IChFbGVtZW50KSBzY3JlZW5PYmplY3Q7Ci0JCQlzY3JlZW5MaXN0LmFkZChyZWFkU2NyZWVuKHNjcmVlbkVsZW1lbnQpKTsKLQkJfQotCQlyZXR1cm4gbmV3IFN0cnVjdHVyZShzY3JlZW5MaXN0KTsKLQl9CisgIHByaXZhdGUgU3RydWN0dXJlIHJlYWRTdHJ1Y3R1cmUoIEVsZW1lbnQgc3RydWN0dXJlRWxlbWVudCApIHsKKyAgICBMaXN0PFNjcmVlbj4gc2NyZWVuTGlzdCA9IG5ldyBBcnJheUxpc3Q8U2NyZWVuPigpOworICAgIGZvciggT2JqZWN0IHNjcmVlbk9iamVjdCA6IHN0cnVjdHVyZUVsZW1lbnQuZ2V0Q2hpbGRyZW4oIFRBR19TQ1JFRU4gKSApIHsKKyAgICAgIEVsZW1lbnQgc2NyZWVuRWxlbWVudCA9ICggRWxlbWVudCApc2NyZWVuT2JqZWN0OworICAgICAgc2NyZWVuTGlzdC5hZGQoIHJlYWRTY3JlZW4oIHNjcmVlbkVsZW1lbnQgKSApOworICAgIH0KKyAgICByZXR1cm4gbmV3IFN0cnVjdHVyZSggc2NyZWVuTGlzdCApOworICB9CiAKLQlwcml2YXRlIFNjcmVlbiByZWFkU2NyZWVuKEVsZW1lbnQgc2NyZWVuRWxlbWVudCkgewotCQlMaXN0PEdyb3VwPiBncm91cExpc3QgPSBuZXcgQXJyYXlMaXN0PEdyb3VwPigpOwotCQlmb3IgKE9iamVjdCBncm91cE9iamVjdCA6IHNjcmVlbkVsZW1lbnQuZ2V0Q2hpbGRyZW4oVEFHX0dST1VQKSkgewotCQkJRWxlbWVudCBncm91cEVsZW1lbnQgPSAoRWxlbWVudCkgZ3JvdXBPYmplY3Q7Ci0JCQlncm91cExpc3QuYWRkKHJlYWRHcm91cChncm91cEVsZW1lbnQpKTsKLQkJfQotCQlTdHJpbmcgc2NyZWVuTGFiZWwgPSBzY3JlZW5FbGVtZW50LmdldEF0dHJpYnV0ZVZhbHVlKFRBR19MQUJFTCk7Ci0JCXJldHVybiBuZXcgU2NyZWVuKHNjcmVlbkxhYmVsLCBncm91cExpc3QpOwotCX0KKyAgcHJpdmF0ZSBTY3JlZW4gcmVhZFNjcmVlbiggRWxlbWVudCBzY3JlZW5FbGVtZW50ICkgeworICAgIExpc3Q8R3JvdXA+IGdyb3VwTGlzdCA9IG5ldyBBcnJheUxpc3Q8R3JvdXA+KCk7CisgICAgZm9yKCBPYmplY3QgZ3JvdXBPYmplY3QgOiBzY3JlZW5FbGVtZW50LmdldENoaWxkcmVuKCBUQUdfR1JPVVAgKSApIHsKKyAgICAgIEVsZW1lbnQgZ3JvdXBFbGVtZW50ID0gKCBFbGVtZW50IClncm91cE9iamVjdDsKKyAgICAgIGdyb3VwTGlzdC5hZGQoIHJlYWRHcm91cCggZ3JvdXBFbGVtZW50ICkgKTsKKyAgICB9CisgICAgU3RyaW5nIHNjcmVlbkxhYmVsID0gc2NyZWVuRWxlbWVudC5nZXRBdHRyaWJ1dGVWYWx1ZSggVEFHX0xBQkVMICk7CisgICAgcmV0dXJuIG5ldyBTY3JlZW4oIHNjcmVlbkxhYmVsLCBncm91cExpc3QgKTsKKyAgfQogCi0JcHJpdmF0ZSBHcm91cCByZWFkR3JvdXAoRWxlbWVudCBncm91cEVsZW1lbnQpIHsKLQkJTGlzdDxJVVJlZj4gaXVSZWZMaXN0ID0gbmV3IEFycmF5TGlzdDxJVVJlZj4oKTsKLQkJZm9yIChPYmplY3QgaXVSZWZPYmplY3QgOiBncm91cEVsZW1lbnQuZ2V0Q2hpbGRyZW4oVEFHX0lVUkVGKSkgewotCQkJRWxlbWVudCBpdVJlZkVsZW1lbnQgPSAoRWxlbWVudCkgaXVSZWZPYmplY3Q7Ci0JCQlpdVJlZkxpc3QuYWRkKHJlYWRJVVJlZihpdVJlZkVsZW1lbnQpKTsKLQkJfQotCQlTdHJpbmcgZ3JvdXBMYWJlbCA9IGdyb3VwRWxlbWVudC5nZXRBdHRyaWJ1dGVWYWx1ZShUQUdfTEFCRUwpOwotCQlTdHJpbmcgZ3JvdXBBbGlhcyA9IGdyb3VwRWxlbWVudC5nZXRBdHRyaWJ1dGVWYWx1ZShUQUdfQUxJQVMpOwotCQlTdHJpbmcgZ3JvdXBJY29uID0gZ3JvdXBFbGVtZW50LmdldEF0dHJpYnV0ZVZhbHVlKFRBR19JQ09OKTsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gZ3JvdXBFbGVtZW50LmdldENoaWxkVGV4dFRyaW0oVEFHX0lORk8pOwotCQlyZXR1cm4gbmV3IEdyb3VwKGdyb3VwTGFiZWwsIGdyb3VwQWxpYXMsIGdyb3VwSWNvbiwgZGVzY3JpcHRpb24sCi0JCQkJaXVSZWZMaXN0KTsKLQl9CisgIHByaXZhdGUgR3JvdXAgcmVhZEdyb3VwKCBFbGVtZW50IGdyb3VwRWxlbWVudCApIHsKKyAgICBMaXN0PElVUmVmPiBpdVJlZkxpc3QgPSBuZXcgQXJyYXlMaXN0PElVUmVmPigpOworICAgIGZvciggT2JqZWN0IGl1UmVmT2JqZWN0IDogZ3JvdXBFbGVtZW50LmdldENoaWxkcmVuKCBUQUdfSVVSRUYgKSApIHsKKyAgICAgIEVsZW1lbnQgaXVSZWZFbGVtZW50ID0gKCBFbGVtZW50IClpdVJlZk9iamVjdDsKKyAgICAgIGl1UmVmTGlzdC5hZGQoIHJlYWRJVVJlZiggaXVSZWZFbGVtZW50ICkgKTsKKyAgICB9CisgICAgU3RyaW5nIGdyb3VwTGFiZWwgPSBncm91cEVsZW1lbnQuZ2V0QXR0cmlidXRlVmFsdWUoIFRBR19MQUJFTCApOworICAgIFN0cmluZyBncm91cEFsaWFzID0gZ3JvdXBFbGVtZW50LmdldEF0dHJpYnV0ZVZhbHVlKCBUQUdfQUxJQVMgKTsKKyAgICBTdHJpbmcgZ3JvdXBJY29uID0gZ3JvdXBFbGVtZW50LmdldEF0dHJpYnV0ZVZhbHVlKCBUQUdfSUNPTiApOworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGdyb3VwRWxlbWVudC5nZXRDaGlsZFRleHRUcmltKCBUQUdfSU5GTyApOworICAgIHJldHVybiBuZXcgR3JvdXAoIGdyb3VwTGFiZWwsIGdyb3VwQWxpYXMsIGdyb3VwSWNvbiwgZGVzY3JpcHRpb24sIGl1UmVmTGlzdCApOworICB9CiAKLQlwcml2YXRlIElVUmVmIHJlYWRJVVJlZihFbGVtZW50IGl1UmVmRWxlbWVudCkgewotCQlTdHJpbmcgcmVmaWQgPSBpdVJlZkVsZW1lbnQuZ2V0QXR0cmlidXRlVmFsdWUoVEFHX1JFRklEKTsKLQkJU3RyaW5nIGFsaWFzID0gaXVSZWZFbGVtZW50LmdldEF0dHJpYnV0ZVZhbHVlKFRBR19BTElBUyk7Ci0JCXJldHVybiBuZXcgSVVSZWYocmVmaWQsIGFsaWFzKTsKLQl9Ci0KKyAgcHJpdmF0ZSBJVVJlZiByZWFkSVVSZWYoIEVsZW1lbnQgaXVSZWZFbGVtZW50ICkgeworICAgIFN0cmluZyByZWZpZCA9IGl1UmVmRWxlbWVudC5nZXRBdHRyaWJ1dGVWYWx1ZSggVEFHX1JFRklEICk7CisgICAgU3RyaW5nIGFsaWFzID0gaXVSZWZFbGVtZW50LmdldEF0dHJpYnV0ZVZhbHVlKCBUQUdfQUxJQVMgKTsKKyAgICByZXR1cm4gbmV3IElVUmVmKCByZWZpZCwgYWxpYXMgKTsKKyAgfQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9GZWF0dXJlLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvRmVhdHVyZS5qYXZhCmluZGV4IDQ0ZjlmNTEuLjE2NmNjZDYgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9GZWF0dXJlLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL0ZlYXR1cmUuamF2YQpAQCAtMTAsMzMgKzEwLDMwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsOwogCi0KIC8qKgogICogQGF1dGhvciBKb3JkaSBCb2VobWUgTG9wZXogPGpib2VobWVAaW5ub29wcmFjdC5jb20+CiAgKi8KIHB1YmxpYyBjbGFzcyBGZWF0dXJlIHsKIAotCXB1YmxpYyBGZWF0dXJlKFN0cmluZyBpZCwgU3RyaW5nIGxhYmVsLCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMubGFiZWwgPSBsYWJlbDsKLQl9CisgIHB1YmxpYyBGZWF0dXJlKCBTdHJpbmcgaWQsIFN0cmluZyBsYWJlbCwgU3RyaW5nIGRlc2NyaXB0aW9uICkgeworICAgIHN1cGVyKCk7CisgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIHRoaXMuaWQgPSBpZDsKKyAgICB0aGlzLmxhYmVsID0gbGFiZWw7CisgIH0KKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGxhYmVsOwogCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbGFiZWw7CisgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisgICAgcmV0dXJuIGlkOworICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldElkKCkgewotCQlyZXR1cm4gaWQ7Ci0JfQorICBwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkgeworICAgIHJldHVybiBsYWJlbDsKKyAgfQogCi0JcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKLQkJcmV0dXJuIGxhYmVsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKyAgICByZXR1cm4gZGVzY3JpcHRpb247CisgIH0KKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247CiB9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvRmVhdHVyZVJlZi5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL0ZlYXR1cmVSZWYuamF2YQppbmRleCBhZmU0NWZiLi42NzQxY2VhIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvRmVhdHVyZVJlZi5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9GZWF0dXJlUmVmLmphdmEKQEAgLTEwLDQ2ICsxMCw0MyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbDsKIAotCiAvKioKICAqIEBhdXRob3IgSm9yZGkgQm9laG1lIExvcGV6IDxqYm9laG1lQGlubm9vcHJhY3QuY29tPgogICovCiBwdWJsaWMgY2xhc3MgRmVhdHVyZVJlZiB7CiAKLQlwcml2YXRlIEdyb3VwIHBhcmVudDsKLQlwcml2YXRlIEZlYXR1cmUgZmVhdHVyZTsKKyAgcHJpdmF0ZSBHcm91cCBwYXJlbnQ7CisgIHByaXZhdGUgRmVhdHVyZSBmZWF0dXJlOwogCi0JcHVibGljIEZlYXR1cmVSZWYoU3RyaW5nIGlkLCBTdHJpbmcgYWxpYXMpIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy5pZCA9IGlkOwotCQl0aGlzLmFsaWFzID0gYWxpYXM7Ci0JfQorICBwdWJsaWMgRmVhdHVyZVJlZiggU3RyaW5nIGlkLCBTdHJpbmcgYWxpYXMgKSB7CisgICAgc3VwZXIoKTsKKyAgICB0aGlzLmlkID0gaWQ7CisgICAgdGhpcy5hbGlhcyA9IGFsaWFzOworICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRQYXJlbnQoR3JvdXAgcGFyZW50KSB7Ci0JCXRoaXMucGFyZW50ID0gcGFyZW50OwotCX0KKyAgcHVibGljIHZvaWQgc2V0UGFyZW50KCBHcm91cCBwYXJlbnQgKSB7CisgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgIH0KKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGFsaWFzOwogCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYWxpYXM7CisgIHB1YmxpYyBHcm91cCBnZXRQYXJlbnQoKSB7CisgICAgcmV0dXJuIHBhcmVudDsKKyAgfQogCi0JcHVibGljIEdyb3VwIGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIHBhcmVudDsKLQl9CisgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisgICAgcmV0dXJuIGlkOworICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldElkKCkgewotCQlyZXR1cm4gaWQ7Ci0JfQorICBwdWJsaWMgU3RyaW5nIGdldEFsaWFzKCkgeworICAgIHJldHVybiBhbGlhczsKKyAgfQogCi0JcHVibGljIFN0cmluZyBnZXRBbGlhcygpIHsKLQkJcmV0dXJuIGFsaWFzOwotCX0KKyAgcHVibGljIHZvaWQgc2V0RmVhdHVyZSggRmVhdHVyZSBmZWF0dXJlICkgeworICAgIHRoaXMuZmVhdHVyZSA9IGZlYXR1cmU7CisgIH0KIAotCXB1YmxpYyB2b2lkIHNldEZlYXR1cmUoRmVhdHVyZSBmZWF0dXJlKSB7Ci0JCXRoaXMuZmVhdHVyZSA9IGZlYXR1cmU7Ci0JfQotCi0JcHVibGljIEZlYXR1cmUgZ2V0RmVhdHVyZSgpIHsKLQkJcmV0dXJuIGZlYXR1cmU7Ci0JfQotCisgIHB1YmxpYyBGZWF0dXJlIGdldEZlYXR1cmUoKSB7CisgICAgcmV0dXJuIGZlYXR1cmU7CisgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvRmVhdHVyZXMuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9GZWF0dXJlcy5qYXZhCmluZGV4IDhhOWZkNjUuLmZkMmE4ZTYgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9GZWF0dXJlcy5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9GZWF0dXJlcy5qYXZhCkBAIC0xNywxOCArMTcsMTggQEAKICAqLwogcHVibGljIGNsYXNzIEZlYXR1cmVzIHsKIAotCXByaXZhdGUgZmluYWwgTGlzdDxGZWF0dXJlPiBmZWF0dXJlczsKKyAgcHJpdmF0ZSBmaW5hbCBMaXN0PEZlYXR1cmU+IGZlYXR1cmVzOwogCi0JcHVibGljIEZlYXR1cmVzKExpc3Q8RmVhdHVyZT4gZmVhdHVyZXMpIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy5mZWF0dXJlcyA9IGZlYXR1cmVzOwotCX0KKyAgcHVibGljIEZlYXR1cmVzKCBMaXN0PEZlYXR1cmU+IGZlYXR1cmVzICkgeworICAgIHN1cGVyKCk7CisgICAgdGhpcy5mZWF0dXJlcyA9IGZlYXR1cmVzOworICB9CiAKLQlwdWJsaWMgRmVhdHVyZVtdIGdldEZlYXR1cmVzKCkgewotCQlyZXR1cm4gZmVhdHVyZXMudG9BcnJheShuZXcgRmVhdHVyZVtmZWF0dXJlcy5zaXplKCldKTsKLQl9CisgIHB1YmxpYyBGZWF0dXJlW10gZ2V0RmVhdHVyZXMoKSB7CisgICAgcmV0dXJuIGZlYXR1cmVzLnRvQXJyYXkoIG5ldyBGZWF0dXJlWyBmZWF0dXJlcy5zaXplKCkgXSApOworICB9CiAKLQlwdWJsaWMgRmVhdHVyZSBnZXRGZWF0dXJlKEZlYXR1cmVSZWYgZmVhdHVyZVJlZikgewotCQlyZXR1cm4gZmVhdHVyZVJlZi5nZXRGZWF0dXJlKCk7Ci0JfQorICBwdWJsaWMgRmVhdHVyZSBnZXRGZWF0dXJlKCBGZWF0dXJlUmVmIGZlYXR1cmVSZWYgKSB7CisgICAgcmV0dXJuIGZlYXR1cmVSZWYuZ2V0RmVhdHVyZSgpOworICB9CiB9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvR3JvdXAuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9Hcm91cC5qYXZhCmluZGV4IDI2NzAzYWIuLjEyZWU0ZmYgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9Hcm91cC5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9Hcm91cC5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGljb247CiAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGluZm87CiAKLSAgCiAgIHB1YmxpYyBTdHJpbmcgZ2V0SW5mbygpIHsKICAgICByZXR1cm4gaW5mbzsKICAgfQpAQCAtNTksNyArNTgsOSBAQAogICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKICAgICB0aGlzLmFsaWFzID0gYWxpYXM7CiAgICAgdGhpcy5pY29uID0gaWNvbjsKLSAgICB0aGlzLmluZm8gPSBpbmZvID09IG51bGw/IiI6aW5mbzsKKyAgICB0aGlzLmluZm8gPSBpbmZvID09IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbmZvOwogICAgIHRoaXMuaXVSZWZzID0gaXVSZWZzOwogICAgIGZvciggSVVSZWYgaXVSZWYgOiBpdVJlZnMgKSB7CiAgICAgICBpdVJlZi5zZXRQYXJlbnQoIHRoaXMgKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9JVVJlZi5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL0lVUmVmLmphdmEKaW5kZXggZWFlNGIwMS4uMjlkOTVhYyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL0lVUmVmLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL0lVUmVmLmphdmEKQEAgLTEyLDQ3ICsxMiw0NCBAQAogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5JbnN0YWxsYWJsZVVuaXQ7CiAKLQogLyoqCiAgKiBAYXV0aG9yIEpvcmRpIEJvZWhtZSBMb3BleiA8amJvZWhtZUBpbm5vb3ByYWN0LmNvbT4KICAqLwogQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKIHB1YmxpYyBjbGFzcyBJVVJlZiB7CiAKLQlwcml2YXRlIEdyb3VwIHBhcmVudDsKLQlwcml2YXRlIEluc3RhbGxhYmxlVW5pdCBmZWF0dXJlOworICBwcml2YXRlIEdyb3VwIHBhcmVudDsKKyAgcHJpdmF0ZSBJbnN0YWxsYWJsZVVuaXQgZmVhdHVyZTsKIAotCXB1YmxpYyBJVVJlZihTdHJpbmcgcmVmaWQsIFN0cmluZyBhbGlhcykgewotCQlzdXBlcigpOwotCQl0aGlzLnJlZmlkID0gcmVmaWQ7Ci0JCXRoaXMuYWxpYXMgPSBhbGlhczsKLQl9CisgIHB1YmxpYyBJVVJlZiggU3RyaW5nIHJlZmlkLCBTdHJpbmcgYWxpYXMgKSB7CisgICAgc3VwZXIoKTsKKyAgICB0aGlzLnJlZmlkID0gcmVmaWQ7CisgICAgdGhpcy5hbGlhcyA9IGFsaWFzOworICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRQYXJlbnQoR3JvdXAgcGFyZW50KSB7Ci0JCXRoaXMucGFyZW50ID0gcGFyZW50OwotCX0KKyAgcHVibGljIHZvaWQgc2V0UGFyZW50KCBHcm91cCBwYXJlbnQgKSB7CisgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgIH0KKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcmVmaWQ7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGFsaWFzOwogCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcmVmaWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYWxpYXM7CisgIHB1YmxpYyBHcm91cCBnZXRQYXJlbnQoKSB7CisgICAgcmV0dXJuIHBhcmVudDsKKyAgfQogCi0JcHVibGljIEdyb3VwIGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIHBhcmVudDsKLQl9CisgIHB1YmxpYyBTdHJpbmcgZ2V0UmVmSWQoKSB7CisgICAgcmV0dXJuIHJlZmlkOworICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldFJlZklkKCkgewotCQlyZXR1cm4gcmVmaWQ7Ci0JfQorICBwdWJsaWMgU3RyaW5nIGdldEFsaWFzKCkgeworICAgIHJldHVybiBhbGlhczsKKyAgfQogCi0JcHVibGljIFN0cmluZyBnZXRBbGlhcygpIHsKLQkJcmV0dXJuIGFsaWFzOwotCX0KKyAgcHVibGljIHZvaWQgc2V0SVUoIEluc3RhbGxhYmxlVW5pdCBmZWF0dXJlICkgeworICAgIHRoaXMuZmVhdHVyZSA9IGZlYXR1cmU7CisgIH0KIAotCXB1YmxpYyB2b2lkIHNldElVKEluc3RhbGxhYmxlVW5pdCBmZWF0dXJlKSB7Ci0JCXRoaXMuZmVhdHVyZSA9IGZlYXR1cmU7Ci0JfQotCi0JcHVibGljIEluc3RhbGxhYmxlVW5pdCBnZXRJVSgpIHsKLQkJcmV0dXJuIGZlYXR1cmU7Ci0JfQotCisgIHB1YmxpYyBJbnN0YWxsYWJsZVVuaXQgZ2V0SVUoKSB7CisgICAgcmV0dXJuIGZlYXR1cmU7CisgIH0KIH0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9TY3JlZW4uamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9TY3JlZW4uamF2YQppbmRleCA1OTc4YWJiLi41ZWI2ZWY2IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvU2NyZWVuLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL1NjcmVlbi5qYXZhCkBAIC0xNywyNSArMTcsMjIgQEAKICAqLwogcHVibGljIGNsYXNzIFNjcmVlbiB7CiAKKyAgcHVibGljIEdyb3VwW10gZ2V0R3JvdXBzKCkgeworICAgIHJldHVybiBncm91cHMudG9BcnJheSggbmV3IEdyb3VwWyBncm91cHMuc2l6ZSgpIF0gKTsKKyAgfQogCi0JcHVibGljIEdyb3VwW10gZ2V0R3JvdXBzKCkgewotCQlyZXR1cm4gZ3JvdXBzLnRvQXJyYXkobmV3IEdyb3VwW2dyb3Vwcy5zaXplKCldKTsKLQl9CisgIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKSB7CisgICAgcmV0dXJuIGxhYmVsOworICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkgewotCQlyZXR1cm4gbGFiZWw7Ci0JfQotCi0JcHVibGljIFNjcmVlbihTdHJpbmcgbGFiZWwsIExpc3Q8R3JvdXA+IGdyb3VwcykgewotCQlzdXBlcigpOwotCQl0aGlzLmdyb3VwcyA9IGdyb3VwczsKLQkJdGhpcy5sYWJlbCA9IGxhYmVsOwotCQlmb3IgKEdyb3VwIGdyb3VwIDogZ3JvdXBzKSB7Ci0JCQlncm91cC5zZXRQYXJlbnQodGhpcyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGZpbmFsIExpc3Q8R3JvdXA+IGdyb3VwczsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBsYWJlbDsKLQorICBwdWJsaWMgU2NyZWVuKCBTdHJpbmcgbGFiZWwsIExpc3Q8R3JvdXA+IGdyb3VwcyApIHsKKyAgICBzdXBlcigpOworICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzOworICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKyAgICBmb3IoIEdyb3VwIGdyb3VwIDogZ3JvdXBzICkgeworICAgICAgZ3JvdXAuc2V0UGFyZW50KCB0aGlzICk7CisgICAgfQorICB9CisgIHByaXZhdGUgZmluYWwgTGlzdDxHcm91cD4gZ3JvdXBzOworICBwcml2YXRlIGZpbmFsIFN0cmluZyBsYWJlbDsKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvU3RydWN0dXJlLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvU3RydWN0dXJlLmphdmEKaW5kZXggZDA3YjZiZi4uOWMyMzBkOCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsL1N0cnVjdHVyZS5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9TdHJ1Y3R1cmUuamF2YQpAQCAtMTcsMTQgKzE3LDEzIEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTdHJ1Y3R1cmUgewogCi0JcHJvdGVjdGVkIExpc3Q8U2NyZWVuPiBzY3JlZW5zOworICBwcm90ZWN0ZWQgTGlzdDxTY3JlZW4+IHNjcmVlbnM7CiAKLQlwdWJsaWMgU3RydWN0dXJlKGZpbmFsIExpc3Q8U2NyZWVuPiBzY3JlZW5zKSB7Ci0JCXRoaXMuc2NyZWVucyA9IHNjcmVlbnM7Ci0JfQorICBwdWJsaWMgU3RydWN0dXJlKCBmaW5hbCBMaXN0PFNjcmVlbj4gc2NyZWVucyApIHsKKyAgICB0aGlzLnNjcmVlbnMgPSBzY3JlZW5zOworICB9CiAKLQlwdWJsaWMgU2NyZWVuW10gZ2V0U2NyZWVucygpIHsKLQkJcmV0dXJuIHNjcmVlbnMudG9BcnJheShuZXcgU2NyZWVuW3NjcmVlbnMuc2l6ZSgpXSk7Ci0JfQotCisgIHB1YmxpYyBTY3JlZW5bXSBnZXRTY3JlZW5zKCkgeworICAgIHJldHVybiBzY3JlZW5zLnRvQXJyYXkoIG5ldyBTY3JlZW5bIHNjcmVlbnMuc2l6ZSgpIF0gKTsKKyAgfQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC90ZXN0L29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwvTW9kZWxfVGVzdC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3Rlc3Qvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9Nb2RlbF9UZXN0LmphdmEKaW5kZXggMzMwYTMzYi4uZjcxN2NhOCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3Rlc3Qvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9Nb2RlbF9UZXN0LmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsL3Rlc3Qvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbC9Nb2RlbF9UZXN0LmphdmEKQEAgLTE5LDQzICsxOSwzOCBAQAogICovCiBwdWJsaWMgY2xhc3MgTW9kZWxfVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKIAotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHRocm93cyBFeGNlcHRpb24gewotCQlVUkwgdXJsID0gZ2V0RmlsZSgiZXBwbW9kZWwueG1sIik7Ci0JCVVSTCB1cmxtZXRhZGF0YSA9IG5ldyBVUkwoImZpbGU6dGVzdC9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL21vZGVsIik7Ci0JCUVQUE1vZGVsIG1vZGVsID0gRVBQTW9kZWwucmVhZCh1cmwsIHVybG1ldGFkYXRhKTsKLQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7CisgIHB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFVSTCB1cmwgPSBnZXRGaWxlKCAiZXBwbW9kZWwueG1sIiApOworICAgIFVSTCB1cmxtZXRhZGF0YSA9IG5ldyBVUkwoICJmaWxlOnRlc3Qvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbCIgKTsKKyAgICBFUFBNb2RlbCBtb2RlbCA9IEVQUE1vZGVsLnJlYWQoIHVybCwgdXJsbWV0YWRhdGEgKTsKKyAgICBhc3NlcnROb3ROdWxsKCBtb2RlbCApOworICAgIFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtb2RlbC5nZXRTdHJ1Y3R1cmUoKTsKKyAgICBhc3NlcnROb3ROdWxsKCBzdHJ1Y3R1cmUgKTsKKyAgICBTY3JlZW5bXSBzY3JlZW5zID0gc3RydWN0dXJlLmdldFNjcmVlbnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoIDMsIHNjcmVlbnMubGVuZ3RoICk7CisgICAgR3JvdXBbXSBncm91cHMgPSBzY3JlZW5zWyAwIF0uZ2V0R3JvdXBzKCk7CisgICAgYXNzZXJ0RXF1YWxzKCAyLCBncm91cHMubGVuZ3RoICk7CisgICAgYXNzZXJ0RXF1YWxzKCAiZ3JvdXAucG5nIiwgZ3JvdXBzWyAwIF0uZ2V0SWNvbigpICk7CisgICAgYXNzZXJ0RXF1YWxzKCAiQ2xhc3NpYyBpbmZvIiwgZ3JvdXBzWyAwIF0uZ2V0SW5mbygpICk7CisgICAgYXNzZXJ0RXF1YWxzKCAiIiwgZ3JvdXBzWyAxIF0uZ2V0SW5mbygpICk7CisgICAgYXNzZXJ0RXF1YWxzKCAiU2NyZWVuIDEiLCBzY3JlZW5zWyAwIF0uZ2V0TGFiZWwoKSApOworICAgIElVUmVmW10gZmVhdHVyZVJlZnMgPSBncm91cHNbIDAgXS5nZXRJVVJlZnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoIDMsIGZlYXR1cmVSZWZzLmxlbmd0aCApOworICB9CiAKLQkJU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1vZGVsLmdldFN0cnVjdHVyZSgpOwotCQlhc3NlcnROb3ROdWxsKHN0cnVjdHVyZSk7Ci0JCVNjcmVlbltdIHNjcmVlbnMgPSBzdHJ1Y3R1cmUuZ2V0U2NyZWVucygpOwotCQlhc3NlcnRFcXVhbHMoMywgc2NyZWVucy5sZW5ndGgpOworICBwcml2YXRlIFVSTCBnZXRGaWxlKCBmaW5hbCBTdHJpbmcgbmFtZSApIHsKKyAgICByZXR1cm4gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZSggbmFtZSApOworICB9CiAKLQkJR3JvdXBbXSBncm91cHMgPSBzY3JlZW5zWzBdLmdldEdyb3VwcygpOwotCQlhc3NlcnRFcXVhbHMoMiwgZ3JvdXBzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscygiZ3JvdXAucG5nIiwgZ3JvdXBzWzBdLmdldEljb24oKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQ2xhc3NpYyBpbmZvIiwgZ3JvdXBzWzBdLmdldEluZm8oKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgZ3JvdXBzWzFdLmdldEluZm8oKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJTY3JlZW4gMSIsIHNjcmVlbnNbMF0uZ2V0TGFiZWwoKSk7Ci0KLQkJSVVSZWZbXSBmZWF0dXJlUmVmcyA9IGdyb3Vwc1swXS5nZXRJVVJlZnMoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGZlYXR1cmVSZWZzLmxlbmd0aCk7Ci0KLQl9Ci0KLQlwcml2YXRlIFVSTCBnZXRGaWxlKGZpbmFsIFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiBnZXRDbGFzcygpLmdldFJlc291cmNlKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQYXJlbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBnZXRGaWxlKCJlcHBtb2RlbC54bWwiKTsKLQkJVVJMIHVybG1ldGFkYXRhID0gbmV3IFVSTCgiZmlsZTp0ZXN0L29yZy9lY2xpcHNlL2VwcC93aXphcmQvbW9kZWwiKTsKLQkJRVBQTW9kZWwgbW9kZWwgPSBFUFBNb2RlbC5yZWFkKHVybCwgdXJsbWV0YWRhdGEpOwotCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsKLQkJU2NyZWVuIHNjcmVlbiA9IG1vZGVsLmdldFN0cnVjdHVyZSgpLmdldFNjcmVlbnMoKVswXTsKLQkJR3JvdXAgZ3JvdXAgPSBzY3JlZW4uZ2V0R3JvdXBzKClbMF07Ci0JCUlVUmVmIGZlYXR1cmVSZWYgPSBncm91cC5nZXRJVVJlZnMoKVswXTsKLQkJYXNzZXJ0U2FtZShzY3JlZW4sIGdyb3VwLmdldFBhcmVudCgpKTsKLQkJYXNzZXJ0U2FtZShncm91cCwgZmVhdHVyZVJlZi5nZXRQYXJlbnQoKSk7Ci0JfQorICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW50cygpIHRocm93cyBFeGNlcHRpb24geworICAgIFVSTCB1cmwgPSBnZXRGaWxlKCAiZXBwbW9kZWwueG1sIiApOworICAgIFVSTCB1cmxtZXRhZGF0YSA9IG5ldyBVUkwoICJmaWxlOnRlc3Qvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9tb2RlbCIgKTsKKyAgICBFUFBNb2RlbCBtb2RlbCA9IEVQUE1vZGVsLnJlYWQoIHVybCwgdXJsbWV0YWRhdGEgKTsKKyAgICBhc3NlcnROb3ROdWxsKCBtb2RlbCApOworICAgIFNjcmVlbiBzY3JlZW4gPSBtb2RlbC5nZXRTdHJ1Y3R1cmUoKS5nZXRTY3JlZW5zKClbIDAgXTsKKyAgICBHcm91cCBncm91cCA9IHNjcmVlbi5nZXRHcm91cHMoKVsgMCBdOworICAgIElVUmVmIGZlYXR1cmVSZWYgPSBncm91cC5nZXRJVVJlZnMoKVsgMCBdOworICAgIGFzc2VydFNhbWUoIHNjcmVlbiwgZ3JvdXAuZ2V0UGFyZW50KCkgKTsKKyAgICBhc3NlcnRTYW1lKCBncm91cCwgZmVhdHVyZVJlZi5nZXRQYXJlbnQoKSApOworICB9CiB9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQucmVsZW5nL2VwcHdpemFyZC5wc2YgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQucmVsZW5nL2VwcHdpemFyZC5wc2YKaW5kZXggZTNjMDRjMS4uZWIyNjg2NiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLnJlbGVuZy9lcHB3aXphcmQucHNmCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5yZWxlbmcvZXBwd2l6YXJkLnBzZgpAQCAtMywxMyArMywxNiBAQAogPHByb3ZpZGVyIGlkPSJvcmcuZWNsaXBzZS50ZWFtLmN2cy5jb3JlLmN2c25hdHVyZSI+CiA8cHJvamVjdCByZWZlcmVuY2U9IjEuMCw6cHNlcnZlcjpkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsb3JnLmVjbGlwc2Uub3JiaXQvamF2YXguc2VydmxldCxqYXZheC5zZXJ2bGV0LHYyXzQiLz4KIDxwcm9qZWN0IHJlZmVyZW5jZT0iMS4wLDpwc2VydmVyOmRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scyxvcmcuZWNsaXBzZS5vcmJpdC9vcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZyxvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZyx2MV8wXzQiLz4KKzxwcm9qZWN0IHJlZmVyZW5jZT0iMS4wLDpwc2VydmVyOmRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scyxvcmcuZWNsaXBzZS5vcmJpdC9vcmcuYXBhY2hlLmxvZzRqLG9yZy5hcGFjaGUubG9nNGosdjFfMl8xMyIvPgogPHByb2plY3QgcmVmZXJlbmNlPSIxLjAsOnBzZXJ2ZXI6ZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3RlY2hub2xvZ3ksb3JnLmVjbGlwc2UuZXBwL3JlbGVuZy9vcmcuZWNsaXBzZS5lcHAuY29uZmlnLG9yZy5lY2xpcHNlLmVwcC5jb25maWciLz4KIDxwcm9qZWN0IHJlZmVyZW5jZT0iMS4wLDpleHRzc2g6ZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3RlY2hub2xvZ3ksb3JnLmVjbGlwc2UuZXBwL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZCxvcmcuZWNsaXBzZS5lcHAud2l6YXJkIi8+CiA8cHJvamVjdCByZWZlcmVuY2U9IjEuMCw6ZXh0c3NoOmRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90ZWNobm9sb2d5LG9yZy5lY2xpcHNlLmVwcC9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyLmpubHAuZmVhdHVyZSxvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlci5qbmxwLmZlYXR1cmUiLz4KIDxwcm9qZWN0IHJlZmVyZW5jZT0iMS4wLDpleHRzc2g6ZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3RlY2hub2xvZ3ksb3JnLmVjbGlwc2UuZXBwL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyLG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlciIvPgorPHByb2plY3QgcmVmZXJlbmNlPSIxLjAsOmV4dHNzaDpkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdGVjaG5vbG9neSxvcmcuZWNsaXBzZS5lcHAvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyLG9yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXIiLz4KIDxwcm9qZWN0IHJlZmVyZW5jZT0iMS4wLDpleHRzc2g6ZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3RlY2hub2xvZ3ksb3JnLmVjbGlwc2UuZXBwL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3Isb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tZXRhZGF0YS5nZW5lcmF0b3IiLz4KIDxwcm9qZWN0IHJlZmVyZW5jZT0iMS4wLDpleHRzc2g6ZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3RlY2hub2xvZ3ksb3JnLmVjbGlwc2UuZXBwL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbCxvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsIi8+CiA8cHJvamVjdCByZWZlcmVuY2U9IjEuMCw6ZXh0c3NoOmRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90ZWNobm9sb2d5LG9yZy5lY2xpcHNlLmVwcC9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQucmVsZW5nLG9yZy5lY2xpcHNlLmVwcC53aXphcmQucmVsZW5nIi8+Cis8cHJvamVjdCByZWZlcmVuY2U9IjEuMCw6ZXh0c3NoOmRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90ZWNobm9sb2d5LG9yZy5lY2xpcHNlLmVwcC9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUsb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZSIvPgogPHByb2plY3QgcmVmZXJlbmNlPSIxLjAsOnBzZXJ2ZXI6ZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L2VjbGlwc2Usb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLmpldHR5LG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5qZXR0eSIvPgogPHByb2plY3QgcmVmZXJlbmNlPSIxLjAsOnBzZXJ2ZXI6ZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L2VjbGlwc2Usb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5LG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeSIvPgogPHByb2plY3QgcmVmZXJlbmNlPSIxLjAsOnBzZXJ2ZXI6ZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L2VjbGlwc2Usb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnNlcnZsZXQsb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnNlcnZsZXQiLz4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS8uY2xhc3NwYXRoIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3MWNkNAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8Y2xhc3NwYXRoPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KKzwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS8ucHJvamVjdCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzlkMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZTwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzhmNDViCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDMgQEAKKyNUdWUgRGVjIDA0IDE0OjQ2OjQ1IENFVCAyMDA3DQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitlbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQ0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhNjVkZAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorI1R1ZSBEZWMgMDQgMTQ6NDY6MzEgQ0VUIDIwMDcNCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQ0KK2xpbmUuc2VwYXJhdG9yPVxuDQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiMGRlNwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxMiBAQAorI1RodSBBdWcgMTQgMDk6MzI6MTQgQ0VTVCAyMDA4DQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3INCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41DQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2JhcmUgZmVhdHVyZS54bWwgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYmFyZSBmZWF0dXJlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDM1ZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2JhcmUgZmVhdHVyZS54bWwKQEAgLTAsMCArMSwxOTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGZlYXR1cmUNCisgICAgICBpZD0ib3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZSINCisgICAgICBsYWJlbD0iUkFQIERlbW8gRGVwbG95bWVudCBGZWF0dXJlIg0KKyAgICAgIHZlcnNpb249IjEuMS4wLnF1YWxpZmllciINCisgICAgICBwcm92aWRlci1uYW1lPSJlY2xpcHNlLm9yZyI+DQorDQorICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9kZXNjcmlwdGlvbiI+DQorICAgICAgW0VudGVyIEZlYXR1cmUgRGVzY3JpcHRpb24gaGVyZS5dDQorICAgPC9kZXNjcmlwdGlvbj4NCisNCisgICA8Y29weXJpZ2h0IHVybD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9jb3B5cmlnaHQiPg0KKyAgICAgIFtFbnRlciBDb3B5cmlnaHQgRGVzY3JpcHRpb24gaGVyZS5dDQorICAgPC9jb3B5cmlnaHQ+DQorDQorICAgPGxpY2Vuc2UgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2xpY2Vuc2UiPg0KKyAgICAgIFtFbnRlciBMaWNlbnNlIERlc2NyaXB0aW9uIGhlcmUuXQ0KKyAgIDwvbGljZW5zZT4NCisNCisgICA8cGx1Z2luDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMiDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKyAgIDxwbHVnaW4NCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuY29yZS5jb250ZW50dHlwZSINCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQorDQorICAgPHBsdWdpbg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5jb3JlLmpvYnMiDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKyAgIDxwbHVnaW4NCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIg0KKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KKyAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCisNCisgICA8cGx1Z2luDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uIg0KKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KKyAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCisNCisgICA8cGx1Z2luDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeSINCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQorDQorICAgPHBsdWdpbg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuc2VydmxldCINCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQorDQorICAgPHBsdWdpbg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuc2VydmxldGJyaWRnZSINCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQorDQorICAgPHBsdWdpbg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnByZWZlcmVuY2VzIg0KKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KKyAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCisNCisgICA8cGx1Z2luDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucmVnaXN0cnkiDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKyAgIDxwbHVnaW4NCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uub3NnaSINCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQorDQorICAgPHBsdWdpbg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2VzIg0KKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KKyAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCisNCisgICA8cGx1Z2luDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnJhcC5qZmFjZSINCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQorDQorICAgPHBsdWdpbg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5yYXAucnd0Ig0KKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KKyAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCisNCisgICA8cGx1Z2luDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnJhcC51aS53b3JrYmVuY2giDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKyAgIDxwbHVnaW4NCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucyINCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQorDQorICAgPHBsdWdpbg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmFwcCINCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQorDQorICAgPHBsdWdpbg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5yYXAudWkiDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKyAgIDxwbHVnaW4NCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucmFwLnJ3dC5xMDciDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgZnJhZ21lbnQ9InRydWUiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKyAgIDxwbHVnaW4NCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucmFwLmpmYWNlLmRhdGFiaW5kaW5nIg0KKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KKyAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCisNCisgICA8cGx1Z2luDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmciDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKyAgIDxwbHVnaW4NCisgICAgICAgICBpZD0iY29tLmlibS5pY3UiDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKyAgIDxwbHVnaW4NCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucmFwLnVpLnZpZXdzIg0KKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KKyAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCisNCisgICA8cGx1Z2luDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnVwZGF0ZS5jb25maWd1cmF0b3IiDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKyAgIDxwbHVnaW4NCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucmFwLmNvcmUuZGF0YWJpbmRpbmciDQorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KKw0KKzwvZmVhdHVyZT4NCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYWIxOWMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxIEBACitiaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbA0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlLy5lY2xpcHNlcHJvZHVjdCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlLy5lY2xpcHNlcHJvZHVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvLmVjbGlwc2Vwcm9kdWN0CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3NDAyMAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaQpAQCAtMCwwICsxLDMgQEAKKyNFY2xpcHNlIFJ1bnRpbWUgQ29uZmlndXJhdGlvbiBGaWxlDQorb3NnaS5idW5kbGVzPW9yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uQDI6c3RhcnQsIG9yZy5lY2xpcHNlLnVwZGF0ZS5jb25maWd1cmF0b3JAc3RhcnQsIG9yZy5lY2xpcHNlLnJhcC51aUA0OnN0YXJ0LCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyQDU6c3RhcnQsIG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5zZXJ2bGV0YnJpZGdlQHN0YXJ0LCBvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnlAc3RhcnRvc2dpLmJ1bmRsZXMuZGVmYXVsdA0KK1N0YXJ0TGV2ZWw9NA0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmVfMS4xLjAuMjAwODA5MTkxNTMwL2ZlYXR1cmUueG1sIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvZmVhdHVyZXMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZV8xLjEuMC4yMDA4MDkxOTE1MzAvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1ZDRkYgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmVfMS4xLjAuMjAwODA5MTkxNTMwL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMjk4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlIgorICAgICAgbGFiZWw9IlJBUCBEZW1vIERlcGxveW1lbnQgRmVhdHVyZSIKKyAgICAgIHZlcnNpb249IjEuMS4wLjIwMDgwOTE5MTUzMCIKKyAgICAgIHByb3ZpZGVyLW5hbWU9ImVjbGlwc2Uub3JnIj4KKworICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9kZXNjcmlwdGlvbiI+CisgICAgICBbRW50ZXIgRmVhdHVyZSBEZXNjcmlwdGlvbiBoZXJlLl0KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2NvcHlyaWdodCI+CisgICAgICBbRW50ZXIgQ29weXJpZ2h0IERlc2NyaXB0aW9uIGhlcmUuXQorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9saWNlbnNlIj4KKyAgICAgIFtFbnRlciBMaWNlbnNlIERlc2NyaXB0aW9uIGhlcmUuXQorICAgPC9saWNlbnNlPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIzLjQuMC5JMjAwODA1MDktMjAwMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmNvcmUuY29udGVudHR5cGUiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMy4zLjAudjIwMDgwNjA0LTE0MDAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5jb3JlLmpvYnMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMy40LjAudjIwMDgwNTEyIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjMuNC4wLnYyMDA4MDUxMiIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjMuNC4wLnYyMDA4MDQyMS0yMDA2IgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjEuMC4xMDAuMjAwODA5MTkxNTMwIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnNlcnZsZXQiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMS4wLjEwMC4yMDA4MDkxOTE1MzAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuc2VydmxldGJyaWRnZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIxLjAuMC4yMDA4MDkxOTE1MzAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnByZWZlcmVuY2VzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjMuMi4yMDAudjIwMDgwNDIxLTIwMDYiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnJlZ2lzdHJ5IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjMuNC4wLnYyMDA4MDUxNi0wOTUwIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uub3NnaSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIzLjQuMC52MjAwODA2MDUtMTkwMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZXMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMy4xLjIwMC52MjAwNzEyMDMiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5yYXAuamZhY2UiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMS4xLjAuMjAwODA5MTkxNTMwIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucmFwLnJ3dCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIxLjEuMS4yMDA4MDkxOTE1MzAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5yYXAudWkud29ya2JlbmNoIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjEuMS4wLjIwMDgwOTE5MTUzMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMy40LjAudjIwMDgwNjAzLTIwMDAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmFwcCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIxLjEuMC52MjAwODA0MjEtMjAwNiIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnJhcC51aSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIxLjEuMC4yMDA4MDkxOTE1MzAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5yYXAucnd0LnEwNyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIxLjEuMS4yMDA4MDkxOTE1MzAiCisgICAgICAgICBmcmFnbWVudD0idHJ1ZSIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmciCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMS4xLjAuSTIwMDgwNTI3LTIwMDAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJjb20uaWJtLmljdSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIzLjguMS52MjAwODA1MzAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmNvcmUiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMS4wLjAuMjAwODA5MTkxNTMwIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIxLjAuMC52MjAwODA1MTQtMTkwMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIubWV0YWRhdGEucmVwb3NpdG9yeSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIxLjAuMC52MjAwODA2MDQiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lY2YiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMi4wLjAudjIwMDgwNjExLTE3MTUiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lY2YuZmlsZXRyYW5zZmVyIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjIuMC4wLnYyMDA4MDYxMS0xNzE1IgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZWNmLmlkZW50aXR5IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjIuMC4wLnYyMDA4MDYxMS0xNzE1IgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZWNmLnByb3ZpZGVyLmZpbGV0cmFuc2ZlciIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIyLjAuMC52MjAwODA2MTEtMTcxNSIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5zYXQ0ai5jb3JlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjIuMC4wLnYyMDA4MDYwMiIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guc2VjdXJpdHkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMS4wLjAudjIwMDgwNTEyLTE4MDAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcHAud2l6YXJkIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjEuMC4wLjIwMDgwOTE5MTUzMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjEuMjAwODA5MTkxNTMwIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuamRvbSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIxLjAuMC4yMDA4MDkxOTE1MzAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMS4wLjAuMjAwODA5MTkxNTMwIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmFwYWNoZS5hbnQiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMS43LjAudjIwMDgwMzA2MTkxMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlciIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIxLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnVwZGF0ZS5jb25maWd1cmF0b3IiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMy4yLjIwMC52MjAwODA0MTciCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2UiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMS4wLjEwMC4yMDA4MDkxOTE1MzAiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjEuMC40LjIwMDgwOTE5MTUzMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5hcGFjaGUubG9nNGoiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMS4yLjEzLjIwMDgwOTE5MTUzMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvbGF1bmNoLmluaSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL2xhdW5jaC5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhZjExZAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL2xhdW5jaC5pbmkKQEAgLTAsMCArMSwxMSBAQAorIyBFY2xpcHNlIFJ1bnRpbWUgQ29uZmlndXJhdGlvbiBPdmVycmlkZXMNCisjIFRoZXNlIHByb3BlcnRpZXMgYXJlIGxvYWRlZCBwcmlvciB0byBzdGFydGluZyB0aGUgZnJhbWV3b3JrIGFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvIG92ZXJyaWRlIFN5c3RlbSBQcm9wZXJ0aWVzDQorIyBAbnVsbCBpcyBhIHNwZWNpYWwgdmFsdWUgdXNlZCB0byBvdmVycmlkZSBhbmQgY2xlYXIgdGhlIGZyYW1ld29yaydzIGNvcHkgb2YgYSBTeXN0ZW0gUHJvcGVydHkgcHJpb3IgdG8gc3RhcnRpbmcgdGhlIGZyYW1ld29yaw0KKyMgIioiIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggQG51bGwgdG8gY2xlYXIgU3lzdGVtIFByb3BlcnRpZXMgdGhhdCBtYXRjaCBhIHByZWZpeCBuYW1lLiANCisNCitvc2dpLio9QG51bGwNCitvcmcub3NnaS4qPUBudWxsDQorZWNsaXBzZS4qPUBudWxsDQorDQorb3NnaS5wYXJlbnRDbGFzc2xvYWRlcj1hcHANCitvc2dpLmNvbnRleHRDbGFzc0xvYWRlclBhcmVudD1hcHANCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL2NvbS5pYm0uaWN1XzMuOC4xLnYyMDA4MDUzMC5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL2NvbS5pYm0uaWN1XzMuOC4xLnYyMDA4MDUzMC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4YTBhMAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvY29tLmlibS5pY3VfMy44LjEudjIwMDgwNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvTUVUQS1JTkYvRUNMSVBTRS5SU0EgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvTUVUQS1JTkYvRUNMSVBTRS5SU0EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjZDkyYQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9NRVRBLUlORi9FQ0xJUFNFLlJTQQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvTUVUQS1JTkYvRUNMSVBTRS5TRiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9NRVRBLUlORi9FQ0xJUFNFLlNGCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYTEwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvTUVUQS1JTkYvRUNMSVBTRS5TRgpAQCAtMCwwICsxLDE3OSBAQAorU2lnbmF0dXJlLVZlcnNpb246IDEuMA0KK1NIQTEtRGlnZXN0LU1hbmlmZXN0OiAxaWVQb3plTmFZZWRqM3B3TmFuVzhDc1lHdnc9DQorQ3JlYXRlZC1CeTogMS41LjAgKElCTSBDb3Jwb3JhdGlvbikNCitTSEExLURpZ2VzdC1NYW5pZmVzdC1NYWluLUF0dHJpYnV0ZXM6IHNMcjB5VzRNMGExaXBiTnI5ZUQydHFGR0wrQT0NCisNCitOYW1lOiBsaWIvYW50LWFwYWNoZS1ic2YuamFyDQorU0hBMS1EaWdlc3Q6IGhRZnE1U0VSdmQwWkhvMW5uV21HY3JVU3lZMD0NCisNCitOYW1lOiBsaWIvYW50LXRyYXguamFyDQorU0hBMS1EaWdlc3Q6IC8zTFlCRkxySE0yOC9NOEhKUVVySk1ZdElOST0NCisNCitOYW1lOiBldGMvbWF1ZGl0LWZyYW1lcy54c2wNCitTSEExLURpZ2VzdDogZTROZ0xFb2paRVBNbGZiK1JnNG9TOVllZndJPQ0KKw0KK05hbWU6IGJpbi9sY3AuYmF0DQorU0hBMS1EaWdlc3Q6IGh0N0s4ZWd0bDhDWFZwKzdhakR6Tk5HdWZ1dz0NCisNCitOYW1lOiBiaW4vcnVucmMuY21kDQorU0hBMS1EaWdlc3Q6IHJ2VEVDdi9JQXRUMHFzVzk5MXljcjkwS1RDaz0NCisNCitOYW1lOiBldGMvamRlcGVuZC54c2wNCitTSEExLURpZ2VzdDogS0FzMGdILzc3c1h2VEdvc2xya2Nvamc0a0lBPQ0KKw0KK05hbWU6IGJpbi9hbnRlbnYuY21kDQorU0hBMS1EaWdlc3Q6IHNoaWJueEpGZmtjdVU4MWRNdlU2L2NJRTFIST0NCisNCitOYW1lOiBhYm91dF9maWxlcy9MSUNFTlNFLnNheC50eHQNCitTSEExLURpZ2VzdDogQ25LcXpDVUkwRTBOVVNsVklBZlVkOGdjdHhVPQ0KKw0KK05hbWU6IE1FVEEtSU5GL2VjbGlwc2UuaW5mDQorU0hBMS1EaWdlc3Q6IForZTRVcmhBbVRDQlIxVXBQL1JxTWY5T1gwMD0NCisNCitOYW1lOiBsaWIvYW50LWxhdW5jaGVyLmphcg0KK1NIQTEtRGlnZXN0OiA5QjRZckx5YWRkdFp2K05JSkF5S3pUL1o2azA9DQorDQorTmFtZTogbGliL2FudC1hcGFjaGUtYmNlbC5qYXINCitTSEExLURpZ2VzdDogOSsyOVRMT0pBZC9KajJ2bERPK1lwUnRKVTl3PQ0KKw0KK05hbWU6IGxpYi9hbnQtYW50bHIuamFyDQorU0hBMS1EaWdlc3Q6IC9xbDdCTnZlYzhCeUVYd2NBU1hBZnVBZHdScz0NCisNCitOYW1lOiBldGMvY2hhbmdlbG9nLnhzbA0KK1NIQTEtRGlnZXN0OiAyOFZYQ2hMSTZXODk0ZXo1NGdiRnVWOUlzWnc9DQorDQorTmFtZTogZXRjL2pkZXBlbmQtZnJhbWVzLnhzbA0KK1NIQTEtRGlnZXN0OiBpOXdaRElpT3NaS3MyVTVUVkxOS3hJZUJNWkE9DQorDQorTmFtZTogbGliL2FudC1zdGFydGVhbS5qYXINCitTSEExLURpZ2VzdDogWW01S1ArMkErTHYvNXA3b2RCVXI2cFQ5cHN3PQ0KKw0KK05hbWU6IGFib3V0Lmh0bWwNCitTSEExLURpZ2VzdDogZTNIVE1jcGtLcFNEOWJjSXNNL3J4SEZsRDJZPQ0KKw0KK05hbWU6IGxpYi9hbnQtamFpLmphcg0KK1NIQTEtRGlnZXN0OiBZZm1aeU9JZVQ3UkdnU05VR3ZSc2k2TVd1dUU9DQorDQorTmFtZTogbGliL2FudC1qdW5pdC5qYXINCitTSEExLURpZ2VzdDogb0JkdHdHdStkbkcxcWZTUXdvSEdHTGVkeHcwPQ0KKw0KK05hbWU6IGxpYi9hbnQtc3dpbmcuamFyDQorU0hBMS1EaWdlc3Q6IGlmcTdhOXFVbFlsVE1CSGZYQk14UmtxR1RoND0NCisNCitOYW1lOiBsaWIvYW50LWFwYWNoZS1sb2c0ai5qYXINCitTSEExLURpZ2VzdDoga2xrOHdPbHI1Z214WHJYdU9LWXlKajAyNVowPQ0KKw0KK05hbWU6IGJpbi9hbnQNCitTSEExLURpZ2VzdDogUXlnMWkveDdaY1kvcC9RcjBXZUo3UDRsS0hvPQ0KKw0KK05hbWU6IGJpbi9hbnQuY21kDQorU0hBMS1EaWdlc3Q6IDVvemIwSnBNSDdFb0NkRkFBYjQvcEovK1FSTT0NCisNCitOYW1lOiBsaWIvYW50LWNvbW1vbnMtbmV0Lmphcg0KK1NIQTEtRGlnZXN0OiBISnVZc1l0U2dGWXdhYzZvQTBOTzhBbkZDTHc9DQorDQorTmFtZTogbGliL2FudC1qc2NoLmphcg0KK1NIQTEtRGlnZXN0OiA5cWlJN2dRU0x3TWFXVDhkcWxoOUE3MVBDcVE9DQorDQorTmFtZTogbGliL2FudC1uZXRyZXh4Lmphcg0KK1NIQTEtRGlnZXN0OiB2VS9LMmtFNnF2cS9MSTBmSzBCZXhFb0pSM1E9DQorDQorTmFtZTogZXRjL2NoZWNrc3R5bGUvY2hlY2tzdHlsZS10ZXh0LnhzbA0KK1NIQTEtRGlnZXN0OiBoS2lCNlRJcVlHWjN6ZkJUOEpjZWgzclNzSXM9DQorDQorTmFtZTogbGliL2FudC1qZGVwZW5kLmphcg0KK1NIQTEtRGlnZXN0OiBtbURjbHVZN2xzRVlJZG53MHAvQ213WUxURm89DQorDQorTmFtZTogbGliL2FudC1zdHlsZWJvb2suamFyDQorU0hBMS1EaWdlc3Q6IHZzaytPUmI0VXV5dnZ1YVU1bDRVdS95emJtTT0NCisNCitOYW1lOiBhYm91dF9maWxlcy9OT1RJQ0UNCitTSEExLURpZ2VzdDogaGpoZXdrcmF0clJGc0Y5ajlOamdNSmgwTFZNPQ0KKw0KK05hbWU6IGV0Yy9jb3ZlcmFnZS1mcmFtZXMueHNsDQorU0hBMS1EaWdlc3Q6IDN0WWZBM0hzRnBIWEg3NlRPWTFPRDhVOVRJOD0NCisNCitOYW1lOiBsaWIvYW50LW5vZGVwcy5qYXINCitTSEExLURpZ2VzdDogOS92NklDaFdsT280L2ZFVldacUNNZjZsWVU0PQ0KKw0KK05hbWU6IGJpbi9jb21wbGV0ZS1hbnQtY21kLnBsDQorU0hBMS1EaWdlc3Q6IHFWRlRScnF6aU5jWkxVeU1uQ0FnY3I0U0kwND0NCisNCitOYW1lOiBhYm91dF9maWxlcy9MSUNFTlNFLmRvbS5odG1sDQorU0hBMS1EaWdlc3Q6IHhLMEhlMVBrb1FYZEhDNDhST0VxWlJOWFRMND0NCisNCitOYW1lOiBldGMvdGFnZGlmZi54c2wNCitTSEExLURpZ2VzdDogWDJNY2swMEo4SzVSUVRaRW5EZEJicHNUcVh3PQ0KKw0KK05hbWU6IGV0Yy9qdW5pdC1mcmFtZXMueHNsDQorU0hBMS1EaWdlc3Q6IDBzVloyUTVqcHV1Vk56cVExV3V1enp6eWNQbz0NCisNCitOYW1lOiBsaWIvYW50LXdlYmxvZ2ljLmphcg0KK1NIQTEtRGlnZXN0OiBXL3RMcHZVbDUvRTFwcDRoSlRGVFVnWkpiblU9DQorDQorTmFtZTogbGliL2FudC1qbWYuamFyDQorU0hBMS1EaWdlc3Q6IDZNSDNsNzA5b1luYXhvWVdXVlFBQ1dtVGloST0NCisNCitOYW1lOiBiaW4vYW50LmJhdA0KK1NIQTEtRGlnZXN0OiBDdTJnSnpQVmlTK2FiMVVzeU9qWEQ1aXUrMlk9DQorDQorTmFtZTogcGx1Z2luLnByb3BlcnRpZXMNCitTSEExLURpZ2VzdDogellhOWh1SzRHMjd3blM3eFp0NlV4QXJEeTgwPQ0KKw0KK05hbWU6IGV0Yy9jaGVja3N0eWxlL2NoZWNrc3R5bGUteGRvYy54c2wNCitTSEExLURpZ2VzdDogemVPMEVlWm53RENWOWlWQ0tmcGNuSHBjdXk0PQ0KKw0KK05hbWU6IGxpYi9hbnQuamFyDQorU0hBMS1EaWdlc3Q6IGJkMFNzSGh0QWRXUDdTd1p1N2JBNlY5aUJIOD0NCisNCitOYW1lOiBsaWIvYW50LWphdmFtYWlsLmphcg0KK1NIQTEtRGlnZXN0OiBqZFAxa2hSVG9FY0VrOVVOS25yTjV3bWF3SFk9DQorDQorTmFtZTogbGliL2FudC1hcGFjaGUtcmVzb2x2ZXIuamFyDQorU0hBMS1EaWdlc3Q6IExRLzNIWG9xVXl2UVhicCs2MEZZZml6Q1BxWT0NCisNCitOYW1lOiBiaW4vYW50UnVuDQorU0hBMS1EaWdlc3Q6IDFoWnZtWlBaK2VaL3NUU0l1Ni9kb0VmSk95Zz0NCisNCitOYW1lOiBiaW4vZW52c2V0LmNtZA0KK1NIQTEtRGlnZXN0OiAyU2ljQ3gwcTlRYVM4YWxCQ0ZtQmt6NlNtOEU9DQorDQorTmFtZTogYmluL2FudFJ1bi5wbA0KK1NIQTEtRGlnZXN0OiBhenU0VTROYVdVU1FXTlNiNWE1RW9vUVE2RDA9DQorDQorTmFtZTogZXRjL21tZXRyaWNzLWZyYW1lcy54c2wNCitTSEExLURpZ2VzdDogWWlXaUtpNlIxVHdTTTEwdU9uQkF3TEw4b0hjPQ0KKw0KK05hbWU6IGV0Yy9jaGVja3N0eWxlL2NoZWNrc3R5bGUtZnJhbWVzLnhzbA0KK1NIQTEtRGlnZXN0OiBxSk9ad0xaSndGTCtiY0lUY1kzOGlaZ0U0ZFU9DQorDQorTmFtZTogbGliL2FudC1hcGFjaGUtb3JvLmphcg0KK1NIQTEtRGlnZXN0OiBDKzJrTU1QWmNlUWlKWmFsRVN1dTJUcXZ6TGs9DQorDQorTmFtZTogYmluL2FudFJ1bi5iYXQNCitTSEExLURpZ2VzdDogOXNha3M1ZHJzeUdJeDllT1NuNFdEMDk1Sis0PQ0KKw0KK05hbWU6IGV0Yy9qdW5pdC1ub2ZyYW1lcy54c2wNCitTSEExLURpZ2VzdDogYjQ4N2NIVWFHNFRIaFNZbDRzTFhETFdHeXdFPQ0KKw0KK05hbWU6IGJpbi9ydW5hbnQucGwNCitTSEExLURpZ2VzdDogb1N0TU1md2JMam9ETmhJcE8zVW40ZW40M293PQ0KKw0KK05hbWU6IGFib3V0X2ZpbGVzL2FzbC12MjAudHh0DQorU0hBMS1EaWdlc3Q6IHBKTzBML3RVaXpzMXZ6Mlc5Z1YyVm1HSnNEcz0NCisNCitOYW1lOiBldGMvanVuaXQtZnJhbWVzLXhhbGFuMS54c2wNCitTSEExLURpZ2VzdDogVlJQbzg0WFJJd20wQ2NZcDBjSU5WZk1FQzBFPQ0KKw0KK05hbWU6IGV0Yy9sb2cueHNsDQorU0hBMS1EaWdlc3Q6IDZPaU1sbERuc2N3SlVJMmszMkM4bVlTaUpIMD0NCisNCitOYW1lOiBsaWIvYW50LWNvbW1vbnMtbG9nZ2luZy5qYXINCitTSEExLURpZ2VzdDogckd4MzJ0SFNhYXE1R096ODJWMElnM1ZpMStVPQ0KKw0KK05hbWU6IGxpYi9hbnQtYXBhY2hlLXJlZ2V4cC5qYXINCitTSEExLURpZ2VzdDogSGxiM09HTXU1d2tEVzF3elZXbGM1SjdVUHJZPQ0KKw0KK05hbWU6IGJpbi9ydW5hbnQucHkNCitTSEExLURpZ2VzdDogbzNsZ0lPS2hZQmgzT1g5bk4xOXdHaVBrRklVPQ0KKw0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzFlNTAwCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjM0IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjINCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuYXBhY2hlLmFudA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUNCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4NCitCdW5kbGUtVmVyc2lvbjogMS43LjAudjIwMDgwMzA2MTkxMA0KK0J1bmRsZS1DbGFzc1BhdGg6IGxpYi9hbnQuamFyLGxpYi9hbnQtYW50bHIuamFyLGxpYi9hbnQtYXBhY2hlLWJjZWwuamENCisgcixsaWIvYW50LWFwYWNoZS1ic2YuamFyLGxpYi9hbnQtYXBhY2hlLWxvZzRqLmphcixsaWIvYW50LWFwYWNoZS1vcm8uDQorIGphcixsaWIvYW50LWFwYWNoZS1yZWdleHAuamFyLGxpYi9hbnQtYXBhY2hlLXJlc29sdmVyLmphcixsaWIvYW50LWNvbQ0KKyBtb25zLWxvZ2dpbmcuamFyLGxpYi9hbnQtY29tbW9ucy1uZXQuamFyLGxpYi9hbnQtamFpLmphcixsaWIvYW50LWphdmENCisgbWFpbC5qYXIsbGliL2FudC1qZGVwZW5kLmphcixsaWIvYW50LWptZi5qYXIsbGliL2FudC1qc2NoLmphcixsaWIvYW50DQorIC1qdW5pdC5qYXIsbGliL2FudC1sYXVuY2hlci5qYXIsbGliL2FudC1uZXRyZXh4LmphcixsaWIvYW50LW5vZGVwcy5qYQ0KKyByLGxpYi9hbnQtc3RhcnRlYW0uamFyLGxpYi9hbnQtc3R5bGVib29rLmphcixsaWIvYW50LXN3aW5nLmphcixsaWIvYW4NCisgdC10cmF4LmphcixsaWIvYW50LXdlYmxvZ2ljLmphcg0KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUNCitFeHBvcnQtUGFja2FnZTogaW1hZ2VzLG9yZy5hcGFjaGUudG9vbHMuYW50LG9yZy5hcGFjaGUudG9vbHMuYW50LmRpc3BhDQorIHRjaCxvcmcuYXBhY2hlLnRvb2xzLmFudC5maWx0ZXJzLG9yZy5hcGFjaGUudG9vbHMuYW50LmZpbHRlcnMudXRpbCxvcg0KKyBnLmFwYWNoZS50b29scy5hbnQuaGVscGVyLG9yZy5hcGFjaGUudG9vbHMuYW50LmlucHV0LG9yZy5hcGFjaGUudG9vbHMNCisgLmFudC5sYXVuY2gsb3JnLmFwYWNoZS50b29scy5hbnQubGlzdGVuZXIsb3JnLmFwYWNoZS50b29scy5hbnQubG9hZGVyDQorICxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcyxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5jb21waWxlcg0KKyBzLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLmNvbmRpdGlvbixvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGUNCisgZnMuY3ZzbGliLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLmVtYWlsLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhDQorIHNrZGVmcy5vcHRpb25hbCxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5vcHRpb25hbC5jY20sb3JnLmFwYWNoZQ0KKyAudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLmNsZWFyY2FzZSxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy4NCisgb3B0aW9uYWwuZGVwZW5kLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLmRlcGVuZC5jb25zdGFuDQorIHRwb29sLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLmRvdG5ldCxvcmcuYXBhY2hlLnRvb2xzLg0KKyBhbnQudGFza2RlZnMub3B0aW9uYWwuZWpiLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLmV4dGUNCisgbnNpb24sb3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnMub3B0aW9uYWwuZXh0ZW5zaW9uLnJlc29sdmVycyxvcmcuDQorIGFwYWNoZS50b29scy5hbnQudGFza2RlZnMub3B0aW9uYWwuaTE4bixvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcw0KKyAub3B0aW9uYWwuaW1hZ2Usb3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnMub3B0aW9uYWwuajJlZSxvcmcuYXBhY2gNCisgZS50b29scy5hbnQudGFza2RlZnMub3B0aW9uYWwuamF2YWNjLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wDQorIHRpb25hbC5qYXZhaCxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5vcHRpb25hbC5qZGVwZW5kLG9yZy5hcGFjaA0KKyBlLnRvb2xzLmFudC50YXNrZGVmcy5vcHRpb25hbC5qbGluayxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5vcHQNCisgaW9uYWwuanNwLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLmpzcC5jb21waWxlcnMsb3JnLmFwDQorIGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLmp1bml0LG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLg0KKyBvcHRpb25hbC5qdW5pdC54c2wsb3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnMub3B0aW9uYWwubmF0aXZlMmFzY2kNCisgaSxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5vcHRpb25hbC5uZXQsb3JnLmFwYWNoZS50b29scy5hbnQudGFzDQorIGtkZWZzLm9wdGlvbmFsLnBlcmZvcmNlLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLnB2Y3Msbw0KKyByZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLnNjbSxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGUNCisgZnMub3B0aW9uYWwuc2NyaXB0LG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLnNvcyxvcmcuYXBhDQorIGNoZS50b29scy5hbnQudGFza2RlZnMub3B0aW9uYWwuc291bmQsb3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnMubw0KKyBwdGlvbmFsLnNwbGFzaCxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5vcHRpb25hbC5zc2gsb3JnLmFwYWNoZS4NCisgdG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLnN0YXJ0ZWFtLG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wDQorIHRpb25hbC51bml4LG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsLnZzcyxvcmcuYXBhY2hlLnRvbw0KKyBscy5hbnQudGFza2RlZnMub3B0aW9uYWwud2luZG93cyxvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5ybWljLG8NCisgcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcyxvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5jb25kaXRpb25zLG9yZy5hDQorIHBhY2hlLnRvb2xzLmFudC50eXBlcy5tYXBwZXJzLG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLm9wdGlvbmFsLG9yZw0KKyAuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5vcHRpb25hbC5kZXBlbmQsb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMub3ANCisgdGlvbmFsLmltYWdlLG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLnJlc29sdmVyLG9yZy5hcGFjaGUudG9vbHMuYW50DQorIC50eXBlcy5yZXNvdXJjZXMsb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMucmVzb3VyY2VzLmNvbXBhcmF0b3JzLG9yZw0KKyAuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5yZXNvdXJjZXMuc2VsZWN0b3JzLG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGUNCisgcy5zZWxlY3RvcnMsb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuc2VsZWN0b3JzLm1vZGlmaWVkc2VsZWN0b3Isb3JnDQorIC5hcGFjaGUudG9vbHMuYW50LnR5cGVzLnNwaSxvcmcuYXBhY2hlLnRvb2xzLmFudC51dGlsLG9yZy5hcGFjaGUudG9vbA0KKyBzLmFudC51dGlsLmRlcGVuZCxvcmcuYXBhY2hlLnRvb2xzLmFudC51dGlsLmRlcGVuZC5iY2VsLG9yZy5hcGFjaGUudG8NCisgb2xzLmFudC51dGlsLmZhY2FkZSxvcmcuYXBhY2hlLnRvb2xzLmFudC51dGlsLmphdmExNSxvcmcuYXBhY2hlLnRvb2xzDQorIC5hbnQudXRpbC5vcHRpb25hbCxvcmcuYXBhY2hlLnRvb2xzLmFudC51dGlsLnJlZ2V4cCxvcmcuYXBhY2hlLnRvb2xzLg0KKyBiemlwMixvcmcuYXBhY2hlLnRvb2xzLm1haWwsb3JnLmFwYWNoZS50b29scy50YXIsb3JnLmFwYWNoZS50b29scy56aXANCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uub3NnaQ0KKw0KK05hbWU6IGxpYi9hbnQtYXBhY2hlLWJzZi5qYXINCitTSEExLURpZ2VzdDogY0xiVGg1c2luYkxXR1dVRENTODRuMGkyYTBFPQ0KKw0KK05hbWU6IGxpYi9hbnQtdHJheC5qYXINCitTSEExLURpZ2VzdDogM0hLY3NJUkpLUGxyZnVJYUpVRE90R0VuZHJnPQ0KKw0KK05hbWU6IGV0Yy9tYXVkaXQtZnJhbWVzLnhzbA0KK1NIQTEtRGlnZXN0OiBCSVpHVkJHZSt0K29MN05CVHRuRjZTU1IyVUk9DQorDQorTmFtZTogYmluL2xjcC5iYXQNCitTSEExLURpZ2VzdDogdFZaOWI3ZlBiMFZ4SzZWdHhkYkhML1Nuc2xjPQ0KKw0KK05hbWU6IGJpbi9ydW5yYy5jbWQNCitTSEExLURpZ2VzdDogdEVCWlM2blhackY3N1E1b09PME55ZmZuVTI4PQ0KKw0KK05hbWU6IGV0Yy9qZGVwZW5kLnhzbA0KK1NIQTEtRGlnZXN0OiBPTXpuSHJlU2tTVXIrNVlPdE5BbFpaTGpaV1E9DQorDQorTmFtZTogYmluL2FudGVudi5jbWQNCitTSEExLURpZ2VzdDogMk5JeHcrb2pLWmVLN0NOZUx0clI3a0ZORzJFPQ0KKw0KK05hbWU6IGFib3V0X2ZpbGVzL0xJQ0VOU0Uuc2F4LnR4dA0KK1NIQTEtRGlnZXN0OiB1TG5RbjJxd1Q3N2FKNk1UaHVMZVd6MUk1ZWs9DQorDQorTmFtZTogTUVUQS1JTkYvZWNsaXBzZS5pbmYNCitTSEExLURpZ2VzdDogdStGOGovR0FFOHR6ckRyeTkrd1QzQ3ZnODFZPQ0KKw0KK05hbWU6IGxpYi9hbnQtbGF1bmNoZXIuamFyDQorU0hBMS1EaWdlc3Q6IEdQSUxTT2FuMTBvUVIwWHNuSVVwQWtOM2hXOD0NCisNCitOYW1lOiBsaWIvYW50LWFwYWNoZS1iY2VsLmphcg0KK1NIQTEtRGlnZXN0OiAyNDl2UVdLRktVcG9ZMndzeS9nVllSVlFBOVk9DQorDQorTmFtZTogbGliL2FudC1hbnRsci5qYXINCitTSEExLURpZ2VzdDogc1Vqbkoyc2NwRXhucUZ0N3czd1RyeFBCek13PQ0KKw0KK05hbWU6IGV0Yy9jaGFuZ2Vsb2cueHNsDQorU0hBMS1EaWdlc3Q6IHFobFFFZ0REWkk4WUduRC9Mby9PTExkcHdFND0NCisNCitOYW1lOiBldGMvamRlcGVuZC1mcmFtZXMueHNsDQorU0hBMS1EaWdlc3Q6IHppU3lESnJJNkNZenVsVlA3eGJGdU1BazYydz0NCisNCitOYW1lOiBsaWIvYW50LXN0YXJ0ZWFtLmphcg0KK1NIQTEtRGlnZXN0OiAvRTNvdUVQa1JQTDNXQnZlZnpHUnNjazVsbWM9DQorDQorTmFtZTogYWJvdXQuaHRtbA0KK1NIQTEtRGlnZXN0OiBOMGVsZktQN3VZdVlMQVRPaDVYYUUxUDNuWEk9DQorDQorTmFtZTogbGliL2FudC1qYWkuamFyDQorU0hBMS1EaWdlc3Q6IE1hbXRiS2lPZkNZeWFLTEJzTnVMN0hkYXNUQT0NCisNCitOYW1lOiBsaWIvYW50LWp1bml0Lmphcg0KK1NIQTEtRGlnZXN0OiB2S00zbFNZYlk4aGx4S3YvZWg0OEV6b01yNHM9DQorDQorTmFtZTogbGliL2FudC1zd2luZy5qYXINCitTSEExLURpZ2VzdDogaDg5amlsM1lTeGsvc0x5OEhadWJRRGFxWlpBPQ0KKw0KK05hbWU6IGxpYi9hbnQtYXBhY2hlLWxvZzRqLmphcg0KK1NIQTEtRGlnZXN0OiB5bzRCV3hGekdKdkZHbHdBYTkrbHFvb0craUU9DQorDQorTmFtZTogYmluL2FudA0KK1NIQTEtRGlnZXN0OiAxaFo3SThyeXh1UUE4ZmZ1OTVrNDA5SlNweE09DQorDQorTmFtZTogYmluL2FudC5jbWQNCitTSEExLURpZ2VzdDogWURXUy96SEhhUG4wa0VabS9BejQrdkpMektJPQ0KKw0KK05hbWU6IGxpYi9hbnQtY29tbW9ucy1uZXQuamFyDQorU0hBMS1EaWdlc3Q6IGNXMGNyV05ZZ3FnYk51ZXpNd09Velk5eXNmWT0NCisNCitOYW1lOiBsaWIvYW50LWpzY2guamFyDQorU0hBMS1EaWdlc3Q6IDJjV0hyUWZZWHFKNk94NUVTQyt2bkxVbUtUUT0NCisNCitOYW1lOiBsaWIvYW50LW5ldHJleHguamFyDQorU0hBMS1EaWdlc3Q6IEwrdm9VTEIwSlk5U0hLWFZRSjFMREhuN2JVST0NCisNCitOYW1lOiBldGMvY2hlY2tzdHlsZS9jaGVja3N0eWxlLXRleHQueHNsDQorU0hBMS1EaWdlc3Q6IHY3SER6alQ4VklNb285bmJjek1wUTRSODlPQT0NCisNCitOYW1lOiBsaWIvYW50LWpkZXBlbmQuamFyDQorU0hBMS1EaWdlc3Q6IGw4TXRFTkJlZmEyL1hwMjRxQStKOWE5M1lJTT0NCisNCitOYW1lOiBsaWIvYW50LXN0eWxlYm9vay5qYXINCitTSEExLURpZ2VzdDogdVFaNDFJanlFMXRLOTY1WVN4c3FQK2pxSzBjPQ0KKw0KK05hbWU6IGFib3V0X2ZpbGVzL05PVElDRQ0KK1NIQTEtRGlnZXN0OiBNdTNnUUhKbDk2M1ZaSitCQ0U5MDZaQWhtWFk9DQorDQorTmFtZTogZXRjL2NvdmVyYWdlLWZyYW1lcy54c2wNCitTSEExLURpZ2VzdDogQ3VXbVYzODBHNy9IM0ZSd1BwK2ZlQWc5ZDdFPQ0KKw0KK05hbWU6IGxpYi9hbnQtbm9kZXBzLmphcg0KK1NIQTEtRGlnZXN0OiBvNWV1RG5TeDNUS1V1ZmRocU9jZGQ4NVJNMjA9DQorDQorTmFtZTogYmluL2NvbXBsZXRlLWFudC1jbWQucGwNCitTSEExLURpZ2VzdDogdThTeXFxTGg1U3lxRVBlOGJyTS9nbENnbFFvPQ0KKw0KK05hbWU6IGFib3V0X2ZpbGVzL0xJQ0VOU0UuZG9tLmh0bWwNCitTSEExLURpZ2VzdDogOUY4Y1phQ2dyaUN0ZTBUNk10NWhBRnVtYWRrPQ0KKw0KK05hbWU6IGV0Yy90YWdkaWZmLnhzbA0KK1NIQTEtRGlnZXN0OiBRdlhUa2c5amdmZ0NNYm0vSWRxay91TmY0ZEk9DQorDQorTmFtZTogZXRjL2p1bml0LWZyYW1lcy54c2wNCitTSEExLURpZ2VzdDogd1NCUUZIY1hUMVhqSFBXZms0MWo4WEgxcWVRPQ0KKw0KK05hbWU6IGxpYi9hbnQtd2VibG9naWMuamFyDQorU0hBMS1EaWdlc3Q6IEo2RiswSDdmT05mTldVQ3dTcWIrN0lLM1JrYz0NCisNCitOYW1lOiBsaWIvYW50LWptZi5qYXINCitTSEExLURpZ2VzdDogTkdQWFlxUVJzUkVISmU4cXNFeVBBZzJSVUFNPQ0KKw0KK05hbWU6IGJpbi9hbnQuYmF0DQorU0hBMS1EaWdlc3Q6IHAwTGtaRXlEL3BNUkY4VW85SHh0ZTU4QjlkST0NCisNCitOYW1lOiBwbHVnaW4ucHJvcGVydGllcw0KK1NIQTEtRGlnZXN0OiBpUU8zaGxHWmY0NWczWTdhanRDbUNVak1xMzA9DQorDQorTmFtZTogZXRjL2NoZWNrc3R5bGUvY2hlY2tzdHlsZS14ZG9jLnhzbA0KK1NIQTEtRGlnZXN0OiBaa3o0eWtmZ3hhZE44UkNpQ3RWckk0NmJ6dTQ9DQorDQorTmFtZTogbGliL2FudC5qYXINCitTSEExLURpZ2VzdDogQXlNeXBzY2U3WXNzVHUzdDBxS1B1QXJzc0N3PQ0KKw0KK05hbWU6IGxpYi9hbnQtamF2YW1haWwuamFyDQorU0hBMS1EaWdlc3Q6IEVZT0FjNldFQStQajhNUFBvYTFXOG5lRTFEUT0NCisNCitOYW1lOiBsaWIvYW50LWFwYWNoZS1yZXNvbHZlci5qYXINCitTSEExLURpZ2VzdDogL2JoaDNQeFpLcGNtNEVtaVFSc093ODFhSGxJPQ0KKw0KK05hbWU6IGJpbi9hbnRSdW4NCitTSEExLURpZ2VzdDogSFhsRHJ0TGlMWVFzNFhrUGJrc0g2UHptaVE0PQ0KKw0KK05hbWU6IGJpbi9lbnZzZXQuY21kDQorU0hBMS1EaWdlc3Q6IG5KVzlnQlZVUWN6bE1KbUFvZzRuSDJ5TnA5OD0NCisNCitOYW1lOiBiaW4vYW50UnVuLnBsDQorU0hBMS1EaWdlc3Q6IDFaakVvNTZWMjQ5Y2ZuUFNCcHpqWU5SVEx5cz0NCisNCitOYW1lOiBldGMvbW1ldHJpY3MtZnJhbWVzLnhzbA0KK1NIQTEtRGlnZXN0OiArdWVRSUZNNmFCZTZJZmM4UHJaN0Y0TWlneWs9DQorDQorTmFtZTogZXRjL2NoZWNrc3R5bGUvY2hlY2tzdHlsZS1mcmFtZXMueHNsDQorU0hBMS1EaWdlc3Q6IGFlSVRYdFVrOVlpYTVUVFZYT2Q2cWZNbVBUTT0NCisNCitOYW1lOiBsaWIvYW50LWFwYWNoZS1vcm8uamFyDQorU0hBMS1EaWdlc3Q6IFdKKytvd3lNYmNWYlkza0JKZ3Eyb05OR3NDVT0NCisNCitOYW1lOiBiaW4vYW50UnVuLmJhdA0KK1NIQTEtRGlnZXN0OiBkNzY1cHVMTGhiODJkRTVOQzVZTkNuNkRwZUE9DQorDQorTmFtZTogZXRjL2p1bml0LW5vZnJhbWVzLnhzbA0KK1NIQTEtRGlnZXN0OiA4TzRZQ1ludDVhNmdick1zSWlndlcvNEdWNGc9DQorDQorTmFtZTogYmluL3J1bmFudC5wbA0KK1NIQTEtRGlnZXN0OiBSUHNXWERHSHpiTkJHRC9pNnBUR3RRRko2b1k9DQorDQorTmFtZTogYWJvdXRfZmlsZXMvYXNsLXYyMC50eHQNCitTSEExLURpZ2VzdDogSzR1QlVpbXFpbUhrZy90TG9GaUxpMnhKR0pBPQ0KKw0KK05hbWU6IGV0Yy9qdW5pdC1mcmFtZXMteGFsYW4xLnhzbA0KK1NIQTEtRGlnZXN0OiBibGJiOGpFNlYyelR6UkdqdlZhWEw1ZlBpY009DQorDQorTmFtZTogZXRjL2xvZy54c2wNCitTSEExLURpZ2VzdDogdWxWZUdsK1dTa2JqR2JIRjdMR0E4Q3N1aC8wPQ0KKw0KK05hbWU6IGxpYi9hbnQtY29tbW9ucy1sb2dnaW5nLmphcg0KK1NIQTEtRGlnZXN0OiBWdnA0Vy90dXNqV2VtNWdONFkxY01WQUpHY2s9DQorDQorTmFtZTogbGliL2FudC1hcGFjaGUtcmVnZXhwLmphcg0KK1NIQTEtRGlnZXN0OiBIUXNjYzN4VHhVMkhLc29oOFlseVVQcHNyL1E9DQorDQorTmFtZTogYmluL3J1bmFudC5weQ0KK1NIQTEtRGlnZXN0OiBwdGJDMG14N1pBUnJnL0ZHNjRhcXFpa3ZTMkE9DQorDQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL01FVEEtSU5GL2VjbGlwc2UuaW5mIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL01FVEEtSU5GL2VjbGlwc2UuaW5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZDZmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvTUVUQS1JTkYvZWNsaXBzZS5pbmYKQEAgLTAsMCArMSw0IEBACisjUHJvY2Vzc2VkIHVzaW5nIEphcnByb2Nlc3NvcgoramFycHJvY2Vzc29yLmV4Y2x1ZGUuY2hpbGRyZW4uc2lnbiA9IHRydWUKK3BhY2syMDAuYXJncyA9IC1FNAorcGFjazIwMC5jb25kaXRpb25lZCA9IHRydWUKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9hYm91dC5odG1sIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Fib3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkNDg0ZQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9hYm91dC5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIi8+Cis8dGl0bGU+QWJvdXQ8L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+CisgCis8cD5KdW5lIDcsIDIwMDc8L3A+CQorPGgzPkxpY2Vuc2U8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSAKK2luZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgCithdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyAKK2JlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKK2FwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyAKK3Byb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQoraW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQKK2FuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnPC9hPi48L3A+CisKKzxoMz5UaGlyZCBQYXJ0eSBDb250ZW50PC9oMz4KKworPHA+VGhlIENvbnRlbnQgaW5jbHVkZXMgaXRlbXMgdGhhdCBoYXZlIGJlZW4gc291cmNlZCBmcm9tIHRoaXJkIHBhcnRpZXMgYXMgc2V0IG91dCBiZWxvdy4gSWYgeW91IAorZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBmb2xsb3dpbmcgaXMgcHJvdmlkZWQgCitmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5LCBhbmQgeW91IHNob3VsZCBsb29rIHRvIHRoZSBSZWRpc3RyaWJ1dG9yJnJzcXVvO3MgbGljZW5zZSBmb3IgCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UuPC9wPgorCis8aDQ+QW50IDEuNy4wPC9oND4KKzxwPlRoZSBwbHVnLWluIGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYXMgcGFydCBvZiB0aGUgQW50IHByb2plY3QuPC9wPgorCis8cD5Zb3VyIHVzZSBvZiB0aGUgQW50IGNvZGUgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBjb250YWluZWQKK2luIHRoZSBmaWxlIDxhIGhyZWY9ImFib3V0X2ZpbGVzL2FzbC12MjAudHh0IiB0YXJnZXQ9Il9ibGFuayI+YXNsLXYyMC50eHQ8L2E+IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC5odG1sPC9hPi4KKworPHA+VGhlIEFwYWNoZSBhdHRyaWJ1dGlvbiA8YSBocmVmPSJhYm91dF9maWxlcy9OT1RJQ0UiIHRhcmdldD0iX2JsYW5rIj5OT1RJQ0U8L2E+IGZpbGUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgQ29udGVudCBpbiBhY2NvcmRhbmNlIHdpdGggNGQgb2YgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC48L3A+CisKKzxwPkFudCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHNvZnR3YXJlOjwvcD4KKworPGJsb2NrcXVvdGU+CisJPGg0PkRPTTwvaDQ+CisJPHA+RE9NIGlzIGRldmVsb3BlZCBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bS4gIFlvdXIgdXNlIG9mIERPTSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKwlmaWxlIDxhIGhyZWY9ImFib3V0X2ZpbGVzL0xJQ0VOU0UuZG9tLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5MSUNFTlNFLmRvbS5odG1sPC9hPiB3aGljaCBpcyBpbmNsdWRlZCB3aXRoIHRoaXMgcGx1Zy1pbiBhbmQgY2FuIGFsc28gYmUgZm91bmQgYXQKKwk8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZS0xOTk4MDcyMCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvY29weXJpZ2h0LXNvZnR3YXJlLTE5OTgwNzIwPC9hPi48L3A+CisJCisJPGg0PlNBWDwvaDQ+CisJCisJPHA+U0FYIGlzIGRldmVsb3BlZCBieSB0aGUgU0FYIHByb2plY3QgKDxhIGhyZWY9Imh0dHA6Ly93d3cuc2F4cHJvamVjdC5vcmciIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnNheHByb2plY3Qub3JnPC9hPikuICBZb3VyIHVzZSBvZiBTQVggaXMgc3ViamVjdCB0byB0aGUKKwl0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZSBmb3VuZCBpbiB0aGUgZmlsZSA8YSBocmVmPSJhYm91dF9maWxlcy9MSUNFTlNFLnNheC50eHQiIHRhcmdldD0iX2JsYW5rIj5MSUNFTlNFLnNheC50eHQ8L2E+IHdoaWNoIGlzIGluY2x1ZGVkIHdpdGggdGhpcyBwbHVnLWluLjwvcD4KKzwvYmxvY2txdW90ZT4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYWJvdXRfZmlsZXMvTElDRU5TRS5kb20uaHRtbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9hYm91dF9maWxlcy9MSUNFTlNFLmRvbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTc4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYWJvdXRfZmlsZXMvTElDRU5TRS5kb20uaHRtbApAQCAtMCwwICsxLDgyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkxpY2Vuc2U8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPC9oZWFkPgorPGJvZHkgbGFuZz0iRU4tVVMiPgorPHA+VGhpcyBsaWNlbnNlIGNhbWUgZnJvbTo8YnI+Cis8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZS0xOTk4MDcyMCI+aHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9jb3B5cmlnaHQtc29mdHdhcmUtMTk5ODA3MjA8L2E+PC9wPgorCis8cD4KK1czQ64gU09GVFdBUkUgTk9USUNFIEFORCBMSUNFTlNFPGJyPgorQ29weXJpZ2h0IKkgMTk5NC0yMDAxIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+V29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bTwvYT4sICg8YSBocmVmPSJodHRwOi8vd3d3Lmxjcy5taXQuZWR1LyI+TWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neTwvYT4sIAorPGEgaHJlZj0iaHR0cDovL3d3dy5pbnJpYS5mci8iPkluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3LmtlaW8uYWMuanAvIj5LZWlvIFVuaXZlcnNpdHk8L2E+KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48YnI+Cis8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLyI+aHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC88L2E+PC9wPgorCis8cD4KK1RoaXMgVzNDIHdvcmsgKGluY2x1ZGluZyBzb2Z0d2FyZSwgZG9jdW1lbnRzLCBvciBvdGhlciByZWxhdGVkPGJyPgoraXRlbXMpIGlzIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGU8YnI+Citmb2xsb3dpbmcgbGljZW5zZS4gQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssPGJyPgoreW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGw8YnI+Citjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zOjxicj4KK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmU8YnI+CithbmQgaXRzIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24soGZvciBhbnk8YnI+CitwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0PGJyPgoreW91IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQ8YnI+Citkb2N1bWVudGF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZyBtb2RpZmljYXRpb25zLCB0aGF0PGJyPgoreW91IG1ha2U6PC9wPgorCis8cD4KK1RoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZjxicj4KK3RoZSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgd29yay48L3A+CisKKzxwPgorQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yPGJyPgordGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIGEgc2hvcnQgbm90aWNlIG9mIHRoZTxicj4KK2ZvbGxvd2luZyBmb3JtIChoeXBlcnRleHQgaXMgcHJlZmVycmVkLCB0ZXh0IGlzIHBlcm1pdHRlZCkgc2hvdWxkPGJyPgorYmUgdXNlZCB3aXRoaW4gdGhlIGJvZHkgb2YgYW55IHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSBjb2RlOjxicj4KKyJDb3B5cmlnaHQgqSBbJGRhdGUtb2Ytc29mdHdhcmVdIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZjxicj4KK1RlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlPGJyPgorUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48YnI+CitodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLyI8L3A+CisKKzxwPgorTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFczQyBmaWxlcyw8YnI+CitpbmNsdWRpbmcgdGhlIGRhdGUgY2hhbmdlcyB3ZXJlIG1hZGUuIChXZSByZWNvbW1lbmQgeW91IHByb3ZpZGUgPGJyPgorVVJJcyB0byB0aGUgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgY29kZSBpcyBkZXJpdmVkLik8L3A+CisKKzxwPgorVEhJUyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMsIiBBTkQ8YnI+CitDT1BZUklHSFQgSE9MREVSUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SPGJyPgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRjxicj4KK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFPGJyPgorVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRDxicj4KK1BBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLjxicj4KK0NPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsPGJyPgorU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEU8YnI+CitTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OLjwvcD4KKworPHA+CitUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVycyBtYXkgTk9UIGJlIHVzZWQgaW48YnI+CithZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dDxicj4KK3NwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbiB0aGlzPGJyPgorc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgdGltZXMgcmVtYWluPGJyPgord2l0aCBjb3B5cmlnaHQgaG9sZGVycy48L3A+CisKKzxwPgorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPgorVGhpcyBmb3JtdWxhdGlvbiBvZiBXM0MncyBub3RpY2UgYW5kIGxpY2Vuc2UgYmVjYW1lIGFjdGl2ZSBvbjxicj4KK0F1Z3VzdCAxNCAxOTk4IHNvIGFzIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIEdQTC4gVGhpczxicj4KK3ZlcnNpb24gZW5zdXJlcyB0aGF0IFczQyBzb2Z0d2FyZSBsaWNlbnNpbmcgdGVybXMgYXJlIG5vIG1vcmU8YnI+CityZXN0cmljdGl2ZSB0aGFuIEdQTCBhbmQgY29uc2VxdWVudGx5IFczQyBzb2Z0d2FyZSBtYXkgYmU8YnI+CitkaXN0cmlidXRlZCBpbiBHUEwgcGFja2FnZXMuIFNlZSB0aGUgb2xkZXIgZm9ybXVsYXRpb24gZm9yIHRoZTxicj4KK3BvbGljeSBwcmlvciB0byB0aGlzIGRhdGUuIFBsZWFzZSBzZWUgb3VyIENvcHlyaWdodCBGQVEgZm9yIGNvbW1vbiA8YnI+CitxdWVzdGlvbnMgYWJvdXQgdXNpbmcgbWF0ZXJpYWxzIGZyb208YnI+CitvdXIgc2l0ZSwgaW5jbHVkaW5nIHNwZWNpZmljIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBwYWNrYWdlcyBsaWtlPGJyPgorbGlid3d3LCBBbWF5YSwgYW5kIEppZ3Nhdy4gPGJyPgorT3RoZXIgcXVlc3Rpb25zIGFib3V0IHRoaXMgbm90aWNlIGNhbiBiZTxicj4KK2RpcmVjdGVkIHRvIHNpdGUtcG9saWN5QHczLm9yZy48L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYWJvdXRfZmlsZXMvTElDRU5TRS5zYXgudHh0IGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Fib3V0X2ZpbGVzL0xJQ0VOU0Uuc2F4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDZiM2RjCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Fib3V0X2ZpbGVzL0xJQ0VOU0Uuc2F4LnR4dApAQCAtMCwwICsxLDIwIEBACitUaGlzIGxpY2Vuc2UgY2FtZSBmcm9tOiBodHRwOi8vd3d3Lm1lZ2dpbnNvbi5jb20vU0FYL2NvcHlpbmcuaHRtbAorICBIb3dldmVyIHBsZWFzZSBub3RlIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTQVggbWF5IGJlIGNvdmVyZWQgCisgIHVuZGVyIGh0dHA6Ly9zYXhwcm9qZWN0Lm9yZy8/c2VsZWN0ZWQ9cGQKKworCitUaGlzIHBhZ2UgaXMgbm93IG91dCBvZiBkYXRlIC0tIHNlZSB0aGUgbmV3IFNBWCBzaXRlIGF0IAoraHR0cDovL3d3dy5zYXhwcm9qZWN0Lm9yZy8gZm9yIG1vcmUgdXAtdG8tZGF0ZQorcmVsZWFzZXMgYW5kIG90aGVyIGluZm9ybWF0aW9uLiBQbGVhc2UgY2hhbmdlIHlvdXIgYm9va21hcmtzLgorCisKK1NBWDIgaXMgRnJlZSEKKworSSBoZXJlYnkgYWJhbmRvbiBhbnkgcHJvcGVydHkgcmlnaHRzIHRvIFNBWCAyLjAgKHRoZSBTaW1wbGUgQVBJIGZvcgorWE1MKSwgYW5kIHJlbGVhc2UgYWxsIG9mIHRoZSBTQVggMi4wIHNvdXJjZSBjb2RlLCBjb21waWxlZCBjb2RlLCBhbmQKK2RvY3VtZW50YXRpb24gY29udGFpbmVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGludG8gdGhlIFB1YmxpYyBEb21haW4uCitTQVggY29tZXMgd2l0aCBOTyBXQVJSQU5UWSBvciBndWFyYW50ZWUgb2YgZml0bmVzcyBmb3IgYW55CitwdXJwb3NlLgorCitEYXZpZCBNZWdnaW5zb24sIGRhdmlkQG1lZ2dpbnNvbi5jb20KKzIwMDAtMDUtMDUKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9hYm91dF9maWxlcy9OT1RJQ0UgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYWJvdXRfZmlsZXMvTk9USUNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYjZkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYWJvdXRfZmlsZXMvTk9USUNFCkBAIC0wLDAgKzEsMTUgQEAKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgID09ICBOT1RJQ0UgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWN0aW9uIDQgZCBvZiAgICAgICAgICAgICAgICAgICAgPT0KKyAgID09ICB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0KKyAgID09ICBpbiB0aGlzIGNhc2UgZm9yIHRoZSBBcGFjaGUgQW50IGRpc3RyaWJ1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgPT0KKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieQorICAgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KKworICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGFsc28gc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IDoKKyAgICAgLSB0aGUgVzNDIGNvbnNvcnRpdW0gKGh0dHA6Ly93d3cudzNjLm9yZykgLAorICAgICAtIHRoZSBTQVggcHJvamVjdCAoaHR0cDovL3d3dy5zYXhwcm9qZWN0Lm9yZykKKworICAgUGxlYXNlIHJlYWQgdGhlIGRpZmZlcmVudCBMSUNFTlNFIGZpbGVzIHByZXNlbnQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mCisgICB0aGlzIGRpc3RyaWJ1dGlvbi4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9hYm91dF9maWxlcy9hc2wtdjIwLnR4dCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9hYm91dF9maWxlcy9hc2wtdjIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQ1Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Fib3V0X2ZpbGVzL2FzbC12MjAudHh0CkBAIC0wLDAgKzEsMjAyIEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCisKKyAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCisgICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCisgICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQorICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQorICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQorICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCisgICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCisKKyAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9hbnQgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2FudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjMzNmRiCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9hbnQKQEAgLTAsMCArMSwyOTkgQEAKKyMhIC9iaW4vc2gKKworIyAgIENvcHlyaWdodCAyMDAxLTIwMDUgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjCisjICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgRXh0cmFjdCBsYXVuY2ggYW5kIGFudCBhcmd1bWVudHMsIChzZWUgZGV0YWlscyBiZWxvdykuCithbnRfZXhlY19hcmdzPQorbm9fY29uZmlnPWZhbHNlCit1c2VfamlrZXNfZGVmYXVsdD1mYWxzZQorYW50X2V4ZWNfZGVidWc9ZmFsc2UKK3Nob3dfaGVscD1mYWxzZQorZm9yIGFyZyBpbiAiJEAiIDsgZG8KKyAgaWYgWyAiJGFyZyIgPSAiLS1ub2NvbmZpZyIgXSA7IHRoZW4KKyAgICBub19jb25maWc9dHJ1ZQorICBlbGlmIFsgIiRhcmciID0gIi0tdXNlamlrZXMiIF0gOyB0aGVuCisgICAgdXNlX2ppa2VzX2RlZmF1bHQ9dHJ1ZQorICBlbGlmIFsgIiRhcmciID0gIi0tZXhlY2RlYnVnIiBdIDsgdGhlbgorICAgIGFudF9leGVjX2RlYnVnPXRydWUKKyAgZWxpZiBbIG15IiRhcmciID0gbXkiLS1oIiAgLW8gbXkiJGFyZyIgPSBteSItLWhlbHAiICBdIDsgdGhlbgorICAgIHNob3dfaGVscD10cnVlCisgICAgYW50X2V4ZWNfYXJncz0iJGFudF9leGVjX2FyZ3MgLWgiCisgIGVsc2UKKyAgICBpZiBbICBteSIkYXJnIiA9IG15Ii1oIiAgLW8gIG15IiRhcmciID0gbXkiLWhlbHAiIF0gOyB0aGVuCisgICAgICBzaG93X2hlbHA9dHJ1ZQorICAgIGZpCisgICAgYW50X2V4ZWNfYXJncz0iJGFudF9leGVjX2FyZ3MgXCIkYXJnXCIiCisgIGZpCitkb25lCisKKyMgU291cmNlL2RlZmF1bHQgYW50IGNvbmZpZ3VyYXRpb24KK2lmICRub19jb25maWcgOyB0aGVuCisgIHJwbV9tb2RlPWZhbHNlCisgIHVzZWppa2VzPSR1c2VfamlrZXNfZGVmYXVsdAorZWxzZQorICAjIGxvYWQgc3lzdGVtLXdpZGUgYW50IGNvbmZpZ3VyYXRpb24KKyAgaWYgWyAtZiAiL2V0Yy9hbnQuY29uZiIgXSA7IHRoZW4KKyAgICAuIC9ldGMvYW50LmNvbmYKKyAgZmkKKworICAjIGxvYWQgdXNlciBhbnQgY29uZmlndXJhdGlvbgorICBpZiBbIC1mICIkSE9NRS8uYW50L2FudC5jb25mIiBdIDsgdGhlbgorICAgIC4gJEhPTUUvLmFudC9hbnQuY29uZgorICBmaQorICBpZiBbIC1mICIkSE9NRS8uYW50cmMiIF0gOyB0aGVuCisgICAgLiAiJEhPTUUvLmFudHJjIgorICBmaQorCisgICMgcHJvdmlkZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWVzCisgIGlmIFsgLXogIiRycG1fbW9kZSIgXSA7IHRoZW4KKyAgICBycG1fbW9kZT1mYWxzZQorICBmaQorICBpZiBbIC16ICIkdXNlamlrZXMiIF0gOyB0aGVuCisgICAgdXNlamlrZXM9JHVzZV9qaWtlc19kZWZhdWx0CisgIGZpCitmaQorCisjIFNldHVwIEphdmEgZW52aXJvbm1lbnQgaW4gcnBtIG1vZGUKK2lmICRycG1fbW9kZSA7IHRoZW4KKyAgaWYgWyAtZiAvdXNyL3NoYXJlL2phdmEtdXRpbHMvamF2YS1mdW5jdGlvbnMgXSA7IHRoZW4KKyAgICAuIC91c3Ivc2hhcmUvamF2YS11dGlscy9qYXZhLWZ1bmN0aW9ucworICAgIHNldF9qdm0KKyAgICBzZXRfamF2YWNtZAorICBmaQorZmkKKworIyBPUyBzcGVjaWZpYyBzdXBwb3J0LiAgJHZhciBfbXVzdF8gYmUgc2V0IHRvIGVpdGhlciB0cnVlIG9yIGZhbHNlLgorY3lnd2luPWZhbHNlOworZGFyd2luPWZhbHNlOworY2FzZSAiYHVuYW1lYCIgaW4KKyAgQ1lHV0lOKikgY3lnd2luPXRydWUgOzsKKyAgRGFyd2luKikgZGFyd2luPXRydWUKKyAgICAgICAgICAgaWYgWyAteiAiJEpBVkFfSE9NRSIgXSA7IHRoZW4KKyAgICAgICAgICAgICBKQVZBX0hPTUU9L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSmF2YVZNLmZyYW1ld29yay9Ib21lCisgICAgICAgICAgIGZpCisgICAgICAgICAgIDs7Citlc2FjCisKK2lmIFsgLXogIiRBTlRfSE9NRSIgLW8gISAtZCAiJEFOVF9IT01FIiBdIDsgdGhlbgorICAjIyByZXNvbHZlIGxpbmtzIC0gJDAgbWF5IGJlIGEgbGluayB0byBhbnQncyBob21lCisgIFBSRz0iJDAiCisgIHByb2duYW1lPWBiYXNlbmFtZSAiJDAiYAorCisgICMgbmVlZCB0aGlzIGZvciByZWxhdGl2ZSBzeW1saW5rcworICB3aGlsZSBbIC1oICIkUFJHIiBdIDsgZG8KKyAgICBscz1gbHMgLWxkICIkUFJHImAKKyAgICBsaW5rPWBleHByICIkbHMiIDogJy4qLT4gXCguKlwpJCdgCisgICAgaWYgZXhwciAiJGxpbmsiIDogJy8uKicgPiAvZGV2L251bGw7IHRoZW4KKyAgICBQUkc9IiRsaW5rIgorICAgIGVsc2UKKyAgICBQUkc9YGRpcm5hbWUgIiRQUkciYCIvJGxpbmsiCisgICAgZmkKKyAgZG9uZQorCisgIEFOVF9IT01FPWBkaXJuYW1lICIkUFJHImAvLi4KKworICAjIG1ha2UgaXQgZnVsbHkgcXVhbGlmaWVkCisgIEFOVF9IT01FPWBjZCAiJEFOVF9IT01FIiAmJiBwd2RgCitmaQorCisjIEZvciBDeWd3aW4sIGVuc3VyZSBwYXRocyBhcmUgaW4gVU5JWCBmb3JtYXQgYmVmb3JlIGFueXRoaW5nIGlzIHRvdWNoZWQKK2lmICRjeWd3aW4gOyB0aGVuCisgIFsgLW4gIiRBTlRfSE9NRSIgXSAmJgorICAgIEFOVF9IT01FPWBjeWdwYXRoIC0tdW5peCAiJEFOVF9IT01FImAKKyAgWyAtbiAiJEpBVkFfSE9NRSIgXSAmJgorICAgIEpBVkFfSE9NRT1gY3lncGF0aCAtLXVuaXggIiRKQVZBX0hPTUUiYAorZmkKKworIyBzZXQgQU5UX0xJQiBsb2NhdGlvbgorQU5UX0xJQj0iJHtBTlRfSE9NRX0vbGliIgorCitpZiBbIC16ICIkSkFWQUNNRCIgXSA7IHRoZW4KKyAgaWYgWyAtbiAiJEpBVkFfSE9NRSIgIF0gOyB0aGVuCisgICAgaWYgWyAteCAiJEpBVkFfSE9NRS9qcmUvc2gvamF2YSIgXSA7IHRoZW4KKyAgICAgICMgSUJNJ3MgSkRLIG9uIEFJWCB1c2VzIHN0cmFuZ2UgbG9jYXRpb25zIGZvciB0aGUgZXhlY3V0YWJsZXMKKyAgICAgIEpBVkFDTUQ9IiRKQVZBX0hPTUUvanJlL3NoL2phdmEiCisgICAgZWxzZQorICAgICAgSkFWQUNNRD0iJEpBVkFfSE9NRS9iaW4vamF2YSIKKyAgICBmaQorICBlbHNlCisgICAgSkFWQUNNRD1gd2hpY2ggamF2YSAyPiAvZGV2L251bGwgYAorICAgIGlmIFsgLXogIiRKQVZBQ01EIiBdIDsgdGhlbgorICAgICAgICBKQVZBQ01EPWphdmEKKyAgICBmaQorICBmaQorZmkKKworaWYgWyAhIC14ICIkSkFWQUNNRCIgXSA7IHRoZW4KKyAgZWNobyAiRXJyb3I6IEpBVkFfSE9NRSBpcyBub3QgZGVmaW5lZCBjb3JyZWN0bHkuIgorICBlY2hvICIgIFdlIGNhbm5vdCBleGVjdXRlICRKQVZBQ01EIgorICBleGl0IDEKK2ZpCisKKyMgQnVpbGQgbG9jYWwgY2xhc3NwYXRoIHVzaW5nIGp1c3QgdGhlIGxhdW5jaGVyIGluIG5vbi1ycG0gbW9kZSBvcgorIyB1c2UgdGhlIEpwYWNrYWdlIGhlbHBlciBpbiBycG0gbW9kZSB3aXRoIGJhc2ljIGFuZCBkZWZhdWx0IGphcnMKKyMgc3BlY2lmaWVkIGluIHRoZSBhbnQuY29uZiBjb25maWd1cmF0aW9uLiBCZWNhdXNlIHRoZSBsYXVuY2hlciBpcworIyB1c2VkLCBsaWJyYXJpZXMgbGlua2VkIGluIEFOVF9IT01FIHdpbGwgYWxzbyBiZSBpbmNsdWRlLCBidXQgdGhpcworIyBpcyBkaXNjb3VyYWdlZCBhcyBpdCBpcyBub3QgamF2YS12ZXJzaW9uIHNhZmUuIEEgdXNlciBzaG91bGQKKyMgcmVxdWVzdCBvcHRpb25hbCBqYXJzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgdmlhIHRoZSBPUFRfSkFSX0xJU1QKKyMgdmFyaWFibGUKK2lmICRycG1fbW9kZSAmJiBbIC1mIC91c3IvYmluL2J1aWxkLWNsYXNzcGF0aCBdIDsgdGhlbgorICBMT0NBTENMQVNTUEFUSD0iJCgvdXNyL2Jpbi9idWlsZC1jbGFzc3BhdGggYW50IGFudC1sYXVuY2hlciBqYXhwX3BhcnNlcl9pbXBsIHhtbC1jb21tb25zLWFwaXMpIgorICAjIElmIHRoZSB1c2VyIHJlcXVlc3RlZCB0byB0cnkgdG8gYWRkIHNvbWUgb3RoZXIgamFycyB0byB0aGUgY2xhc3NwYXRoCisgIGlmIFsgLW4gIiRPUFRfSkFSX0xJU1QiIF0gOyB0aGVuCisgICAgX09QVENMQVNTUEFUSD0iJCgvdXNyL2Jpbi9idWlsZC1jbGFzc3BhdGggJE9QVF9KQVJfTElTVCAyPiAvZGV2L251bGwpIgorICAgIGlmIFsgLW4gIiRfT1BUQ0xBU1NQQVRIIiBdIDsgdGhlbiAKKyAgICAgIExPQ0FMQ0xBU1NQQVRIPSIkTE9DQUxDTEFTU1BBVEg6JF9PUFRDTEFTU1BBVEgiCisgICAgZmkKKyAgZmkKKworICAjIEV4cGxpY2l0bHkgYWRkIGphdmFjIHBhdGggdG8gY2xhc3NwYXRoLCBhc3N1bWUgSkFWQV9IT01FIHNldAorICAjIHByb3Blcmx5IGluIHJwbSBtb2RlCisgIGlmIFsgLWYgIiRKQVZBX0hPTUUvbGliL3Rvb2xzLmphciIgXSA7IHRoZW4KKyAgICBMT0NBTENMQVNTUEFUSD0iJExPQ0FMQ0xBU1NQQVRIOiRKQVZBX0hPTUUvbGliL3Rvb2xzLmphciIKKyAgZmkKKyAgaWYgWyAtZiAiJEpBVkFfSE9NRS9saWIvY2xhc3Nlcy56aXAiIF0gOyB0aGVuCisgICAgTE9DQUxDTEFTU1BBVEg9IiRMT0NBTENMQVNTUEFUSDokSkFWQV9IT01FL2xpYi9jbGFzc2VzLnppcCIKKyAgZmkKKworICAjIGlmIENMQVNTUEFUSF9PVkVSUklERSBlbnYgdmFyIGlzIHNldCwgTE9DQUxDTEFTU1BBVEggd2lsbCBiZQorICAjIHVzZXIgQ0xBU1NQQVRIIGZpcnN0IGFuZCBhbnQtZm91bmQgamFycyBhZnRlci4KKyAgIyBJbiB0aGF0IGNhc2UsIHRoZSB1c2VyIENMQVNTUEFUSCB3aWxsIG92ZXJyaWRlIGFudC1mb3VuZCBqYXJzCisgICMKKyAgIyBpZiBDTEFTU1BBVEhfT1ZFUlJJREUgaXMgbm90IHNldCwgd2UnbGwgaGF2ZSB0aGUgbm9ybWFsIGJlaGF2aW91cgorICAjIHdpdGggYW50LWZvdW5kIGphcnMgZmlyc3QgYW5kIHVzZXIgQ0xBU1NQQVRIIGFmdGVyCisgIGlmIFsgLW4gIiRDTEFTU1BBVEgiIF0gOyB0aGVuCisgICAgIyBtZXJnZSBsb2NhbCBhbmQgc3BlY2lmaWVkIGNsYXNzcGF0aCAKKyAgICBpZiBbIC16ICIkTE9DQUxDTEFTU1BBVEgiIF0gOyB0aGVuIAorICAgICAgTE9DQUxDTEFTU1BBVEg9IiRDTEFTU1BBVEgiCisgICAgZWxpZiBbIC1uICIkQ0xBU1NQQVRIX09WRVJSSURFIiBdIDsgdGhlbgorICAgICAgTE9DQUxDTEFTU1BBVEg9IiRDTEFTU1BBVEg6JExPQ0FMQ0xBU1NQQVRIIgorICAgIGVsc2UKKyAgICAgIExPQ0FMQ0xBU1NQQVRIPSIkTE9DQUxDTEFTU1BBVEg6JENMQVNTUEFUSCIKKyAgICBmaQorCisgICAgIyByZW1vdmUgY2xhc3MgcGF0aCBmcm9tIGxhdW5jaGVyIC1jcCBvcHRpb24KKyAgICBDTEFTU1BBVEg9IiIKKyAgZmkKK2Vsc2UKKyAgIyBub3QgdXNpbmcgcnBtX21vZGU7IHVzZSBsYXVuY2hlciB0byBkZXRlcm1pbmUgY2xhc3NwYXRocworICBpZiBbIC16ICIkTE9DQUxDTEFTU1BBVEgiIF0gOyB0aGVuCisgICAgICBMT0NBTENMQVNTUEFUSD0kQU5UX0xJQi9hbnQtbGF1bmNoZXIuamFyCisgIGVsc2UKKyAgICAgIExPQ0FMQ0xBU1NQQVRIPSRBTlRfTElCL2FudC1sYXVuY2hlci5qYXI6JExPQ0FMQ0xBU1NQQVRICisgIGZpCitmaQorCitpZiBbIC1uICIkSkFWQV9IT01FIiBdIDsgdGhlbgorICAjIE9TWCBoYWNrIHRvIG1ha2UgQW50IHdvcmsgd2l0aCBqaWtlcworICBpZiAkZGFyd2luIDsgdGhlbgorICAgIE9TWEhBQ0s9IiR7SkFWQV9IT01FfS8uLi9DbGFzc2VzIgorICAgIGlmIFsgLWQgIiR7T1NYSEFDS30iIF0gOyB0aGVuCisgICAgICBmb3IgaSBpbiAiJHtPU1hIQUNLfSIvKi5qYXIKKyAgICAgIGRvCisgICAgICAgIEpJS0VTUEFUSD0iJEpJS0VTUEFUSDokaSIKKyAgICAgIGRvbmUKKyAgICBmaQorICBmaQorZmkKKworIyBBbGxvdyBKaWtlcyBzdXBwb3J0IChvZmYgYnkgZGVmYXVsdCkKK2lmICR1c2VqaWtlczsgdGhlbgorICBBTlRfT1BUUz0iJEFOVF9PUFRTIC1EYnVpbGQuY29tcGlsZXI9amlrZXMiCitmaQorCisjIEZvciBDeWd3aW4sIHN3aXRjaCBwYXRocyB0byBhcHByb3ByaWF0ZSBmb3JtYXQgYmVmb3JlIHJ1bm5pbmcgamF2YQorIyBGb3IgUEFUSHMgY29udmVydCB0byB1bml4IGZvcm1hdCBmaXJzdCwgdGhlbiB0byB3aW5kb3dzIGZvcm1hdCB0byBlbnN1cmUKKyMgYm90aCBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuIFByb2JhYmx5IHRoaXMgd2lsbCBmYWlsIG9uIGRpcmVjdG9yaWVzIHdpdGggOworIyBpbiB0aGUgbmFtZSBpbiB0aGUgcGF0aC4gTGV0J3MgYXNzdW1lIHRoYXQgcGF0aHMgY29udGFpbmluZyA7IGFyZSBtb3JlCisjIHJhcmUgdGhhbiB3aW5kb3dzIHN0eWxlIHBhdGhzIG9uIGN5Z3dpbi4KK2lmICRjeWd3aW47IHRoZW4KKyAgaWYgWyAiJE9TIiA9ICJXaW5kb3dzX05UIiBdICYmIGN5Z3BhdGggLW0gLj4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgZm9ybWF0PW1peGVkCisgIGVsc2UKKyAgICBmb3JtYXQ9d2luZG93cworICBmaQorICBBTlRfSE9NRT1gY3lncGF0aCAtLSRmb3JtYXQgIiRBTlRfSE9NRSJgCisgIEFOVF9MSUI9YGN5Z3BhdGggLS0kZm9ybWF0ICIkQU5UX0xJQiJgCisgIEpBVkFfSE9NRT1gY3lncGF0aCAtLSRmb3JtYXQgIiRKQVZBX0hPTUUiYAorICBMQ1BfVEVNUD1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTE9DQUxDTEFTU1BBVEgiYAorICBMT0NBTENMQVNTUEFUSD1gY3lncGF0aCAtLXBhdGggLS0kZm9ybWF0ICIkTENQX1RFTVAiYAorICBpZiBbIC1uICIkQ0xBU1NQQVRIIiBdIDsgdGhlbgorICAgIENQX1RFTVA9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJENMQVNTUEFUSCJgCisgICAgQ0xBU1NQQVRIPWBjeWdwYXRoIC0tcGF0aCAtLSRmb3JtYXQgIiRDUF9URU1QImAKKyAgZmkKKyAgQ1lHSE9NRT1gY3lncGF0aCAtLSRmb3JtYXQgIiRIT01FImAKK2ZpCisKKyMgU2hvdyBzY3JpcHQgaGVscCBpZiByZXF1ZXN0ZWQKK2lmICRzaG93X2hlbHAgOyB0aGVuCisgIGVjaG8gJDAgJ1tzY3JpcHQgb3B0aW9uc10gW29wdGlvbnNdIFt0YXJnZXQgW3RhcmdldDIgW3RhcmdldDNdIC4uXV0nCisgIGVjaG8gJ1NjcmlwdCBPcHRpb25zOicKKyAgZWNobyAnICAtLWhlbHAsIC0taCAgICAgICAgICAgIHByaW50IHRoaXMgbWVzc2FnZSBhbmQgYW50IGhlbHAnCisgIGVjaG8gJyAgLS1ub2NvbmZpZyAgICAgICAgICAgICBzdXBwcmVzcyBzb3VyY2luZyBvZiAvZXRjL2FudC5jb25mLCcKKyAgZWNobyAnICAgICAgICAgICAgICAgICAgICAgICAgICRIT01FLy5hbnQvYW50LmNvbmYsIGFuZCAkSE9NRS8uYW50cmMnCisgIGVjaG8gJyAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzJworICBlY2hvICcgIC0tdXNlamlrZXMgICAgICAgICAgICAgZW5hYmxlIHVzZSBvZiBqaWtlcyBieSBkZWZhdWx0LCB1bmxlc3MnCisgIGVjaG8gJyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgZXhwbGljaXRseSBpbiBjb25maWd1cmF0aW9uIGZpbGVzJworICBlY2hvICcgIC0tZXhlY2RlYnVnICAgICAgICAgICAgcHJpbnQgYW50IGV4ZWMgbGluZSBnZW5lcmF0ZWQgYnkgdGhpcycKKyAgZWNobyAnICAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaCBzY3JpcHQnCisgIGVjaG8gJyAgJworZmkKKyMgYWRkIGEgc2Vjb25kIGJhY2tzbGFzaCB0byB2YXJpYWJsZXMgdGVybWluYXRlZCBieSBhIGJhY2tzbGFzaCB1bmRlciBjeWd3aW4KK2lmICRjeWd3aW47IHRoZW4KKyAgY2FzZSAiJEFOVF9IT01FIiBpbgorICAgICpcXCApCisgICAgQU5UX0hPTUU9IiRBTlRfSE9NRVxcIgorICAgIDs7CisgIGVzYWMKKyAgY2FzZSAiJENZR0hPTUUiIGluCisgICAgKlxcICkKKyAgICBDWUdIT01FPSIkQ1lHSE9NRVxcIgorICAgIDs7CisgIGVzYWMKKyAgY2FzZSAiJEpJS0VTUEFUSCIgaW4KKyAgICAqXFwgKQorICAgIEpJS0VTUEFUSD0iJEpJS0VTUEFUSFxcIgorICAgIDs7CisgIGVzYWMKKyAgY2FzZSAiJExPQ0FMQ0xBU1NQQVRIIiBpbgorICAgICpcXCApCisgICAgTE9DQUxDTEFTU1BBVEg9IiRMT0NBTENMQVNTUEFUSFxcIgorICAgIDs7CisgIGVzYWMKKyAgY2FzZSAiJENMQVNTUEFUSCIgaW4KKyAgICAqXFwgKQorICAgIENMQVNTUEFUSD0iJENMQVNTUEFUSFxcIgorICAgIDs7CisgIGVzYWMKK2ZpCisjIEV4ZWN1dGUgYW50IHVzaW5nIGV2YWwvZXhlYyB0byBwcmVzZXJ2ZSBzcGFjZXMgaW4gcGF0aHMsCisjIGphdmEgb3B0aW9ucywgYW5kIGFudCBhcmdzCithbnRfc3lzX29wdHM9CitpZiBbIC1uICIkQ1lHSE9NRSIgXTsgdGhlbgorICBpZiBbIC1uICIkSklLRVNQQVRIIiBdOyB0aGVuCisgICAgYW50X3N5c19vcHRzPSItRGppa2VzLmNsYXNzLnBhdGg9XCIkSklLRVNQQVRIXCIgLURjeWd3aW4udXNlci5ob21lPVwiJENZR0hPTUVcIiIKKyAgZWxzZQorICAgIGFudF9zeXNfb3B0cz0iLURjeWd3aW4udXNlci5ob21lPVwiJENZR0hPTUVcIiIKKyAgZmkKK2Vsc2UKKyAgaWYgWyAtbiAiJEpJS0VTUEFUSCIgXTsgdGhlbgorICAgIGFudF9zeXNfb3B0cz0iLURqaWtlcy5jbGFzcy5wYXRoPVwiJEpJS0VTUEFUSFwiIgorICBmaQorZmkKK2FudF9leGVjX2NvbW1hbmQ9ImV4ZWMgXCIkSkFWQUNNRFwiICRBTlRfT1BUUyAtY2xhc3NwYXRoIFwiJExPQ0FMQ0xBU1NQQVRIXCIgLURhbnQuaG9tZT1cIiRBTlRfSE9NRVwiIC1EYW50LmxpYnJhcnkuZGlyPVwiJEFOVF9MSUJcIiAkYW50X3N5c19vcHRzIG9yZy5hcGFjaGUudG9vbHMuYW50LmxhdW5jaC5MYXVuY2hlciAkQU5UX0FSR1MgLWNwIFwiJENMQVNTUEFUSFwiICRhbnRfZXhlY19hcmdzIgoraWYgJGFudF9leGVjX2RlYnVnIDsgdGhlbgorICAgIGVjaG8gJGFudF9leGVjX2NvbW1hbmQKK2ZpCitldmFsICRhbnRfZXhlY19jb21tYW5kCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2FudC5iYXQgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2FudC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkYWZhYgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vYW50LmJhdApAQCAtMCwwICsxLDEyNiBAQAorQGVjaG8gb2ZmCisKK1JFTSAgQ29weXJpZ2h0IDIwMDEsMjAwNC0yMDA1IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorUkVNCitSRU0gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworUkVNICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitSRU0gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorUkVNCitSRU0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK1JFTQorUkVNICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitSRU0gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitSRU0gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorUkVNICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitSRU0gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpZiBleGlzdCAiJUhPTUUlXGFudHJjX3ByZS5iYXQiIGNhbGwgIiVIT01FJVxhbnRyY19wcmUuYmF0IgorCitpZiAiJU9TJSI9PSJXaW5kb3dzX05UIiBAc2V0bG9jYWwKK2lmICIlT1MlIj09IldJTk5UIiBAc2V0bG9jYWwKKworcmVtICV+ZHAwIGlzIGV4cGFuZGVkIHBhdGhuYW1lIG9mIHRoZSBjdXJyZW50IHNjcmlwdCB1bmRlciBOVAorc2V0IERFRkFVTFRfQU5UX0hPTUU9JX5kcDAuLgorCitpZiAiJUFOVF9IT01FJSI9PSIiIHNldCBBTlRfSE9NRT0lREVGQVVMVF9BTlRfSE9NRSUKK3NldCBERUZBVUxUX0FOVF9IT01FPQorCitzZXQgX1VTRV9DTEFTU1BBVEg9eWVzCisKK3JlbSBTbHVycCB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBsb29wIGFsbG93cyBmb3IgYW4gdW5saW1pdGVkIG51bWJlcgorcmVtIG9mIGFyZ3VtZW50cyAodXAgdG8gdGhlIGNvbW1hbmQgbGluZSBsaW1pdCwgYW55d2F5KS4KK3NldCBBTlRfQ01EX0xJTkVfQVJHUz0lMQoraWYgIiIlMSIiPT0iIiIiIGdvdG8gZG9uZVN0YXJ0CitzaGlmdAorOnNldHVwQXJncworaWYgIiIlMSIiPT0iIiIiIGdvdG8gZG9uZVN0YXJ0CitpZiAiIiUxIiI9PSIiLW5vY2xhc3NwYXRoIiIgZ290byBjbGVhcmNsYXNzcGF0aAorc2V0IEFOVF9DTURfTElORV9BUkdTPSVBTlRfQ01EX0xJTkVfQVJHUyUgJTEKK3NoaWZ0Citnb3RvIHNldHVwQXJncworCityZW0gaGVyZSBpcyB0aGVyZSBpcyBhIC1ub2NsYXNzcGF0aCBpbiB0aGUgb3B0aW9ucworOmNsZWFyY2xhc3NwYXRoCitzZXQgX1VTRV9DTEFTU1BBVEg9bm8KK3NoaWZ0Citnb3RvIHNldHVwQXJncworCityZW0gVGhpcyBsYWJlbCBwcm92aWRlcyBhIHBsYWNlIGZvciB0aGUgYXJndW1lbnQgbGlzdCBsb29wIHRvIGJyZWFrIG91dAorcmVtIGFuZCBmb3IgTlQgaGFuZGxpbmcgdG8gc2tpcCB0by4KKworOmRvbmVTdGFydAorcmVtIGZpbmQgQU5UX0hPTUUgaWYgaXQgZG9lcyBub3QgZXhpc3QgZHVlIHRvIGVpdGhlciBhbiBpbnZhbGlkIHZhbHVlIHBhc3NlZAorcmVtIGJ5IHRoZSB1c2VyIG9yIHRoZSAlMCBwcm9ibGVtIG9uIFdpbmRvd3MgOXgKK2lmIGV4aXN0ICIlQU5UX0hPTUUlXGxpYlxhbnQuamFyIiBnb3RvIGNoZWNrSmF2YQorCityZW0gY2hlY2sgZm9yIGFudCBpbiBQcm9ncmFtIEZpbGVzCitpZiBub3QgZXhpc3QgIiVQcm9ncmFtRmlsZXMlXGFudCIgZ290byBjaGVja1N5c3RlbURyaXZlCitzZXQgQU5UX0hPTUU9JVByb2dyYW1GaWxlcyVcYW50Citnb3RvIGNoZWNrSmF2YQorCis6Y2hlY2tTeXN0ZW1Ecml2ZQorcmVtIGNoZWNrIGZvciBhbnQgaW4gcm9vdCBkaXJlY3Rvcnkgb2Ygc3lzdGVtIGRyaXZlCitpZiBub3QgZXhpc3QgJVN5c3RlbURyaXZlJVxhbnRcbGliXGFudC5qYXIgZ290byBjaGVja0NEcml2ZQorc2V0IEFOVF9IT01FPSVTeXN0ZW1Ecml2ZSVcYW50Citnb3RvIGNoZWNrSmF2YQorCis6Y2hlY2tDRHJpdmUKK3JlbSBjaGVjayBmb3IgYW50IGluIEM6XGFudCBmb3IgV2luOVggdXNlcnMKK2lmIG5vdCBleGlzdCBDOlxhbnRcbGliXGFudC5qYXIgZ290byBub0FudEhvbWUKK3NldCBBTlRfSE9NRT1DOlxhbnQKK2dvdG8gY2hlY2tKYXZhCisKKzpub0FudEhvbWUKK2VjaG8gQU5UX0hPTUUgaXMgc2V0IGluY29ycmVjdGx5IG9yIGFudCBjb3VsZCBub3QgYmUgbG9jYXRlZC4gUGxlYXNlIHNldCBBTlRfSE9NRS4KK2dvdG8gZW5kCisKKzpjaGVja0phdmEKK3NldCBfSkFWQUNNRD0lSkFWQUNNRCUKKworaWYgIiVKQVZBX0hPTUUlIiA9PSAiIiBnb3RvIG5vSmF2YUhvbWUKK2lmIG5vdCBleGlzdCAiJUpBVkFfSE9NRSVcYmluXGphdmEuZXhlIiBnb3RvIG5vSmF2YUhvbWUKK2lmICIlX0pBVkFDTUQlIiA9PSAiIiBzZXQgX0pBVkFDTUQ9JUpBVkFfSE9NRSVcYmluXGphdmEuZXhlCitnb3RvIGNoZWNrSmlrZXMKKworOm5vSmF2YUhvbWUKK2lmICIlX0pBVkFDTUQlIiA9PSAiIiBzZXQgX0pBVkFDTUQ9amF2YS5leGUKKworOmNoZWNrSmlrZXMKK2lmIG5vdCAiJUpJS0VTUEFUSCUiPT0iIiBnb3RvIHJ1bkFudFdpdGhKaWtlcworCis6cnVuQW50CitpZiAiJV9VU0VfQ0xBU1NQQVRIJSI9PSJubyIgZ290byBydW5BbnROb0NsYXNzcGF0aAoraWYgbm90ICIlQ0xBU1NQQVRIJSI9PSIiIGdvdG8gcnVuQW50V2l0aENsYXNzcGF0aAorIiVfSkFWQUNNRCUiICVBTlRfT1BUUyUgLWNsYXNzcGF0aCAiJUFOVF9IT01FJVxsaWJcYW50LWxhdW5jaGVyLmphciIgIi1EYW50LmhvbWU9JUFOVF9IT01FJSIgb3JnLmFwYWNoZS50b29scy5hbnQubGF1bmNoLkxhdW5jaGVyICVBTlRfQVJHUyUgJUFOVF9DTURfTElORV9BUkdTJQorZ290byBlbmQKKworOnJ1bkFudE5vQ2xhc3NwYXRoCisiJV9KQVZBQ01EJSIgJUFOVF9PUFRTJSAtY2xhc3NwYXRoICIlQU5UX0hPTUUlXGxpYlxhbnQtbGF1bmNoZXIuamFyIiAiLURhbnQuaG9tZT0lQU5UX0hPTUUlIiBvcmcuYXBhY2hlLnRvb2xzLmFudC5sYXVuY2guTGF1bmNoZXIgJUFOVF9BUkdTJSAlQU5UX0NNRF9MSU5FX0FSR1MlCitnb3RvIGVuZAorCis6cnVuQW50V2l0aENsYXNzcGF0aAorIiVfSkFWQUNNRCUiICVBTlRfT1BUUyUgLWNsYXNzcGF0aCAiJUFOVF9IT01FJVxsaWJcYW50LWxhdW5jaGVyLmphciIgIi1EYW50LmhvbWU9JUFOVF9IT01FJSIgb3JnLmFwYWNoZS50b29scy5hbnQubGF1bmNoLkxhdW5jaGVyICVBTlRfQVJHUyUgLWNwICIlQ0xBU1NQQVRIJSIgJUFOVF9DTURfTElORV9BUkdTJQorZ290byBlbmQKKworOnJ1bkFudFdpdGhKaWtlcworaWYgIiVfVVNFX0NMQVNTUEFUSCUiPT0ibm8iIGdvdG8gcnVuQW50V2l0aEppa2VzTm9DbGFzc3BhdGgKK2lmIG5vdCAiJUNMQVNTUEFUSCUiPT0iIiBnb3RvIHJ1bkFudFdpdGhKaWtlc0FuZENsYXNzcGF0aAorCis6cnVuQW50V2l0aEppa2VzTm9DbGFzc3BhdGgKKyIlX0pBVkFDTUQlIiAlQU5UX09QVFMlIC1jbGFzc3BhdGggIiVBTlRfSE9NRSVcbGliXGFudC1sYXVuY2hlci5qYXIiICItRGFudC5ob21lPSVBTlRfSE9NRSUiICItRGppa2VzLmNsYXNzLnBhdGg9JUpJS0VTUEFUSCUiIG9yZy5hcGFjaGUudG9vbHMuYW50LmxhdW5jaC5MYXVuY2hlciAlQU5UX0FSR1MlICVBTlRfQ01EX0xJTkVfQVJHUyUKK2dvdG8gZW5kCisKKzpydW5BbnRXaXRoSmlrZXNBbmRDbGFzc3BhdGgKKyIlX0pBVkFDTUQlIiAlQU5UX09QVFMlIC1jbGFzc3BhdGggIiVBTlRfSE9NRSVcbGliXGFudC1sYXVuY2hlci5qYXIiICItRGFudC5ob21lPSVBTlRfSE9NRSUiICItRGppa2VzLmNsYXNzLnBhdGg9JUpJS0VTUEFUSCUiIG9yZy5hcGFjaGUudG9vbHMuYW50LmxhdW5jaC5MYXVuY2hlciAlQU5UX0FSR1MlICAtY3AgIiVDTEFTU1BBVEglIiAlQU5UX0NNRF9MSU5FX0FSR1MlCitnb3RvIGVuZAorCis6ZW5kCitzZXQgX0pBVkFDTUQ9CitzZXQgQU5UX0NNRF9MSU5FX0FSR1M9CisKK2lmICIlT1MlIj09IldpbmRvd3NfTlQiIEBlbmRsb2NhbAoraWYgIiVPUyUiPT0iV0lOTlQiIEBlbmRsb2NhbAorCis6bWFpbkVuZAoraWYgZXhpc3QgIiVIT01FJVxhbnRyY19wb3N0LmJhdCIgY2FsbCAiJUhPTUUlXGFudHJjX3Bvc3QuYmF0IgorCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2FudC5jbWQgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2FudC5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiOTAzZgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vYW50LmNtZApAQCAtMCwwICsxLDkyIEBACisvKiAKKyAgICBDb3B5cmlnaHQgMjAwMy0yMDA0IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorICAKKyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIAorICAgIFJ1biBhbnQKKyovCisKKydAZWNobyBvZmYnCitwYXJzZSBhcmcgbW9kZSBlbnZhcmcgJzo6JyBhbnRhcmcKKworaWYgbW9kZVw9Jy4nICYgbW9kZVw9Jy4uJyAmIG1vZGVcPScvJyB0aGVuIGRvCisgIGVudmFyZyA9IG1vZGUgZW52YXJnCisgIG1vZGUgPSAnJworZW5kCisKK2lmIGFudGFyZyA9ICcnIHRoZW4gZG8KKyAgYW50YXJnID0gZW52YXJnCisgIGVudmFyZyA9ICcnCitlbmQKKworeCA9IHNldGxvY2FsKCkKKworZW52PSJPUzJFTlZJUk9OTUVOVCIKK2FudGVudiA9IF9nZXRlbnZfKCdhbnRlbnYnKQoraWYgX3Rlc3RlbnZfKCkgPSAwIHRoZW4gaW50ZXJwcmV0ICdjYWxsICInIHx8IGFudGVudiB8fCAnIicgJyInIHx8IGVudmFyZyB8fCAnIicKKworaWYgbW9kZSA9ICcnIHRoZW4gbW9kZSA9IF9nZXRlbnZfKCdBTlRfTU9ERScgJy4uJykKK2lmIG1vZGUgXD0gJy8nIHRoZW4gZG8KKyAgcnVucmMgPSBfZ2V0ZW52XygncnVucmMnKQorICBhbnRyYyA9IF9nZXRlbnZfKCdhbnRyYycgJ2FudHJjLmNtZCcpCisgIGlmIG1vZGUgPSAnLi4nIHRoZW4gbW9kZSA9ICctcicKKyAgZWxzZSBtb2RlID0gJycKKyAgaW50ZXJwcmV0ICdjYWxsICInIHx8IHJ1bnJjIHx8ICciJyBhbnRyYyAnIicgfHwgbW9kZSB8fCAnIicKK2VuZAorCitpZiBfdGVzdGVudl8oKSA9IDAgdGhlbiBkbworICBzYXkgJ0FudCBlbnZpcm9ubWVudCBpcyBub3Qgc2V0IHByb3Blcmx5JworICB4ID0gZW5kbG9jYWwoKQorICBleGl0IDE2CitlbmQKKworc2V0dGluZ3MgPSAnLURhbnQuaG9tZT0nIHx8IEFOVF9IT01FICctRGphdmEuaG9tZT0nIHx8IEpBVkFfSE9NRQorCitqYXZhID0gX2dldGVudl8oJ2phdmFjbWQnICdqYXZhJykKK29wdHMgPSB2YWx1ZSgnQU5UX09QVFMnLCxlbnYpCithcmdzID0gdmFsdWUoJ0FOVF9BUkdTJywsZW52KQorbGNwID0gdmFsdWUoJ0xPQ0FMQ0xBU1NQQVRIJywsZW52KQorY3AgPSB2YWx1ZSgnQ0xBU1NQQVRIJywsZW52KQoraWYgdmFsdWUoJ0FOVF9VU0VfQ1AnLCxlbnYpIFw9ICcnIHRoZW4gZG8KKyAgaWYgbGNwIFw9ICcnICYgcmlnaHQobGNwLCAxKSBcPSAnOycgdGhlbiBsY3AgPSBsY3AgfHwgJzsnCisgIGxjcCA9IGxjcCB8fCBjcAorICAnU0VUIENMQVNTUEFUSD0nCitlbmQKK2lmIGxjcFw9JycgdGhlbiBsY3AgPSAnLWNsYXNzcGF0aCcgbGNwCisKK2NtZCA9IGphdmEgb3B0cyBsY3AgJy1qYXInIEFOVF9IT01FIHx8J1xsaWJcYW50LWxhdW5jaGVyLmphcicgc2V0dGluZ3MgYXJncyBhbnRhcmcKK2xhdW5jaGVyID0gc3RyZWFtKEFOVF9IT01FIHx8J1xsaWJcYW50LWxhdW5jaGVyLmphcicsICdDJywgJ3F1ZXJ5IGV4aXN0cycpCitpZiBsYXVuY2hlciA9ICcnIHRoZW4gZW50cnkgPSAnb3JnLmFwYWNoZS50b29scy5hbnQuTWFpbicKK2Vsc2UgZW50cnkgPSAnb3JnLmFwYWNoZS50b29scy5hbnQubGF1bmNoLkxhdW5jaGVyJworamF2YSBvcHRzIGxjcCBlbnRyeSBzZXR0aW5ncyBhcmdzIGFudGFyZworCit4ID0gZW5kbG9jYWwoKQorCityZXR1cm4gcmMKKworX3Rlc3RlbnZfOiBwcm9jZWR1cmUgZXhwb3NlIGVudiBBTlRfSE9NRSBKQVZBX0hPTUUKK0FOVF9IT01FID0gdmFsdWUoJ0FOVF9IT01FJywsZW52KQoraWYgQU5UX0hPTUUgPSAnJyB0aGVuIHJldHVybiAwCitKQVZBX0hPTUUgPSB2YWx1ZSgnSkFWQV9IT01FJywsZW52KQoraWYgSkFWQV9IT01FID0gJycgdGhlbiByZXR1cm4gMAorY3AgPSB0cmFuc2xhdGUodmFsdWUoJ0NMQVNTUEFUSCcsLGVudikpCitpZiBwb3ModHJhbnNsYXRlKEFOVF9IT01FKSwgY3ApID0gMCB0aGVuIHJldHVybiAwCitpZiBwb3ModHJhbnNsYXRlKEpBVkFfSE9NRSksIGNwKSA9IDAgdGhlbiByZXR1cm4gMAorcmV0dXJuIDEKKworX2dldGVudl86IHByb2NlZHVyZSBleHBvc2UgZW52CitwYXJzZSBhcmcgZW52YXIgZGVmYXVsdAoraWYgZGVmYXVsdCA9ICcnIHRoZW4gZGVmYXVsdCA9IGVudmFyCit2YXIgPSB2YWx1ZSh0cmFuc2xhdGUoZW52YXIpLCxlbnYpCitpZiB2YXIgPSAnJyB0aGVuIHZhciA9IGRlZmF1bHQKK3JldHVybiB2YXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vYW50UnVuIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9hbnRSdW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkZGQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vYW50UnVuCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCisjCisjICBDb3B5cmlnaHQgIDIwMDEtMjAwMiwyMDA0IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorIyAKKyMgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAKKyMKKworIyBBcmdzOiBESVIgY29tbWFuZAorY2QgIiQxIgorQ01EPSIkMiIKK3NoaWZ0CitzaGlmdAorCitleGVjICIkQ01EIiAiJEAiCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2FudFJ1bi5iYXQgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2FudFJ1bi5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5ZTE5YgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vYW50UnVuLmJhdApAQCAtMCwwICsxLDQ3IEBACitAZWNobyBvZmYKKworUkVNCitSRU0gQ29weXJpZ2h0ICAyMDAxLTIwMDIsMjAwNC0yMDA1IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorUkVNCitSRU0gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworUkVNICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitSRU0gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorUkVNCitSRU0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKK1JFTQorUkVNICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitSRU0gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitSRU0gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorUkVNICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitSRU0gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorUkVNCitSRU0KKworaWYgIiVPUyUiPT0iV2luZG93c19OVCIgQHNldGxvY2FsCitpZiAiJU9TJSI9PSJXSU5OVCIgQHNldGxvY2FsCisKK2lmICIiJTEiIj09IiIiIiBnb3RvIHJ1bkNvbW1hbmQKKworcmVtIENoYW5nZSBkcml2ZSBhbmQgZGlyZWN0b3J5IHRvICUxCitpZiAiJU9TJSI9PSJXaW5kb3dzX05UIiBjZCAvZCAiIiUxIiIKK2lmIG5vdCAiJU9TJSI9PSJXaW5kb3dzX05UIiBjZCAiIiUxIiIKK3NoaWZ0CisKK3JlbSBTbHVycCB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBsb29wIGFsbG93cyBmb3IgYW4gdW5saW1pdGVkIG51bWJlcgorcmVtIG9mIGFncnVtZW50cyAodXAgdG8gdGhlIGNvbW1hbmQgbGluZSBsaW1pdCwgYW55d2F5KS4KK3NldCBBTlRfUlVOX0NNRD0lMQoraWYgIiIlMSIiPT0iIiIiIGdvdG8gcnVuQ29tbWFuZAorc2hpZnQKKzpsb29wCitpZiAiIiUxIiI9PSIiIiIgZ290byBydW5Db21tYW5kCitzZXQgQU5UX1JVTl9DTUQ9JUFOVF9SVU5fQ01EJSAlMQorc2hpZnQKK2dvdG8gbG9vcAorCis6cnVuQ29tbWFuZAorcmVtIGVjaG8gJUFOVF9SVU5fQ01EJQorJUFOVF9SVU5fQ01EJQorCitpZiAiJU9TJSI9PSJXaW5kb3dzX05UIiBAZW5kbG9jYWwKK2lmICIlT1MlIj09IldJTk5UIiBAZW5kbG9jYWwKKwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9hbnRSdW4ucGwgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2FudFJ1bi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2RkODY4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9hbnRSdW4ucGwKQEAgLTAsMCArMSw2NSBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAyMDAxLDIwMDMtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMKKyMgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIGFudFJ1bi5wbAorIworIyB3cmFwcGVyIHNjcmlwdCBmb3IgaW52b2tpbmcgY29tbWFuZHMgb24gYSBwbGF0Zm9ybSB3aXRoIFBlcmwgaW5zdGFsbGVkCisjIHRoaXMgaXMgYWtpbiB0byBhbnRSdW4uYmF0LCBhbmQgYW50UnVuIHRoZSBTSCBzY3JpcHQgCisjCisjIGNyZWF0ZWQ6ICAgICAgICAgMjAwMS0xMC0xOAorIyBhdXRob3I6ICAgICAgICAgIEplZmYgVHVsbGV5IGp0dWxsZXlAbm92ZWxsLmNvbSAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjYmUgZnVzc3kgYWJvdXQgdmFyaWFibGVzCit1c2Ugc3RyaWN0OworCisjdHVybiB3YXJuaW5ncyBvbiBkdXJpbmcgZGV2OyBnZW5lcmF0ZXMgYSBmZXcgc3B1cmlvdXMgdW5pbml0aWFsaXNlZCB2YXIgYWNjZXNzIHdhcm5pbmdzCisjdXNlIHdhcm5pbmdzOworCisjYW5kIHNldCAkZGVidWcgdG8gMSB0byB0dXJuIG9uIHRyYWNlIGluZm8gKGN1cnJlbnRseSB1bnVzZWQpCitteSAkZGVidWc9MTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgY2hhbmdlIGRyaXZlIGFuZCBkaXJlY3RvcnkgdG8gIiUxIgorbXkgJEFOVF9SVU5fQ01EID0gQEFSR1ZbMF07CisKKyMgYXNzaWduIGN1cnJlbnQgcnVuIGNvbW1hbmQgdG8gIiUyIgorY2hkaXIgKEBBUkdWWzBdKSB8fCBkaWUgIkNhbid0IGNkIHRvICRBUkdWWzBdOiAkIVxuIjsKK2lmICgkXk8gZXEgIk5ldFdhcmUiKSB7CisgICAgIyBUaGVyZSBpcyBhIGJ1ZyBpbiBQZXJsIDUgb24gTmV0V2FyZSwgd2hlcmUgY2hkaXIgZG9lcyBub3QKKyAgICAjIGRvIGFueXRoaW5nLiAgT24gTmV0V2FyZSwgdGhlIGZvbGxvd2luZyBwYXRoLXByZWZpeGVkIGZvcm0gc2hvdWxkIAorICAgICMgYWx3YXlzIHdvcmsuIChhZmFpY3QpCisgICAgJEFOVF9SVU5fQ01EIC49ICIvIi5AQVJHVlsxXTsKK30KK2Vsc2UgeworICAgICRBTlRfUlVOX0NNRCA9IEBBUkdWWzFdOworfQorCisjIGRpc3Bvc2Ugb2YgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMsIGxlYXZpbmcgb25seSB0aGUgY29tbWFuZCdzIGFyZ3MuCitzaGlmdDsKK3NoaWZ0OworCisjIHJ1biB0aGUgY29tbWFuZAorbXkgJHJldHVyblZhbHVlID0gc3lzdGVtICRBTlRfUlVOX0NNRCwgQEFSR1Y7CitpZiAoJHJldHVyblZhbHVlIGVxIDApIHsKKyAgICBleGl0IDA7Cit9CitlbHNlIHsKKyAgICAjIG9ubHkgMCBhbmQgMSBhcmUgd2lkZWx5IHJlY29nbml6ZWQgYXMgZXhpdCB2YWx1ZXMKKyAgICAjIHNvIGNoYW5nZSB0aGUgZXhpdCB2YWx1ZSB0byAxCisgICAgZXhpdCAxOworfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9hbnRlbnYuY21kIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9hbnRlbnYuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YjBkYjQKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2FudGVudi5jbWQKQEAgLTAsMCArMSw5OSBAQAorLyogCisgICAgQ29weXJpZ2h0IDIwMDMtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgCisgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICAgIEFudCBlbnZpcm9ubWVudAorKi8KKworJ0BlY2hvIG9mZicKK2NhbGwgUnhGdW5jQWRkICJTeXNMb2FkRnVuY3MiLCAiUmV4eFV0aWwiLCAiU3lzTG9hZEZ1bmNzIgorY2FsbCBTeXNMb2FkRnVuY3MKKworLyogUHJlcGFyZSB0aGUgcGFyYW1ldGVycyBmb3IgbGF0ZXIgdXNlICovCitwYXJzZSBhcmcgYXJndgorbW9kZSA9ICcnCithcmdzID0gJycKK29wdHMgPSAnJworY3AgPSAnJworbGNwID0gJycKKworZG8gaSA9IDEgdG8gd29yZHMoYXJndikKKyAgcGFyYW0gPSB3b3JkKGFyZ3YsIGkpCisgIHNlbGVjdAorICAgIHdoZW4gcGFyYW09Jy1sY3AnIHRoZW4gbW9kZSA9ICdsJworICAgIHdoZW4gcGFyYW09Jy1jcCcgfCBwYXJhbT0nLWNsYXNzcGF0aCcgdGhlbiBtb2RlID0gJ2MnCisgICAgd2hlbiBhYmJyZXYoJy1vcHRzJywgcGFyYW0sIDQpIHRoZW4gbW9kZSA9ICdvJworICAgIHdoZW4gYWJicmV2KCctYXJncycsIHBhcmFtLCA0KSB0aGVuIG1vZGUgPSAnYScKKyAgb3RoZXJ3aXNlCisgICAgc2VsZWN0CisgICAgICB3aGVuIG1vZGUgPSAnYScgdGhlbiBhcmdzID0gc3BhY2UoYXJncyBwYXJhbSwgMSkKKyAgICAgIHdoZW4gbW9kZSA9ICdjJyB0aGVuIGNwID0gc3BhY2UoY3AgcGFyYW0sIDEpCisgICAgICB3aGVuIG1vZGUgPSAnbCcgdGhlbiBsY3AgPSBzcGFjZShsY3AgcGFyYW0sIDEpCisgICAgICB3aGVuIG1vZGUgPSAnbycgdGhlbiBvcHRzID0gc3BhY2Uob3B0cyBwYXJhbSwgMSkKKyAgICBvdGhlcndpc2UKKyAgICAgIHNheSAnT3B0aW9uJyBwYXJhbSAnaWdub3JlZCcKKyAgICBlbmQKKyAgZW5kCitlbmQKKworZW52PSJPUzJFTlZJUk9OTUVOVCIKK2FudGNvbmYgPSBfZ2V0ZW52XygnYW50Y29uZicgJ2FudGNvbmYuY21kJykKK3J1bnJjID0gX2dldGVudl8oJ3J1bnJjJykKK2ludGVycHJldCAnY2FsbCAiJyB8fCBydW5yYyB8fCAnIicgJyInIHx8IGFudGNvbmYgfHwgJyInICdFVEMnCitBTlRfSE9NRSA9IHZhbHVlKCdBTlRfSE9NRScsLGVudikKK0pBVkFfSE9NRSA9IHZhbHVlKCdKQVZBX0hPTUUnLCxlbnYpCitjbGFzc3BhdGggPSB2YWx1ZSgnQ0xBU1NQQVRIJywsZW52KQorY2xhc3NlcyA9IHN0cmVhbShKQVZBX0hPTUUgfHwgIlxsaWJcY2xhc3Nlcy56aXAiLCAiQyIsICJRVUVSWSBFWElTVFMiKQoraWYgY2xhc3NlcyBcPSAnJyB0aGVuIGNsYXNzcGF0aCA9IHByZXBlbmQoY2xhc3NwYXRoIGNsYXNzZXMpCitjbGFzc2VzID0gc3RyZWFtKEpBVkFfSE9NRSB8fCAiXGxpYlx0b29scy5qYXIiLCAiQyIsICJRVUVSWSBFWElTVFMiKQoraWYgY2xhc3NlcyBcPSAnJyB0aGVuIGNsYXNzcGF0aCA9IHByZXBlbmQoY2xhc3NwYXRoIGNsYXNzZXMpCisKK2NsYXNzcGF0aCA9IHByZXBlbmQoY2xhc3NwYXRoIEFOVF9IT01FIHx8ICdcbGliXGFudC1sYXVuY2hlci5qYXInKQorJ1NFVCBDTEFTU1BBVEg9JyB8fCBjbGFzc3BhdGgKKworLyogU2V0dGluZyBjbGFzc3BhdGhlcywgb3B0aW9ucyBhbmQgYXJndW1lbnRzICovCitlbnZzZXQgPSBfZ2V0ZW52XygnZW52c2V0JykKK2lmIGNwXD0nJyAgIHRoZW4gaW50ZXJwcmV0ICdjYWxsICInIHx8IGVudnNldCB8fCAnIicgJyI7IENMQVNTUEFUSCInICciJyB8fCBjcCB8fCAnIicKK2lmIGxjcFw9JycgIHRoZW4gaW50ZXJwcmV0ICdjYWxsICInIHx8IGVudnNldCB8fCAnIicgJyI7IExPQ0FMQ0xBU1NQQVRIIicgJyInIHx8IGxjcCB8fCAnIicKK2lmIG9wdHNcPScnIHRoZW4gaW50ZXJwcmV0ICdjYWxsICInIHx8IGVudnNldCB8fCAnIicgJyItRCBBTlRfT1BUUyInICciJyB8fCBvcHRzIHx8ICciJworaWYgYXJnc1w9JycgdGhlbiBpbnRlcnByZXQgJ2NhbGwgIicgfHwgZW52c2V0IHx8ICciJyAnIkFOVF9BUkdTIicgJyInIHx8IGFyZ3MgfHwgJyInCisKK2V4aXQgMAorCithZGRwYXRoOiBwcm9jZWR1cmUKK3BhcnNlIGFyZyBwYXRoIGVsZW0KK2lmIGVsZW0gPSAnJyB0aGVuIGRvCisgIGlmIHBhdGhcPScnICYgcmlnaHQocGF0aCwgMSlcPSc7JyB0aGVuIHBhdGggPSBwYXRoIHx8ICc7JworICByZXR1cm4gcGF0aAorZW5kCitpZiBzdWJzdHIocGF0aCwgbGVuZ3RoKHBhdGgpKSA9ICc7JyB0aGVuIGdsdWUgPSAnJworZWxzZSBnbHVlID0gJzsnCitpZiBwb3ModHJhbnNsYXRlKGVsZW0pLCB0cmFuc2xhdGUocGF0aCkpID0gMCB0aGVuIHBhdGggPSBwYXRoIHx8IGdsdWUgfHwgZWxlbSB8fCAnOycKK3JldHVybiBwYXRoCisKK3ByZXBlbmQ6IHByb2NlZHVyZQorcGFyc2UgYXJnIHBhdGggZWxlbQoraWYgZWxlbSA9ICcnIHRoZW4gZG8KKyAgaWYgcGF0aFw9JycgJiByaWdodChwYXRoLCAxKVw9JzsnIHRoZW4gcGF0aCA9IHBhdGggfHwgJzsnCisgIHJldHVybiBwYXRoCitlbmQKK2lmIHBvcyh0cmFuc2xhdGUoZWxlbSksIHRyYW5zbGF0ZShwYXRoKSkgPSAwIHRoZW4gcGF0aCA9IGVsZW0gfHwgJzsnIHx8IHBhdGgKK3JldHVybiBwYXRoCisKK19nZXRlbnZfOiBwcm9jZWR1cmUgZXhwb3NlIGVudgorcGFyc2UgYXJnIGVudmFyIGRlZmF1bHQKK2lmIGRlZmF1bHQgPSAnJyB0aGVuIGRlZmF1bHQgPSBlbnZhcgordmFyID0gdmFsdWUodHJhbnNsYXRlKGVudmFyKSwsZW52KQoraWYgdmFyID0gJycgdGhlbiB2YXIgPSBkZWZhdWx0CityZXR1cm4gdmFyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2NvbXBsZXRlLWFudC1jbWQucGwgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2NvbXBsZXRlLWFudC1jbWQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkZDQ3NgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vY29tcGxldGUtYW50LWNtZC5wbApAQCAtMCwwICsxLDExMyBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAyMDAxLDIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjCisjICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIEEgc2NyaXB0IHRvIGFsbG93IEJhc2ggb3IgWi1TaGVsbCB0byBjb21wbGV0ZSBhbiBBbnQgY29tbWFuZC1saW5lLiAgCisjCisjIFRvIGluc3RhbGwgZm9yIEJhc2ggMi4wIG9yIGJldHRlciwgYWRkIHRoZSBmb2xsb3dpbmcgdG8gfi8uYmFzaHJjOgorIyAKKyMgICAgICQgY29tcGxldGUgLUMgY29tcGxldGUtYW50LWNtZCBhbnQgYnVpbGQuc2gKKyMKKyMgVG8gaW5zdGFsbCBmb3IgWi1TaGVsbCAyLjUgb3IgYmV0dGVyLCBhZGQgdGhlIGZvbGxvd2luZyB0byB+Ly56c2hyYzoKKyMKKyMgICAgIGZ1bmN0aW9uIGFudF9jb21wbGV0ZSAoKSB7CisjICAgICAgICAgbG9jYWwgYXJnc19saW5lIGFyZ3MKKyMgICAgICAgICByZWFkIC1sIGFyZ3NfbGluZQorIyAgICAgICAgIHNldCAtQSBhcmdzICRhcmdzX2xpbmUKKyMgICAgICAgICBzZXQgLUEgcmVwbHkgJChDT01QX0xJTkU9JGFyZ3NfbGluZSBjb21wbGV0ZS1hbnQtY21kICR7YXJnc1sxXX0gJDEpCisjICAgICB9CisjICAgICBjb21wY3RsIC1LIGFudF9jb21wbGV0ZSBhbnQgYnVpbGQuc2gKKyMgICAgIAorIyBAYXV0aG9yIE1pa2UgV2lsbGlhbXMgPG1pa2V3QGNvcnRleGVidXNpbmVzcy5jb20uYXU+CisKK215ICRjbWRMaW5lID0gJEVOVnsnQ09NUF9MSU5FJ307CitteSAkYW50Q21kID0gJEFSR1ZbMF07CitteSAkd29yZCA9ICRBUkdWWzFdOworCitteSBAY29tcGxldGlvbnM7CitpZiAoJHdvcmQgPX4gL14tLykgeworICAgIGxpc3QoIHJlc3RyaWN0KCAkd29yZCwgZ2V0QXJndW1lbnRzKCkgKSk7Cit9IGVsc2lmICgkY21kTGluZSA9fiAvLShmfGJ1aWxkZmlsZSlccytcUyokLykgeworICAgIGxpc3QoIGdldEJ1aWxkRmlsZXMoJHdvcmQpICk7Cit9IGVsc2UgeworICAgIGxpc3QoIHJlc3RyaWN0KCAkd29yZCwgZ2V0VGFyZ2V0cygpICkpOworfQorCitleGl0KDApOworCitzdWIgbGlzdCB7CisgICAgZm9yIChAXykgeworICAgICAgICBwcmludCAiJF9cbiI7CisgICAgfQorfQorCitzdWIgcmVzdHJpY3QgeworICAgIG15ICgkd29yZCwgQGNvbXBsZXRpb25zKSA9IEBfOworICAgIGdyZXAoIC9eXFEkd29yZFxFLywgQGNvbXBsZXRpb25zICk7Cit9CisKK3N1YiBnZXRBcmd1bWVudHMgeworICAgIHF3KC1idWlsZGZpbGUgLWRlYnVnIC1lbWFjcyAtZiAtZmluZCAtaGVscCAtbGlzdGVuZXIgLWxvZ2ZpbGUgCisgICAgICAgLWxvZ2dlciAtcHJvamVjdGhlbHAgLXF1aWV0IC12ZXJib3NlIC12ZXJzaW9uKTsgCit9CisKKworc3ViIGdldEJ1aWxkRmlsZXMgeworICAgIG15ICgkd29yZCkgPSBAXzsKKyAgICBncmVwKCAvXC54bWwkLywgZ2xvYiggIiR3b3JkKiIgKSk7Cit9CisKK3N1YiBnZXRUYXJnZXRzIHsKKworICAgICMgTG9vayBmb3IgYnVpbGQtZmlsZQorICAgIG15ICRidWlsZEZpbGUgPSAnYnVpbGQueG1sJzsKKyAgICBpZiAoJGNtZExpbmUgPX4gLy0oZnxidWlsZGZpbGUpXHMrKFxTKykvKSB7CisgICAgICAgICRidWlsZEZpbGUgPSAkMjsKKyAgICB9CisgICAgcmV0dXJuICgpIHVubGVzcyAoLWYgJGJ1aWxkRmlsZSk7CisKKyAgICAjIFJ1biAiYW50IC1wcm9qZWN0aGVscCIgdG8gbGlzdCB0YXJnZXRzLiAgS2VlcCBhIGNhY2hlIG9mIHJlc3VsdHMgaW4gYQorICAgICMgY2FjaGUtZmlsZS4KKyAgICBteSAkY2FjaGVGaWxlID0gJGJ1aWxkRmlsZTsKKyAgICAkY2FjaGVGaWxlID1+IHN8KC4qLyk/KC4qKXwkezF9LmFudC10YXJnZXRzLSR7Mn18OworICAgIGlmICgoIS1lICRjYWNoZUZpbGUpIHx8ICgtTSAkYnVpbGRGaWxlKSA8ICgtTSAkY2FjaGVGaWxlKSkgeworICAgICAgICBvcGVuKCBDQUNIRSwgJz4nLiRjYWNoZUZpbGUgKSB8fCBkaWUgImNhblwndCB3cml0ZSAkY2FjaGVGaWxlOiAkIVxuIjsKKyAgICAgICAgb3BlbiggSEVMUCwgIiRhbnRDbWQgLXByb2plY3RoZWxwIC1mICckYnVpbGRGaWxlJ3wiICkgfHwgcmV0dXJuKCk7IAorICAgICAgICBteSAldGFyZ2V0czsKKyAgICAgICAgd2hpbGUoIDxIRUxQPiApIHsKKyAgICAgICAgICAgIGlmICgvXlxzKyhcUyspLykgeworICAgICAgICAgICAgICAgICR0YXJnZXRzeyQxfSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG15IEB0YXJnZXRzID0gc29ydCBrZXlzICV0YXJnZXRzOworICAgICAgICBmb3IgKEB0YXJnZXRzKSB7IHByaW50IENBQ0hFICIkX1xuIjsgfQorICAgICAgICByZXR1cm4gQHRhcmdldHM7CisgICAgfQorICAgIAorICAgICMgUmVhZCB0aGUgdGFyZ2V0LWNhY2hlCisgICAgb3BlbiggQ0FDSEUsICRjYWNoZUZpbGUgKSB8fCBkaWUgImNhblwndCByZWFkICRjYWNoZUZpbGU6ICQhXG4iOworICAgIG15IEB0YXJnZXRzOworICAgIHdoaWxlICg8Q0FDSEU+KSB7CisgICAgICAgIGNob3A7CisgICAgICAgIHMvXHIkLy87ICAjIGZvciBDeWd3aW4KKyAgICAgICAgcHVzaCggQHRhcmdldHMsICRfICk7CisgICAgfQorICAgIGNsb3NlKCBDQUNIRSApOworICAgIEB0YXJnZXRzOworCit9CisKKworCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2VudnNldC5jbWQgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2VudnNldC5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5MWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vZW52c2V0LmNtZApAQCAtMCwwICsxLDEzMCBAQAorLyoKKworICAgIENvcHlyaWdodCAyMDAzLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIAorICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1NFVCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK0ZpcnN0IG9wdGlvbmFsIHBhcmFtZXRlcjoKKyAgIDsgICAgIHBhcmFtZXRlcnMgYXJlIGNvbnNpZGVyZWQgcGFydHMgb2YgYSBwYXRoIHZhcmlhYmxlLCBzZW1pY29sb25zIGFyZQorICAgICAgICAgYXBwZW5kZWQgdG8gZWFjaCBlbGVtZW50IGlmIG5vdCBhbHJlYWR5IHByZXNlbnQKKyAgIC1EICAgIHBhcmFtZXRlcnMgYXJlIHByb3BlcnRpZXMgZm9yIEphdmEgb3IgTWFrZWZpbGUgZXRjLiwgLUQgd2lsbCBiZQorICAgICAgICAgcHJlcGVuZGVkIGFuZCB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIHNlcGFyYXRlZCBieSBhIHNwYWNlCisgICA9RCAgICB0aGUgc2FtZSBhcyBhYm92ZSBidXQgZXF1YWwgc2lnbiBpcyBub3QgcmVxdWlyZWQKKyAgICwgICAgIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGNvbW1hIHNlcGFyYXRlZCBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIC0gICAgIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSB0aGUgbmV4dCBwYXJhbWV0ZXIKKyAgIE90aGVyIHZhbHVlcyBtZWFuIHRoYXQgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBtaXNzaW5nIGFuZCB0aGUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZSBzcGFjZSBzZXBhcmF0ZWQgcGFyYW1ldGVycworCitTZWNvbmQgcGFyYW1ldGVyOiBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorCitOZXh0IHBhcmFtZXRlcnM6IHZhbHVlcworOyBpbXBsaWVzIHRoYXQgdGhlIGVxdWFsIHNpZ24gaXMgY29uc2lkZXJlZCBhIHBhcnQgb2YgdGhlIHBhcmFtZXRlciBhbmQgaXMKK25vdCBpbnRlcnByZXRlZAorCistRCByZXF1aXJlcyBwYXJhbWV0ZXJzIGluIHRoZSBmb3JtIG5hbWU9dmFsdWUuIElmIHRoZSBlcXVhbCBzaWduIGlzIG5vdCBmb3VuZCwKK3RoZSBwYXJhbWV0ZXJzIGFyZSBjaGFuZ2VkIHRvIG5hbWU9ZXhwYW5kZWRfbmFtZQorCitPdGhlciBvcHRpb25zIGhhdmUgb3B0aW9uYWwgZXF1YWwgc2lnbi4gSWYgaXQgaXMgZm91bmQsIG9ubHkgdGhlIHBhcnQgYWZ0ZXIKK3RoZSBlcXVhbCBzaWduIHdpbGwgYmUgb3ByaW9uYWxseSBleHBhbmRlZC4KKworSWYgdGhlIHBhcmFtZXRlciBpcyB0aGUgbWludXMgc2lnbiwgdGhlIG5leHQgcGFyYW1ldGVyIHdpbGwgbm90IGJlIGV4cGFuZGVkLgorSWYgdGhlIHBhcmFtZXRlciBpcyBhIHNpbmdsZSBkb3QsIGl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZSBhcyBpdCBleGlzdGVkIGJlZm9yZSBlbnZzZXQgd2FzIGludm9rZWQuCisKK0ZvciBvdGhlciBwYXJhbWV0ZXJzIHRoZSBiYXRjaCBsb29rcyBmb3IgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggdGhlCitzYW1lIG5hbWUgKGluIHVwcGVyY2FzZSkuIElmIGl0IGlzIGZvdW5kLCBpdCBmb3JtcyB0aGUgZXhwYW5kZWRfbmFtZS4gSWYKK3RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHN1Y2ggYSBuYW1lIGRvZXMgbm90IGV4aXN0LCB0aGUgZXhwYW5kZWRfbmFtZQord2lsbCBob2xkIHRoZSBwYXJhbWV0ZXIgbmFtZSB3aXRob3V0IGNhc2UgY29udmVyc2lvbi4KKyovCisKK3BhcnNlIGFyZyBtb2RlIGVudmFyIGFyZ3MKKworZXF1YWwgPSAwCitzZXAgPSAnICcKKworLyogUGFyc2UgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgKi8KK3NlbGVjdAorICB3aGVuIG1vZGU9Jy0nIHRoZW4gZG8KKyAgICBzZXAgPSBlbnZhcgorICAgIHBhcnNlIHZhciBhcmdzIGVudmFyIGFyZ3MKKyAgZW5kCisgIHdoZW4gbW9kZT0nOycgdGhlbiBkbworICAgIHNlcCA9ICcnCisgICAgZXF1YWwgPSAtMQorICBlbmQKKyAgd2hlbiBtb2RlPSctRCcgdGhlbiBlcXVhbCA9IDEKKyAgd2hlbiBtb2RlPSc9RCcgdGhlbiBtb2RlID0gJy1EJworICB3aGVuIG1vZGU9JywnIHRoZW4gc2VwID0gJywnCitvdGhlcndpc2UKKyAgYXJncyA9IGVudmFyIGFyZ3MKKyAgZW52YXIgPSBtb2RlCisgIG1vZGUgPSAnJworZW5kCisKK2VudiA9ICdPUzJFTlZJUk9OTUVOVCcKK2VudmFyID0gdHJhbnNsYXRlKGVudmFyKQorb3JpZyA9IHZhbHVlKGVudmFyLCxlbnYpCituZXd2YWwgPSAnJworZXhwYW5kID0gMQorCisvKiBmb3IgZWFjaCBwYXJhbWV0ZXIuLi4gKi8KK2RvIGkgPSAxIHRvIHdvcmRzKGFyZ3MpCisgIGlmIGV4cGFuZCA+IDAgJiB3b3JkKGFyZ3MsIGkpID0gJy0nIHRoZW4gZXhwYW5kID0gMAorICBlbHNlIGNhbGwgYWRkdmFsIHdvcmQoYXJncywgaSkKK2VuZAorCisvKiBPcHRpb25hbGx5IGVuY2xvc2UgcGF0aCB2YXJpYWJsZSBieSBxdW90ZXMgKi8KK2lmIG1vZGUgPSAnOycgJiBwb3MoJyAnLCBuZXd2YWwpID4gMCB0aGVuIG5ld3ZhbCA9ICciJyB8fCBuZXd2YWwgfHwgJyInCisKKy8qIFNldCB0aGUgbmV3IHZhbHVlLCAnU0VUJyBjYW5ub3QgYmUgdXNlZCBzaW5jZSBpdCBkb2VzIG5vdCBhbGxvdyAnPScgKi8KK3ggPSB2YWx1ZShlbnZhciwgbmV3dmFsLCBlbnYpCitleGl0IDAKKworYWRkdmFsOiBwcm9jZWR1cmUgZXhwb3NlIHNlcCBlcXVhbCBvcmlnIGV4cGFuZCBuZXd2YWwgbW9kZSBlbnYKK3BhcnNlIGFyZyB2YXIKKworaWYgdmFyID0gJy4nIHRoZW4gZXhwdmFyID0gb3JpZworZWxzZSBkbworICBpZiBlcXVhbCA+PSAwIHRoZW4gZG8KKyAgICBwYXJzZSB2YXIgdmFyIG5hbWUgJz0nIHZhbAorICAgIGlmIHZhbCA9ICcnIHRoZW4gdmFyID0gbmFtZQorICAgIGVsc2UgdmFyID0gdmFsCisgIGVuZAorICBpZiBleHBhbmQgPSAwIHRoZW4gZXhwdmFyID0gdmFyCisgIGVsc2UgZXhwdmFyID0gdmFsdWUodHJhbnNsYXRlKHZhciksLGVudikKKyAgaWYgZXhwdmFyID0gJycgdGhlbiBleHB2YXIgPSB2YXIKKyAgaWYgZXF1YWwgPj0gMCB0aGVuIGRvCisgICAgaWYgdmFsID0gJycgdGhlbiBkbworICAgICAgcGFyc2UgdmFyIGV4cHZhciBrZXkgJz0nIHZhbAorICAgICAgaWYgdmFsIDw+ICcnIHRoZW4gbmFtZSA9IGtleQorICAgICAgZWxzZSBkbworICAgICAgICBpZiBlcXVhbCA+IDAgdGhlbiB2YWwgPSBrZXkKKyAgICAgICAgZWxzZSBuYW1lID0ga2V5CisgICAgICBlbmQKKyAgICBlbmQKKyAgICBlbHNlIHZhbCA9IGV4cHZhcgorICAgIGlmIHBvcygnICcsIHZhbCkgPiAwIHwgcG9zKCc9JywgdmFsKSA+IDAgdGhlbiB2YWwgPSAnIicgfHwgdmFsIHx8ICciJworICAgIGlmIHZhbCA9ICcnIHRoZW4gZXhwdmFyID0gbmFtZQorICAgIGVsc2UgZXhwdmFyID0gbmFtZSB8fCAnPScgfHwgdmFsCisgIGVuZAorICBpZiBtb2RlID0gJy1EJyB0aGVuIGV4cHZhciA9ICctRCcgfHwgZXhwdmFyCisgIGlmIG1vZGUgPSAnOycgdGhlbiBkbworICAgIGlmIHJpZ2h0KGV4cHZhciwgMSkgPD4gJzsnIHRoZW4gZXhwdmFyID0gZXhwdmFyIHx8ICc7JworICBlbmQKK2VuZAorCitpZiBuZXd2YWwgPSAnJyB0aGVuIG5ld3ZhbCA9IGV4cHZhcgorZWxzZSBuZXd2YWwgPSBuZXd2YWwgfHwgc2VwIHx8IGV4cHZhcgorZXhwYW5kID0gMQorcmV0dXJuCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2xjcC5iYXQgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL2xjcC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkNmE4MgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vbGNwLmJhdApAQCAtMCwwICsxLDMwIEBACitSRU0KK1JFTSBDb3B5cmlnaHQgIDIwMDEtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KK1JFTQorUkVNICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKK1JFTSAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorUkVNICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK1JFTQorUkVNICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCitSRU0KK1JFTSAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorUkVNICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorUkVNICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1JFTSAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorUkVNICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1JFTQorUkVNCisKK3NldCBfQ0xBU1NQQVRIQ09NUE9ORU5UPSUxCitpZiAiIiUxIiI9PSIiIiIgZ290byBnb3RBbGxBcmdzCitzaGlmdAorCis6YXJnQ2hlY2sKK2lmICIiJTEiIj09IiIiIiBnb3RvIGdvdEFsbEFyZ3MKK3NldCBfQ0xBU1NQQVRIQ09NUE9ORU5UPSVfQ0xBU1NQQVRIQ09NUE9ORU5UJSAlMQorc2hpZnQKK2dvdG8gYXJnQ2hlY2sKKworOmdvdEFsbEFyZ3MKK3NldCBMT0NBTENMQVNTUEFUSD0lX0NMQVNTUEFUSENPTVBPTkVOVCU7JUxPQ0FMQ0xBU1NQQVRIJQorCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL3J1bmFudC5wbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vcnVuYW50LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTQ3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL3J1bmFudC5wbApAQCAtMCwwICsxLDE1MiBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAyMDAwLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjCisjICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBydW5hbnQucGwKKyMKKyMgd3JhcHBlciBzY3JpcHQgZm9yIGludm9raW5nIGFudCBpbiBhIHBsYXRmb3JtIHdpdGggUGVybCBpbnN0YWxsZWQKKyMgdGhpcyBtYXkgaW5jbHVkZSBjZ2ktYmluIGludm9jYXRpb24sIHdoaWNoIGlzIGNvbnNpZGVyZWQgc29tZXdoYXQgZGFmdC4KKyMgKHNsbzogdGhhdCBzaG91bGQgYmUgYSBzZXBhcmF0ZSBmaWxlIHdoaWNoIGNhbiBiZSBkZXJpdmVkIGZyb20gdGhpcworIyBhbmQgcmV0dXJucyB0aGUgWE1MIGZvcm1hdHRlZCBvdXRwdXQpCisjCisjIHRoZSBjb2RlIGlzIG5vdCB0b3RhbGx5IHBvcnRhYmxlIGR1ZSB0byBjbGFzc3BhdGggYW5kIGRpcmVjdG9yeSBzcGxpdHRpbmcKKyMgaXNzdWVzLiBvb3BzLiAoTkIsIHVzZSBGaWxlOjpTcGVjOjpGdW5jdGlvbnMgIHdpbGwgaGVscCBhbmQgdGhlIGNvZGUgaXMKKyMgc3RydWN0dXJlZCBmb3IgdGhlIGNhdGZpbGUoKSBjYWxsLCBidXQgYmVjYXVzZSBvZiBwZXJsIHZlcnNpb24gZnVubmllcworIyB0aGUgY29kZSBpcyBub3QgaW5jbHVkZWQuIAorIworIyBjcmVhdGVkOiAgICAgICAgIDIwMDAtOC0yNAorIyBhdXRob3I6ICAgICAgICAgIFN0ZXZlIExvdWdocmFuIHN0ZXZlX2xAc291cmNlZm9yZ2UubmV0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBc3N1bXB0aW9uczoKKyMKKyMgLSB0aGUgImphdmEiIGV4ZWN1dGFibGUvc2NyaXB0IGlzIG9uIHRoZSBjb21tYW5kIHBhdGgKKyMgLSBBTlRfSE9NRSBoYXMgYmVlbiBzZXQKKyMgLSB0YXJnZXQgcGxhdGZvcm0gdXNlcyAiOiIgYXMgY2xhc3NwYXRoIHNlcGFyYXRvciBvciBwZXJsIGluZGljYXRlcyBpdCBpcyBkb3Mvd2luMzIKKyMgLSB0YXJnZXQgcGxhdGZvcm0gdXNlcyAiLyIgYXMgZGlyZWN0b3J5IHNlcGFyYXRvci4KKworI2JlIGZ1c3N5IGFib3V0IHZhcmlhYmxlcwordXNlIHN0cmljdDsKKworI3BsYXRmb3JtIHNwZWNpZmljcyAoZGlzYWJsZWQpCisjdXNlIEZpbGU6OlNwZWM6OkZ1bmN0aW9uczsKKworI3R1cm4gd2FybmluZ3Mgb24gZHVyaW5nIGRldjsgZ2VuZXJhdGVzIGEgZmV3IHNwdXJpb3VzIHVuaW5pdGlhbGlzZWQgdmFyIGFjY2VzcyB3YXJuaW5ncworI3VzZSB3YXJuaW5nczsKKworI2FuZCBzZXQgJGRlYnVnIHRvIDEgdG8gdHVybiBvbiB0cmFjZSBpbmZvCitteSAkZGVidWc9MTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgY2hlY2sgdG8gbWFrZSBzdXJlIGVudmlyb25tZW50IGlzIHNldHVwCisjCisKK215ICRIT01FID0gJEVOVntBTlRfSE9NRX07CitpZiAoJEhPTUUgZXEgIiIpCisgICAgICAgIHsKKyAgICBkaWUgIlxuXG5BTlRfSE9NRSAqTVVTVCogYmUgc2V0IVxuXG4iOworICAgICAgICB9CisKK215ICRKQVZBQ01EID0gJEVOVntKQVZBQ01EfTsKKyRKQVZBQ01EID0gImphdmEiIGlmICRKQVZBQ01EIGVxICIiOworCitteSAkb25uZXR3YXJlID0gMDsKK2lmICgkXk8gZXEgIk5ldFdhcmUiKQoreworICAkb25uZXR3YXJlID0gMTsKK30KKworbXkgJG9uY3lnd2luID0gKCReTyBlcSAiY3lnd2luIik7CisKKyNJU1NVRTogd2hhdCBqYXZhIHdhbnRzIHRvIHNwbGl0IHVwIGNsYXNzcGF0aCB2YXJpZXMgZnJvbSBwbGF0Zm9ybSB0byBwbGF0Zm9ybSAKKyNhbmQgcGVybCBpcyBub3QgdG9vIGhvdCBhdCBoaW50aW5nIHdoaWNoIGJveCBpdCBpcyBvbi4KKyNoZXJlIEkgYXNzdW1lICI6IiAnY2VwdCBvbiB3aW4zMiwgZG9zLCBhbmQgbmV0d2FyZS4gQWRkIGV4dHJhIHRlc3RzIGhlcmUgYXMgbmVlZGVkLgorbXkgJHM9IjoiOworaWYoKCReTyBlcSAiTVNXaW4zMiIpIHx8ICgkXk8gZXEgImRvcyIpIHx8ICgkXk8gZXEgImN5Z3dpbiIpIHx8CisgICAoJG9ubmV0d2FyZSA9PSAxKSkKKyAgICAgICAgeworICAgICAgICAkcz0iOyI7CisgICAgICAgIH0KKworI2J1aWxkIHVwIHN0YW5kYXJkIGNsYXNzcGF0aAorbXkgJGxvY2FscGF0aCA9ICIkSE9NRS9saWIvYW50LWxhdW5jaGVyLmphciI7Cisjc2V0IEpWTSBvcHRpb25zIGFuZCBBbnQgYXJndW1lbnRzLCBpZiBhbnkKK215IEBBTlRfT1BUUz1zcGxpdCgiICIsICRFTlZ7QU5UX09QVFN9KTsKK215IEBBTlRfQVJHUz1zcGxpdCgiICIsICRFTlZ7QU5UX0FSR1N9KTsKKworI2ppa2VzCitpZigkRU5We0pJS0VTUEFUSH0gbmUgIiIpCisgICAgICAgIHsKKyAgICAgICAgcHVzaCBAQU5UX09QVFMsICItRGppa2VzLmNsYXNzLnBhdGg9JEVOVntKSUtFU1BBVEh9IjsKKyAgICAgICAgfQorCisjY29uc3RydWN0IGFyZ3VtZW50cyB0byBqYXZhCitteSBAQVJHUzsKK3B1c2ggQEFSR1MsIEBBTlRfT1BUUzsKKworbXkgJENZR0hPTUUgPSAiIjsKKworbXkgJGNsYXNzcGF0aD0kRU5We0NMQVNTUEFUSH07CitpZiAoJG9uY3lnd2luID09IDEpIHsKKyAgJGxvY2FscGF0aCA9IGBjeWdwYXRoIC0tcGF0aCAtLXdpbmRvd3MgJGxvY2FscGF0aGA7CisgIGNob21wICgkbG9jYWxwYXRoKTsKKyAgaWYgKCEgJGNsYXNzcGF0aCBlcSAiIikKKyAgeworICAgICRjbGFzc3BhdGggPSBgY3lncGF0aCAtLXBhdGggLS13aW5kb3dzICIkY2xhc3NwYXRoImA7CisgICAgY2hvbXAgKCRjbGFzc3BhdGgpOworICB9CisgICRIT01FID0gYGN5Z3BhdGggLS1wYXRoIC0td2luZG93cyAkSE9NRWA7CisgIGNob21wICgkSE9NRSk7CisgICRDWUdIT01FID0gYGN5Z3BhdGggLS1wYXRoIC0td2luZG93cyAkRU5We0hPTUV9YDsKKyAgY2hvbXAgKCRDWUdIT01FKTsKK30KK3B1c2ggQEFSR1MsICItY2xhc3NwYXRoIiwgIiRsb2NhbHBhdGgiOworcHVzaCBAQVJHUywgIi1EYW50LmhvbWU9JEhPTUUiOworaWYgKCAhICRDWUdIT01FIGVxICIiICkKK3sKKyAgcHVzaCBAQVJHUywgIi1EY3lnd2luLnVzZXIuaG9tZT1cIiRDWUdIT01FXCIiCit9CitwdXNoIEBBUkdTLCAib3JnLmFwYWNoZS50b29scy5hbnQubGF1bmNoLkxhdW5jaGVyIiwgQEFOVF9BUkdTOworcHVzaCBAQVJHUywgQEFSR1Y7CitpZiAoISAkY2xhc3NwYXRoIGVxICIiKQoreworICBpZiAoJG9ubmV0d2FyZSA9PSAxKQorICB7CisgICAgIyBtYWtlIGNsYXNzcGF0aCBsaXRlcmFsbHkgJENMQVNTUEFUSAorICAgICMgdGhpcyBpcyB0byBhdm9pZCBwdXNoaW5nIHVzIG92ZXIgdGhlIDUxMiBjaGFyYWN0ZXIgbGltaXQKKyAgICAjIGV2ZW4gc2tpcCB0aGUgOyAtIHRoYXQgaXMgYWxyZWFkeSBpbiAkbG9jYWxwYXRoCisgICAgcHVzaCBAQVJHUywgIi1saWIiLCAiXCRDTEFTU1BBVEgiOworICB9CisgIGVsc2UKKyAgeworICAgIHB1c2ggQEFSR1MsICItbGliIiwgIiRjbGFzc3BhdGgiOworICB9Cit9CitwcmludCAiXG4gJEpBVkFDTUQgQEFSR1NcblxuIiBpZiAoJGRlYnVnKTsKKworbXkgJHJldHVyblZhbHVlID0gc3lzdGVtICRKQVZBQ01ELCBAQVJHUzsKK2lmICgkcmV0dXJuVmFsdWUgZXEgMCkKKyAgICAgICAgeworICAgICAgICBleGl0IDA7CisgICAgICAgIH0KK2Vsc2UKKyAgICAgICAgeworICAgICAgICAjIG9ubHkgMCBhbmQgMSBhcmUgd2lkZWx5IHJlY29nbml6ZWQgYXMgZXhpdCB2YWx1ZXMKKyAgICAgICAgIyBzbyBjaGFuZ2UgdGhlIGV4aXQgdmFsdWUgdG8gMQorICAgICAgICBleGl0IDE7CisgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vcnVuYW50LnB5IGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9ydW5hbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiNTNiNgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9iaW4vcnVuYW50LnB5CkBAIC0wLDAgKzEsMTAwIEBACisjIS91c3IvYmluL3B5dGhvbgorIyBDb3B5cmlnaHQgMjAwMSwyMDAzLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjCisjICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyIiIgorCisgcnVuYW50LnB5CisKKyAgICBUaGlzIHNjcmlwdCBpcyBhIHRyYW5zbGF0aW9uIG9mIHRoZSBydW5hbnQucGwgd3JpdHRlbiBieSBTdGV2ZSBMb3VnaHJhbi4KKyAgICBJdCBydW5zIGFudCB3aXRoL291dCBhcmd1bWVudHMsIGl0IHNob3VsZCBiZSBxdWl0ZSBwb3J0YWJsZSAodGhhbmtzIHRvCisgICAgdGhlIHB5dGhvbiBvcyBsaWJyYXJ5KQorICAgIFRoaXMgc2NyaXB0IGhhcyBiZWVuIHRlc3RlZCB3aXRoIFB5dGhvbjIuMC9XaW4ySworCisgY3JlYXRlZDogICAgICAgICAyMDAxLTA0LTExCisgYXV0aG9yOiAgICAgICAgICBQaWVycmUgRGl0dGdlbiBwaWVycmUuZGl0dGdlbkBjcmlsdGVsZWNvbS5jb20KKworIEFzc3VtcHRpb25zOgorCisgLSB0aGUgImphdmEiIGV4ZWN1dGFibGUvc2NyaXB0IGlzIG9uIHRoZSBjb21tYW5kIHBhdGgKKyIiIgoraW1wb3J0IG9zLCBvcy5wYXRoLCBzdHJpbmcsIHN5cworCisjIENoYW5nZSBpdCB0byAxIHRvIGdldCBleHRyYSBkZWJ1ZyBpbmZvcm1hdGlvbgorZGVidWcgPSAwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgSWYgQU5UX0hPTUUgaXMgbm90IHNldCBkZWZhdWx0IHRvIHNjcmlwdCdzIHBhcmVudCBkaXJlY3RvcnkKK2lmIG9zLmVudmlyb24uaGFzX2tleSgnQU5UX0hPTUUnKToKKyAgICBBTlRfSE9NRSA9IG9zLmVudmlyb25bJ0FOVF9IT01FJ10KK2Vsc2U6CisgICAgQU5UX0hPTUUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorCisjIHNldCBBTlRfTElCIGxvY2F0aW9uCitBTlRfTElCID0gb3MucGF0aC5qb2luKEFOVF9IT01FLCAnbGliJykKKworIyBzZXQgSkFWQUNNRCAoY2hlY2sgdmFyaWFibGVzIEpBVkFDTUQgYW5kIEpBVkFfSE9NRSkKK0pBVkFDTUQgPSBOb25lCitpZiBub3Qgb3MuZW52aXJvbi5oYXNfa2V5KCdKQVZBQ01EJyk6CisgICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCdKQVZBX0hPTUUnKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLmVudmlyb25bJ0pBVkFfSE9NRSddKToKKyAgICAgICAgICAgIHByaW50ICJXYXJuaW5nOiBKQVZBX0hPTUUgaXMgbm90IGRlZmluZWQgY29ycmVjdGx5LiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIEpBVkFDTUQgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnSkFWQV9IT01FJ10sICdiaW4nLCAnamF2YScpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgIldhcm5pbmc6IEpBVkFfSE9NRSBub3Qgc2V0LiIKK2Vsc2U6CisgICAgSkFWQUNNRCA9IG9zLmVudmlyb25bJ0pBVkFDTUQnXQoraWYgbm90IEpBVkFDTUQ6CisgICAgSkFWQUNNRCA9ICdqYXZhJworCitsYXVuY2hlcl9qYXIgPSBvcy5wYXRoLmpvaW4oQU5UX0xJQiwgJ2FudC1sYXVuY2hlci5qYXInKQoraWYgbm90IG9zLnBhdGguZXhpc3RzKGxhdW5jaGVyX2phcik6CisgICAgcHJpbnQgJ1VuYWJsZSB0byBsb2NhdGUgYW50LWxhdW5jaGVyLmphci4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAlcycgJSBcCisgICAgICAgIEFOVF9MSUIKKworIyBCdWlsZCB1cCBzdGFuZGFyZCBjbGFzc3BhdGggKExPQ0FMQ0xBU1NQQVRIKQorTE9DQUxDTEFTU1BBVEggPSBsYXVuY2hlcl9qYXIKK2lmIG9zLmVudmlyb24uaGFzX2tleSgnTE9DQUxDTEFTU1BBVEgnKToKKyAgICBMT0NBTENMQVNTUEFUSCArPSBvcy5wYXRoc2VwICsgb3MuZW52aXJvblsnTE9DQUxDTEFTU1BBVEgnXQorCitBTlRfT1BUUyA9ICIiCitpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ0FOVF9PUFRTJyk6CisgICAgQU5UX09QVFMgPSBvcy5lbnZpcm9uWydBTlRfT1BUUyddCisKK09QVFMgPSAiIgoraWYgb3MuZW52aXJvbi5oYXNfa2V5KCdKSUtFU1BBVEgnKToKKyAgICBPUFRTID0gJy1EamlrZXMuY2xhc3MucGF0aD1cIiVzXCInICUgb3MuZW52aXJvblsnSklLRVNQQVRIJ10KKworQU5UX0FSR1MgPSAiIgoraWYgb3MuZW52aXJvbi5oYXNfa2V5KCdBTlRfQVJHUycpOgorICAgIEFOVF9BUkdTID0gb3MuZW52aXJvblsnQU5UX0FSR1MnXQorCitDTEFTU1BBVEggPSAiIgoraWYgb3MuZW52aXJvbi5oYXNfa2V5KCdDTEFTU1BBVEgnKToKKyAgICBDTEFTU1BBVEggPSBvcy5lbnZpcm9uWydDTEFTU1BBVEgnXQorCisjIEJ1aWxkcyB0aGUgY29tbWFuZGxpbmUKK2NtZGxpbmUgPSAoJyVzICVzIC1jbGFzc3BhdGggJXMgLURhbnQuaG9tZT0lcyAlcyAnICsgXAorICAgICdvcmcuYXBhY2hlLnRvb2xzLmFudC5sYXVuY2guTGF1bmNoZXIgJXMgLWxpYiAlcyAlcycpIFwKKyAgICAgJSAoSkFWQUNNRCwgQU5UX09QVFMsIExPQ0FMQ0xBU1NQQVRILCBBTlRfSE9NRSwgT1BUUywgQU5UX0FSR1MsIFwKKyAgICAgICAgQ0xBU1NQQVRILCBzdHJpbmcuam9pbihzeXMuYXJndlsxOl0sICcgJykpCisKK2lmIGRlYnVnOgorICAgIHByaW50ICdcbiVzXG5cbicgJSAoY21kbGluZSkKKworIyBSdW4gdGhlIGJpbmlvdSEKK29zLnN5c3RlbShjbWRsaW5lKQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9ydW5yYy5jbWQgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvYmluL3J1bnJjLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzM3YTgwCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2Jpbi9ydW5yYy5jbWQKQEAgLTAsMCArMSw1OSBAQAorLyogCisgICAgQ29weXJpZ2h0IDIwMDMtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgCisgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICAgIFJ1biBSQyBmaWxlLCBuYW1lIGlzIGluIHRoZSBmaXJzdCBhcmcsIHNlY29uZCBhcmcgaXMgZWl0aGVyIFBBVEgKKyAgICBFTlYgIG9yIC1yIG9yIG5vdGhpbmcgCisqLworCitwYXJzZSBhcmcgbmFtZSBwYXRoIHJlc3QKKworaWYgbmFtZSA9ICcnIHRoZW4gZG8KKyAgc2F5ICdSQyBmaWxlIG5hbWUgaXMgbWlzc2luZycKKyAgZXhpdCAxCitlbmQKKworaWYgcmVzdCBcPSAnJyB0aGVuIGRvCisgIHNheSAnVG9vIG1hbnkgcGFyYW1ldGVycycKKyAgZXhpdCAxCitlbmQKKworY2FsbCBydW5pdCBuYW1lIHBhdGgKK2V4aXQgMAorCitydW5pdDogcHJvY2VkdXJlCitwYXJzZSBhcmcgbmFtZSBwYXRoIGRpcgorCitpZiBwYXRoIFw9ICcnICYgcGF0aCBcPSAnLXInIHRoZW4gZG8KKyAgZGlyID0gdmFsdWUodHJhbnNsYXRlKHBhdGgpLCwnT1MyRU5WSVJPTk1FTlQnKQorICBpZiBkaXIgPSAnJyB0aGVuIHJldHVybgorICBkaXIgPSB0cmFuc2xhdGUoZGlyLCAnXCcsICcvJykgLyogY2hhbmdlIFVOSVgtbGlrZSBwYXRoIHRvIE9TLzIgKi8KK2VuZAorCitpZiBkaXIgPSAnJyB0aGVuIGRpciA9IGRpcmVjdG9yeSgpCisKK2lmIHBhdGggPSAnLXInIHRoZW4gZG8gLyogcmVjdXJzaXZlIGNhbGwgKi8KKyAgc3ViZGlyID0gZmlsZXNwZWMoJ3BhdGgnLCBkaXIpCisgIGlmIHN1YmRpciBcPSAnXCcgdGhlbiBkbworICAgIHN1YmRpciA9IGxlZnQoc3ViZGlyLCBsZW5ndGgoc3ViZGlyKS0xKQorICAgIGNhbGwgcnVuaXQgbmFtZSBwYXRoIGZpbGVzcGVjKCdkcml2ZScsIGRpcikgfHwgc3ViZGlyCisgIGVuZAorZW5kCisKKy8qIExvb2sgZm9yIHRoZSBmaWxlIGFuZCBydW4gaXQgKi8KK2lmIHJpZ2h0KGRpciwgMSkgXD0gJ1wnIHRoZW4gZGlyID0gZGlyIHx8ICdcJworcmNmaWxlID0gc3RyZWFtKGRpciB8fCBuYW1lLCAnYycsICdxdWVyeSBleGlzdHMnKQoraWYgcmNmaWxlIFw9ICcnIHRoZW4gaW50ZXJwcmV0ICdjYWxsICInIHx8IHJjZmlsZSB8fCAnIicKKworcmV0dXJuCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2NoYW5nZWxvZy54c2wgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2NoYW5nZWxvZy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwZDExNwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvY2hhbmdlbG9nLnhzbApAQCAtMCwwICsxLDE0NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorCis8eHNsOnN0eWxlc2hlZXQKKyAgICB4bWxuczp4c2w9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybScKKyAgICB2ZXJzaW9uPScxLjAnPgorCis8IS0tCisgICAgQ29weXJpZ2h0ICAyMDAyLDIwMDQtMjAwNSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIAorICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgIAorICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgIAorLS0+CisgIDx4c2w6cGFyYW0gbmFtZT0idGl0bGUiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJtb2R1bGUiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjdnN3ZWIiLz4KKworICA8eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiIGluZGVudD0ieWVzIiBlbmNvZGluZz0iVVMtQVNDSUkiCisgICAgICAgICAgICAgIGRvY3R5cGUtcHVibGljPSItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIgorICAgICAgICAgICAgICBkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9zdHJpY3QuZHRkIi8+CisKKyAgPCEtLSBDb3B5IHN0YW5kYXJkIGRvY3VtZW50IGVsZW1lbnRzLiAgRWxlbWVudHMgdGhhdAorICAgICAgIHNob3VsZCBiZSBpZ25vcmVkIG11c3QgYmUgZmlsdGVyZWQgYnkgYXBwbHktdGVtcGxhdGVzCisgICAgICAgdGFncy4gLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiPgorICAgIDx4c2w6Y29weT4KKyAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9ImF0dHJpYnV0ZTo6KlsuICE9ICcnXSIvPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorICAgIDwveHNsOmNvcHk+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNoYW5nZWxvZyI+CisgICAgPGh0bWw+CisgICAgICA8aGVhZD4KKyAgICAgICAgPHRpdGxlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdGl0bGUiLz48L3RpdGxlPgorICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAgICAgIGJvZHksIHAgeworICAgICAgICAgICAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CisgICAgICAgICAgICBmb250LXNpemU6IDgwJTsKKyAgICAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKKyAgICAgICAgICB9CisgICAgICAgICAgdHIsIHRkIHsKKyAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOworICAgICAgICAgICAgYmFja2dyb3VuZDogI2VlZWVlMDsKKyAgICAgICAgICB9CisgICAgICAgICAgdGQgeworICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OworICAgICAgICAgIH0KKyAgICAgIC5kYXRlQW5kQXV0aG9yIHsKKyAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOworICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgYmFja2dyb3VuZDogI2E2Y2FmMDsKKyAgICAgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgfQorICAgICAgICAgIGEgeworICAgICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICAgfQorICAgICAgICAgIHByZSB7CisgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICA8L2hlYWQ+CisgICAgICA8Ym9keT4KKyAgICAgICAgPGgxPgorICAgICAgICAgIDxhIG5hbWU9InRvcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiR0aXRsZSIvPjwvYT4KKyAgICAgICAgPC9oMT4KKyAgICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij5EZXNpZ25lZCBmb3IgdXNlIHdpdGggPGEgaHJlZj0iaHR0cDovL2FudC5hcGFjaGUub3JnLyI+QXBhY2hlIEFudDwvYT4uPC9wPgorICAgICAgICA8aHIvPgorICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjEiPgorICAgICAgICAgIAorICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi8vZW50cnkiPgorICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iZGF0ZSIgZGF0YS10eXBlPSJ0ZXh0IiBvcmRlcj0iZGVzY2VuZGluZyIvPgorICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0idGltZSIgZGF0YS10eXBlPSJ0ZXh0IiBvcmRlcj0iZGVzY2VuZGluZyIvPgorICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgICAKKyAgICAgICAgPC90YWJsZT4KKyAgICAgICAgCisgICAgICA8L2JvZHk+CisgICAgPC9odG1sPgorICA8L3hzbDp0ZW1wbGF0ZT4KKyAgCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVudHJ5Ij4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImRhdGVBbmRBdXRob3IiPgorICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGF0ZSIvPjx4c2w6dGV4dD4gPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0idGltZSIvPjx4c2w6dGV4dD4gPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iYXV0aG9yIi8+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkPgorICAgICAgICA8cHJlPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJtc2ciLz48L3ByZT4KKyAgICAgICAgPHVsPgorICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZmlsZSIvPgorICAgICAgICA8L3VsPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJkYXRlIj4KKyAgICA8aT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvaT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGltZSI+CisgICAgPGk+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L2k+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciI+CisgICAgPGk+CisgICAgICA8YT4KKyAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+bWFpbHRvOjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvYT4KKyAgICA8L2k+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImZpbGUiPgorICAgIDxsaT4KKyAgICAgIDxhPgorICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICA8eHNsOndoZW4gdGVzdD0ic3RyaW5nLWxlbmd0aChwcmV2cmV2aXNpb24pID0gMCAiPgorICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjdnN3ZWIiLz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG1vZHVsZSIgLz4vPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUiIC8+P3Jldj08eHNsOnZhbHVlLW9mIHNlbGVjdD0icmV2aXNpb24iIC8+JmFtcDtjb250ZW50LXR5cGU9dGV4dC94LWN2c3dlYi1tYXJrdXA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkY3Zzd2ViIi8+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRtb2R1bGUiIC8+Lzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lIiAvPj9yMT08eHNsOnZhbHVlLW9mIHNlbGVjdD0icmV2aXNpb24iIC8+JmFtcDtyMj08eHNsOnZhbHVlLW9mIHNlbGVjdD0icHJldnJldmlzaW9uIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4KKyAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIgLz4gKDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJyZXZpc2lvbiIvPik8L2E+CisgICAgPC9saT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLSBBbnkgZWxlbWVudHMgd2l0aGluIGEgbXNnIGFyZSBwcm9jZXNzZWQsCisgICAgICAgc28gdGhhdCB3ZSBjYW4gcHJlc2VydmUgSFRNTCB0YWdzLiAtLT4KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibXNnIj4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CisgIDwveHNsOnRlbXBsYXRlPgorICAKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2NoZWNrc3R5bGUvY2hlY2tzdHlsZS1mcmFtZXMueHNsIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2V0Yy9jaGVja3N0eWxlL2NoZWNrc3R5bGUtZnJhbWVzLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2FhOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2V0Yy9jaGVja3N0eWxlL2NoZWNrc3R5bGUtZnJhbWVzLnhzbApAQCAtMCwwICsxLDI5MyBAQAorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM6bHhzbHQ9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0IgorICAgIHhtbG5zOnJlZGlyZWN0PSJvcmcuYXBhY2hlLnhhbGFuLmxpYi5SZWRpcmVjdCIKKyAgICBleHRlbnNpb24tZWxlbWVudC1wcmVmaXhlcz0icmVkaXJlY3QiPgorCis8IS0tCisgICAgQ29weXJpZ2h0ICAyMDAyLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAKKy0tPgorCisgICAgPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBpbmRlbnQ9InllcyIgZW5jb2Rpbmc9IlVTLUFTQ0lJIi8+CisgICAgPHhzbDpkZWNpbWFsLWZvcm1hdCBkZWNpbWFsLXNlcGFyYXRvcj0iLiIgZ3JvdXBpbmctc2VwYXJhdG9yPSIsIiAvPgorCisgICAgPHhzbDpwYXJhbSBuYW1lPSJvdXRwdXQuZGlyIiBzZWxlY3Q9IicuJyIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZWRpciIgc2VsZWN0PSInLiciLz4KKworICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNoZWNrc3R5bGUiPgorICAgICAgICA8IS0tIGNyZWF0ZSB0aGUgaW5kZXguaHRtbCAtLT4KKyAgICAgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vaW5kZXguaHRtbCI+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5kZXguaHRtbCIvPgorICAgICAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgICAgIDwhLS0gY3JlYXRlIHRoZSBzdHlsZXNoZWV0LmNzcyAtLT4KKyAgICAgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vc3R5bGVzaGVldC5jc3MiPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0eWxlc2hlZXQuY3NzIi8+CisgICAgICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICAgICAgPCEtLSBjcmVhdGUgdGhlIG92ZXJ2aWV3LXN1bW1hcnkuaHRtbCBhdCB0aGUgcm9vdCAtLT4KKyAgICAgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vb3ZlcnZpZXctZnJhbWUuaHRtbCI+CisgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9Im92ZXJ2aWV3Ii8+CisgICAgICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICAgICAgPCEtLSBjcmVhdGUgdGhlIGFsbC1jbGFzc2VzLmh0bWwgYXQgdGhlIHJvb3QgLS0+CisgICAgICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L2FsbGNsYXNzZXMtZnJhbWUuaHRtbCI+CisgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFsbC5jbGFzc2VzIi8+CisgICAgICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICAgICAgPCEtLSBwcm9jZXNzIGFsbCBmaWxlcyAtLT4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJmaWxlW2NvdW50KGVycm9yKSAhPSAwXSIvPgorICAgIDwveHNsOnRlbXBsYXRlPgorCisgICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAgPGh0bWw+CisgICAgICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q2hlY2tTdHlsZSBBdWRpdDwvdGl0bGU+CisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgICAgICA8ZnJhbWVzZXQgY29scz0iMjAlLDgwJSI+CisgICAgICAgICAgICAgICAgPGZyYW1lIHNyYz0iYWxsY2xhc3Nlcy1mcmFtZS5odG1sIiBuYW1lPSJmaWxlTGlzdEZyYW1lIi8+CisgICAgICAgICAgICAgICAgPGZyYW1lIHNyYz0ib3ZlcnZpZXctZnJhbWUuaHRtbCIgbmFtZT0iZmlsZUZyYW1lIi8+CisgICAgICAgICAgICA8L2ZyYW1lc2V0PgorICAgICAgICAgICAgPG5vZnJhbWVzPgorICAgICAgICAgICAgICAgIDxoMj5GcmFtZSBBbGVydDwvaDI+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZG9jdW1lbnQgaXMgZGVzaWduZWQgdG8gYmUgdmlld2VkIHVzaW5nIHRoZSBmcmFtZXMgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNlZSB0aGlzIG1lc3NhZ2UsIHlvdSBhcmUgdXNpbmcgYSBub24tZnJhbWUtY2FwYWJsZSB3ZWIgY2xpZW50LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgIDwvbm9mcmFtZXM+CisgICAgICAgIDwvaHRtbD4KKyAgICA8L3hzbDp0ZW1wbGF0ZT4KKworICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciI+CisgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGV4dC1hbGlnbjpyaWdodCI+PGgyPkNoZWNrU3R5bGUgQXVkaXQ8L2gyPjwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGV4dC1hbGlnbjpyaWdodCI+RGVzaWduZWQgZm9yIHVzZSB3aXRoCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSdodHRwOi8vY2hlY2tzdHlsZS5zb3VyY2Vmb3JnZS5uZXQvJz5DaGVja1N0eWxlPC9hPiBhbmQKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9J2h0dHA6Ly9hbnQuYXBhY2hlLm9yZy8nPkFudDwvYT4uPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisgICAgICAgIDxociBzaXplPSIxIi8+CisgICAgPC94c2w6dGVtcGxhdGU+CisKKyAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjaGVja3N0eWxlIiBtb2RlPSJvdmVydmlldyI+CisgICAgICAgIDxodG1sPgorICAgICAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic3R5bGVzaGVldC5jc3MiLz4KKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgICAgIDxib2R5PgorICAgICAgICAgICAgICAgIDwhLS0gcGFnZSBoZWFkZXIgLS0+CisgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhZ2VIZWFkZXIiLz4KKworICAgICAgICAgICAgICAgIDwhLS0gU3VtbWFyeSBwYXJ0IC0tPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic3VtbWFyeSIvPgorICAgICAgICAgICAgICAgIDxociBzaXplPSIxIiB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiLz4KKworICAgICAgICAgICAgICAgIDwhLS0gRmlsZSBsaXN0IHBhcnQgLS0+CisgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJmaWxlbGlzdCIvPgorICAgICAgICAgICAgPC9ib2R5PgorICAgICAgICA8L2h0bWw+CisgICAgPC94c2w6dGVtcGxhdGU+CisKKyAgICA8eHNsOnRlbXBsYXRlIG5hbWU9InN0eWxlc2hlZXQuY3NzIj4KKyAgICAgICAgLmJhbm5lcmNlbGwgeworICAgICAgICBib3JkZXI6IDBweDsKKyAgICAgICAgcGFkZGluZzogMHB4OworICAgICAgICB9CisgICAgICAgIGJvZHkgeworICAgICAgICBtYXJnaW4tbGVmdDogMTA7CisgICAgICAgIG1hcmdpbi1yaWdodDogMTA7CisgICAgICAgIGZvbnQ6bm9ybWFsIDgwJSBhcmlhbCxoZWx2ZXRpY2Esc2Fuc2VyaWY7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6I0ZGRkZGRjsKKyAgICAgICAgY29sb3I6IzAwMDAwMDsKKyAgICAgICAgfQorICAgICAgICAub2Rkcm93IHRkIHsKKyAgICAgICAgYmFja2dyb3VuZDogI2VmZWZlZjsKKyAgICAgICAgfQorICAgICAgICAuZXZlbnJvdyB0ZCB7CisgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgICAgIH0KKyAgICAgICAgdGgsIHRkIHsKKyAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKKyAgICAgICAgfQorICAgICAgICB0aCB7CisgICAgICAgIGZvbnQtd2VpZ2h0OmJvbGQ7CisgICAgICAgIGJhY2tncm91bmQ6ICNjY2M7CisgICAgICAgIGNvbG9yOiBibGFjazsKKyAgICAgICAgfQorICAgICAgICB0YWJsZSwgdGgsIHRkIHsKKyAgICAgICAgZm9udC1zaXplOjEwMCU7CisgICAgICAgIGJvcmRlcjogbm9uZQorICAgICAgICB9CisgICAgICAgIHRhYmxlLmxvZyB0ciB0ZCwgdHIgdGggeworCisgICAgICAgIH0KKyAgICAgICAgaDIgeworICAgICAgICBmb250LXdlaWdodDpib2xkOworICAgICAgICBmb250LXNpemU6MTQwJTsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogNTsKKyAgICAgICAgfQorICAgICAgICBoMyB7CisgICAgICAgIGZvbnQtc2l6ZToxMDAlOworICAgICAgICBmb250LXdlaWdodDpib2xkOworICAgICAgICBiYWNrZ3JvdW5kOiAjNTI1RDc2OworICAgICAgICBjb2xvcjogd2hpdGU7CisgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICAgICAgcGFkZGluZzogNXB4OworICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDsKKyAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICAgICAgfQorICAgIDwveHNsOnRlbXBsYXRlPgorCisgICAgPCEtLQorICAgIENyZWF0ZXMgYW4gYWxsLWNsYXNzZXMuaHRtbCBmaWxlIHRoYXQgY29udGFpbnMgYSBsaW5rIHRvIGFsbCBmaWxlcy4KKyAgICAtLT4KKyAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjaGVja3N0eWxlIiBtb2RlPSJhbGwuY2xhc3NlcyI+CisgICAgICAgIDxodG1sPgorICAgICAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic3R5bGVzaGVldC5jc3MiLz4KKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgICAgIDxib2R5PgorICAgICAgICAgICAgICAgIDxoMj5GaWxlczwvaDI+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBlYWNoIGZpbGUgY3JlYXRlIGl0cyBwYXJ0IC0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJmaWxlW2NvdW50KGVycm9yKSAhPSAwXSIgbW9kZT0iYWxsLmNsYXNzZXMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9InN1YnN0cmluZy1hZnRlcihAbmFtZSwgJGJhc2VkaXIpIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgPC9ib2R5PgorICAgICAgICA8L2h0bWw+CisgICAgPC94c2w6dGVtcGxhdGU+CisKKyAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjaGVja3N0eWxlIiBtb2RlPSJmaWxlbGlzdCI+CisgICAgICAgIDxoMz5GaWxlczwvaDM+CisgICAgICAgIDx0YWJsZSBjbGFzcz0ibG9nIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD4KKyAgICAgICAgICAgICAgICA8dGg+RXJyb3JzPC90aD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImZpbGVbY291bnQoZXJyb3IpICE9IDBdIiBtb2RlPSJmaWxlbGlzdCI+CisgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iY291bnQoZXJyb3IpIiBvcmRlcj0iZGVzY2VuZGluZyIgZGF0YS10eXBlPSJudW1iZXIiLz4KKyAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgPC90YWJsZT4KKyAgICA8L3hzbDp0ZW1wbGF0ZT4KKworICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImZpbGUiIG1vZGU9ImZpbGVsaXN0Ij4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFsdGVybmF0ZWQtcm93Ii8+CisgICAgICAgICAgICA8dGQgbm93cmFwPSJub3dyYXAiPgorICAgICAgICAgICAgICAgIDxhPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD5maWxlcy88L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoQG5hbWUsICRiYXNlZGlyKSIvPjx4c2w6dGV4dD4uaHRtbDwveHNsOnRleHQ+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZy1hZnRlcihAbmFtZSwgJGJhc2VkaXIpIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXJyb3IpIi8+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICA8L3hzbDp0ZW1wbGF0ZT4KKworICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImZpbGUiIG1vZGU9ImFsbC5jbGFzc2VzIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9ImZpbGVGcmFtZSI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PmZpbGVzLzwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZy1hZnRlcihAbmFtZSwgJGJhc2VkaXIpIi8+PHhzbDp0ZXh0Pi5odG1sPC94c2w6dGV4dD4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nLWFmdGVyKEBuYW1lLCAkYmFzZWRpcikiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICA8L3RyPgorICAgIDwveHNsOnRlbXBsYXRlPgorCisgICAgPCEtLQorICAgIHRyYW5zZm9ybSBzdHJpbmcgbGlrZSBhL2IvYyB0byAuLi8uLi8uLi8KKyAgICBAcGFyYW0gcGF0aCB0aGUgcGF0aCB0byB0cmFuc2Zvcm0gaW50byBhIGRlc2NlbmRpbmcgZGlyZWN0b3J5IHBhdGgKKyAgICAtLT4KKyAgICA8eHNsOnRlbXBsYXRlIG5hbWU9InBhdGgiPgorICAgICAgICA8eHNsOnBhcmFtIG5hbWU9InBhdGgiLz4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSJjb250YWlucygkcGF0aCwnLycpIj4KKyAgICAgICAgICAgIDx4c2w6dGV4dD4uLi88L3hzbDp0ZXh0PgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhdGgiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYXRoIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nLWFmdGVyKCRwYXRoLCcvJykiLz48L3hzbDp3aXRoLXBhcmFtPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC94c2w6aWY+CisgICAgICAgIDx4c2w6aWYgdGVzdD0ibm90KGNvbnRhaW5zKCRwYXRoLCcvJykpIGFuZCBub3QoJHBhdGggPSAnJykiPgorICAgICAgICAgICAgPHhzbDp0ZXh0Pi4uLzwveHNsOnRleHQ+CisgICAgICAgIDwveHNsOmlmPgorICAgIDwveHNsOnRlbXBsYXRlPgorCisgICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZmlsZSI+CisgICAgICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L2ZpbGVzL3tzdWJzdHJpbmctYWZ0ZXIoQG5hbWUsICRiYXNlZGlyKX0uaHRtbCI+CisgICAgICAgICAgICA8aHRtbD4KKyAgICAgICAgICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGF0aCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhdGgiIHNlbGVjdD0ic3Vic3RyaW5nLWFmdGVyKEBuYW1lLCAkYmFzZWRpcikiLz48L3hzbDpjYWxsLXRlbXBsYXRlPjx4c2w6dGV4dD5zdHlsZXNoZWV0LmNzczwveHNsOnRleHQ+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICA8L2xpbms+CisgICAgICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICAgICAgICAgIDxib2R5PgorICAgICAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciIvPgorICAgICAgICAgICAgICAgICAgICA8aDM+RmlsZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nLWFmdGVyKEBuYW1lLCAkYmFzZWRpcikiLz48L2gzPgorICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImxvZyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+RXJyb3IgRGVzY3JpcHRpb248L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5MaW5lOkNvbHVtbjwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImVycm9yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGVkLXJvdyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgdGl0bGU9IntAc291cmNlfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBtZXNzYWdlIi8+PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGxpbmUiLz48eHNsOmlmIHRlc3Q9IkBjb2x1bW4iPjo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvbHVtbiIvPjwveHNsOmlmPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICAgIDwvYm9keT4KKyAgICAgICAgICAgIDwvaHRtbD4KKyAgICAgICAgPC9yZWRpcmVjdDp3cml0ZT4KKyAgICA8L3hzbDp0ZW1wbGF0ZT4KKworICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNoZWNrc3R5bGUiIG1vZGU9InN1bW1hcnkiPgorICAgICAgICA8aDM+U3VtbWFyeTwvaDM+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZmlsZUNvdW50IiBzZWxlY3Q9ImNvdW50KGZpbGUpIi8+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZXJyb3JDb3VudCIgc2VsZWN0PSJjb3VudChmaWxlL2Vycm9yKSIvPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImZpbGVFcnJvckNvdW50IiBzZWxlY3Q9ImNvdW50KGZpbGVbY291bnQoZXJyb3IpICE9IDBdKSIvPgorICAgICAgICA8dGFibGUgY2xhc3M9ImxvZyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGg+VG90YWwgRmlsZXM8L3RoPgorICAgICAgICAgICAgICAgIDx0aD5GaWxlcyBXaXRoIEVycm9yczwvdGg+CisgICAgICAgICAgICAgICAgPHRoPkVycm9yczwvdGg+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGVkLXJvdyIvPgorICAgICAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGZpbGVDb3VudCIvPjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZmlsZUVycm9yQ291bnQiLz48L3RkPgorICAgICAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVycm9yQ291bnQiLz48L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICA8L3hzbDp0ZW1wbGF0ZT4KKworICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iYWx0ZXJuYXRlZC1yb3ciPgorICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCkgbW9kIDIgPSAxIj5vZGRyb3c8L3hzbDppZj4KKyAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSBtb2QgMiA9IDAiPmV2ZW5yb3c8L3hzbDppZj4KKyAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2NoZWNrc3R5bGUvY2hlY2tzdHlsZS10ZXh0LnhzbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvY2hlY2tzdHlsZS9jaGVja3N0eWxlLXRleHQueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZDQ5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2NoZWNrc3R5bGUvY2hlY2tzdHlsZS10ZXh0LnhzbApAQCAtMCwwICsxLDMzIEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+CisKKzwhLS0KKyAgICBDb3B5cmlnaHQgIDIwMDMtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIAorICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgIAorICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgIAorLS0+CisKKyAgICA8eHNsOnN0cmlwLXNwYWNlIGVsZW1lbnRzPSJjaGVja3N0eWxlIi8+CisgICAgPHhzbDpwcmVzZXJ2ZS1zcGFjZSBlbGVtZW50cz0iZmlsZSIvPgorICAgIDx4c2w6b3V0cHV0IG1ldGhvZD0idGV4dCIvPgorICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNoZWNrc3R5bGUvZmlsZS9lcnJvciI+CisgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi9AbmFtZSIvPgorICAgICAgICA8eHNsOnRleHQ+OjwveHNsOnRleHQ+CisgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGluZSIvPgorICAgICAgICA8eHNsOnRleHQ+OjwveHNsOnRleHQ+CisgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAY29sdW1uIi8+CisgICAgICAgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KKyAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBtZXNzYWdlIi8+CisgICAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgorCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2NoZWNrc3R5bGUvY2hlY2tzdHlsZS14ZG9jLnhzbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvY2hlY2tzdHlsZS9jaGVja3N0eWxlLXhkb2MueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyM2FjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2NoZWNrc3R5bGUvY2hlY2tzdHlsZS14ZG9jLnhzbApAQCAtMCwwICsxLDEyOSBAQAorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM6bHhzbHQ9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0IgorICAgIHhtbG5zOnJlZGlyZWN0PSJvcmcuYXBhY2hlLnhhbGFuLmxpYi5SZWRpcmVjdCIKKyAgICBleHRlbnNpb24tZWxlbWVudC1wcmVmaXhlcz0icmVkaXJlY3QiPgorCis8IS0tCisgICAgQ29weXJpZ2h0ICAyMDAzLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAKKy0tPgorCisgICAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIGluZGVudD0ieWVzIi8+CisgICAgPHhzbDpkZWNpbWFsLWZvcm1hdCBkZWNpbWFsLXNlcGFyYXRvcj0iLiIgZ3JvdXBpbmctc2VwYXJhdG9yPSIsIiAvPgorCisgICAgPHhzbDpwYXJhbSBuYW1lPSJvdXRwdXQuZGlyIiBzZWxlY3Q9IicuJyIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZWRpciIgc2VsZWN0PSInLiciLz4KKworICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNoZWNrc3R5bGUiPgorICAgICAgPGRvY3VtZW50PgorICAgICAgICA8cHJvcGVydGllcz4KKyAgICAgICAgICA8dGl0bGU+Q2hlY2tzdHlsZSBBdWRpdDwvdGl0bGU+CisgICAgICAgIDwvcHJvcGVydGllcz4KKworICAgICAgICA8Ym9keT4KKyAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InN1bW1hcnkiLz4KKyAgICAgICAgICA8IS0tIEZpbGUgbGlzdCBwYXJ0IC0tPgorICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iZmlsZWxpc3QiLz4KKyAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImZpbGVbY291bnQoZXJyb3IpICE9IDBdIi8+CisgICAgICAgIDwvYm9keT4KKyAgICAgIDwvZG9jdW1lbnQ+CisgICAgPC94c2w6dGVtcGxhdGU+CisKKyAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjaGVja3N0eWxlIiBtb2RlPSJmaWxlbGlzdCI+CisgICAgICA8c2VjdGlvbiBuYW1lPSJGaWxlcyI+CisgICAgICAgIDx0YWJsZT4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+CisgICAgICAgICAgICAgICAgPHRoPkVycm9yczwvdGg+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJmaWxlW2NvdW50KGVycm9yKSAhPSAwXSIgbW9kZT0iZmlsZWxpc3QiPgorICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9ImNvdW50KGVycm9yKSIgb3JkZXI9ImRlc2NlbmRpbmciIGRhdGEtdHlwZT0ibnVtYmVyIi8+CisgICAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICAgIDwvdGFibGU+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC94c2w6dGVtcGxhdGU+CisKKyAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmaWxlIiBtb2RlPSJmaWxlbGlzdCI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGVkLXJvdyIvPgorICAgICAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgICAgICA8YT4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+ZmlsZXM8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoQG5hbWUsICRiYXNlZGlyKSIvPjx4c2w6dGV4dD4uaHRtbDwveHNsOnRleHQ+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZy1hZnRlcihAbmFtZSwgJGJhc2VkaXIpIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXJyb3IpIi8+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICA8L3hzbDp0ZW1wbGF0ZT4KKworICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImZpbGUiPgorICAgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vZmlsZXN7c3Vic3RyaW5nLWFmdGVyKEBuYW1lLCAkYmFzZWRpcil9LnhtbCI+CisgICAgICAgIDxkb2N1bWVudD4KKyAgICAgICAgICA8cHJvcGVydGllcz4KKyAgICAgICAgICAgIDx0aXRsZT5DaGVja3N0eWxlIEF1ZGl0PC90aXRsZT4KKyAgICAgICAgICA8L3Byb3BlcnRpZXM+CisKKyAgICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgIDxzZWN0aW9uIG5hbWU9IkRldGFpbHMgZm9yIHtzdWJzdHJpbmctYWZ0ZXIoQG5hbWUsICRiYXNlZGlyKX0iPgorICAgICAgICAgICAgICA8dGFibGU+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgPHRoPkVycm9yIERlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICA8dGg+TGluZTwvdGg+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImVycm9yIj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGVkLXJvdyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgdGl0bGU9IntAc291cmNlfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBtZXNzYWdlIi8+PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGxpbmUiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICA8L2JvZHk+CisgICAgICAgIDwvZG9jdW1lbnQ+CisgICAgICA8L3JlZGlyZWN0OndyaXRlPgorICAgIDwveHNsOnRlbXBsYXRlPgorCisgICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2hlY2tzdHlsZSIgbW9kZT0ic3VtbWFyeSI+CisgICAgICA8c2VjdGlvbiBuYW1lPSJTdW1tYXJ5Ij4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmaWxlQ291bnQiIHNlbGVjdD0iY291bnQoZmlsZSkiLz4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJlcnJvckNvdW50IiBzZWxlY3Q9ImNvdW50KGZpbGUvZXJyb3IpIi8+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZmlsZUVycm9yQ291bnQiIHNlbGVjdD0iY291bnQoZmlsZVtjb3VudChlcnJvcikgIT0gMF0pIi8+CisgICAgICAgIDx0YWJsZT4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGg+RmlsZXM8L3RoPgorICAgICAgICAgICAgICAgIDx0aD5GaWxlcyBXaXRoIEVycm9yczwvdGg+CisgICAgICAgICAgICAgICAgPHRoPkVycm9yczwvdGg+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGVkLXJvdyIvPgorICAgICAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGZpbGVDb3VudCIvPjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZmlsZUVycm9yQ291bnQiLz48L3RkPgorICAgICAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVycm9yQ291bnQiLz48L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3hzbDp0ZW1wbGF0ZT4KKworICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iYWx0ZXJuYXRlZC1yb3ciPgorICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCkgbW9kIDIgPSAxIj5vZGRyb3c8L3hzbDppZj4KKyAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSBtb2QgMiA9IDAiPmV2ZW5yb3c8L3hzbDppZj4KKyAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KKwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2V0Yy9jb3ZlcmFnZS1mcmFtZXMueHNsIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2V0Yy9jb3ZlcmFnZS1mcmFtZXMueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDg5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2NvdmVyYWdlLWZyYW1lcy54c2wKQEAgLTAsMCArMSw0OTYgQEAKKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zOmx4c2x0PSJodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdCIKKyAgICB4bWxuczpyZWRpcmVjdD0ib3JnLmFwYWNoZS54YWxhbi5saWIuUmVkaXJlY3QiCisgICAgZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXM9InJlZGlyZWN0Ij4KKzx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIgaW5kZW50PSJ5ZXMiLz4KKzx4c2w6ZGVjaW1hbC1mb3JtYXQgZGVjaW1hbC1zZXBhcmF0b3I9Ii4iIGdyb3VwaW5nLXNlcGFyYXRvcj0iLCIgLz4KKzwhLS0KKyAgICBDb3B5cmlnaHQgIDIwMDEtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIAorICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgIAorICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgIAorLS0+CisKKzwhLS0KKworIFNhbXBsZSBzdHlsZXNoZWV0IHRvIGJlIHVzZWQgd2l0aCBKUHJvYmUgMy4wIFhNTCBvdXRwdXQuCisKKyBJdCBjcmVhdGVzIGEgc2V0IG9mIEhUTUwgZmlsZXMgYSBsYSBqYXZhZG9jIHdoZXJlIHlvdSBjYW4gYnJvd3NlIGVhc2lseQorIHRocm91Z2ggYWxsIHBhY2thZ2VzIGFuZCBjbGFzc2VzLgorCisgSXQgaXMgYmVzdCB1c2VkIHdpdGggSlByb2JlIENvdmVyYWdlIEFudCB0YXNrIHRoYXQgZ2l2ZXMgeW91IHRoZSBiZW5lZml0Cisgb2YgYSByZWZlcmVuY2UgY2xhc3NwYXRoIHNvIHRoYXQgeW91IGhhdmUgdGhlIGxpc3Qgb2YgY2xhc3Nlcy9tZXRob2RzCisgdGhhdCBhcmUgbm90IHVzZWQgYXQgYWxsIGluIGEgZ2l2ZW4gY2xhc3NwYXRoLgorCisgQGF1dGhvciBTdGVwaGFuZSBCYWlsbGlleiA8YSBocmVmPSJtYWlsdG86c2JhaWxsaWV6QGFwYWNoZS5vcmciLz4KKworLS0+CisKKzwhLS0gZGVmYXVsdCBvdXRwdXQgZGlyZWN0b3J5IGlzIGN1cnJlbnQgZGlyZWN0b3J5IC0tPgorPHhzbDpwYXJhbSBuYW1lPSJvdXRwdXQuZGlyIiBzZWxlY3Q9IicuJyIvPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBSb290IGVsZW1lbnQKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9zbmFwc2hvdCI+CisgICAgPCEtLSBjcmVhdGUgdGhlIGluZGV4Lmh0bWwgLS0+CisgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vaW5kZXguaHRtbCI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmRleC5odG1sIi8+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gY3JlYXRlIHRoZSBzdHlsZXNoZWV0LmNzcyAtLT4KKyAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9zdHlsZXNoZWV0LmNzcyI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHlsZXNoZWV0LmNzcyIvPgorICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICA8IS0tIGNyZWF0ZSB0aGUgb3ZlcnZpZXctcGFja2FnZXMuaHRtbCBhdCB0aGUgcm9vdCAtLT4KKyAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9Im92ZXJ2aWV3LnBhY2thZ2VzIi8+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gY3JlYXRlIHRoZSBhbGwtcGFja2FnZXMuaHRtbCBhdCB0aGUgcm9vdCAtLT4KKyAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9vdmVydmlldy1mcmFtZS5odG1sIj4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhbGwucGFja2FnZXMiLz4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBjcmVhdGUgdGhlIGFsbC1jbGFzc2VzLmh0bWwgYXQgdGhlIHJvb3QgLS0+CisgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vYWxsY2xhc3Nlcy1mcmFtZS5odG1sIj4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhbGwuY2xhc3NlcyIvPgorICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICA8IS0tIHByb2Nlc3MgYWxsIHBhY2thZ2VzIC0tPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9wYWNrYWdlIiBtb2RlPSJ3cml0ZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBGcmFtZXNldCBkZWZpbml0aW9uLiBFbnRyeSBwb2ludCBmb3IgdGhlIHJlcG9ydC4KKyAgICAzIGZyYW1lczogcGFja2FnZUxpc3RGcmFtZSwgY2xhc3NMaXN0RnJhbWUsIGNsYXNzRnJhbWUKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXguaHRtbCI+Cis8aHRtbD4KKyAgICA8aGVhZD48dGl0bGU+Q292ZXJhZ2UgUmVzdWx0cy48L3RpdGxlPjwvaGVhZD4KKyAgICA8ZnJhbWVzZXQgY29scz0iMjAlLDgwJSI+CisgICAgICAgIDxmcmFtZXNldCByb3dzPSIzMCUsNzAlIj4KKyAgICAgICAgICAgIDxmcmFtZSBzcmM9Im92ZXJ2aWV3LWZyYW1lLmh0bWwiIG5hbWU9InBhY2thZ2VMaXN0RnJhbWUiLz4KKyAgICAgICAgICAgIDxmcmFtZSBzcmM9ImFsbGNsYXNzZXMtZnJhbWUuaHRtbCIgbmFtZT0iY2xhc3NMaXN0RnJhbWUiLz4KKyAgICAgICAgPC9mcmFtZXNldD4KKyAgICAgICAgPGZyYW1lIHNyYz0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIiBuYW1lPSJjbGFzc0ZyYW1lIi8+CisgICAgPC9mcmFtZXNldD4KKyAgICA8bm9mcmFtZXM+CisgICAgICAgIDxoMj5GcmFtZSBBbGVydDwvaDI+CisgICAgICAgIDxwPgorICAgICAgICBUaGlzIGRvY3VtZW50IGlzIGRlc2lnbmVkIHRvIGJlIHZpZXdlZCB1c2luZyB0aGUgZnJhbWVzIGZlYXR1cmUuIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCB5b3UgYXJlIHVzaW5nIGEgbm9uLWZyYW1lLWNhcGFibGUgd2ViIGNsaWVudC4KKyAgICAgICAgPC9wPgorICAgIDwvbm9mcmFtZXM+Cis8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFN0eWxlc2hlZXQgQ1NTIHVzZWQKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKzwhLS0gdGhpcyBpcyB0aGUgc3R5bGVzaGVldCBjc3MgdG8gdXNlIGZvciBuZWFybHkgZXZlcnl0aGluZyAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0ic3R5bGVzaGVldC5jc3MiPgorICAgIC5iYW5uZXJjZWxsIHsKKyAgICAgIGJvcmRlcjogMHB4OworICAgICAgcGFkZGluZzogMHB4OworICAgIH0KKyAgICBib2R5IHsKKyAgICAgIG1hcmdpbi1sZWZ0OiAxMDsKKyAgICAgIG1hcmdpbi1yaWdodDogMTA7CisgICAgICBmb250Om5vcm1hbCA4MCUgYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmOworICAgICAgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOworICAgICAgY29sb3I6IzAwMDAwMDsKKyAgICB9CisgICAgLmEgdGQgeworICAgICAgYmFja2dyb3VuZDogI2VmZWZlZjsKKyAgICB9CisgICAgLmIgdGQgeworICAgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICB9CisgICAgdGgsIHRkIHsKKyAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworICAgIH0KKyAgICB0aCB7CisgICAgICBmb250LXdlaWdodDpib2xkOworICAgICAgYmFja2dyb3VuZDogI2NjYzsKKyAgICAgIGNvbG9yOiBibGFjazsKKyAgICB9CisgICAgdGFibGUsIHRoLCB0ZCB7CisgICAgICBmb250LXNpemU6MTAwJTsKKyAgICAgIGJvcmRlcjogbm9uZQorICAgIH0KKyAgICB0YWJsZS5sb2cgdHIgdGQsIHRyIHRoIHsKKworICAgIH0KKyAgICBoMiB7CisgICAgICBmb250LXdlaWdodDpib2xkOworICAgICAgZm9udC1zaXplOjE0MCU7CisgICAgICBtYXJnaW4tYm90dG9tOiA1OworICAgIH0KKyAgICBoMyB7CisgICAgICBmb250LXNpemU6MTAwJTsKKyAgICAgIGZvbnQtd2VpZ2h0OmJvbGQ7CisgICAgICBiYWNrZ3JvdW5kOiAjNTI1RDc2OworICAgICAgY29sb3I6IHdoaXRlOworICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgcGFkZGluZzogNXB4OworICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7CisgICAgICBtYXJnaW4tbGVmdDogMnB4OworICAgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICB9Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIExpc3Qgb2YgYWxsIGNsYXNzZXMgaW4gYWxsIHBhY2thZ2VzCisgICAgVGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBjbGFzc0xpc3RGcmFtZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic25hcHNob3QiIG1vZGU9ImFsbC5jbGFzc2VzIj4KKyAgICA8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayIvPgorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PgorICAgICAgICAgICAgPGgyPkNsYXNzZXM8L2gyPgorICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0icGFja2FnZS9jbGFzcyI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IihhbmNlc3Rvcjo6cGFja2FnZSlbbGFzdCgpXS9AbmFtZSIvPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImxpbmsiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJub3QoJHBhY2thZ2UubmFtZT0nJykiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJ0cmFuc2xhdGUoJHBhY2thZ2UubmFtZSwnLicsJy8nKSIvPjx4c2w6dGV4dD4vPC94c2w6dGV4dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjx4c2w6dGV4dD4uaHRtbDwveHNsOnRleHQ+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOnZhcmlhYmxlPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbm93cmFwPSJub3dyYXAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhcmdldD0iY2xhc3NGcmFtZSIgaHJlZj0ieyRsaW5rfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIDwvYm9keT4KKyAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBsaXN0IG9mIGFsbCBwYWNrYWdlcyAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InNuYXBzaG90IiBtb2RlPSJhbGwucGFja2FnZXMiPgorICAgIDxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIi8+CisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8aDI+PGEgaHJlZj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPkhvbWU8L2E+PC9oMj4KKyAgICAgICAgICAgIDxoMj5QYWNrYWdlczwvaDI+CisgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJwYWNrYWdlIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7dHJhbnNsYXRlKEBuYW1lLCcuJywnLycpfS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIDwvYm9keT4KKyAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBvdmVydmlldyBvZiBzdGF0aXN0aWNzIGluIHBhY2thZ2VzIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic25hcHNob3QiIG1vZGU9Im92ZXJ2aWV3LnBhY2thZ2VzIj4KKyAgICA8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayIvPgorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IG9ubG9hZD0ib3BlbignYWxsY2xhc3Nlcy1mcmFtZS5odG1sJywnY2xhc3NMaXN0RnJhbWUnKSI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIi8+CisgICAgICAgIDxoMz5TdW1tYXJ5PC9oMz4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJsb2ciIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDwhLS10aCB3aWR0aD0iMTAlIiBub3dyYXA9Im5vd3JhcCI+RGF0ZTwvdGg+CisgICAgICAgICAgICAgICAgPHRoIHdpZHRoPSIxMCUiIG5vd3JhcD0ibm93cmFwIj5FbGFwc2VkIHRpbWU8L3RoLS0+CisgICAgICAgICAgICAgICAgPHRoIHdpZHRoPSIxMCUiIG5vd3JhcD0ibm93cmFwIj5SZXBvcnRlZCBDbGFzc2VzPC90aD4KKyAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjEwJSIgbm93cmFwPSJub3dyYXAiPk1ldGhvZHMgSGl0PC90aD4KKyAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjEwJSIgbm93cmFwPSJub3dyYXAiPkxpbmVzIEhpdDwvdGg+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyIGNsYXNzPSJhIj4KKyAgICAgICAgICAgICAgICA8IS0tdGQgbm93cmFwPSJub3dyYXAiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJleGVjdXRpb25fbG9nL0Bwcm9ncmFtX3N0YXJ0Ii8+PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImZvcm1hdC1udW1iZXIoZXhlY3V0aW9uX2xvZy9AZWxhcHNlZF90aW1lIGRpdiAxMDAwLCcwLjAnKSIvPnNlY3M8L3RkLS0+CisgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChwYWNrYWdlL2NsYXNzKSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJmb3JtYXQtbnVtYmVyKGNvdi5kYXRhL0BoaXRfbWV0aG9kcyBkaXYgY292LmRhdGEvQHRvdGFsX21ldGhvZHMsJzAuMCUnKSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJmb3JtYXQtbnVtYmVyKGNvdi5kYXRhL0BoaXRfbGluZXMgZGl2IGNvdi5kYXRhL0B0b3RhbF9saW5lcywnMC4wJScpIi8+PC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgPHRyPgorICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7Ij4KKyAgICAgICAgVG8gZW5zdXJlIGFjY3VyYXRlIHRlc3QgcnVucyBvbiBKYXZhIGFwcGxpY2F0aW9ucywgZGV2ZWxvcGVycyBuZWVkIHRvIGtub3cgaG93IG11Y2ggb2YKKyAgICAgICAgdGhlIGNvZGUgaGFzIGJlZW4gdGVzdGVkLCBhbmQgd2hlcmUgdG8gZmluZCBhbnkgdW50ZXN0ZWQgY29kZS4gQ292ZXJhZ2UgaGVscHMgeW91CisgICAgICAgIGxvY2F0ZSB1bnRlc3RlZCBjb2RlLCBhbmQgbWVhc3VyZSBwcmVjaXNlbHkgaG93IG11Y2ggY29kZSBoYXMgYmVlbiBleGVyY2lzZWQuCisgICAgICAgIFRoZSByZXN1bHQgaXMgYSBoaWdoZXIgcXVhbGl0eSBhcHBsaWNhdGlvbiBpbiBhIHNob3J0ZXIgcGVyaW9kIG9mIHRpbWUuCisgICAgICAgIDxwLz4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKworICAgICAgICA8aDM+UGFja2FnZXM8L2gzPgorICAgICAgICA8dGFibGUgY2xhc3M9ImxvZyIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIyIiB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InBhY2thZ2VbMV0iIG1vZGU9InN0YXRzLmhlYWRlciIvPgorICAgICAgICAgICAgPCEtLSBkaXNwbGF5IHBhY2thZ2VzIGFuZCBzb3J0IHRoZW0gdmlhIHRoZWlyIGNvdmVyYWdlIHJhdGUgLS0+CisgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0icGFja2FnZSI+CisgICAgICAgICAgICAgICAgPHhzbDpzb3J0IGRhdGEtdHlwZT0ibnVtYmVyIiBzZWxlY3Q9ImNvdi5kYXRhL0BoaXRfbGluZXMgZGl2IGNvdi5kYXRhL0B0b3RhbF9saW5lcyIvPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGUtcm93Ii8+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ7dHJhbnNsYXRlKEBuYW1lLCcuJywnLycpfS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZm9ybWF0LW51bWJlcihjb3YuZGF0YS9AaGl0X21ldGhvZHMgZGl2IGNvdi5kYXRhL0B0b3RhbF9tZXRob2RzLCcwLjAlJykiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImZvcm1hdC1udW1iZXIoY292LmRhdGEvQGhpdF9saW5lcyBkaXYgY292LmRhdGEvQHRvdGFsX2xpbmVzLCcwLjAlJykiLz48L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhZ2VGb290ZXIiLz4KKyAgICAgICAgPC9ib2R5PgorICAgICAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLQorIGRldGFpbGVkIGluZm8gZm9yIGEgcGFja2FnZS4gSXQgd2lsbCBvdXRwdXQgdGhlIGxpc3Qgb2YgY2xhc3NlcworLCB0aGUgc3VtbWFyeSBwYWdlLCBhbmQgdGhlIGluZm8gZm9yIGVhY2ggY2xhc3MKKy0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFja2FnZSIgbW9kZT0id3JpdGUiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5kaXIiPgorICAgICAgICA8eHNsOmlmIHRlc3Q9Im5vdChAbmFtZSA9ICcnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InRyYW5zbGF0ZShAbmFtZSwnLicsJy8nKSIvPjwveHNsOmlmPgorICAgICAgICA8eHNsOmlmIHRlc3Q9IkBuYW1lID0gJyciPi48L3hzbDppZj4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKworICAgIDwhLS0gY3JlYXRlIGEgY2xhc3Nlcy1saXN0Lmh0bWwgaW4gdGhlIHBhY2thZ2UgZGlyZWN0b3J5IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3skcGFja2FnZS5kaXJ9L3BhY2thZ2UtZnJhbWUuaHRtbCI+CisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2xhc3Nlcy5saXN0Ii8+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gY3JlYXRlIGEgcGFja2FnZS1zdW1tYXJ5Lmh0bWwgaW4gdGhlIHBhY2thZ2UgZGlyZWN0b3J5IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3skcGFja2FnZS5kaXJ9L3BhY2thZ2Utc3VtbWFyeS5odG1sIj4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYWNrYWdlLnN1bW1hcnkiLz4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBmb3IgZWFjaCBjbGFzcywgY3JlYXRlcyBhIEBuYW1lLmh0bWwgLS0+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImNsYXNzIj4KKyAgICAgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0veyRwYWNrYWdlLmRpcn0ve0BuYW1lfS5odG1sIj4KKyAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2xhc3MuZGV0YWlscyIvPgorICAgICAgICA8L3JlZGlyZWN0OndyaXRlPgorICAgIDwveHNsOmZvci1lYWNoPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gbGlzdCBvZiBjbGFzc2VzIGluIGEgcGFja2FnZSAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InBhY2thZ2UiIG1vZGU9ImNsYXNzZXMubGlzdCI+CisgICAgPGh0bWw+CisgICAgICAgIDxIRUFEPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiIHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvSEVBRD4KKyAgICAgICAgPEJPRFk+CisgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxIMj48YSBocmVmPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2E+PC9IMj4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKworICAgICAgICAgICAgPEgyPkNsYXNzZXM8L0gyPgorICAgICAgICAgICAgPFRBQkxFIFdJRFRIPSIxMDAlIj4KKyAgICAgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbm93cmFwPSJub3dyYXAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IntAbmFtZX0uaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICAgICAgPC9UQUJMRT4KKyAgICAgICAgPC9CT0RZPgorICAgIDwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIHN1bW1hcnkgb2YgYSBwYWNrYWdlIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFja2FnZSIgbW9kZT0icGFja2FnZS5zdW1tYXJ5Ij4KKyAgICA8SFRNTD4KKyAgICAgICAgPEhFQUQ+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhY2thZ2UubmFtZSIgc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC9IRUFEPgorICAgICAgICA8IS0tIHdoZW4gbG9hZGluZyB0aGlzIHBhY2thZ2UsIGl0IHdpbGwgb3BlbiB0aGUgY2xhc3NlcyBpbnRvIHRoZSBmcmFtZSAtLT4KKyAgICAgICAgPEJPRFkgb25sb2FkPSJvcGVuKCdwYWNrYWdlLWZyYW1lLmh0bWwnLCdjbGFzc0xpc3RGcmFtZScpIj4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIi8+CisgICAgICAgICAgICA8aDM+UGFja2FnZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2gzPgorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJsb2ciIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic3RhdHMuaGVhZGVyIi8+CisgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzdGF0cyIvPgorICAgICAgICAgICAgPC90YWJsZT4KKworICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJjb3VudChjbGFzcykgJmd0OyAwIj4KKyAgICAgICAgICAgICAgICA8SDM+Q2xhc3NlczwvSDM+CisgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJsb2ciIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InN0YXRzLmhlYWRlciIvPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNsYXNzIiBtb2RlPSJzdGF0cyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgZGF0YS10eXBlPSJudW1iZXIiIHNlbGVjdD0iY292LmRhdGEvQGhpdF9saW5lcyBkaXYgY292LmRhdGEvQHRvdGFsX2xpbmVzIi8+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUZvb3RlciIvPgorICAgICAgICA8L0JPRFk+CisgICAgPC9IVE1MPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gZGV0YWlscyBvZiBhIGNsYXNzIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2xhc3MiIG1vZGU9ImNsYXNzLmRldGFpbHMiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IihhbmNlc3Rvcjo6cGFja2FnZSlbbGFzdCgpXS9AbmFtZSIvPgorICAgIDxIVE1MPgorICAgICAgICA8SEVBRD4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IiRwYWNrYWdlLm5hbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvSEVBRD4KKyAgICAgICAgPEJPRFk+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciIvPgorICAgICAgICAgICAgPEgzPkNsYXNzIDx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWUgPSAnJykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcGFja2FnZS5uYW1lIi8+LjwveHNsOmlmPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvSDM+CisKKyAgICAgICAgICAgIDwhLS0gY2xhc3Mgc3VtbWFyeSAtLT4KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0ibG9nIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InN0YXRzLmhlYWRlciIvPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic3RhdHMiLz4KKyAgICAgICAgICAgIDwvdGFibGU+CisKKyAgICAgICAgICAgIDwhLS0gZGV0YWlscyBvZiBtZXRob2RzIC0tPgorICAgICAgICAgICAgPEgzPk1ldGhvZHM8L0gzPgorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJsb2ciIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kWzFdIiBtb2RlPSJzdGF0cy5oZWFkZXIiLz4KKyAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Im1ldGhvZCIgbW9kZT0ic3RhdHMiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgZGF0YS10eXBlPSJudW1iZXIiIHNlbGVjdD0iY292LmRhdGEvQGhpdF9saW5lcyBkaXYgY292LmRhdGEvQHRvdGFsX2xpbmVzIi8+CisgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlRm9vdGVyIi8+CisgICAgICAgIDwvQk9EWT4KKyAgICA8L0hUTUw+CisKKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIFBhZ2UgSGVhZGVyIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIj4KKyAgPCEtLSBqYWthcnRhIGxvZ28gLS0+CisgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgorICA8dHI+CisgICAgPHRkIGNsYXNzPSJiYW5uZXJjZWxsIiByb3dzcGFuPSIyIj4KKyAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvIj4KKyAgICAgIDxpbWcgc3JjPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2ltYWdlcy9qYWthcnRhLWxvZ28uZ2lmIiBhbHQ9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmciIGFsaWduPSJsZWZ0IiBib3JkZXI9IjAiLz4KKyAgICAgIDwvYT4KKyAgICA8L3RkPgorICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxoMj5Tb3VyY2UgQ29kZSBDb3ZlcmFnZTwvaDI+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPkRlc2lnbmVkIGZvciB1c2Ugd2l0aCA8YSBocmVmPSdodHRwOi8vd3d3LnNpdHJha2EuY29tL2pwcm9iZSc+U2l0cmFrYSBKUHJvYmU8L2E+IGFuZCA8YSBocmVmPSdodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnJz5BbnQ8L2E+LjwvdGQ+CisgICAgICAgIDwvdHI+CisgIDwvdGFibGU+CisgICAgPGhyIHNpemU9IjEiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIFBhZ2UgRm9vdGVyIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYWdlRm9vdGVyIj4KKyAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgPHRyPjx0ZD48aHIgbm9zaGFkZT0ieWVzIiBzaXplPSIxIi8+PC90ZD48L3RyPgorICAgICAgPHRyPjx0ZD4KKyAgICAgIDxkaXYgYWxpZ249ImNlbnRlciI+PGZvbnQgY29sb3I9IiM1MjVENzYiIHNpemU9Ii0xIj48ZW0+CisgICAgICBDb3B5cmlnaHQgJiMxNjk7IDE5OTktMjAwMSwgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgICAgIDwvZW0+PC9mb250PjwvZGl2PgorICAgICAgPC90ZD48L3RyPgorICAgIDwvdGFibGU+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8eHNsOnRlbXBsYXRlIG5hbWU9InRhYmxlLmhlYWRlciI+CisgICAgPHRyPgorICAgICAgICA8dGggd2lkdGg9IjgwJSI+TmFtZTwvdGg+CisgICAgICAgIDx0aCB3aWR0aD0iMTAlIiBub3dyYXA9Im5vd3JhcCI+TWV0aG9kcyBIaXQ8L3RoPgorICAgICAgICA8dGggd2lkdGg9IjEwJSIgbm93cmFwPSJub3dyYXAiPkxpbmVzIEhpdDwvdGg+CisgICAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJtZXRob2QiIG1vZGU9InN0YXRzLmhlYWRlciI+CisgICAgPHRyPgorICAgICAgICA8dGggd2lkdGg9IjkwJSI+TmFtZTwvdGg+CisgICAgICAgIDx0aCB3aWR0aD0iMTAlIiBub3dyYXA9Im5vd3JhcCI+TGluZXMgSGl0PC90aD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJtZXRob2QiIG1vZGU9InN0YXRzIj4KKyAgICA8dHI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWx0ZXJuYXRlLXJvdyIvPgorICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC90ZD4KKyAgICAgICAgPHRkPgorICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iZm9ybWF0LW51bWJlcihjb3YuZGF0YS9AaGl0X2xpbmVzIGRpdiBjb3YuZGF0YS9AdG90YWxfbGluZXMsJzAuMCUnKSIvPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFja2FnZXxjbGFzcyIgbW9kZT0ic3RhdHMuaGVhZGVyIj4KKyAgICA8dHI+CisgICAgICAgIDx0aCB3aWR0aD0iODAlIj5OYW1lPC90aD4KKyAgICAgICAgPHRoIHdpZHRoPSIxMCUiIG5vd3JhcD0ibm93cmFwIj5NZXRob2RzIEhpdDwvdGg+CisgICAgICAgIDx0aCB3aWR0aD0iMTAlIiBub3dyYXA9Im5vd3JhcCI+TGluZXMgSGl0PC90aD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwYWNrYWdlfGNsYXNzIiBtb2RlPSJzdGF0cyI+CisgICAgPHRyPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFsdGVybmF0ZS1yb3ciLz4KKyAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvdGQ+CisgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZm9ybWF0LW51bWJlcihjb3YuZGF0YS9AaGl0X21ldGhvZHMgZGl2IGNvdi5kYXRhL0B0b3RhbF9tZXRob2RzLCcwLjAlJykiLz48L3RkPgorICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImZvcm1hdC1udW1iZXIoY292LmRhdGEvQGhpdF9saW5lcyBkaXYgY292LmRhdGEvQHRvdGFsX2xpbmVzLCcwLjAlJykiLz48L3RkPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLQorICAgIHRyYW5zZm9ybSBzdHJpbmcgbGlrZSBhLmIuYyB0byAuLi8uLi8uLi8KKyAgICBAcGFyYW0gcGF0aCB0aGUgcGF0aCB0byB0cmFuc2Zvcm0gaW50byBhIGRlc2NlbmRpbmcgZGlyZWN0b3J5IHBhdGgKKy0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXRoIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InBhdGgiLz4KKyAgICA8eHNsOmlmIHRlc3Q9ImNvbnRhaW5zKCRwYXRoLCcuJykiPgorICAgICAgICA8eHNsOnRleHQ+Li4vPC94c2w6dGV4dD4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhdGgiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhdGgiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoJHBhdGgsJy4nKSIvPjwveHNsOndpdGgtcGFyYW0+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDppZiB0ZXN0PSJub3QoY29udGFpbnMoJHBhdGgsJy4nKSkgYW5kIG5vdCgkcGF0aCA9ICcnKSI+CisgICAgICAgIDx4c2w6dGV4dD4uLi88L3hzbDp0ZXh0PgorICAgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLSBjcmVhdGUgdGhlIGxpbmsgdG8gdGhlIHN0eWxlc2hlZXQgYmFzZWQgb24gdGhlIHBhY2thZ2UgbmFtZSAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiLz4KKyAgICA8TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgVElUTEU9IlN0eWxlIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj48eHNsOmlmIHRlc3Q9Im5vdCgkcGFja2FnZS5uYW1lID0gJ3VubmFtZWQgcGFja2FnZScpIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGF0aCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhdGgiIHNlbGVjdD0iJHBhY2thZ2UubmFtZSIvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC94c2w6aWY+c3R5bGVzaGVldC5jc3M8L3hzbDphdHRyaWJ1dGU+PC9MSU5LPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gYWx0ZXJuYXRlZCByb3cgc3R5bGUgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9ImFsdGVybmF0ZS1yb3ciPgorPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCkgbW9kIDIgPSAxIj5hPC94c2w6aWY+CisgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSBtb2QgMiA9IDAiPmI8L3hzbDppZj4KKzwveHNsOmF0dHJpYnV0ZT4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgorCisKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvamRlcGVuZC1mcmFtZXMueHNsIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2V0Yy9qZGVwZW5kLWZyYW1lcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyYThhZQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvamRlcGVuZC1mcmFtZXMueHNsCkBAIC0wLDAgKzEsNDg1IEBACis8eHNsOnN0eWxlc2hlZXQgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOmx4c2x0PSJodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdCIKKyAgeG1sbnM6cmVkaXJlY3Q9Im9yZy5hcGFjaGUueGFsYW4ubGliLlJlZGlyZWN0IgorICBleHRlbnNpb24tZWxlbWVudC1wcmVmaXhlcz0icmVkaXJlY3QiPgorPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBpbmRlbnQ9InllcyIgZW5jb2Rpbmc9IlVTLUFTQ0lJIi8+Cis8IS0tCisgICAgQ29weXJpZ2h0ICAyMDAyLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAKKy0tPgorPCEtLQorCisgU2FtcGxlIHN0eWxlc2hlZXQgdG8gYmUgdXNlZCB3aXRoIEpEZXBlbmQgWE1MIG91dHB1dC4KKworIEl0IGNyZWF0ZXMgYSBzZXQgb2YgSFRNTCBmaWxlcyBhIGxhIGphdmFkb2Mgd2hlcmUgeW91IGNhbiBicm93c2UgZWFzaWx5CisgdGhyb3VnaCBhbGwgcGFja2FnZXMgYW5kIGNsYXNzZXMuCisKKyBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpqdHVsbGV5QG5vdmVsbC5jb20iPkplZmYgVHVsbGV5PC9hPgorCisgIC0tPgorPHhzbDpwYXJhbSBuYW1lPSJvdXRwdXQuZGlyIiBzZWxlY3Q9IicuJyIvPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJKRGVwZW5kIj4KKyAgIDwhLS0gY3JlYXRlIHRoZSBpbmRleC5odG1sIC0tPgorICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vaW5kZXguaHRtbCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5kZXguaHRtbCIvPgorICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICA8IS0tIGNyZWF0ZSB0aGUgc3R5bGVzaGVldC5jc3MgLS0+CisgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3N0eWxlc2hlZXQuY3NzIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3R5bGVzaGVldC5jc3MiLz4KKyAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgIDwhLS0gY3JlYXRlIHRoZSBvdmVydmlldy1wYWNrYWdlcy5odG1sIGF0IHRoZSByb290IC0tPgorICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ib3ZlcnZpZXcucGFja2FnZXMiLz4KKyAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgPCEtLSBjcmVhdGUgdGhlIG92ZXJ2aWV3LXBhY2thZ2VzLmh0bWwgYXQgdGhlIHJvb3QgLS0+CisgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9vdmVydmlldy1wYWNrYWdlcy5odG1sIj4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhY2thZ2VzLmRldGFpbHMiLz4KKyAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgPCEtLSBjcmVhdGUgdGhlIG92ZXJ2aWV3LWN5Y2xlcy5odG1sIGF0IHRoZSByb290IC0tPgorICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vb3ZlcnZpZXctY3ljbGVzLmh0bWwiPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY3ljbGVzLmRldGFpbHMiLz4KKyAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgPCEtLSBjcmVhdGUgdGhlIG92ZXJ2aWV3LWN5Y2xlcy5odG1sIGF0IHRoZSByb290IC0tPgorICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vb3ZlcnZpZXctZXhwbGFuYXRpb25zLmh0bWwiPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iZXhwbGFuYXRpb25zIi8+CisgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgPCEtLSBjcmVhdGUgdGhlIGFsbC1wYWNrYWdlcy5odG1sIGF0IHRoZSByb290IC0tPgorICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vYWxsLXBhY2thZ2VzLmh0bWwiPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iUGFja2FnZXMiIG1vZGU9ImFsbC5wYWNrYWdlcyIvPgorICA8L3JlZGlyZWN0OndyaXRlPgorCisgIDwhLS0gY3JlYXRlIHRoZSBhbGwtY3ljbGVzLmh0bWwgYXQgdGhlIHJvb3QgLS0+CisgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L2FsbC1jeWNsZXMuaHRtbCI+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJDeWNsZXMiIG1vZGU9ImFsbC5jeWNsZXMiLz4KKyAgPC9yZWRpcmVjdDp3cml0ZT4KKzwveHNsOnRlbXBsYXRlPgorCisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXguaHRtbCI+Cis8aHRtbD4KKyAgIDxoZWFkPgorICAgICAgPHRpdGxlPkpEZXBlbmQgQW5hbHlzaXM8L3RpdGxlPgorICAgPC9oZWFkPgorICAgICAgPGZyYW1lc2V0IGNvbHM9IjIwJSw4MCUiPgorICAgICAgICAgPGZyYW1lc2V0IHJvd3M9IjMwJSw3MCUiPgorICAgICAgICAgICAgPGZyYW1lIHNyYz0iYWxsLXBhY2thZ2VzLmh0bWwiIG5hbWU9InBhY2thZ2VMaXN0RnJhbWUiLz4KKyAgICAgICAgICAgIDxmcmFtZSBzcmM9ImFsbC1jeWNsZXMuaHRtbCIgbmFtZT0iY2xhc3NMaXN0RnJhbWUiLz4KKyAgICAgICAgIDwvZnJhbWVzZXQ+CisgICAgICAgICA8ZnJhbWUgc3JjPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiIG5hbWU9ImNsYXNzRnJhbWUiLz4KKyAgICAgIDwvZnJhbWVzZXQ+CisgICAgICA8bm9mcmFtZXM+CisgICAgICAgICA8aDI+RnJhbWUgQWxlcnQ8L2gyPgorICAgICAgICAgPHA+CisgICAgICAgICAgICBUaGlzIGRvY3VtZW50IGlzIGRlc2lnbmVkIHRvIGJlIHZpZXdlZCB1c2luZyB0aGUgZnJhbWVzIGZlYXR1cmUuIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCB5b3UgYXJlIHVzaW5nIGEgbm9uLWZyYW1lLWNhcGFibGUgd2ViIGNsaWVudC4KKyAgICAgICAgIDwvcD4KKyAgICAgIDwvbm9mcmFtZXM+Cis8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSB0aGlzIGlzIHRoZSBzdHlsZXNoZWV0IGNzcyB0byB1c2UgZm9yIG5lYXJseSBldmVyeXRoaW5nIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzdHlsZXNoZWV0LmNzcyI+CisgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGJvZHkgeworICAgIGZvbnQ6bm9ybWFsIDY4JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYTsKKyAgICBjb2xvcjojMDAwMDAwOworICAgIH0KKyAgICB0YWJsZSB0ciB0ZCwgdHIgdGggeworICAgICAgZm9udC1zaXplOiA2OCU7CisgICAgfQorICAgIHRhYmxlLmRldGFpbHMgdHIgdGh7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgdGV4dC1hbGlnbjpsZWZ0OworICAgIGJhY2tncm91bmQ6I2E2Y2FmMDsKKyAgICB9CisgICAgdGFibGUuZGV0YWlscyB0ciB0ZHsKKyAgICBiYWNrZ3JvdW5kOiNlZWVlZTA7CisgICAgfQorCisgICAgcCB7CisgICAgbGluZS1oZWlnaHQ6MS41ZW07CisgICAgbWFyZ2luLXRvcDowLjVlbTsgbWFyZ2luLWJvdHRvbToxLjBlbTsKKyAgICBtYXJnaW4tbGVmdDoyZW07CisgICAgbWFyZ2luLXJpZ2h0OjJlbTsKKyAgICB9CisgICAgaDEgeworICAgIG1hcmdpbjogMHB4IDBweCA1cHg7IGZvbnQ6IDE2NSUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2EKKyAgICB9CisgICAgaDIgeworICAgIG1hcmdpbi10b3A6IDFlbTsgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTI1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgIH0KKyAgICBoMyB7CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTE1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgIH0KKyAgICBoNCB7CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTAwJSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgIH0KKyAgICBoNSB7CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTAwJSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgIH0KKyAgICBoNiB7CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTAwJSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgIH0KKyAgICAuRXJyb3IgeworICAgIGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOnJlZDsKKyAgICB9CisgICAgLkZhaWx1cmUgeworICAgIGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOnB1cnBsZTsKKyAgICB9CisgICAgLlByb3BlcnRpZXMgeworICAgIHRleHQtYWxpZ246cmlnaHQ7CisgICAgfQorICA8L3N0eWxlPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IkpEZXBlbmQiIG1vZGU9Im92ZXJ2aWV3LnBhY2thZ2VzIj4KKyAgIDxodG1sPgorICAgICAgPGhlYWQ+CisgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzdHlsZXNoZWV0LmNzcyIvPgorICAgICAgPC9oZWFkPgorICAgICAgPGJvZHk+CisgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciIvPgorICA8dGFibGUgd2lkdGg9IjEwMCUiPjx0ciBhbGlnbj0ibGVmdCI+PGgyPlN1bW1hcnk8L2gyPjx0ZD4KKyAgPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4KKyAgW3N1bW1hcnldCisgIFs8YSBocmVmPSJvdmVydmlldy1wYWNrYWdlcy5odG1sIj5wYWNrYWdlczwvYT5dCisgIFs8YSBocmVmPSJvdmVydmlldy1jeWNsZXMuaHRtbCI+Y3ljbGVzPC9hPl0KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LWV4cGxhbmF0aW9ucy5odG1sIj5leHBsYW5hdGlvbnM8L2E+XQorICAgPC90ZD48L3RyPjwvdGFibGU+CisgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNsYXNzPSJkZXRhaWxzIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgIDx0aD5QYWNrYWdlPC90aD4KKyAgICAgICAgICAgICAgIDx0aD5Ub3RhbCBDbGFzc2VzPC90aD4KKyAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSJvdmVydmlldy1leHBsYW5hdGlvbnMuaHRtbCNFWG51bWJlciI+QWJzdHJhY3QgQ2xhc3NlczwvYT48L3RoPgorICAgICAgICAgICAgICAgPHRoPjxhIGhyZWY9Im92ZXJ2aWV3LWV4cGxhbmF0aW9ucy5odG1sI0VYbnVtYmVyIj5Db25jcmV0ZSBDbGFzc2VzPC9hPjwvdGg+CisgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0ib3ZlcnZpZXctZXhwbGFuYXRpb25zLmh0bWwjRVhhZmZlcmVudCI+QWZmZXJlbnQgQ291cGxpbmdzPC9hPjwvdGg+CisgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0ib3ZlcnZpZXctZXhwbGFuYXRpb25zLmh0bWwjRVhlZmZlcmVudCI+RWZmZXJlbnQgQ291cGxpbmdzPC9hPjwvdGg+CisgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0ib3ZlcnZpZXctZXhwbGFuYXRpb25zLmh0bWwjRVhhYnN0cmFjdG5lc3MiPkFic3RyYWN0bmVzczwvYT48L3RoPgorICAgICAgICAgICAgICAgPHRoPjxhIGhyZWY9Im92ZXJ2aWV3LWV4cGxhbmF0aW9ucy5odG1sI0VYaW5zdGFiaWxpdHkiPkluc3RhYmlsaXR5PC9hPjwvdGg+CisgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0ib3ZlcnZpZXctZXhwbGFuYXRpb25zLmh0bWwjRVhkaXN0YW5jZSI+RGlzdGFuY2U8L2E+PC90aD4KKworICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIuL1BhY2thZ2VzL1BhY2thZ2UiPgorICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJjb3VudChlcnJvcikgPSAwIj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8YT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPm92ZXJ2aWV3LXBhY2thZ2VzLmh0bWwjUEs8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdGF0cy9Ub3RhbENsYXNzZXMiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlN0YXRzL0Fic3RyYWN0Q2xhc3NlcyIvPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvQ29uY3JldGVDbGFzc2VzIi8+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdGF0cy9DYSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvQ2UiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlN0YXRzL0EiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlN0YXRzL0kiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlN0YXRzL0QiLz48L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iLi9QYWNrYWdlcy9QYWNrYWdlIj4KKyAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoZXJyb3IpICZndDsgMCI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSI4Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZXJyb3IiLz48L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICAgICA8L3RhYmxlPgorICAgICAgPC9ib2R5PgorICAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IkpEZXBlbmQiIG1vZGU9InBhY2thZ2VzLmRldGFpbHMiPgorICAgPGh0bWw+CisgICAgICA8aGVhZD4KKyAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzdHlsZXNoZWV0LmNzcyIvPgorICAgICAgPC9oZWFkPgorICAgICAgPGJvZHk+CisgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciIvPgorICA8dGFibGUgd2lkdGg9IjEwMCUiPjx0ciBhbGlnbj0ibGVmdCI+PGgyPlBhY2thZ2VzPC9oMj48dGQ+CisgIDwvdGQ+PHRkIGFsaWduPSJyaWdodCI+CisgIFs8YSBocmVmPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPnN1bW1hcnk8L2E+XQorICBbcGFja2FnZXNdCisgIFs8YSBocmVmPSJvdmVydmlldy1jeWNsZXMuaHRtbCI+Y3ljbGVzPC9hPl0KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LWV4cGxhbmF0aW9ucy5odG1sIj5leHBsYW5hdGlvbnM8L2E+XQorICAgPC90ZD48L3RyPjwvdGFibGU+CisKKyAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii4vUGFja2FnZXMvUGFja2FnZSI+CisgICAgPHhzbDppZiB0ZXN0PSJjb3VudChlcnJvcikgPSAwIj4KKyAgICAgIDxoMz48YT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5QSzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvYT48L2gzPgorCisgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKyAgICAgICAgPHRkPjxhIGhyZWY9Im92ZXJ2aWV3LWV4cGxhbmF0aW9ucy5odG1sI0VYYWZmZXJlbnQiPkFmZmVyZW50IENvdXBsaW5nczwvYT46IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdGF0cy9DYSIvPjwvdGQ+CisgICAgICAgIDx0ZD48YSBocmVmPSJvdmVydmlldy1leHBsYW5hdGlvbnMuaHRtbCNFWGVmZmVyZW50Ij5FZmZlcmVudCBDb3VwbGluZ3M8L2E+OiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvQ2UiLz48L3RkPgorICAgICAgICA8dGQ+PGEgaHJlZj0ib3ZlcnZpZXctZXhwbGFuYXRpb25zLmh0bWwjRVhhYnN0cmFjdG5lc3MiPkFic3RyYWN0bmVzczwvYT46IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdGF0cy9BIi8+PC90ZD4KKyAgICAgICAgPHRkPjxhIGhyZWY9Im92ZXJ2aWV3LWV4cGxhbmF0aW9ucy5odG1sI0VYaW5zdGFiaWxpdHkiPkluc3RhYmlsaXR5PC9hPjogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlN0YXRzL0kiLz48L3RkPgorICAgICAgICA8dGQ+PGEgaHJlZj0ib3ZlcnZpZXctZXhwbGFuYXRpb25zLmh0bWwjRVhkaXN0YW5jZSI+RGlzdGFuY2U8L2E+OiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvRCIvPjwvdGQ+CisgICAgICA8L3RyPjwvdGFibGU+CisKKyAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2xhc3M9ImRldGFpbHMiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPkFic3RyYWN0IENsYXNzZXM8L3RoPgorICAgICAgICAgIDx0aD5Db25jcmV0ZSBDbGFzc2VzPC90aD4KKyAgICAgICAgICA8dGg+VXNlZCBieSBQYWNrYWdlczwvdGg+CisgICAgICAgICAgPHRoPlVzZXMgUGFja2FnZXM8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4KKyAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KEFic3RyYWN0Q2xhc3Nlcy9DbGFzcyk9MCI+CisgICAgICAgICAgICAgIDxpPk5vbmU8L2k+CisgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJBYnN0cmFjdENsYXNzZXMvQ2xhc3MiPgorICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9kZSgpIi8+PGJyLz4KKyAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4KKyAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoQ29uY3JldGVDbGFzc2VzL0NsYXNzKT0wIj4KKyAgICAgICAgICAgICAgPGk+Tm9uZTwvaT4KKyAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IkNvbmNyZXRlQ2xhc3Nlcy9DbGFzcyI+CisgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJub2RlKCkiLz48YnIvPgorICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPgorICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJjb3VudChVc2VkQnkvUGFja2FnZSk9MCI+CisgICAgICAgICAgICAgIDxpPk5vbmU8L2k+CisgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJVc2VkQnkvUGFja2FnZSI+CisgICAgICAgICAgICAgIDxhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+b3ZlcnZpZXctcGFja2FnZXMuaHRtbCNQSzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJub2RlKCkiLz48L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5vZGUoKSIvPgorICAgICAgICAgICAgICA8L2E+PGJyLz4KKyAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4KKyAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoRGVwZW5kc1Vwb24vUGFja2FnZSk9MCI+CisgICAgICAgICAgICAgIDxpPk5vbmU8L2k+CisgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJEZXBlbmRzVXBvbi9QYWNrYWdlIj4KKyAgICAgICAgICAgICAgPGE+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj5vdmVydmlldy1wYWNrYWdlcy5odG1sI1BLPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5vZGUoKSIvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9kZSgpIi8+CisgICAgICAgICAgICAgIDwvYT48YnIvPgorICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICAgICAgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgPC94c2w6aWY+CisgIDwveHNsOmZvci1lYWNoPgorICA8IS0tIHRoaXMgaXMgb2Z0ZW4gYSBsb25nIGxpc3Rpbmc7IHByb3ZpZGUgYSBsb3dlciBuYXZpZ2F0aW9uIHRhYmxlIGFsc28gLS0+CisgIDx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyIGFsaWduPSJsZWZ0Ij48dGQ+PC90ZD48dGQgYWxpZ249InJpZ2h0Ij4KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+c3VtbWFyeTwvYT5dCisgIFtwYWNrYWdlc10KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LWN5Y2xlcy5odG1sIj5jeWNsZXM8L2E+XQorICBbPGEgaHJlZj0ib3ZlcnZpZXctZXhwbGFuYXRpb25zLmh0bWwiPmV4cGxhbmF0aW9uczwvYT5dCisgICA8L3RkPjwvdHI+PC90YWJsZT4KKyAgICAgIDwvYm9keT4KKyAgIDwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJKRGVwZW5kIiBtb2RlPSJjeWNsZXMuZGV0YWlscyI+CisgICA8aHRtbD4KKyAgICAgIDxoZWFkPgorICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic3R5bGVzaGVldC5jc3MiLz4KKyAgICAgIDwvaGVhZD4KKyAgICAgIDxib2R5PgorICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhZ2VIZWFkZXIiLz4KKyAgPHRhYmxlIHdpZHRoPSIxMDAlIj48dHIgYWxpZ249ImxlZnQiPjxoMj5DeWNsZXM8L2gyPjx0ZD4KKyAgPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+c3VtbWFyeTwvYT5dCisgIFs8YSBocmVmPSJvdmVydmlldy1wYWNrYWdlcy5odG1sIj5wYWNrYWdlczwvYT5dCisgIFtjeWNsZXNdCisgIFs8YSBocmVmPSJvdmVydmlldy1leHBsYW5hdGlvbnMuaHRtbCI+ZXhwbGFuYXRpb25zPC9hPl0KKyAgIDwvdGQ+PC90cj48L3RhYmxlPgorICA8IS0tPHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+PHRkPgorICA8L3RkPjx0ZCBhbGlnbj0icmlnaHQiPgorICAgIFs8YSBocmVmPSIjTlZzdW1tYXJ5Ij5zdW1tYXJ5PC9hPl0KKyAgWzxhIGhyZWY9IiNOVnBhY2thZ2VzIj5wYWNrYWdlczwvYT5dCisgIFs8YSBocmVmPSIjTlZjeWNsZXMiPmN5Y2xlczwvYT5dCisgICBbPGEgaHJlZj0iI05WZXhwbGFuYXRpb25zIj5leHBsYW5hdGlvbnM8L2E+XQorICA8L3RkPjwvdHI+PC90YWJsZT4gLS0+CisKKyAgPHhzbDppZiB0ZXN0PSJjb3VudChDeWNsZXMvUGFja2FnZSkgPSAwIj4KKyAgICA8cD5UaGVyZSBhcmUgbm8gY3ljbGljIGRlcGVuZGFuY2llcy48L3A+CisgIDwveHNsOmlmPgorICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iQ3ljbGVzL1BhY2thZ2UiPgorICAgICA8aDM+PGE+PHhzbDphdHRyaWJ1dGUgbmFtZT0ibmFtZSI+I0NZPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBOYW1lIi8+PC94c2w6YXR0cmlidXRlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJATmFtZSIvPjwvYT48L2gzPjxwPgorICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJQYWNrYWdlIj4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PGJyLz4KKyAgICA8L3hzbDpmb3ItZWFjaD48L3A+CisgIDwveHNsOmZvci1lYWNoPgorICA8IS0tIHRoaXMgaXMgb2Z0ZW4gYSBsb25nIGxpc3Rpbmc7IHByb3ZpZGUgYSBsb3dlciBuYXZpZ2F0aW9uIHRhYmxlIGFsc28gLS0+CisgIDx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyIGFsaWduPSJsZWZ0Ij48dGQ+PC90ZD48dGQgYWxpZ249InJpZ2h0Ij4KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+c3VtbWFyeTwvYT5dCisgIFs8YSBocmVmPSJvdmVydmlldy1wYWNrYWdlcy5odG1sIj5wYWNrYWdlczwvYT5dCisgIFtjeWNsZXNdCisgIFs8YSBocmVmPSJvdmVydmlldy1leHBsYW5hdGlvbnMuaHRtbCI+ZXhwbGFuYXRpb25zPC9hPl0KKyAgIDwvdGQ+PC90cj48L3RhYmxlPgorICA8L2JvZHk+CisgIDwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJKRGVwZW5kIiBtb2RlPSJleHBsYW5hdGlvbnMiPgorICAgPGh0bWw+CisgICAgICA8aGVhZD4KKyAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InN0eWxlc2hlZXQuY3NzIi8+CisgICAgICA8L2hlYWQ+CisgICAgICA8Ym9keT4KKyAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIi8+CisKKyAgPHRhYmxlIHdpZHRoPSIxMDAlIj48dHIgYWxpZ249ImxlZnQiPjxoMj5FeHBsYW5hdGlvbnM8L2gyPjx0ZD4KKyAgPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+c3VtbWFyeTwvYT5dCisgIFs8YSBocmVmPSJvdmVydmlldy1wYWNrYWdlcy5odG1sIj5wYWNrYWdlczwvYT5dCisgIFs8YSBocmVmPSJvdmVydmlldy1jeWNsZXMuaHRtbCI+Y3ljbGVzPC9hPl0KKyAgW2V4cGxhbmF0aW9uc10KKyAgIDwvdGQ+PC90cj48L3RhYmxlPgorCisgIDxwPlRoZSBmb2xsb3dpbmcgZXhwbGFuYXRpb25zIGFyZSBmb3IgcXVpY2sgcmVmZXJlbmNlIGFuZCBhcmUgbGlmdGVkIGRpcmVjdGx5IGZyb20gdGhlIG9yaWdpbmFsIDxhIGhyZWY9Imh0dHA6Ly93d3cuY2xhcmt3YXJlLmNvbS9zb2Z0d2FyZS9KRGVwZW5kLmh0bWwiPkpEZXBlbmQgZG9jdW1lbnRhdGlvbjwvYT4uPC9wPgorCisgIDxoMz48YSBuYW1lPSJFWG51bWJlciI+TnVtYmVyIG9mIENsYXNzZXM8L2E+PC9oMz4KKyAgICA8cD5UaGUgbnVtYmVyIG9mIGNvbmNyZXRlIGFuZCBhYnN0cmFjdCBjbGFzc2VzIChhbmQgaW50ZXJmYWNlcykgaW4gdGhlIHBhY2thZ2UgaXMgYW4gaW5kaWNhdG9yIG9mIHRoZSBleHRlbnNpYmlsaXR5IG9mIHRoZSBwYWNrYWdlLjwvcD4KKyAgPGgzPjxhIG5hbWU9IkVYYWZmZXJlbnQiPkFmZmVyZW50IENvdXBsaW5nczwvYT48L2gzPgorICAgIDxwPlRoZSBudW1iZXIgb2Ygb3RoZXIgcGFja2FnZXMgdGhhdCBkZXBlbmQgdXBvbiBjbGFzc2VzIHdpdGhpbiB0aGUgcGFja2FnZSBpcyBhbiBpbmRpY2F0b3Igb2YgdGhlIHBhY2thZ2UncyByZXNwb25zaWJpbGl0eS4gPC9wPgorICA8aDM+PGEgbmFtZT0iRVhlZmZlcmVudCI+RWZmZXJlbnQgQ291cGxpbmdzPC9hPjwvaDM+CisgICAgPHA+VGhlIG51bWJlciBvZiBvdGhlciBwYWNrYWdlcyB0aGF0IHRoZSBjbGFzc2VzIGluIHRoZSBwYWNrYWdlIGRlcGVuZCB1cG9uIGlzIGFuIGluZGljYXRvciBvZiB0aGUgcGFja2FnZSdzIGluZGVwZW5kZW5jZS4gPC9wPgorICA8aDM+PGEgbmFtZT0iRVhhYnN0cmFjdG5lc3MiPkFic3RyYWN0bmVzczwvYT48L2gzPgorICAgIDxwPlRoZSByYXRpbyBvZiB0aGUgbnVtYmVyIG9mIGFic3RyYWN0IGNsYXNzZXMgKGFuZCBpbnRlcmZhY2VzKSBpbiB0aGUgYW5hbHl6ZWQgcGFja2FnZSB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGNsYXNzZXMgaW4gdGhlIGFuYWx5emVkIHBhY2thZ2UuIDwvcD4KKyAgICA8cD5UaGUgcmFuZ2UgZm9yIHRoaXMgbWV0cmljIGlzIDAgdG8gMSwgd2l0aCBBPTAgaW5kaWNhdGluZyBhIGNvbXBsZXRlbHkgY29uY3JldGUgcGFja2FnZSBhbmQgQT0xIGluZGljYXRpbmcgYSBjb21wbGV0ZWx5IGFic3RyYWN0IHBhY2thZ2UuIDwvcD4KKyAgPGgzPjxhIG5hbWU9IkVYaW5zdGFiaWxpdHkiPkluc3RhYmlsaXR5PC9hPjwvaDM+CisgICAgPHA+VGhlIHJhdGlvIG9mIGVmZmVyZW50IGNvdXBsaW5nIChDZSkgdG8gdG90YWwgY291cGxpbmcgKENlIC8gKENlICsgQ2EpKS4gVGhpcyBtZXRyaWMgaXMgYW4gaW5kaWNhdG9yIG9mIHRoZSBwYWNrYWdlJ3MgcmVzaWxpZW5jZSB0byBjaGFuZ2UuIDwvcD4KKyAgICA8cD5UaGUgcmFuZ2UgZm9yIHRoaXMgbWV0cmljIGlzIDAgdG8gMSwgd2l0aCBJPTAgaW5kaWNhdGluZyBhIGNvbXBsZXRlbHkgc3RhYmxlIHBhY2thZ2UgYW5kIEk9MSBpbmRpY2F0aW5nIGEgY29tcGxldGVseSBpbnN0YWJsZSBwYWNrYWdlLiA8L3A+CisgIDxoMz48YSBuYW1lPSJFWGRpc3RhbmNlIj5EaXN0YW5jZTwvYT48L2gzPgorICAgIDxwPlRoZSBwZXJwZW5kaWN1bGFyIGRpc3RhbmNlIG9mIGEgcGFja2FnZSBmcm9tIHRoZSBpZGVhbGl6ZWQgbGluZSBBICsgSSA9IDEuIFRoaXMgbWV0cmljIGlzIGFuIGluZGljYXRvciBvZiB0aGUgcGFja2FnZSdzIGJhbGFuY2UgYmV0d2VlbiBhYnN0cmFjdG5lc3MgYW5kIHN0YWJpbGl0eS4gPC9wPgorICAgIDxwPkEgcGFja2FnZSBzcXVhcmVseSBvbiB0aGUgbWFpbiBzZXF1ZW5jZSBpcyBvcHRpbWFsbHkgYmFsYW5jZWQgd2l0aCByZXNwZWN0IHRvIGl0cyBhYnN0cmFjdG5lc3MgYW5kIHN0YWJpbGl0eS4gSWRlYWwgcGFja2FnZXMgYXJlIGVpdGhlciBjb21wbGV0ZWx5IGFic3RyYWN0IGFuZCBzdGFibGUgKHg9MCwgeT0xKSBvciBjb21wbGV0ZWx5IGNvbmNyZXRlIGFuZCBpbnN0YWJsZSAoeD0xLCB5PTApLiA8L3A+CisgICAgPHA+VGhlIHJhbmdlIGZvciB0aGlzIG1ldHJpYyBpcyAwIHRvIDEsIHdpdGggRD0wIGluZGljYXRpbmcgYSBwYWNrYWdlIHRoYXQgaXMgY29pbmNpZGVudCB3aXRoIHRoZSBtYWluIHNlcXVlbmNlIGFuZCBEPTEgaW5kaWNhdGluZyBhIHBhY2thZ2UgdGhhdCBpcyBhcyBmYXIgZnJvbSB0aGUgbWFpbiBzZXF1ZW5jZSBhcyBwb3NzaWJsZS4gPC9wPgorCisgICAgICA8L2JvZHk+CisgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tCitDcmVhdGVzIGFuIGh0bWwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGluayB0byBhbGwgcGFja2FnZSBsaW5rcyBpbiBvdmVydmlldy1wYWNrYWdlcy5odG1sLgorICBAYnVnIHRoZXJlIHdpbGwgYmUgYSBwcm9ibGVtIGhlcmUsIEkgZG9uJ3Qga25vdyB5ZXQgaG93IHRvIGhhbmRsZSB1bm5hbWVkIHBhY2thZ2UgOigKKy0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iSkRlcGVuZC9QYWNrYWdlcyIgbW9kZT0iYWxsLnBhY2thZ2VzIj4KKyAgPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzdHlsZXNoZWV0LmNzcyIvPgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgPHRhYmxlIHdpZHRoPSIxMDAlIj48dHIgYWxpZ249ImxlZnQiPjx0ZD48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCIgYWxpZ249InJpZ2h0Ij4KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5zdW1tYXJ5PC9hPl0KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LXBhY2thZ2VzLmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+cGFja2FnZXM8L2E+XQorICBbPGEgaHJlZj0ib3ZlcnZpZXctY3ljbGVzLmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+Y3ljbGVzPC9hPl0KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LWV4cGxhbmF0aW9ucy5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPmV4cGxhbmF0aW9uczwvYT5dCisgICA8L3RkPjwvdHI+PC90YWJsZT4KKyAgICAgIDxoMj5QYWNrYWdlczwvaDI+CisgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJQYWNrYWdlW2NvdW50KGVycm9yKT0wXSIgbW9kZT0iYWxsLnBhY2thZ2VzLmxpbmsiPgorICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJQYWNrYWdlW2NvdW50KGVycm9yKSAmZ3Q7IDBdIiBtb2RlPSJhbGwucGFja2FnZXMubm9saW5rIj4KKyAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgICA8L3RhYmxlPgorICAgIDwvYm9keT4KKyAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IkpEZXBlbmQvUGFja2FnZXMvUGFja2FnZSIgbW9kZT0iYWxsLnBhY2thZ2VzLmxpbmsiPgorICA8dHI+CisgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgIDxhIGhyZWY9Im92ZXJ2aWV3LXBhY2thZ2VzLmh0bWwjUEt7QG5hbWV9IiB0YXJnZXQ9ImNsYXNzRnJhbWUiPgorICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgIDwvYT4KKyAgICA8L3RkPgorICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0KK0kgZG8gbm90IGtub3cgSkRlcGVuZCBlbm91Z2ggdG8ga25vdyBpZiBldmVyeSBlcnJvciByZXN1bHRzIGluIGEgbm9uLWFuYWx5emVkIHBhY2thZ2UsCitidXQgdGhhdCBpcyBob3cgSSBhbSBwcmVzZW50aW5nIGl0IHRvIHRoZSB2aWV3ZXIuICBUaGlzIG1heSBuZWVkIHRvIGNoYW5nZS4KKyAgQGJ1ZyB0aGVyZSB3aWxsIGJlIGEgcHJvYmxlbSBoZXJlLCBJIGRvbid0IGtub3cgeWV0IGhvdyB0byBoYW5kbGUgdW5uYW1lZCBwYWNrYWdlIDooCistLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IkpEZXBlbmQvUGFja2FnZXMvUGFja2FnZSIgbW9kZT0iYWxsLnBhY2thZ2VzLm5vbGluayI+CisgIDx0cj4KKyAgICA8dGQgbm93cmFwPSJub3dyYXAiPgorICAgICAgIE5vdCBBbmFseXplZDogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgICAgPC90ZD4KKyAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tCitDcmVhdGVzIGFuIGh0bWwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGluayB0byBhbGwgcGFja2FnZSBsaW5rcyBpbiBvdmVydmlldy1jeWNsZXMuaHRtbC4KKyAgQGJ1ZyB0aGVyZSB3aWxsIGJlIGEgcHJvYmxlbSBoZXJlLCBJIGRvbid0IGtub3cgeWV0IGhvdyB0byBoYW5kbGUgdW5uYW1lZCBwYWNrYWdlIDooCistLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IkpEZXBlbmQvQ3ljbGVzIiBtb2RlPSJhbGwuY3ljbGVzIj4KKyAgPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzdHlsZXNoZWV0LmNzcyIvPgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgPHRhYmxlIHdpZHRoPSIxMDAlIj48dHIgYWxpZ249ImxlZnQiPjx0ZD48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCIgYWxpZ249InJpZ2h0Ij4KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5zdW1tYXJ5PC9hPl0KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LXBhY2thZ2VzLmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+cGFja2FnZXM8L2E+XQorICBbPGEgaHJlZj0ib3ZlcnZpZXctY3ljbGVzLmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+Y3ljbGVzPC9hPl0KKyAgWzxhIGhyZWY9Im92ZXJ2aWV3LWV4cGxhbmF0aW9ucy5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPmV4cGxhbmF0aW9uczwvYT5dCisgICA8L3RkPjwvdHI+PC90YWJsZT4KKyAgICAgIDxoMj5DeWNsZXM8L2gyPgorICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IlBhY2thZ2UiIG1vZGU9ImFsbC5jeWNsZXMiPgorICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQE5hbWUiLz4KKyAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICAgIDwvdGFibGU+CisgICAgPC9ib2R5PgorICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iSkRlcGVuZC9DeWNsZXMvUGFja2FnZSIgbW9kZT0iYWxsLmN5Y2xlcyI+CisgIDx0cj4KKyAgICA8dGQgbm93cmFwPSJub3dyYXAiPgorICAgICAgICAgPGEgaHJlZj0ib3ZlcnZpZXctY3ljbGVzLmh0bWwjQ1l7QE5hbWV9IiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJATmFtZSIvPjwvYT4KKyAgICA8L3RkPgorICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gUGFnZSBIRUFERVIgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9InBhZ2VIZWFkZXIiPgorICAgPGgxPkpEZXBlbmQgQW5hbHlzaXM8L2gxPgorICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICA8dHI+CisgICAgPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgorICAgICAgPHRkIGFsaWduPSJyaWdodCI+RGVzaWduZWQgZm9yIHVzZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly93d3cuY2xhcmt3YXJlLmNvbS9zb2Z0d2FyZS9KRGVwZW5kLmh0bWwiPkpEZXBlbmQ8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnIj5BbnQ8L2E+LjwvdGQ+CisgIDwvdHI+CisgIDwvdGFibGU+CisgIDxociBzaXplPSIxIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvamRlcGVuZC54c2wgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2pkZXBlbmQueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZTVlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2pkZXBlbmQueHNsCkBAIC0wLDAgKzEsMjc1IEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+CisKKzwhLS0KKyAgICBDb3B5cmlnaHQgIDIwMDIsMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIAorICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgIAorICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgIAorLS0+CisKKzx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIgaW5kZW50PSJ5ZXMiICBlbmNvZGluZz0iVVMtQVNDSUkiLz4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iSkRlcGVuZCI+CisgICAgPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDx0aXRsZT5KRGVwZW5kIEFuYWx5c2lzPC90aXRsZT4KKyAgICAgICAgCisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICAgIGJvZHkgeworICAgICAgICBmb250Om5vcm1hbCA2OCUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2E7CisgICAgICAgIGNvbG9yOiMwMDAwMDA7CisgICAgICB9CisgICAgICB0YWJsZSB0ciB0ZCwgdHIgdGggeworICAgICAgICAgIGZvbnQtc2l6ZTogNjglOworICAgICAgfQorICAgICAgdGFibGUuZGV0YWlscyB0ciB0aHsKKyAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgIHRleHQtYWxpZ246bGVmdDsKKyAgICAgICAgYmFja2dyb3VuZDojYTZjYWYwOworICAgICAgfQorICAgICAgdGFibGUuZGV0YWlscyB0ciB0ZHsKKyAgICAgICAgYmFja2dyb3VuZDojZWVlZWUwOworICAgICAgfQorICAgICAgCisgICAgICBwIHsKKyAgICAgICAgbGluZS1oZWlnaHQ6MS41ZW07CisgICAgICAgIG1hcmdpbi10b3A6MC41ZW07IG1hcmdpbi1ib3R0b206MS4wZW07CisgICAgICAgIG1hcmdpbi1sZWZ0OjJlbTsKKyAgICAgICAgbWFyZ2luLXJpZ2h0OjJlbTsKKyAgICAgIH0KKyAgICAgIGgxIHsKKyAgICAgICAgbWFyZ2luOiAwcHggMHB4IDVweDsgZm9udDogMTY1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgICAgfQorICAgICAgaDIgeworICAgICAgICBtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDAuNWVtOyBmb250OiBib2xkIDEyNSUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2EKKyAgICAgIH0KKyAgICAgIGgzIHsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTE1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgICAgfQorICAgICAgaDQgeworICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsgZm9udDogYm9sZCAxMDAlIHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhCisgICAgICB9CisgICAgICBoNSB7CisgICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOyBmb250OiBib2xkIDEwMCUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2EKKyAgICAgIH0KKyAgICAgIGg2IHsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTAwJSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgICAgfQorICAgICAgLkVycm9yIHsKKyAgICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6cmVkOworICAgICAgfQorICAgICAgLkZhaWx1cmUgeworICAgICAgICBmb250LXdlaWdodDpib2xkOyBjb2xvcjpwdXJwbGU7CisgICAgICB9CisgICAgICAuUHJvcGVydGllcyB7CisgICAgICAgIHRleHQtYWxpZ246cmlnaHQ7CisgICAgICB9CisgICAgICA8L3N0eWxlPgorICAgICAgICAKKyAgICAgICAgCisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgIDwhLS1oMT5KRGVwZW5kIFJlcG9ydDwvaDE+CisgICAgPHVsPgorICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIuL1BhY2thZ2VzL1BhY2thZ2UiPgorICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgIDxsaT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2xpPgorICAgIDwveHNsOmZvci1lYWNoPgorICAgIDwvdWwtLT4KKyAgICAKKyAgICA8aDE+PGEgbmFtZT0idG9wIj5KRGVwZW5kIEFuYWx5c2lzPC9hPjwvaDE+CisgICAgPHAgYWxpZ249InJpZ2h0Ij5EZXNpZ25lZCBmb3IgdXNlIHdpdGggPGEgaHJlZj0iaHR0cDovL3d3dy5jbGFya3dhcmUuY29tL3NvZnR3YXJlL0pEZXBlbmQuaHRtbCI+SkRlcGVuZDwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmciPkFudDwvYT4uPC9wPgorICAgIDxociBzaXplPSIyIiAvPgorICAgIAorICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPjx0ZD4KKyAgICA8YSBuYW1lPSJOVnN1bW1hcnkiPjxoMj5TdW1tYXJ5PC9oMj48L2E+CisgICAgPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4KKyAgICBbPGEgaHJlZj0iI05Wc3VtbWFyeSI+c3VtbWFyeTwvYT5dCisgICAgWzxhIGhyZWY9IiNOVnBhY2thZ2VzIj5wYWNrYWdlczwvYT5dCisgICAgWzxhIGhyZWY9IiNOVmN5Y2xlcyI+Y3ljbGVzPC9hPl0KKyAgICBbPGEgaHJlZj0iI05WZXhwbGFuYXRpb25zIj5leHBsYW5hdGlvbnM8L2E+XQorICAgIDwvdGQ+PC90cj48L3RhYmxlPgorICAgIAorICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2xhc3M9ImRldGFpbHMiPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+UGFja2FnZTwvdGg+CisgICAgICAgICAgICA8dGg+VG90YWwgQ2xhc3NlczwvdGg+CisgICAgICAgICAgICA8dGg+PGEgaHJlZj0iI0VYbnVtYmVyIj5BYnN0cmFjdCBDbGFzc2VzPC9hPjwvdGg+CisgICAgICAgICAgICA8dGg+PGEgaHJlZj0iI0VYbnVtYmVyIj5Db25jcmV0ZSBDbGFzc2VzPC9hPjwvdGg+CisgICAgICAgICAgICA8dGg+PGEgaHJlZj0iI0VYYWZmZXJlbnQiPkFmZmVyZW50IENvdXBsaW5nczwvYT48L3RoPgorICAgICAgICAgICAgPHRoPjxhIGhyZWY9IiNFWGVmZmVyZW50Ij5FZmZlcmVudCBDb3VwbGluZ3M8L2E+PC90aD4KKyAgICAgICAgICAgIDx0aD48YSBocmVmPSIjRVhhYnN0cmFjdG5lc3MiPkFic3RyYWN0bmVzczwvYT48L3RoPgorICAgICAgICAgICAgPHRoPjxhIGhyZWY9IiNFWGluc3RhYmlsaXR5Ij5JbnN0YWJpbGl0eTwvYT48L3RoPgorICAgICAgICAgICAgPHRoPjxhIGhyZWY9IiNFWGRpc3RhbmNlIj5EaXN0YW5jZTwvYT48L3RoPgorICAgICAgICAgICAgCisgICAgICAgIDwvdHI+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii4vUGFja2FnZXMvUGFja2FnZSI+CisgICAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoZXJyb3IpID0gMCI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgPGE+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPiNQSzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvVG90YWxDbGFzc2VzIi8+PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvQWJzdHJhY3RDbGFzc2VzIi8+PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvQ29uY3JldGVDbGFzc2VzIi8+PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvQ2EiLz48L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdGF0cy9DZSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlN0YXRzL0EiLz48L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdGF0cy9JIi8+PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvRCIvPjwvdGQ+CisgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwveHNsOmlmPgorICAgIDwveHNsOmZvci1lYWNoPgorICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIuL1BhY2thZ2VzL1BhY2thZ2UiPgorICAgICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KGVycm9yKSAmZ3Q7IDAiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSI4Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZXJyb3IiLz48L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgPC94c2w6aWY+CisgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgPC90YWJsZT4KKyAgICAKKyAgICA8dGFibGUgd2lkdGg9IjEwMCUiPjx0cj48dGQ+CisgICAgPGEgbmFtZT0iTlZwYWNrYWdlcyI+PGgyPlBhY2thZ2VzPC9oMj48L2E+CisgICAgPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4KKyAgICBbPGEgaHJlZj0iI05Wc3VtbWFyeSI+c3VtbWFyeTwvYT5dCisgICAgWzxhIGhyZWY9IiNOVnBhY2thZ2VzIj5wYWNrYWdlczwvYT5dCisgICAgWzxhIGhyZWY9IiNOVmN5Y2xlcyI+Y3ljbGVzPC9hPl0KKyAgICBbPGEgaHJlZj0iI05WZXhwbGFuYXRpb25zIj5leHBsYW5hdGlvbnM8L2E+XQorICAgIDwvdGQ+PC90cj48L3RhYmxlPgorICAgIAorICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIuL1BhY2thZ2VzL1BhY2thZ2UiPgorICAgICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KGVycm9yKSA9IDAiPgorICAgICAgICAgICAgPGgzPjxhPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPlBLPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPjwvaDM+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSIjRVhhZmZlcmVudCI+QWZmZXJlbnQgQ291cGxpbmdzPC9hPjogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlN0YXRzL0NhIi8+PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0iI0VYZWZmZXJlbnQiPkVmZmVyZW50IENvdXBsaW5nczwvYT46IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdGF0cy9DZSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9IiNFWGFic3RyYWN0bmVzcyI+QWJzdHJhY3RuZXNzPC9hPjogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlN0YXRzL0EiLz48L3RkPgorICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSIjRVhpbnN0YWJpbGl0eSI+SW5zdGFiaWxpdHk8L2E+OiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdHMvSSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9IiNFWGRpc3RhbmNlIj5EaXN0YW5jZTwvYT46IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdGF0cy9EIi8+PC90ZD4KKyAgICAgICAgICAgIDwvdHI+PC90YWJsZT4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBjbGFzcz0iZGV0YWlscyI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGg+QWJzdHJhY3QgQ2xhc3NlczwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5Db25jcmV0ZSBDbGFzc2VzPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlVzZWQgYnkgUGFja2FnZXM8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+VXNlcyBQYWNrYWdlczwvdGg+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoQWJzdHJhY3RDbGFzc2VzL0NsYXNzKT0wIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT5Ob25lPC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iQWJzdHJhY3RDbGFzc2VzL0NsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9kZSgpIi8+PGJyLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJjb3VudChDb25jcmV0ZUNsYXNzZXMvQ2xhc3MpPTAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPk5vbmU8L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJDb25jcmV0ZUNsYXNzZXMvQ2xhc3MiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJub2RlKCkiLz48YnIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KFVzZWRCeS9QYWNrYWdlKT0wIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT5Ob25lPC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iVXNlZEJ5L1BhY2thZ2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4jUEs8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9kZSgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9kZSgpIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPjxici8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoRGVwZW5kc1Vwb24vUGFja2FnZSk9MCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+Tm9uZTwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IkRlcGVuZHNVcG9uL1BhY2thZ2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4jUEs8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9kZSgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9kZSgpIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPjxici8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPC94c2w6aWY+CisgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgCisgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+PHRkPgorICAgIDxhIG5hbWU9Ik5WY3ljbGVzIj48aDI+Q3ljbGVzPC9oMj48L2E+CisgICAgPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4KKyAgICBbPGEgaHJlZj0iI05Wc3VtbWFyeSI+c3VtbWFyeTwvYT5dCisgICAgWzxhIGhyZWY9IiNOVnBhY2thZ2VzIj5wYWNrYWdlczwvYT5dCisgICAgWzxhIGhyZWY9IiNOVmN5Y2xlcyI+Y3ljbGVzPC9hPl0KKyAgICBbPGEgaHJlZj0iI05WZXhwbGFuYXRpb25zIj5leHBsYW5hdGlvbnM8L2E+XQorICAgIDwvdGQ+PC90cj48L3RhYmxlPgorICAgIAorICAgIDx4c2w6aWYgdGVzdD0iY291bnQoQ3ljbGVzL1BhY2thZ2UpID0gMCI+CisgICAgICAgIDxwPlRoZXJlIGFyZSBubyBjeWNsaWMgZGVwZW5kYW5jaWVzLjwvcD4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iQ3ljbGVzL1BhY2thZ2UiPgorICAgICAgICA8aDM+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBOYW1lIi8+PC9oMz48cD4KKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IlBhY2thZ2UiPgorICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48YnIvPgorICAgICAgICA8L3hzbDpmb3ItZWFjaD48L3A+CisgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgCisgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+PHRkPgorICAgIDxhIG5hbWU9Ik5WZXhwbGFuYXRpb25zIj48aDI+RXhwbGFuYXRpb25zPC9oMj48L2E+CisgICAgPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4KKyAgICBbPGEgaHJlZj0iI05Wc3VtbWFyeSI+c3VtbWFyeTwvYT5dCisgICAgWzxhIGhyZWY9IiNOVnBhY2thZ2VzIj5wYWNrYWdlczwvYT5dCisgICAgWzxhIGhyZWY9IiNOVmN5Y2xlcyI+Y3ljbGVzPC9hPl0KKyAgICBbPGEgaHJlZj0iI05WZXhwbGFuYXRpb25zIj5leHBsYW5hdGlvbnM8L2E+XQorICAgIDwvdGQ+PC90cj48L3RhYmxlPgorICAgIAorICAgIDxwPlRoZSBmb2xsb3dpbmcgZXhwbGFuYXRpb25zIGFyZSBmb3IgcXVpY2sgcmVmZXJlbmNlIGFuZCBhcmUgbGlmdGVkIGRpcmVjdGx5IGZyb20gdGhlIG9yaWdpbmFsIDxhIGhyZWY9Imh0dHA6Ly93d3cuY2xhcmt3YXJlLmNvbS9zb2Z0d2FyZS9KRGVwZW5kLmh0bWwiPkpEZXBlbmQgZG9jdW1lbnRhdGlvbjwvYT4uPC9wPgorICAgIAorICAgIDxoMz48YSBuYW1lPSJFWG51bWJlciI+TnVtYmVyIG9mIENsYXNzZXM8L2E+PC9oMz4KKyAgICAgICAgPHA+VGhlIG51bWJlciBvZiBjb25jcmV0ZSBhbmQgYWJzdHJhY3QgY2xhc3NlcyAoYW5kIGludGVyZmFjZXMpIGluIHRoZSBwYWNrYWdlIGlzIGFuIGluZGljYXRvciBvZiB0aGUgZXh0ZW5zaWJpbGl0eSBvZiB0aGUgcGFja2FnZS48L3A+CisgICAgPGgzPjxhIG5hbWU9IkVYYWZmZXJlbnQiPkFmZmVyZW50IENvdXBsaW5nczwvYT48L2gzPgorICAgICAgICA8cD5UaGUgbnVtYmVyIG9mIG90aGVyIHBhY2thZ2VzIHRoYXQgZGVwZW5kIHVwb24gY2xhc3NlcyB3aXRoaW4gdGhlIHBhY2thZ2UgaXMgYW4gaW5kaWNhdG9yIG9mIHRoZSBwYWNrYWdlJ3MgcmVzcG9uc2liaWxpdHkuIDwvcD4KKyAgICA8aDM+PGEgbmFtZT0iRVhlZmZlcmVudCI+RWZmZXJlbnQgQ291cGxpbmdzPC9hPjwvaDM+CisgICAgICAgIDxwPlRoZSBudW1iZXIgb2Ygb3RoZXIgcGFja2FnZXMgdGhhdCB0aGUgY2xhc3NlcyBpbiB0aGUgcGFja2FnZSBkZXBlbmQgdXBvbiBpcyBhbiBpbmRpY2F0b3Igb2YgdGhlIHBhY2thZ2UncyBpbmRlcGVuZGVuY2UuIDwvcD4KKyAgICA8aDM+PGEgbmFtZT0iRVhhYnN0cmFjdG5lc3MiPkFic3RyYWN0bmVzczwvYT48L2gzPiAKKyAgICAgICAgPHA+VGhlIHJhdGlvIG9mIHRoZSBudW1iZXIgb2YgYWJzdHJhY3QgY2xhc3NlcyAoYW5kIGludGVyZmFjZXMpIGluIHRoZSBhbmFseXplZCBwYWNrYWdlIHRvIHRoZSB0b3RhbCBudW1iZXIgb2YgY2xhc3NlcyBpbiB0aGUgYW5hbHl6ZWQgcGFja2FnZS4gPC9wPgorICAgICAgICA8cD5UaGUgcmFuZ2UgZm9yIHRoaXMgbWV0cmljIGlzIDAgdG8gMSwgd2l0aCBBPTAgaW5kaWNhdGluZyBhIGNvbXBsZXRlbHkgY29uY3JldGUgcGFja2FnZSBhbmQgQT0xIGluZGljYXRpbmcgYSBjb21wbGV0ZWx5IGFic3RyYWN0IHBhY2thZ2UuIDwvcD4KKyAgICA8aDM+PGEgbmFtZT0iRVhpbnN0YWJpbGl0eSI+SW5zdGFiaWxpdHk8L2E+PC9oMz4KKyAgICAgICAgPHA+VGhlIHJhdGlvIG9mIGVmZmVyZW50IGNvdXBsaW5nIChDZSkgdG8gdG90YWwgY291cGxpbmcgKENlIC8gKENlICsgQ2EpKS4gVGhpcyBtZXRyaWMgaXMgYW4gaW5kaWNhdG9yIG9mIHRoZSBwYWNrYWdlJ3MgcmVzaWxpZW5jZSB0byBjaGFuZ2UuIDwvcD4KKyAgICAgICAgPHA+VGhlIHJhbmdlIGZvciB0aGlzIG1ldHJpYyBpcyAwIHRvIDEsIHdpdGggST0wIGluZGljYXRpbmcgYSBjb21wbGV0ZWx5IHN0YWJsZSBwYWNrYWdlIGFuZCBJPTEgaW5kaWNhdGluZyBhIGNvbXBsZXRlbHkgaW5zdGFibGUgcGFja2FnZS4gPC9wPgorICAgIDxoMz48YSBuYW1lPSJFWGRpc3RhbmNlIj5EaXN0YW5jZTwvYT48L2gzPgorICAgICAgICA8cD5UaGUgcGVycGVuZGljdWxhciBkaXN0YW5jZSBvZiBhIHBhY2thZ2UgZnJvbSB0aGUgaWRlYWxpemVkIGxpbmUgQSArIEkgPSAxLiBUaGlzIG1ldHJpYyBpcyBhbiBpbmRpY2F0b3Igb2YgdGhlIHBhY2thZ2UncyBiYWxhbmNlIGJldHdlZW4gYWJzdHJhY3RuZXNzIGFuZCBzdGFiaWxpdHkuIDwvcD4KKyAgICAgICAgPHA+QSBwYWNrYWdlIHNxdWFyZWx5IG9uIHRoZSBtYWluIHNlcXVlbmNlIGlzIG9wdGltYWxseSBiYWxhbmNlZCB3aXRoIHJlc3BlY3QgdG8gaXRzIGFic3RyYWN0bmVzcyBhbmQgc3RhYmlsaXR5LiBJZGVhbCBwYWNrYWdlcyBhcmUgZWl0aGVyIGNvbXBsZXRlbHkgYWJzdHJhY3QgYW5kIHN0YWJsZSAoeD0wLCB5PTEpIG9yIGNvbXBsZXRlbHkgY29uY3JldGUgYW5kIGluc3RhYmxlICh4PTEsIHk9MCkuIDwvcD4KKyAgICAgICAgPHA+VGhlIHJhbmdlIGZvciB0aGlzIG1ldHJpYyBpcyAwIHRvIDEsIHdpdGggRD0wIGluZGljYXRpbmcgYSBwYWNrYWdlIHRoYXQgaXMgY29pbmNpZGVudCB3aXRoIHRoZSBtYWluIHNlcXVlbmNlIGFuZCBEPTEgaW5kaWNhdGluZyBhIHBhY2thZ2UgdGhhdCBpcyBhcyBmYXIgZnJvbSB0aGUgbWFpbiBzZXF1ZW5jZSBhcyBwb3NzaWJsZS4gPC9wPgorICAgIAorICAgIDwvYm9keT4KKyAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvanVuaXQtZnJhbWVzLXhhbGFuMS54c2wgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2p1bml0LWZyYW1lcy14YWxhbjEueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNGU0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2p1bml0LWZyYW1lcy14YWxhbjEueHNsCkBAIC0wLDAgKzEsNzE2IEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCIKKyAgICB4bWxuczpseHNsdD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiCisgICAgeG1sbnM6cmVkaXJlY3Q9Im9yZy5hcGFjaGUueGFsYW4ubGliLlJlZGlyZWN0IgorICAgIHhtbG5zOnN0cmluZ3V0aWxzPSJ4YWxhbjovL29yZy5hcGFjaGUudG9vbHMuYW50LnV0aWwuU3RyaW5nVXRpbHMiCisgICAgZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXM9InJlZGlyZWN0Ij4KKzx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIgaW5kZW50PSJ5ZXMiIGVuY29kaW5nPSJVUy1BU0NJSSIvPgorPHhzbDpkZWNpbWFsLWZvcm1hdCBkZWNpbWFsLXNlcGFyYXRvcj0iLiIgZ3JvdXBpbmctc2VwYXJhdG9yPSIsIi8+Cis8IS0tCisgICBDb3B5cmlnaHQgMjAwMS0yMDA0IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8IS0tCisKKyBTYW1wbGUgc3R5bGVzaGVldCB0byBiZSB1c2VkIHdpdGggQW50IEpVbml0UmVwb3J0IG91dHB1dC4KKworIEl0IGNyZWF0ZXMgYSBzZXQgb2YgSFRNTCBmaWxlcyBhIGxhIGphdmFkb2Mgd2hlcmUgeW91IGNhbiBicm93c2UgZWFzaWx5CisgdGhyb3VnaCBhbGwgcGFja2FnZXMgYW5kIGNsYXNzZXMuCisKKy0tPgorPHhzbDpwYXJhbSBuYW1lPSJvdXRwdXQuZGlyIiBzZWxlY3Q9IicuJyIvPgorCisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlc3RzdWl0ZXMiPgorICAgIDwhLS0gY3JlYXRlIHRoZSBpbmRleC5odG1sIC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L2luZGV4Lmh0bWwiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5kZXguaHRtbCIvPgorICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICA8IS0tIGNyZWF0ZSB0aGUgc3R5bGVzaGVldC5jc3MgLS0+CisgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vc3R5bGVzaGVldC5jc3MiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3R5bGVzaGVldC5jc3MiLz4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBjcmVhdGUgdGhlIG92ZXJ2aWV3LXBhY2thZ2VzLmh0bWwgYXQgdGhlIHJvb3QgLS0+CisgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJvdmVydmlldy5wYWNrYWdlcyIvPgorICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICA8IS0tIGNyZWF0ZSB0aGUgYWxsLXBhY2thZ2VzLmh0bWwgYXQgdGhlIHJvb3QgLS0+CisgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vb3ZlcnZpZXctZnJhbWUuaHRtbCI+CisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYWxsLnBhY2thZ2VzIi8+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gY3JlYXRlIHRoZSBhbGwtY2xhc3Nlcy5odG1sIGF0IHRoZSByb290IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L2FsbGNsYXNzZXMtZnJhbWUuaHRtbCI+CisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYWxsLmNsYXNzZXMiLz4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBwcm9jZXNzIGFsbCBwYWNrYWdlcyAtLT4KKyAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iLi90ZXN0c3VpdGVbbm90KC4vQHBhY2thZ2UgPSBwcmVjZWRpbmctc2libGluZzo6dGVzdHN1aXRlL0BwYWNrYWdlKV0iPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFja2FnZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibmFtZSIgc2VsZWN0PSJAcGFja2FnZSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwveHNsOmZvci1lYWNoPgorPC94c2w6dGVtcGxhdGU+CisKKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYWNrYWdlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5hbWUiLz4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InBhY2thZ2UuZGlyIj4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSJub3QoJG5hbWUgPSAnJykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJ0cmFuc2xhdGUoJG5hbWUsJy4nLCcvJykiLz48L3hzbDppZj4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSIkbmFtZSA9ICcnIj4uPC94c2w6aWY+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPCEtLVByb2Nlc3NpbmcgcGFja2FnZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4gaW4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRvdXRwdXQuZGlyIi8+IC0tPgorICAgIDwhLS0gY3JlYXRlIGEgY2xhc3Nlcy1saXN0Lmh0bWwgaW4gdGhlIHBhY2thZ2UgZGlyZWN0b3J5IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3skcGFja2FnZS5kaXJ9L3BhY2thZ2UtZnJhbWUuaHRtbCI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjbGFzc2VzLmxpc3QiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5hbWUiIHNlbGVjdD0iJG5hbWUiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBjcmVhdGUgYSBwYWNrYWdlLXN1bW1hcnkuaHRtbCBpbiB0aGUgcGFja2FnZSBkaXJlY3RvcnkgLS0+CisgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0veyRwYWNrYWdlLmRpcn0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFja2FnZS5zdW1tYXJ5Ij4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJuYW1lIiBzZWxlY3Q9IiRuYW1lIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gZm9yIGVhY2ggY2xhc3MsIGNyZWF0ZXMgYSBAbmFtZS5odG1sIC0tPgorICAgIDwhLS0gQGJ1ZyB0aGVyZSB3aWxsIGJlIGEgcHJvYmxlbSB3aXRoIGlubmVyIGNsYXNzZXMgaGF2aW5nIHRoZSBzYW1lIG5hbWUsIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gLS0+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii90ZXN0c3VpdGVzL3Rlc3RzdWl0ZVtAcGFja2FnZSA9ICRuYW1lXSI+CisgICAgICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3skcGFja2FnZS5kaXJ9L3tAbmFtZX0uaHRtbCI+CisgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNsYXNzLmRldGFpbHMiLz4KKyAgICAgICAgPC9yZWRpcmVjdDp3cml0ZT4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKC4vc3lzdGVtLW91dCkhPTAiPgorICAgICAgICAgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0veyRwYWNrYWdlLmRpcn0ve0BuYW1lfS1vdXQudHh0Ij4KKyAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9zeXN0ZW0tb3V0IiAvPgorICAgICAgICAgICAgPC9yZWRpcmVjdDp3cml0ZT4KKyAgICAgICAgPC94c2w6aWY+CisgICAgICAgIDx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aCguL3N5c3RlbS1lcnIpIT0wIj4KKyAgICAgICAgICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3skcGFja2FnZS5kaXJ9L3tAbmFtZX0tZXJyLnR4dCI+CisgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vc3lzdGVtLWVyciIgLz4KKyAgICAgICAgICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisgICAgICAgIDwveHNsOmlmPgorICAgIDwveHNsOmZvci1lYWNoPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXguaHRtbCI+Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHRpdGxlPlVuaXQgVGVzdCBSZXN1bHRzLjwvdGl0bGU+CisgICAgPC9oZWFkPgorICAgIDxmcmFtZXNldCBjb2xzPSIyMCUsODAlIj4KKyAgICAgICAgPGZyYW1lc2V0IHJvd3M9IjMwJSw3MCUiPgorICAgICAgICAgICAgPGZyYW1lIHNyYz0ib3ZlcnZpZXctZnJhbWUuaHRtbCIgbmFtZT0icGFja2FnZUxpc3RGcmFtZSIvPgorICAgICAgICAgICAgPGZyYW1lIHNyYz0iYWxsY2xhc3Nlcy1mcmFtZS5odG1sIiBuYW1lPSJjbGFzc0xpc3RGcmFtZSIvPgorICAgICAgICA8L2ZyYW1lc2V0PgorICAgICAgICA8ZnJhbWUgc3JjPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiIG5hbWU9ImNsYXNzRnJhbWUiLz4KKyAgICAgICAgPG5vZnJhbWVzPgorICAgICAgICAgICAgPGgyPkZyYW1lIEFsZXJ0PC9oMj4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIFRoaXMgZG9jdW1lbnQgaXMgZGVzaWduZWQgdG8gYmUgdmlld2VkIHVzaW5nIHRoZSBmcmFtZXMgZmVhdHVyZS4gSWYgeW91IHNlZSB0aGlzIG1lc3NhZ2UsIHlvdSBhcmUgdXNpbmcgYSBub24tZnJhbWUtY2FwYWJsZSB3ZWIgY2xpZW50LgorICAgICAgICAgICAgPC9wPgorICAgICAgICA8L25vZnJhbWVzPgorICAgIDwvZnJhbWVzZXQ+Cis8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSB0aGlzIGlzIHRoZSBzdHlsZXNoZWV0IGNzcyB0byB1c2UgZm9yIG5lYXJseSBldmVyeXRoaW5nIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzdHlsZXNoZWV0LmNzcyI+Citib2R5IHsKKyAgICBmb250Om5vcm1hbCA2OCUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2E7CisgICAgY29sb3I6IzAwMDAwMDsKK30KK3RhYmxlIHRyIHRkLCB0YWJsZSB0ciB0aCB7CisgICAgZm9udC1zaXplOiA2OCU7Cit9Cit0YWJsZS5kZXRhaWxzIHRyIHRoeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIHRleHQtYWxpZ246bGVmdDsKKyAgICBiYWNrZ3JvdW5kOiNhNmNhZjA7Cit9Cit0YWJsZS5kZXRhaWxzIHRyIHRkeworICAgIGJhY2tncm91bmQ6I2VlZWVlMDsKK30KKworcCB7CisgICAgbGluZS1oZWlnaHQ6MS41ZW07CisgICAgbWFyZ2luLXRvcDowLjVlbTsgbWFyZ2luLWJvdHRvbToxLjBlbTsKK30KK2gxIHsKKyAgICBtYXJnaW46IDBweCAwcHggNXB4OyBmb250OiAxNjUlIHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhCit9CitoMiB7CisgICAgbWFyZ2luLXRvcDogMWVtOyBtYXJnaW4tYm90dG9tOiAwLjVlbTsgZm9udDogYm9sZCAxMjUlIHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhCit9CitoMyB7CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTE1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorfQoraDQgeworICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOyBmb250OiBib2xkIDEwMCUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2EKK30KK2g1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsgZm9udDogYm9sZCAxMDAlIHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhCit9CitoNiB7CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTAwJSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorfQorLkVycm9yIHsKKyAgICBmb250LXdlaWdodDpib2xkOyBjb2xvcjpyZWQ7Cit9CisuRmFpbHVyZSB7CisgICAgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6cHVycGxlOworfQorLlByb3BlcnRpZXMgeworICB0ZXh0LWFsaWduOnJpZ2h0OworfQorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgVGhpcyBwYWdlIGlzIGNyZWF0ZWQgZm9yIGV2ZXJ5IHRlc3RzdWl0ZSBjbGFzcy4KKyAgICBJdCBwcmludHMgYSBzdW1tYXJ5IG9mIHRoZSB0ZXN0c3VpdGUgYW5kIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0CisgICAgdGVzdGNhc2UgbWV0aG9kcy4KKyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlc3RzdWl0ZSIgbW9kZT0iY2xhc3MuZGV0YWlscyI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJwYWNrYWdlLm5hbWUiIHNlbGVjdD0iQHBhY2thZ2UiLz4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImNsYXNzLm5hbWUiPjx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWUgPSAnJykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcGFja2FnZS5uYW1lIi8+LjwveHNsOmlmPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwveHNsOnZhcmlhYmxlPgorICAgIDxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+VW5pdCBUZXN0IFJlc3VsdHM6IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkY2xhc3MubmFtZSIvPjwvdGl0bGU+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhY2thZ2UubmFtZSIgc2VsZWN0PSIkcGFja2FnZS5uYW1lIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+CisgICAgICAgIHZhciBUZXN0Q2FzZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdmFyIGN1cjsKKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwcm9wZXJ0aWVzIi8+CisgICAgICAgPC9zY3JpcHQ+CisgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24gZGlzcGxheVByb3BlcnRpZXMgKG5hbWUpIHsKKyAgICAgICAgICB2YXIgd2luID0gd2luZG93Lm9wZW4oJycsJ0pVbml0U3lzdGVtUHJvcGVydGllcycsJ3Njcm9sbGJhcnM9MSxyZXNpemFibGU9MScpOworICAgICAgICAgIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQub3BlbigpOworICAgICAgICAgIGRvYy53cml0ZSgiPGh0bWw+PGhlYWQ+PHRpdGxlPlByb3BlcnRpZXMgb2YgIiArIG5hbWUgKyAiPC90aXRsZT4iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj4iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoImJvZHkge2ZvbnQ6bm9ybWFsIDY4JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYTsgY29sb3I6IzAwMDAwMDsgfSIpOworICAgICAgICAgIGRvYy53cml0ZSgidGFibGUgdHIgdGQsIHRhYmxlIHRyIHRoIHsgZm9udC1zaXplOiA2OCU7IH0iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoInRhYmxlLnByb3BlcnRpZXMgeyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IGJvcmRlci1sZWZ0OnNvbGlkIDEgI2NjY2NjYzsgYm9yZGVyLXRvcDpzb2xpZCAxICNjY2NjY2M7IHBhZGRpbmc6NXB4OyB9Iik7CisgICAgICAgICAgZG9jLndyaXRlKCJ0YWJsZS5wcm9wZXJ0aWVzIHRoIHsgdGV4dC1hbGlnbjpsZWZ0OyBib3JkZXItcmlnaHQ6c29saWQgMSAjY2NjY2NjOyBib3JkZXItYm90dG9tOnNvbGlkIDEgI2NjY2NjYzsgYmFja2dyb3VuZC1jb2xvcjojZWVlZWVlOyB9Iik7CisgICAgICAgICAgZG9jLndyaXRlKCJ0YWJsZS5wcm9wZXJ0aWVzIHRkIHsgZm9udDpub3JtYWw7IHRleHQtYWxpZ246bGVmdDsgYm9yZGVyLXJpZ2h0OnNvbGlkIDEgI2NjY2NjYzsgYm9yZGVyLWJvdHRvbTpzb2xpZCAxICNjY2NjY2M7IGJhY2tncm91bmQtY29sb3I6I2ZmZmZmZmY7IH0iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoImgzIHsgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTE1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYSB9Iik7CisgICAgICAgICAgZG9jLndyaXRlKCI8L3N0eWxlPiIpOworICAgICAgICAgIGRvYy53cml0ZSgiPC9oZWFkPjxib2R5PiIpOworICAgICAgICAgIGRvYy53cml0ZSgiPGgzPlByb3BlcnRpZXMgb2YgIiArIG5hbWUgKyAiPC9oMz4iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjxkaXYgYWxpZ249XCJyaWdodFwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OndpbmRvdy5jbG9zZSgpO1wiPkNsb3NlPC9hPjwvZGl2PiIpOworICAgICAgICAgIGRvYy53cml0ZSgiPHRhYmxlIGNsYXNzPSdwcm9wZXJ0aWVzJz4iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjx0cj48dGg+TmFtZTwvdGg+PHRoPlZhbHVlPC90aD48L3RyPiIpOworICAgICAgICAgIGZvciAocHJvcCBpbiBUZXN0Q2FzZXNbbmFtZV0pIHsKKyAgICAgICAgICAgIGRvYy53cml0ZSgiPHRyPjx0aD4iICsgcHJvcCArICI8L3RoPjx0ZD4iICsgVGVzdENhc2VzW25hbWVdW3Byb3BdICsgIjwvdGQ+PC90cj4iKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZG9jLndyaXRlKCI8L3RhYmxlPiIpOworICAgICAgICAgIGRvYy53cml0ZSgiPC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgICBkb2MuY2xvc2UoKTsKKyAgICAgICAgICB3aW4uZm9jdXMoKTsKKyAgICAgICAgfQorICAgICAgXV0+CisgICAgICA8L3NjcmlwdD4KKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIi8+CisgICAgICAgICAgICA8aDM+Q2xhc3MgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjbGFzcy5uYW1lIi8+PC9oMz4KKworCisgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImRldGFpbHMiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIyIiB3aWR0aD0iOTUlIj4KKyAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0idGVzdHN1aXRlLnRlc3QuaGVhZGVyIi8+CisgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmludC50ZXN0Ii8+CisgICAgICAgICAgICA8L3RhYmxlPgorCisgICAgICAgICAgICA8aDI+VGVzdHM8L2gyPgorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJkZXRhaWxzIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9Ijk1JSI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ0ZXN0Y2FzZS50ZXN0LmhlYWRlciIvPgorICAgICAgICAgICAgICA8IS0tCisgICAgICAgICAgICAgIHRlc3QgY2FuIGV2ZW4gbm90IGJlIHN0YXJ0ZWQgYXQgYWxsIChmYWlsdXJlIHRvIGxvYWQgdGhlIGNsYXNzKQorICAgICAgICAgICAgICBzbyByZXBvcnQgdGhlIGVycm9yIGRpcmVjdGx5CisgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iLi9lcnJvciI+CisgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iRXJyb3IiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjQiPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lcnJvciIvPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL3Rlc3RjYXNlIiBtb2RlPSJwcmludC50ZXN0Ii8+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iUHJvcGVydGllcyI+CisgICAgICAgICAgICAgICAgPGE+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPmphdmFzY3JpcHQ6ZGlzcGxheVByb3BlcnRpZXMoJzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcGFja2FnZSIvPi48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4nKTs8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgJiMxODc7CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InN0cmluZy1sZW5ndGgoLi9zeXN0ZW0tb3V0KSE9MCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUHJvcGVydGllcyI+CisgICAgICAgICAgICAgICAgICAgIDxhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+Li88eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4tb3V0LnR4dDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQgJiMxODc7CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKC4vc3lzdGVtLWVycikhPTAiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlByb3BlcnRpZXMiPgorICAgICAgICAgICAgICAgICAgICA8YT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPi4vPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+LWVyci50eHQ8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyICYjMTg3OworICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgPC9ib2R5PgorICAgIDwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCisgIDwhLS0KKyAgIFdyaXRlIHByb3BlcnRpZXMgaW50byBhIEphdmFTY3JpcHQgZGF0YSBzdHJ1Y3R1cmUuCisgICBUaGlzIGlzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBpZGVhIGJ5IEVyaWsgSGF0Y2hlciAoZWhhdGNoZXJAYXBhY2hlLm9yZykKKyAgIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJwcm9wZXJ0aWVzIj4KKyAgICBjdXIgPSBUZXN0Q2FzZXNbJzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi9AcGFja2FnZSIvPi48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi4vQG5hbWUiLz4nXSA9IG5ldyBBcnJheSgpOworICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJwcm9wZXJ0eSI+CisgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgY3VyWyc8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4nXSA9ICc8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iSlMtZXNjYXBlIj48eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RyaW5nIiBzZWxlY3Q9IkB2YWx1ZSIvPjwveHNsOmNhbGwtdGVtcGxhdGU+JzsKKyAgICA8L3hzbDpmb3ItZWFjaD4KKyAgPC94c2w6dGVtcGxhdGU+CisKKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgVGhpcyBwYWdlIGlzIGNyZWF0ZWQgZm9yIGV2ZXJ5IHBhY2thZ2UuCisgICAgSXQgcHJpbnRzIHRoZSBuYW1lIG9mIGFsbCBjbGFzc2VzIHRoYXQgYmVsb25ncyB0byB0aGlzIHBhY2thZ2UuCisgICAgQHBhcmFtIG5hbWUgdGhlIHBhY2thZ2UgbmFtZSB0byBwcmludCBjbGFzc2VzLgorICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorPCEtLSBsaXN0IG9mIGNsYXNzZXMgaW4gYSBwYWNrYWdlIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjbGFzc2VzLmxpc3QiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibmFtZSIvPgorICAgIDxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgIDx0aXRsZT5Vbml0IFRlc3QgQ2xhc3NlczogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRuYW1lIi8+PC90aXRsZT4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IiRuYW1lIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PgorICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZCBub3dyYXA9Im5vd3JhcCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aDI+PGEgaHJlZj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRuYW1lIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSIkbmFtZSA9ICcnIj4mbHQ7bm9uZSZndDs8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT48L2gyPgorICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3RhYmxlPgorCisgICAgICAgICAgICA8aDI+Q2xhc3NlczwvaDI+CisgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvdGVzdHN1aXRlcy90ZXN0c3VpdGVbLi9AcGFja2FnZSA9ICRuYW1lXSI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBub3dyYXA9Im5vd3JhcCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ie0BuYW1lfS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICA8L2JvZHk+CisgICAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLQorICAgIENyZWF0ZXMgYW4gYWxsLWNsYXNzZXMuaHRtbCBmaWxlIHRoYXQgY29udGFpbnMgYSBsaW5rIHRvIGFsbCBwYWNrYWdlLXN1bW1hcnkuaHRtbAorICAgIG9uIGVhY2ggY2xhc3MuCistLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlc3RzdWl0ZXMiIG1vZGU9ImFsbC5jbGFzc2VzIj4KKyAgICA8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICA8dGl0bGU+QWxsIFVuaXQgVGVzdCBDbGFzc2VzPC90aXRsZT4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PgorICAgICAgICAgICAgPGgyPkNsYXNzZXM8L2gyPgorICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InRlc3RzdWl0ZSIgbW9kZT0iYWxsLmNsYXNzZXMiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIDwvYm9keT4KKyAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVzdHN1aXRlIiBtb2RlPSJhbGwuY2xhc3NlcyI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJwYWNrYWdlLm5hbWUiIHNlbGVjdD0iQHBhY2thZ2UiLz4KKyAgICA8dHI+CisgICAgICAgIDx0ZCBub3dyYXA9Im5vd3JhcCI+CisgICAgICAgICAgICA8YSB0YXJnZXQ9ImNsYXNzRnJhbWUiPgorICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9Im5vdCgkcGFja2FnZS5uYW1lPScnKSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0idHJhbnNsYXRlKCRwYWNrYWdlLm5hbWUsJy4nLCcvJykiLz48eHNsOnRleHQ+LzwveHNsOnRleHQ+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjx4c2w6dGV4dD4uaHRtbDwveHNsOnRleHQ+CisgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tCisgICAgQ3JlYXRlcyBhbiBodG1sIGZpbGUgdGhhdCBjb250YWlucyBhIGxpbmsgdG8gYWxsIHBhY2thZ2Utc3VtbWFyeS5odG1sIGZpbGVzIG9uCisgICAgZWFjaCBwYWNrYWdlIGV4aXN0aW5nIG9uIHRlc3RzdWl0ZXMuCisgICAgQGJ1ZyB0aGVyZSB3aWxsIGJlIGEgcHJvYmxlbSBoZXJlLCBJIGRvbid0IGtub3cgeWV0IGhvdyB0byBoYW5kbGUgdW5uYW1lZCBwYWNrYWdlIDooCistLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlc3RzdWl0ZXMiIG1vZGU9ImFsbC5wYWNrYWdlcyI+CisgICAgPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgICAgPHRpdGxlPkFsbCBVbml0IFRlc3QgUGFja2FnZXM8L3RpdGxlPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8aDI+PGEgaHJlZj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPkhvbWU8L2E+PC9oMj4KKyAgICAgICAgICAgIDxoMj5QYWNrYWdlczwvaDI+CisgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0idGVzdHN1aXRlW25vdCguL0BwYWNrYWdlID0gcHJlY2VkaW5nLXNpYmxpbmc6OnRlc3RzdWl0ZS9AcGFja2FnZSldIiBtb2RlPSJhbGwucGFja2FnZXMiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAcGFja2FnZSIvPgorICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIDwvYm9keT4KKyAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVzdHN1aXRlIiBtb2RlPSJhbGwucGFja2FnZXMiPgorICAgIDx0cj4KKyAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgIDxhIGhyZWY9Ii4ve3RyYW5zbGF0ZShAcGFja2FnZSwnLicsJy8nKX0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+CisgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBwYWNrYWdlIi8+CisgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAcGFja2FnZSA9ICcnIj4mbHQ7bm9uZSZndDs8L3hzbDppZj4KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC90ZD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVzdHN1aXRlcyIgbW9kZT0ib3ZlcnZpZXcucGFja2FnZXMiPgorICAgIDxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgIDx0aXRsZT5Vbml0IFRlc3QgUmVzdWx0czogU3VtbWFyeTwvdGl0bGU+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhY2thZ2UubmFtZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT4KKyAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ib25sb2FkIj5vcGVuKCdhbGxjbGFzc2VzLWZyYW1lLmh0bWwnLCdjbGFzc0xpc3RGcmFtZScpPC94c2w6YXR0cmlidXRlPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciIvPgorICAgICAgICA8aDI+U3VtbWFyeTwvaDI+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idGVzdENvdW50IiBzZWxlY3Q9InN1bSh0ZXN0c3VpdGUvQHRlc3RzKSIvPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImVycm9yQ291bnQiIHNlbGVjdD0ic3VtKHRlc3RzdWl0ZS9AZXJyb3JzKSIvPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImZhaWx1cmVDb3VudCIgc2VsZWN0PSJzdW0odGVzdHN1aXRlL0BmYWlsdXJlcykiLz4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ0aW1lQ291bnQiIHNlbGVjdD0ic3VtKHRlc3RzdWl0ZS9AdGltZSkiLz4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJzdWNjZXNzUmF0ZSIgc2VsZWN0PSIoJHRlc3RDb3VudCAtICRmYWlsdXJlQ291bnQgLSAkZXJyb3JDb3VudCkgZGl2ICR0ZXN0Q291bnQiLz4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJkZXRhaWxzIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9Ijk1JSI+CisgICAgICAgIDx0ciB2YWxpZ249InRvcCI+CisgICAgICAgICAgICA8dGg+VGVzdHM8L3RoPgorICAgICAgICAgICAgPHRoPkZhaWx1cmVzPC90aD4KKyAgICAgICAgICAgIDx0aD5FcnJvcnM8L3RoPgorICAgICAgICAgICAgPHRoPlN1Y2Nlc3MgcmF0ZTwvdGg+CisgICAgICAgICAgICA8dGg+VGltZTwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0ciB2YWxpZ249InRvcCI+CisgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkZXJyb3JDb3VudCAmZ3Q7IDAiPkVycm9yPC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRmYWlsdXJlQ291bnQgJmd0OyAwIj5GYWlsdXJlPC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+UGFzczwveHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiR0ZXN0Q291bnQiLz48L3RkPgorICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZmFpbHVyZUNvdW50Ii8+PC90ZD4KKyAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVycm9yQ291bnQiLz48L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXBlcmNlbnQiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iJHN1Y2Nlc3NSYXRlIi8+CisgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdGltZSI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ2YWx1ZSIgc2VsZWN0PSIkdGltZUNvdW50Ii8+CisgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI5NSUiPgorICAgICAgICA8dHI+CisgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsiPgorICAgICAgICBOb3RlOiA8ZW0+ZmFpbHVyZXM8L2VtPiBhcmUgYW50aWNpcGF0ZWQgYW5kIGNoZWNrZWQgZm9yIHdpdGggYXNzZXJ0aW9ucyB3aGlsZSA8ZW0+ZXJyb3JzPC9lbT4gYXJlIHVuYW50aWNpcGF0ZWQuCisgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisKKyAgICAgICAgPGgyPlBhY2thZ2VzPC9oMj4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJkZXRhaWxzIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9Ijk1JSI+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0idGVzdHN1aXRlLnRlc3QuaGVhZGVyIi8+CisgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0idGVzdHN1aXRlW25vdCguL0BwYWNrYWdlID0gcHJlY2VkaW5nLXNpYmxpbmc6OnRlc3RzdWl0ZS9AcGFja2FnZSldIj4KKyAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAcGFja2FnZSIgb3JkZXI9ImFzY2VuZGluZyIvPgorICAgICAgICAgICAgICAgIDwhLS0gZ2V0IHRoZSBub2RlIHNldCBjb250YWluaW5nIGFsbCB0ZXN0c3VpdGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBwYWNrYWdlIC0tPgorICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iaW5zYW1lcGFja2FnZSIgc2VsZWN0PSIvdGVzdHN1aXRlcy90ZXN0c3VpdGVbLi9AcGFja2FnZSA9IGN1cnJlbnQoKS9AcGFja2FnZV0iLz4KKyAgICAgICAgICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXkgYSBmYWlsdXJlIGlmIHRoZXJlIGlzIGFueSBmYWlsdXJlL2Vycm9yIGluIHRoZSBwYWNrYWdlIC0tPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0ic3VtKCRpbnNhbWVwYWNrYWdlL0BlcnJvcnMpICZndDsgMCI+RXJyb3I8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJzdW0oJGluc2FtZXBhY2thZ2UvQGZhaWx1cmVzKSAmZ3Q7IDAiPkZhaWx1cmU8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPlBhc3M8L3hzbDpvdGhlcndpc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9Ii4ve3RyYW5zbGF0ZShAcGFja2FnZSwnLicsJy8nKX0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBwYWNrYWdlIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBwYWNrYWdlID0gJyciPiZsdDtub25lJmd0OzwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICA8L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdW0oJGluc2FtZXBhY2thZ2UvQHRlc3RzKSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3VtKCRpbnNhbWVwYWNrYWdlL0BlcnJvcnMpIi8+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdW0oJGluc2FtZXBhY2thZ2UvQGZhaWx1cmVzKSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdGltZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0ic3VtKCRpbnNhbWVwYWNrYWdlL0B0aW1lKSIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRpbnNhbWVwYWNrYWdlL0B0aW1lc3RhbXAiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRpbnNhbWVwYWNrYWdlL0Bob3N0bmFtZSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICA8L3RhYmxlPgorICAgICAgICA8L2JvZHk+CisgICAgICAgIDwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFja2FnZS5zdW1tYXJ5Ij4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5hbWUiLz4KKyAgICA8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhY2thZ2UubmFtZSIgc2VsZWN0PSIkbmFtZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9Im9ubG9hZCI+b3BlbigncGFja2FnZS1mcmFtZS5odG1sJywnY2xhc3NMaXN0RnJhbWUnKTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIi8+CisgICAgICAgICAgICA8aDM+UGFja2FnZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG5hbWUiLz48L2gzPgorCisgICAgICAgICAgICA8IS0tdGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSI5NSUiPgorICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjbGFzcy5tZXRyaWNzLmhlYWRlciIvPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJpbnQubWV0cmljcyIvPgorICAgICAgICAgICAgPC90YWJsZS0tPgorCisgICAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9Imluc2FtZXBhY2thZ2UiIHNlbGVjdD0iL3Rlc3RzdWl0ZXMvdGVzdHN1aXRlWy4vQHBhY2thZ2UgPSAkbmFtZV0iLz4KKyAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoJGluc2FtZXBhY2thZ2UpICZndDsgMCI+CisgICAgICAgICAgICAgICAgPGgyPkNsYXNzZXM8L2gyPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZGV0YWlscyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSI5NSUiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0idGVzdHN1aXRlLnRlc3QuaGVhZGVyIi8+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iJGluc2FtZXBhY2thZ2UiIG1vZGU9InByaW50LnRlc3QiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgIDwvYm9keT4KKyAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tCisgICAgdHJhbnNmb3JtIHN0cmluZyBsaWtlIGEuYi5jIHRvIC4uLy4uLy4uLworICAgIEBwYXJhbSBwYXRoIHRoZSBwYXRoIHRvIHRyYW5zZm9ybSBpbnRvIGEgZGVzY2VuZGluZyBkaXJlY3RvcnkgcGF0aAorLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9InBhdGgiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0icGF0aCIvPgorICAgIDx4c2w6aWYgdGVzdD0iY29udGFpbnMoJHBhdGgsJy4nKSI+CisgICAgICAgIDx4c2w6dGV4dD4uLi88L3hzbDp0ZXh0PgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGF0aCI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGF0aCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZy1hZnRlcigkcGF0aCwnLicpIi8+PC94c2w6d2l0aC1wYXJhbT4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmlmIHRlc3Q9Im5vdChjb250YWlucygkcGF0aCwnLicpKSBhbmQgbm90KCRwYXRoID0gJycpIj4KKyAgICAgICAgPHhzbDp0ZXh0Pi4uLzwveHNsOnRleHQ+CisgICAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIGNyZWF0ZSB0aGUgbGluayB0byB0aGUgc3R5bGVzaGVldCBiYXNlZCBvbiB0aGUgcGFja2FnZSBuYW1lIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InBhY2thZ2UubmFtZSIvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJTdHlsZSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+PHhzbDppZiB0ZXN0PSJub3QoJHBhY2thZ2UubmFtZSA9ICd1bm5hbWVkIHBhY2thZ2UnKSI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhdGgiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYXRoIiBzZWxlY3Q9IiRwYWNrYWdlLm5hbWUiLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwveHNsOmlmPnN0eWxlc2hlZXQuY3NzPC94c2w6YXR0cmlidXRlPjwvbGluaz4KKzwveHNsOnRlbXBsYXRlPgorCisKKzwhLS0gUGFnZSBIRUFERVIgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9InBhZ2VIZWFkZXIiPgorICAgIDxoMT5Vbml0IFRlc3QgUmVzdWx0czwvaDE+CisgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICA8dHI+CisgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKyAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+RGVzaWduZWQgZm9yIHVzZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly93d3cuanVuaXQub3JnLyI+SlVuaXQ8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnLyI+QW50PC9hPi48L3RkPgorICAgIDwvdHI+CisgICAgPC90YWJsZT4KKyAgICA8aHIgc2l6ZT0iMSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gY2xhc3MgaGVhZGVyIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJ0ZXN0c3VpdGUudGVzdC5oZWFkZXIiPgorICAgIDx0ciB2YWxpZ249InRvcCI+CisgICAgICAgIDx0aCB3aWR0aD0iODAlIj5OYW1lPC90aD4KKyAgICAgICAgPHRoPlRlc3RzPC90aD4KKyAgICAgICAgPHRoPkVycm9yczwvdGg+CisgICAgICAgIDx0aD5GYWlsdXJlczwvdGg+CisgICAgICAgIDx0aCBub3dyYXA9Im5vd3JhcCI+VGltZShzKTwvdGg+CisgICAgICAgIDx0aCBub3dyYXA9Im5vd3JhcCI+VGltZSBTdGFtcDwvdGg+CisgICAgICAgIDx0aD5Ib3N0PC90aD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gbWV0aG9kIGhlYWRlciAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0idGVzdGNhc2UudGVzdC5oZWFkZXIiPgorICAgIDx0ciB2YWxpZ249InRvcCI+CisgICAgICAgIDx0aD5OYW1lPC90aD4KKyAgICAgICAgPHRoPlN0YXR1czwvdGg+CisgICAgICAgIDx0aCB3aWR0aD0iODAlIj5UeXBlPC90aD4KKyAgICAgICAgPHRoIG5vd3JhcD0ibm93cmFwIj5UaW1lKHMpPC90aD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLSBjbGFzcyBpbmZvcm1hdGlvbiAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlc3RzdWl0ZSIgbW9kZT0icHJpbnQudGVzdCI+CisgICAgPHRyIHZhbGlnbj0idG9wIj4KKyAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBlcnJvcnNbLiZndDsgMF0iPkVycm9yPC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iQGZhaWx1cmVzWy4mZ3Q7IDBdIj5GYWlsdXJlPC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT5QYXNzPC94c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgIDx0ZD48YSBocmVmPSJ7QG5hbWV9Lmh0bWwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvYT48L3RkPgorICAgICAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAdGVzdHMiLz48L3RkPgorICAgICAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAZXJyb3JzIi8+PC90ZD4KKyAgICAgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQGZhaWx1cmVzIi8+PC90ZD4KKyAgICAgICAgPHRkPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXRpbWUiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ2YWx1ZSIgc2VsZWN0PSJAdGltZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQHRpbWVzdGFtcCIvPjwvdGQ+CisgICAgICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBob3N0bmFtZSIvPjwvdGQ+CisgICAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0ZXN0Y2FzZSIgbW9kZT0icHJpbnQudGVzdCI+CisgICAgPHRyIHZhbGlnbj0idG9wIj4KKyAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImVycm9yIj5FcnJvcjwveHNsOndoZW4+CisgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZhaWx1cmUiPkZhaWx1cmU8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPlRhYmxlUm93Q29sb3I8L3hzbDpvdGhlcndpc2U+CisgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvdGQ+CisgICAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZhaWx1cmUiPgorICAgICAgICAgICAgICAgIDx0ZD5GYWlsdXJlPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJmYWlsdXJlIi8+PC90ZD4KKyAgICAgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iZXJyb3IiPgorICAgICAgICAgICAgICAgIDx0ZD5FcnJvcjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZXJyb3IiLz48L3RkPgorICAgICAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgIDx0ZD5TdWNjZXNzPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4KKyAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICA8dGQ+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS10aW1lIj4KKyAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iQHRpbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvdGQ+CisgICAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCisKKzwhLS0gTm90ZSA6IHRoZSBiZWxvdyB0ZW1wbGF0ZSBlcnJvciBhbmQgZmFpbHVyZSBhcmUgdGhlIHNhbWUgc3R5bGUKKyAgICAgICAgICAgIHNvIGp1c3QgY2FsbCB0aGUgc2FtZSBzdHlsZSBzdG9yZSBpbiB0aGUgdG9vbGtpdCB0ZW1wbGF0ZSAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImZhaWx1cmUiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LWZhaWx1cmVzIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZXJyb3IiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LWZhaWx1cmVzIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBTdHlsZSBmb3IgdGhlIGVycm9yIGFuZCBmYWlsdXJlIGluIHRoZSB0ZXN0Y2FzZSB0ZW1wbGF0ZSAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGlzcGxheS1mYWlsdXJlcyI+CisgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJub3QoQG1lc3NhZ2UpIj5OL0E8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbWVzc2FnZSIvPgorICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgPC94c2w6Y2hvb3NlPgorICAgIDwhLS0gZGlzcGxheSB0aGUgc3RhY2t0cmFjZSAtLT4KKyAgICA8YnIvPjxici8+CisgICAgPGNvZGU+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJici1yZXBsYWNlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ3b3JkIiBzZWxlY3Q9Ii4iLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L2NvZGU+CisgICAgPCEtLSB0aGUgbGF0dGVyIGlzIGJldHRlciBidXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMgZm9yIG5vbi0yMSIgbW9uaXRvcnMuLi4gLS0+CisgICAgPCEtLXByZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvcHJlLS0+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJKUy1lc2NhcGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ic3RyaW5nIi8+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJ0bXAxIiBzZWxlY3Q9InN0cmluZ3V0aWxzOnJlcGxhY2Uoc3RyaW5nKCRzdHJpbmcpLCdcJywnXFwnKSIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idG1wMiIgc2VsZWN0PSJzdHJpbmd1dGlsczpyZXBsYWNlKHN0cmluZygkdG1wMSksJnF1b3Q7JyZxdW90OywmcXVvdDtcJmFwb3M7JnF1b3Q7KSIvPgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdG1wMiIvPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLQorICAgIHRlbXBsYXRlIHRoYXQgd2lsbCBjb252ZXJ0IGEgY2FycmlhZ2UgcmV0dXJuIGludG8gYSBiciB0YWcKKyAgICBAcGFyYW0gd29yZCB0aGUgdGV4dCBmcm9tIHdoaWNoIHRvIGNvbnZlcnQgQ1IgdG8gQlIgdGFnCistLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0iYnItcmVwbGFjZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJ3b3JkIi8+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJiciI+PGJyLz48L3hzbDpwYXJhbT4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0nc3RyaW5ndXRpbHM6cmVwbGFjZShzdHJpbmcoJHdvcmQpLCImI3hBOyIsJGJyKScvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGlzcGxheS10aW1lIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InZhbHVlIi8+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImZvcm1hdC1udW1iZXIoJHZhbHVlLCcwLjAwMCcpIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXBlcmNlbnQiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idmFsdWUiLz4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iZm9ybWF0LW51bWJlcigkdmFsdWUsJzAuMDAlJykiLz4KKzwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvanVuaXQtZnJhbWVzLnhzbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvanVuaXQtZnJhbWVzLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjllOGRkCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2V0Yy9qdW5pdC1mcmFtZXMueHNsCkBAIC0wLDAgKzEsNzEyIEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCIKKyAgICB4bWxuczpseHNsdD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiCisgICAgeG1sbnM6cmVkaXJlY3Q9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9yZWRpcmVjdCIKKyAgICB4bWxuczpzdHJpbmd1dGlscz0ieGFsYW46Ly9vcmcuYXBhY2hlLnRvb2xzLmFudC51dGlsLlN0cmluZ1V0aWxzIgorICAgIGV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzPSJyZWRpcmVjdCI+Cis8eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiIGluZGVudD0ieWVzIiBlbmNvZGluZz0iVVMtQVNDSUkiLz4KKzx4c2w6ZGVjaW1hbC1mb3JtYXQgZGVjaW1hbC1zZXBhcmF0b3I9Ii4iIGdyb3VwaW5nLXNlcGFyYXRvcj0iLCIvPgorPCEtLQorICAgQ29weXJpZ2h0IDIwMDEtMjAwNSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPCEtLQorCisgU2FtcGxlIHN0eWxlc2hlZXQgdG8gYmUgdXNlZCB3aXRoIEFudCBKVW5pdFJlcG9ydCBvdXRwdXQuCisKKyBJdCBjcmVhdGVzIGEgc2V0IG9mIEhUTUwgZmlsZXMgYSBsYSBqYXZhZG9jIHdoZXJlIHlvdSBjYW4gYnJvd3NlIGVhc2lseQorIHRocm91Z2ggYWxsIHBhY2thZ2VzIGFuZCBjbGFzc2VzLgorCistLT4KKzx4c2w6cGFyYW0gbmFtZT0ib3V0cHV0LmRpciIgc2VsZWN0PSInLiciLz4KKworCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0ZXN0c3VpdGVzIj4KKyAgICA8IS0tIGNyZWF0ZSB0aGUgaW5kZXguaHRtbCAtLT4KKyAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9pbmRleC5odG1sIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZGV4Lmh0bWwiLz4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBjcmVhdGUgdGhlIHN0eWxlc2hlZXQuY3NzIC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3N0eWxlc2hlZXQuY3NzIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0eWxlc2hlZXQuY3NzIi8+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gY3JlYXRlIHRoZSBvdmVydmlldy1wYWNrYWdlcy5odG1sIGF0IHRoZSByb290IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+CisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ib3ZlcnZpZXcucGFja2FnZXMiLz4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBjcmVhdGUgdGhlIGFsbC1wYWNrYWdlcy5odG1sIGF0IHRoZSByb290IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L292ZXJ2aWV3LWZyYW1lLmh0bWwiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFsbC5wYWNrYWdlcyIvPgorICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICA8IS0tIGNyZWF0ZSB0aGUgYWxsLWNsYXNzZXMuaHRtbCBhdCB0aGUgcm9vdCAtLT4KKyAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9hbGxjbGFzc2VzLWZyYW1lLmh0bWwiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFsbC5jbGFzc2VzIi8+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gcHJvY2VzcyBhbGwgcGFja2FnZXMgLS0+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii4vdGVzdHN1aXRlW25vdCguL0BwYWNrYWdlID0gcHJlY2VkaW5nLXNpYmxpbmc6OnRlc3RzdWl0ZS9AcGFja2FnZSldIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhY2thZ2UiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5hbWUiIHNlbGVjdD0iQHBhY2thZ2UiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDpmb3ItZWFjaD4KKzwveHNsOnRlbXBsYXRlPgorCisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFja2FnZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJuYW1lIi8+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJwYWNrYWdlLmRpciI+CisgICAgICAgIDx4c2w6aWYgdGVzdD0ibm90KCRuYW1lID0gJycpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0idHJhbnNsYXRlKCRuYW1lLCcuJywnLycpIi8+PC94c2w6aWY+CisgICAgICAgIDx4c2w6aWYgdGVzdD0iJG5hbWUgPSAnJyI+LjwveHNsOmlmPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDwhLS1Qcm9jZXNzaW5nIHBhY2thZ2UgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+IGluIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkb3V0cHV0LmRpciIvPiAtLT4KKyAgICA8IS0tIGNyZWF0ZSBhIGNsYXNzZXMtbGlzdC5odG1sIGluIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSAtLT4KKyAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS97JHBhY2thZ2UuZGlyfS9wYWNrYWdlLWZyYW1lLmh0bWwiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2xhc3Nlcy5saXN0Ij4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJuYW1lIiBzZWxlY3Q9IiRuYW1lIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gY3JlYXRlIGEgcGFja2FnZS1zdW1tYXJ5Lmh0bWwgaW4gdGhlIHBhY2thZ2UgZGlyZWN0b3J5IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3skcGFja2FnZS5kaXJ9L3BhY2thZ2Utc3VtbWFyeS5odG1sIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhY2thZ2Uuc3VtbWFyeSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibmFtZSIgc2VsZWN0PSIkbmFtZSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICA8IS0tIGZvciBlYWNoIGNsYXNzLCBjcmVhdGVzIGEgQG5hbWUuaHRtbCAtLT4KKyAgICA8IS0tIEBidWcgdGhlcmUgd2lsbCBiZSBhIHByb2JsZW0gd2l0aCBpbm5lciBjbGFzc2VzIGhhdmluZyB0aGUgc2FtZSBuYW1lLCBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIC0tPgorICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvdGVzdHN1aXRlcy90ZXN0c3VpdGVbQHBhY2thZ2UgPSAkbmFtZV0iPgorICAgICAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS97JHBhY2thZ2UuZGlyfS97QGlkfV97QG5hbWV9Lmh0bWwiPgorICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjbGFzcy5kZXRhaWxzIi8+CisgICAgICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisgICAgICAgIDx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aCguL3N5c3RlbS1vdXQpIT0wIj4KKyAgICAgICAgICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3skcGFja2FnZS5kaXJ9L3tAaWR9X3tAbmFtZX0tb3V0LnR4dCI+CisgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vc3lzdGVtLW91dCIgLz4KKyAgICAgICAgICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisgICAgICAgIDwveHNsOmlmPgorICAgICAgICA8eHNsOmlmIHRlc3Q9InN0cmluZy1sZW5ndGgoLi9zeXN0ZW0tZXJyKSE9MCI+CisgICAgICAgICAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS97JHBhY2thZ2UuZGlyfS97QGlkfV97QG5hbWV9LWVyci50eHQiPgorICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL3N5c3RlbS1lcnIiIC8+CisgICAgICAgICAgICA8L3JlZGlyZWN0OndyaXRlPgorICAgICAgICA8L3hzbDppZj4KKyAgICA8L3hzbDpmb3ItZWFjaD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4Lmh0bWwiPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDx0aXRsZT5Vbml0IFRlc3QgUmVzdWx0cy48L3RpdGxlPgorICAgIDwvaGVhZD4KKyAgICA8ZnJhbWVzZXQgY29scz0iMjAlLDgwJSI+CisgICAgICAgIDxmcmFtZXNldCByb3dzPSIzMCUsNzAlIj4KKyAgICAgICAgICAgIDxmcmFtZSBzcmM9Im92ZXJ2aWV3LWZyYW1lLmh0bWwiIG5hbWU9InBhY2thZ2VMaXN0RnJhbWUiLz4KKyAgICAgICAgICAgIDxmcmFtZSBzcmM9ImFsbGNsYXNzZXMtZnJhbWUuaHRtbCIgbmFtZT0iY2xhc3NMaXN0RnJhbWUiLz4KKyAgICAgICAgPC9mcmFtZXNldD4KKyAgICAgICAgPGZyYW1lIHNyYz0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIiBuYW1lPSJjbGFzc0ZyYW1lIi8+CisgICAgICAgIDxub2ZyYW1lcz4KKyAgICAgICAgICAgIDxoMj5GcmFtZSBBbGVydDwvaDI+CisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICBUaGlzIGRvY3VtZW50IGlzIGRlc2lnbmVkIHRvIGJlIHZpZXdlZCB1c2luZyB0aGUgZnJhbWVzIGZlYXR1cmUuIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCB5b3UgYXJlIHVzaW5nIGEgbm9uLWZyYW1lLWNhcGFibGUgd2ViIGNsaWVudC4KKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgPC9ub2ZyYW1lcz4KKyAgICA8L2ZyYW1lc2V0PgorPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gdGhpcyBpcyB0aGUgc3R5bGVzaGVldCBjc3MgdG8gdXNlIGZvciBuZWFybHkgZXZlcnl0aGluZyAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0ic3R5bGVzaGVldC5jc3MiPgorYm9keSB7CisgICAgZm9udDpub3JtYWwgNjglIHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhOworICAgIGNvbG9yOiMwMDAwMDA7Cit9Cit0YWJsZSB0ciB0ZCwgdGFibGUgdHIgdGggeworICAgIGZvbnQtc2l6ZTogNjglOworfQordGFibGUuZGV0YWlscyB0ciB0aHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICB0ZXh0LWFsaWduOmxlZnQ7CisgICAgYmFja2dyb3VuZDojYTZjYWYwOworfQordGFibGUuZGV0YWlscyB0ciB0ZHsKKyAgICBiYWNrZ3JvdW5kOiNlZWVlZTA7Cit9CisKK3AgeworICAgIGxpbmUtaGVpZ2h0OjEuNWVtOworICAgIG1hcmdpbi10b3A6MC41ZW07IG1hcmdpbi1ib3R0b206MS4wZW07Cit9CitoMSB7CisgICAgbWFyZ2luOiAwcHggMHB4IDVweDsgZm9udDogMTY1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorfQoraDIgeworICAgIG1hcmdpbi10b3A6IDFlbTsgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTI1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorfQoraDMgeworICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOyBmb250OiBib2xkIDExNSUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2EKK30KK2g0IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsgZm9udDogYm9sZCAxMDAlIHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhCit9CitoNSB7CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTAwJSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorfQoraDYgeworICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOyBmb250OiBib2xkIDEwMCUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2EKK30KKy5FcnJvciB7CisgICAgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6cmVkOworfQorLkZhaWx1cmUgeworICAgIGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOnB1cnBsZTsKK30KKy5Qcm9wZXJ0aWVzIHsKKyAgdGV4dC1hbGlnbjpyaWdodDsKK30KKzwveHNsOnRlbXBsYXRlPgorCisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFRoaXMgcGFnZSBpcyBjcmVhdGVkIGZvciBldmVyeSB0ZXN0c3VpdGUgY2xhc3MuCisgICAgSXQgcHJpbnRzIGEgc3VtbWFyeSBvZiB0aGUgdGVzdHN1aXRlIGFuZCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dAorICAgIHRlc3RjYXNlIG1ldGhvZHMuCisgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0ZXN0c3VpdGUiIG1vZGU9ImNsYXNzLmRldGFpbHMiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IkBwYWNrYWdlIi8+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJjbGFzcy5uYW1lIj48eHNsOmlmIHRlc3Q9Im5vdCgkcGFja2FnZS5uYW1lID0gJycpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHBhY2thZ2UubmFtZSIvPi48L3hzbDppZj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L3hzbDp2YXJpYWJsZT4KKyAgICA8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPlVuaXQgVGVzdCBSZXN1bHRzOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGNsYXNzLm5hbWUiLz48L3RpdGxlPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiIHNlbGVjdD0iJHBhY2thZ2UubmFtZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorICAgICAgICB2YXIgVGVzdENhc2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHZhciBjdXI7CisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icHJvcGVydGllcyIvPgorICAgICAgIDwvc2NyaXB0PgorICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1bmN0aW9uIGRpc3BsYXlQcm9wZXJ0aWVzIChuYW1lKSB7CisgICAgICAgICAgdmFyIHdpbiA9IHdpbmRvdy5vcGVuKCcnLCdKVW5pdFN5c3RlbVByb3BlcnRpZXMnLCdzY3JvbGxiYXJzPTEscmVzaXphYmxlPTEnKTsKKyAgICAgICAgICB2YXIgZG9jID0gd2luLmRvY3VtZW50Lm9wZW4oKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjxodG1sPjxoZWFkPjx0aXRsZT5Qcm9wZXJ0aWVzIG9mICIgKyBuYW1lICsgIjwvdGl0bGU+Iik7CisgICAgICAgICAgZG9jLndyaXRlKCI8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+Iik7CisgICAgICAgICAgZG9jLndyaXRlKCJib2R5IHtmb250Om5vcm1hbCA2OCUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2E7IGNvbG9yOiMwMDAwMDA7IH0iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoInRhYmxlIHRyIHRkLCB0YWJsZSB0ciB0aCB7IGZvbnQtc2l6ZTogNjglOyB9Iik7CisgICAgICAgICAgZG9jLndyaXRlKCJ0YWJsZS5wcm9wZXJ0aWVzIHsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyBib3JkZXItbGVmdDpzb2xpZCAxICNjY2NjY2M7IGJvcmRlci10b3A6c29saWQgMSAjY2NjY2NjOyBwYWRkaW5nOjVweDsgfSIpOworICAgICAgICAgIGRvYy53cml0ZSgidGFibGUucHJvcGVydGllcyB0aCB7IHRleHQtYWxpZ246bGVmdDsgYm9yZGVyLXJpZ2h0OnNvbGlkIDEgI2NjY2NjYzsgYm9yZGVyLWJvdHRvbTpzb2xpZCAxICNjY2NjY2M7IGJhY2tncm91bmQtY29sb3I6I2VlZWVlZTsgfSIpOworICAgICAgICAgIGRvYy53cml0ZSgidGFibGUucHJvcGVydGllcyB0ZCB7IGZvbnQ6bm9ybWFsOyB0ZXh0LWFsaWduOmxlZnQ7IGJvcmRlci1yaWdodDpzb2xpZCAxICNjY2NjY2M7IGJvcmRlci1ib3R0b206c29saWQgMSAjY2NjY2NjOyBiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZmOyB9Iik7CisgICAgICAgICAgZG9jLndyaXRlKCJoMyB7IG1hcmdpbi1ib3R0b206IDAuNWVtOyBmb250OiBib2xkIDExNSUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2EgfSIpOworICAgICAgICAgIGRvYy53cml0ZSgiPC9zdHlsZT4iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjwvaGVhZD48Ym9keT4iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjxoMz5Qcm9wZXJ0aWVzIG9mICIgKyBuYW1lICsgIjwvaDM+Iik7CisgICAgICAgICAgZG9jLndyaXRlKCI8ZGl2IGFsaWduPVwicmlnaHRcIj48YSBocmVmPVwiamF2YXNjcmlwdDp3aW5kb3cuY2xvc2UoKTtcIj5DbG9zZTwvYT48L2Rpdj4iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjx0YWJsZSBjbGFzcz0ncHJvcGVydGllcyc+Iik7CisgICAgICAgICAgZG9jLndyaXRlKCI8dHI+PHRoPk5hbWU8L3RoPjx0aD5WYWx1ZTwvdGg+PC90cj4iKTsKKyAgICAgICAgICBmb3IgKHByb3AgaW4gVGVzdENhc2VzW25hbWVdKSB7CisgICAgICAgICAgICBkb2Mud3JpdGUoIjx0cj48dGg+IiArIHByb3AgKyAiPC90aD48dGQ+IiArIFRlc3RDYXNlc1tuYW1lXVtwcm9wXSArICI8L3RkPjwvdHI+Iik7CisgICAgICAgICAgfQorICAgICAgICAgIGRvYy53cml0ZSgiPC90YWJsZT4iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgICAgZG9jLmNsb3NlKCk7CisgICAgICAgICAgd2luLmZvY3VzKCk7CisgICAgICAgIH0KKyAgICAgIF1dPgorICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciIvPgorICAgICAgICAgICAgPGgzPkNsYXNzIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkY2xhc3MubmFtZSIvPjwvaDM+CisKKworICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJkZXRhaWxzIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9Ijk1JSI+CisgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InRlc3RzdWl0ZS50ZXN0LmhlYWRlciIvPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJpbnQudGVzdCIvPgorICAgICAgICAgICAgPC90YWJsZT4KKworICAgICAgICAgICAgPGgyPlRlc3RzPC9oMj4KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZGV0YWlscyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSI5NSUiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0idGVzdGNhc2UudGVzdC5oZWFkZXIiLz4KKyAgICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgICB0ZXN0IGNhbiBldmVuIG5vdCBiZSBzdGFydGVkIGF0IGFsbCAoZmFpbHVyZSB0byBsb2FkIHRoZSBjbGFzcykKKyAgICAgICAgICAgICAgc28gcmVwb3J0IHRoZSBlcnJvciBkaXJlY3RseQorICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9Ii4vZXJyb3IiPgorICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkVycm9yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI0Ij48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZXJyb3IiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi90ZXN0Y2FzZSIgbW9kZT0icHJpbnQudGVzdCIvPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9IlByb3BlcnRpZXMiPgorICAgICAgICAgICAgICAgIDxhPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj5qYXZhc2NyaXB0OmRpc3BsYXlQcm9wZXJ0aWVzKCc8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHBhY2thZ2UiLz4uPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Jyk7PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzICYjMTg3OworICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKC4vc3lzdGVtLW91dCkhPTAiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlByb3BlcnRpZXMiPgorICAgICAgICAgICAgICAgICAgICA8YT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPi4vPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBpZCIvPl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4tb3V0LnR4dDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQgJiMxODc7CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKC4vc3lzdGVtLWVycikhPTAiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlByb3BlcnRpZXMiPgorICAgICAgICAgICAgICAgICAgICA8YT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPi4vPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBpZCIvPl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4tZXJyLnR4dDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIgJiMxODc7CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICA8L2JvZHk+CisgICAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLQorICAgV3JpdGUgcHJvcGVydGllcyBpbnRvIGEgSmF2YVNjcmlwdCBkYXRhIHN0cnVjdHVyZS4KKyAgIFRoaXMgaXMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGlkZWEgYnkgRXJpayBIYXRjaGVyIChlaGF0Y2hlckBhcGFjaGUub3JnKQorICAgLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InByb3BlcnRpZXMiPgorICAgIGN1ciA9IFRlc3RDYXNlc1snPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4uL0BwYWNrYWdlIi8+Ljx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi9AbmFtZSIvPiddID0gbmV3IEFycmF5KCk7CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9InByb3BlcnR5Ij4KKyAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICBjdXJbJzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPiddID0gJzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJKUy1lc2NhcGUiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHJpbmciIHNlbGVjdD0iQHZhbHVlIi8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4nOworICAgIDwveHNsOmZvci1lYWNoPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBUaGlzIHBhZ2UgaXMgY3JlYXRlZCBmb3IgZXZlcnkgcGFja2FnZS4KKyAgICBJdCBwcmludHMgdGhlIG5hbWUgb2YgYWxsIGNsYXNzZXMgdGhhdCBiZWxvbmdzIHRvIHRoaXMgcGFja2FnZS4KKyAgICBAcGFyYW0gbmFtZSB0aGUgcGFja2FnZSBuYW1lIHRvIHByaW50IGNsYXNzZXMuCisgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Cis8IS0tIGxpc3Qgb2YgY2xhc3NlcyBpbiBhIHBhY2thZ2UgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9ImNsYXNzZXMubGlzdCI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJuYW1lIi8+CisgICAgPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgICAgPHRpdGxlPlVuaXQgVGVzdCBDbGFzc2VzOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG5hbWUiLz48L3RpdGxlPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiIHNlbGVjdD0iJG5hbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxoMj48YSBocmVmPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG5hbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IiRuYW1lID0gJyciPiZsdDtub25lJmd0OzwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9hPjwvaDI+CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisKKyAgICAgICAgICAgIDxoMj5DbGFzc2VzPC9oMj4KKyAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii90ZXN0c3VpdGVzL3Rlc3RzdWl0ZVsuL0BwYWNrYWdlID0gJG5hbWVdIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7QGlkfV97QG5hbWV9Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIDwvYm9keT4KKyAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tCisgICAgQ3JlYXRlcyBhbiBhbGwtY2xhc3Nlcy5odG1sIGZpbGUgdGhhdCBjb250YWlucyBhIGxpbmsgdG8gYWxsIHBhY2thZ2Utc3VtbWFyeS5odG1sCisgICAgb24gZWFjaCBjbGFzcy4KKy0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVzdHN1aXRlcyIgbW9kZT0iYWxsLmNsYXNzZXMiPgorICAgIDxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgIDx0aXRsZT5BbGwgVW5pdCBUZXN0IENsYXNzZXM8L3RpdGxlPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8aDI+Q2xhc3NlczwvaDI+CisgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0idGVzdHN1aXRlIiBtb2RlPSJhbGwuY2xhc3NlcyI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPC9ib2R5PgorICAgIDwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0ZXN0c3VpdGUiIG1vZGU9ImFsbC5jbGFzc2VzIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InBhY2thZ2UubmFtZSIgc2VsZWN0PSJAcGFja2FnZSIvPgorICAgIDx0cj4KKyAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgIDxhIHRhcmdldD0iY2xhc3NGcmFtZSI+CisgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWU9JycpIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJ0cmFuc2xhdGUoJHBhY2thZ2UubmFtZSwnLicsJy8nKSIvPjx4c2w6dGV4dD4vPC94c2w6dGV4dD4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBpZCIvPl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48eHNsOnRleHQ+Lmh0bWw8L3hzbDp0ZXh0PgorICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC90ZD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLQorICAgIENyZWF0ZXMgYW4gaHRtbCBmaWxlIHRoYXQgY29udGFpbnMgYSBsaW5rIHRvIGFsbCBwYWNrYWdlLXN1bW1hcnkuaHRtbCBmaWxlcyBvbgorICAgIGVhY2ggcGFja2FnZSBleGlzdGluZyBvbiB0ZXN0c3VpdGVzLgorICAgIEBidWcgdGhlcmUgd2lsbCBiZSBhIHByb2JsZW0gaGVyZSwgSSBkb24ndCBrbm93IHlldCBob3cgdG8gaGFuZGxlIHVubmFtZWQgcGFja2FnZSA6KAorLS0+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0ZXN0c3VpdGVzIiBtb2RlPSJhbGwucGFja2FnZXMiPgorICAgIDxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgIDx0aXRsZT5BbGwgVW5pdCBUZXN0IFBhY2thZ2VzPC90aXRsZT4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PgorICAgICAgICAgICAgPGgyPjxhIGhyZWY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5Ib21lPC9hPjwvaDI+CisgICAgICAgICAgICA8aDI+UGFja2FnZXM8L2gyPgorICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InRlc3RzdWl0ZVtub3QoLi9AcGFja2FnZSA9IHByZWNlZGluZy1zaWJsaW5nOjp0ZXN0c3VpdGUvQHBhY2thZ2UpXSIgbW9kZT0iYWxsLnBhY2thZ2VzIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQHBhY2thZ2UiLz4KKyAgICAgICAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICA8L2JvZHk+CisgICAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlc3RzdWl0ZSIgbW9kZT0iYWxsLnBhY2thZ2VzIj4KKyAgICA8dHI+CisgICAgICAgIDx0ZCBub3dyYXA9Im5vd3JhcCI+CisgICAgICAgICAgICA8YSBocmVmPSIuL3t0cmFuc2xhdGUoQHBhY2thZ2UsJy4nLCcvJyl9L3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPgorICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcGFja2FnZSIvPgorICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iQHBhY2thZ2UgPSAnJyI+Jmx0O25vbmUmZ3Q7PC94c2w6aWY+CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvdGQ+CisgICAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRlc3RzdWl0ZXMiIG1vZGU9Im92ZXJ2aWV3LnBhY2thZ2VzIj4KKyAgICA8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICA8dGl0bGU+VW5pdCBUZXN0IFJlc3VsdHM6IFN1bW1hcnk8L3RpdGxlPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+CisgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9Im9ubG9hZCI+b3BlbignYWxsY2xhc3Nlcy1mcmFtZS5odG1sJywnY2xhc3NMaXN0RnJhbWUnKTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhZ2VIZWFkZXIiLz4KKyAgICAgICAgPGgyPlN1bW1hcnk8L2gyPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InRlc3RDb3VudCIgc2VsZWN0PSJzdW0odGVzdHN1aXRlL0B0ZXN0cykiLz4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJlcnJvckNvdW50IiBzZWxlY3Q9InN1bSh0ZXN0c3VpdGUvQGVycm9ycykiLz4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmYWlsdXJlQ291bnQiIHNlbGVjdD0ic3VtKHRlc3RzdWl0ZS9AZmFpbHVyZXMpIi8+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idGltZUNvdW50IiBzZWxlY3Q9InN1bSh0ZXN0c3VpdGUvQHRpbWUpIi8+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ic3VjY2Vzc1JhdGUiIHNlbGVjdD0iKCR0ZXN0Q291bnQgLSAkZmFpbHVyZUNvdW50IC0gJGVycm9yQ291bnQpIGRpdiAkdGVzdENvdW50Ii8+CisgICAgICAgIDx0YWJsZSBjbGFzcz0iZGV0YWlscyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSI5NSUiPgorICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICAgICAgPHRoPlRlc3RzPC90aD4KKyAgICAgICAgICAgIDx0aD5GYWlsdXJlczwvdGg+CisgICAgICAgICAgICA8dGg+RXJyb3JzPC90aD4KKyAgICAgICAgICAgIDx0aD5TdWNjZXNzIHJhdGU8L3RoPgorICAgICAgICAgICAgPHRoPlRpbWU8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGVycm9yQ291bnQgJmd0OyAwIj5FcnJvcjwveHNsOndoZW4+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkZmFpbHVyZUNvdW50ICZndDsgMCI+RmFpbHVyZTwveHNsOndoZW4+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPlBhc3M8L3hzbDpvdGhlcndpc2U+CisgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdGVzdENvdW50Ii8+PC90ZD4KKyAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGZhaWx1cmVDb3VudCIvPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlcnJvckNvdW50Ii8+PC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS1wZXJjZW50Ij4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InZhbHVlIiBzZWxlY3Q9IiRzdWNjZXNzUmF0ZSIvPgorICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXRpbWUiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iJHRpbWVDb3VudCIvPgorICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI5NSUiPgorICAgICAgICA8dHI+CisgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsiPgorICAgICAgICBOb3RlOiA8ZW0+ZmFpbHVyZXM8L2VtPiBhcmUgYW50aWNpcGF0ZWQgYW5kIGNoZWNrZWQgZm9yIHdpdGggYXNzZXJ0aW9ucyB3aGlsZSA8ZW0+ZXJyb3JzPC9lbT4gYXJlIHVuYW50aWNpcGF0ZWQuCisgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisKKyAgICAgICAgPGgyPlBhY2thZ2VzPC9oMj4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJkZXRhaWxzIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9Ijk1JSI+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0idGVzdHN1aXRlLnRlc3QuaGVhZGVyIi8+CisgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0idGVzdHN1aXRlW25vdCguL0BwYWNrYWdlID0gcHJlY2VkaW5nLXNpYmxpbmc6OnRlc3RzdWl0ZS9AcGFja2FnZSldIj4KKyAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAcGFja2FnZSIgb3JkZXI9ImFzY2VuZGluZyIvPgorICAgICAgICAgICAgICAgIDwhLS0gZ2V0IHRoZSBub2RlIHNldCBjb250YWluaW5nIGFsbCB0ZXN0c3VpdGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBwYWNrYWdlIC0tPgorICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iaW5zYW1lcGFja2FnZSIgc2VsZWN0PSIvdGVzdHN1aXRlcy90ZXN0c3VpdGVbLi9AcGFja2FnZSA9IGN1cnJlbnQoKS9AcGFja2FnZV0iLz4KKyAgICAgICAgICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXkgYSBmYWlsdXJlIGlmIHRoZXJlIGlzIGFueSBmYWlsdXJlL2Vycm9yIGluIHRoZSBwYWNrYWdlIC0tPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0ic3VtKCRpbnNhbWVwYWNrYWdlL0BlcnJvcnMpICZndDsgMCI+RXJyb3I8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJzdW0oJGluc2FtZXBhY2thZ2UvQGZhaWx1cmVzKSAmZ3Q7IDAiPkZhaWx1cmU8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPlBhc3M8L3hzbDpvdGhlcndpc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9Ii4ve3RyYW5zbGF0ZShAcGFja2FnZSwnLicsJy8nKX0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBwYWNrYWdlIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBwYWNrYWdlID0gJyciPiZsdDtub25lJmd0OzwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICA8L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdW0oJGluc2FtZXBhY2thZ2UvQHRlc3RzKSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3VtKCRpbnNhbWVwYWNrYWdlL0BlcnJvcnMpIi8+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdW0oJGluc2FtZXBhY2thZ2UvQGZhaWx1cmVzKSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdGltZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0ic3VtKCRpbnNhbWVwYWNrYWdlL0B0aW1lKSIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPC9ib2R5PgorICAgICAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhY2thZ2Uuc3VtbWFyeSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJuYW1lIi8+CisgICAgPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiIHNlbGVjdD0iJG5hbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJvbmxvYWQiPm9wZW4oJ3BhY2thZ2UtZnJhbWUuaHRtbCcsJ2NsYXNzTGlzdEZyYW1lJyk8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciIvPgorICAgICAgICAgICAgPGgzPlBhY2thZ2UgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRuYW1lIi8+PC9oMz4KKworICAgICAgICAgICAgPCEtLXRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIyIiB3aWR0aD0iOTUlIj4KKyAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2xhc3MubWV0cmljcy5oZWFkZXIiLz4KKyAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByaW50Lm1ldHJpY3MiLz4KKyAgICAgICAgICAgIDwvdGFibGUtLT4KKworICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpbnNhbWVwYWNrYWdlIiBzZWxlY3Q9Ii90ZXN0c3VpdGVzL3Rlc3RzdWl0ZVsuL0BwYWNrYWdlID0gJG5hbWVdIi8+CisgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KCRpbnNhbWVwYWNrYWdlKSAmZ3Q7IDAiPgorICAgICAgICAgICAgICAgIDxoMj5DbGFzc2VzPC9oMj4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImRldGFpbHMiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIyIiB3aWR0aD0iOTUlIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InRlc3RzdWl0ZS50ZXN0LmhlYWRlciIvPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRpbnNhbWVwYWNrYWdlIiBtb2RlPSJwcmludC50ZXN0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICA8L2JvZHk+CisgICAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLQorICAgIHRyYW5zZm9ybSBzdHJpbmcgbGlrZSBhLmIuYyB0byAuLi8uLi8uLi8KKyAgICBAcGFyYW0gcGF0aCB0aGUgcGF0aCB0byB0cmFuc2Zvcm0gaW50byBhIGRlc2NlbmRpbmcgZGlyZWN0b3J5IHBhdGgKKy0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXRoIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InBhdGgiLz4KKyAgICA8eHNsOmlmIHRlc3Q9ImNvbnRhaW5zKCRwYXRoLCcuJykiPgorICAgICAgICA8eHNsOnRleHQ+Li4vPC94c2w6dGV4dD4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhdGgiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhdGgiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoJHBhdGgsJy4nKSIvPjwveHNsOndpdGgtcGFyYW0+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDppZiB0ZXN0PSJub3QoY29udGFpbnMoJHBhdGgsJy4nKSkgYW5kIG5vdCgkcGF0aCA9ICcnKSI+CisgICAgICAgIDx4c2w6dGV4dD4uLi88L3hzbDp0ZXh0PgorICAgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLSBjcmVhdGUgdGhlIGxpbmsgdG8gdGhlIHN0eWxlc2hlZXQgYmFzZWQgb24gdGhlIHBhY2thZ2UgbmFtZSAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iU3R5bGUiPjx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPjx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWUgPSAndW5uYW1lZCBwYWNrYWdlJykiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXRoIj48eHNsOndpdGgtcGFyYW0gbmFtZT0icGF0aCIgc2VsZWN0PSIkcGFja2FnZS5uYW1lIi8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3hzbDppZj5zdHlsZXNoZWV0LmNzczwveHNsOmF0dHJpYnV0ZT48L2xpbms+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIFBhZ2UgSEVBREVSIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIj4KKyAgICA8aDE+VW5pdCBUZXN0IFJlc3VsdHM8L2gxPgorICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+CisgICAgPHRyPgorICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjwvdGQ+CisgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPkRlc2lnbmVkIGZvciB1c2Ugd2l0aCA8YSBocmVmPSJodHRwOi8vd3d3Lmp1bml0Lm9yZy8iPkpVbml0PC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy8iPkFudDwvYT4uPC90ZD4KKyAgICA8L3RyPgorICAgIDwvdGFibGU+CisgICAgPGhyIHNpemU9IjEiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIGNsYXNzIGhlYWRlciAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0idGVzdHN1aXRlLnRlc3QuaGVhZGVyIj4KKyAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICA8dGggd2lkdGg9IjgwJSI+TmFtZTwvdGg+CisgICAgICAgIDx0aD5UZXN0czwvdGg+CisgICAgICAgIDx0aD5FcnJvcnM8L3RoPgorICAgICAgICA8dGg+RmFpbHVyZXM8L3RoPgorICAgICAgICA8dGggbm93cmFwPSJub3dyYXAiPlRpbWUocyk8L3RoPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBtZXRob2QgaGVhZGVyIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJ0ZXN0Y2FzZS50ZXN0LmhlYWRlciI+CisgICAgPHRyIHZhbGlnbj0idG9wIj4KKyAgICAgICAgPHRoPk5hbWU8L3RoPgorICAgICAgICA8dGg+U3RhdHVzPC90aD4KKyAgICAgICAgPHRoIHdpZHRoPSI4MCUiPlR5cGU8L3RoPgorICAgICAgICA8dGggbm93cmFwPSJub3dyYXAiPlRpbWUocyk8L3RoPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIGNsYXNzIGluZm9ybWF0aW9uIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVzdHN1aXRlIiBtb2RlPSJwcmludC50ZXN0Ij4KKyAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iQGVycm9yc1suJmd0OyAwXSI+RXJyb3I8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAZmFpbHVyZXNbLiZndDsgMF0iPkZhaWx1cmU8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPlBhc3M8L3hzbDpvdGhlcndpc2U+CisgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgPHRkPjxhIGhyZWY9IntAaWR9X3tAbmFtZX0uaHRtbCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPjwvdGQ+CisgICAgICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkB0ZXN0cyIvPjwvdGQ+CisgICAgICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBlcnJvcnMiLz48L3RkPgorICAgICAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAZmFpbHVyZXMiLz48L3RkPgorICAgICAgICA8dGQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdGltZSI+CisgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InZhbHVlIiBzZWxlY3Q9IkB0aW1lIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVzdGNhc2UiIG1vZGU9InByaW50LnRlc3QiPgorICAgIDx0ciB2YWxpZ249InRvcCI+CisgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJlcnJvciI+RXJyb3I8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmYWlsdXJlIj5GYWlsdXJlPC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT5UYWJsZVJvd0NvbG9yPC94c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L3RkPgorICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmYWlsdXJlIj4KKyAgICAgICAgICAgICAgICA8dGQ+RmFpbHVyZTwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZmFpbHVyZSIvPjwvdGQ+CisgICAgICAgICAgICA8L3hzbDp3aGVuPgorICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImVycm9yIj4KKyAgICAgICAgICAgICAgICA8dGQ+RXJyb3I8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImVycm9yIi8+PC90ZD4KKyAgICAgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgICAgICA8dGQ+U3VjY2VzczwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgICAgIDwveHNsOmNob29zZT4KKyAgICAgICAgPHRkPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdGltZSI+CisgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InZhbHVlIiBzZWxlY3Q9IkB0aW1lIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIE5vdGUgOiB0aGUgYmVsb3cgdGVtcGxhdGUgZXJyb3IgYW5kIGZhaWx1cmUgYXJlIHRoZSBzYW1lIHN0eWxlCisgICAgICAgICAgICBzbyBqdXN0IGNhbGwgdGhlIHNhbWUgc3R5bGUgc3RvcmUgaW4gdGhlIHRvb2xraXQgdGVtcGxhdGUgLS0+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJmYWlsdXJlIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS1mYWlsdXJlcyIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVycm9yIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS1mYWlsdXJlcyIvPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gU3R5bGUgZm9yIHRoZSBlcnJvciBhbmQgZmFpbHVyZSBpbiB0aGUgdGVzdGNhc2UgdGVtcGxhdGUgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9ImRpc3BsYXktZmFpbHVyZXMiPgorICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0ibm90KEBtZXNzYWdlKSI+Ti9BPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG1lc3NhZ2UiLz4KKyAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgorICAgIDwveHNsOmNob29zZT4KKyAgICA8IS0tIGRpc3BsYXkgdGhlIHN0YWNrdHJhY2UgLS0+CisgICAgPGJyLz48YnIvPgorICAgIDxjb2RlPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYnItcmVwbGFjZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0id29yZCIgc2VsZWN0PSIuIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9jb2RlPgorICAgIDwhLS0gdGhlIGxhdHRlciBpcyBiZXR0ZXIgYnV0IG1pZ2h0IGJlIHByb2JsZW1hdGljIGZvciBub24tMjEiIG1vbml0b3JzLi4uIC0tPgorICAgIDwhLS1wcmU+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3ByZS0tPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iSlMtZXNjYXBlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InN0cmluZyIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idG1wMSIgc2VsZWN0PSJzdHJpbmd1dGlsczpyZXBsYWNlKHN0cmluZygkc3RyaW5nKSwnXCcsJ1xcJykiLz4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InRtcDIiIHNlbGVjdD0ic3RyaW5ndXRpbHM6cmVwbGFjZShzdHJpbmcoJHRtcDEpLCZxdW90OycmcXVvdDssJnF1b3Q7XCZhcG9zOyZxdW90OykiLz4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHRtcDIiLz4KKzwveHNsOnRlbXBsYXRlPgorCisKKzwhLS0KKyAgICB0ZW1wbGF0ZSB0aGF0IHdpbGwgY29udmVydCBhIGNhcnJpYWdlIHJldHVybiBpbnRvIGEgYnIgdGFnCisgICAgQHBhcmFtIHdvcmQgdGhlIHRleHQgZnJvbSB3aGljaCB0byBjb252ZXJ0IENSIHRvIEJSIHRhZworLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9ImJyLXJlcGxhY2UiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0id29yZCIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0iYnIiPjxici8+PC94c2w6cGFyYW0+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9J3N0cmluZ3V0aWxzOnJlcGxhY2Uoc3RyaW5nKCR3b3JkKSwiJiN4QTsiLCRiciknLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdGltZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJ2YWx1ZSIvPgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJmb3JtYXQtbnVtYmVyKCR2YWx1ZSwnMC4wMDAnKSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGlzcGxheS1wZXJjZW50Ij4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InZhbHVlIi8+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImZvcm1hdC1udW1iZXIoJHZhbHVlLCcwLjAwJScpIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CisKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvanVuaXQtbm9mcmFtZXMueHNsIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2V0Yy9qdW5pdC1ub2ZyYW1lcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0ODdmOAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvanVuaXQtbm9mcmFtZXMueHNsCkBAIC0wLDAgKzEsNDYxIEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCIKKwl4bWxuczpseHNsdD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiCisJeG1sbnM6c3RyaW5ndXRpbHM9InhhbGFuOi8vb3JnLmFwYWNoZS50b29scy5hbnQudXRpbC5TdHJpbmdVdGlscyI+Cis8eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiIGluZGVudD0ieWVzIiBlbmNvZGluZz0iVVMtQVNDSUkiCisgIGRvY3R5cGUtcHVibGljPSItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgLz4KKzx4c2w6ZGVjaW1hbC1mb3JtYXQgZGVjaW1hbC1zZXBhcmF0b3I9Ii4iIGdyb3VwaW5nLXNlcGFyYXRvcj0iLCIgLz4KKzwhLS0KKyAgIENvcHlyaWdodCAyMDAxLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisgCis8IS0tCisgCisgU2FtcGxlIHN0eWxlc2hlZXQgdG8gYmUgdXNlZCB3aXRoIEFudCBKVW5pdFJlcG9ydCBvdXRwdXQuCisgCisgSXQgY3JlYXRlcyBhIG5vbi1mcmFtZWQgcmVwb3J0IHRoYXQgY2FuIGJlIHVzZWZ1bCB0byBzZW5kIHZpYQorIGUtbWFpbCBvciBzdWNoLgorIAorIEBhdXRob3IgU3RlcGhhbmUgQmFpbGxpZXogPGEgaHJlZj0ibWFpbHRvOnNiYWlsbGllekBhcGFjaGUub3JnIi8+CisgQGF1dGhvciBFcmlrIEhhdGNoZXIgPGEgaHJlZj0ibWFpbHRvOmVoYXRjaGVyQGFwYWNoZS5vcmciLz4KKyAKKy0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVzdHN1aXRlcyI+CisgICAgPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgICAgPHRpdGxlPlVuaXQgVGVzdCBSZXN1bHRzPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAgYm9keSB7CisgICAgICAgIGZvbnQ6bm9ybWFsIDY4JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYTsKKyAgICAgICAgY29sb3I6IzAwMDAwMDsKKyAgICAgIH0KKyAgICAgIHRhYmxlIHRyIHRkLCB0YWJsZSB0ciB0aCB7CisgICAgICAgICAgZm9udC1zaXplOiA2OCU7CisgICAgICB9CisgICAgICB0YWJsZS5kZXRhaWxzIHRyIHRoeworICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgdGV4dC1hbGlnbjpsZWZ0OworICAgICAgICBiYWNrZ3JvdW5kOiNhNmNhZjA7CisgICAgICB9CisgICAgICB0YWJsZS5kZXRhaWxzIHRyIHRkeworICAgICAgICBiYWNrZ3JvdW5kOiNlZWVlZTA7CisgICAgICB9CisgICAgICAKKyAgICAgIHAgeworICAgICAgICBsaW5lLWhlaWdodDoxLjVlbTsKKyAgICAgICAgbWFyZ2luLXRvcDowLjVlbTsgbWFyZ2luLWJvdHRvbToxLjBlbTsKKyAgICAgIH0KKyAgICAgIGgxIHsKKyAgICAgICAgbWFyZ2luOiAwcHggMHB4IDVweDsgZm9udDogMTY1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgICAgfQorICAgICAgaDIgeworICAgICAgICBtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDAuNWVtOyBmb250OiBib2xkIDEyNSUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2EKKyAgICAgIH0KKyAgICAgIGgzIHsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTE1JSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgICAgfQorICAgICAgaDQgeworICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsgZm9udDogYm9sZCAxMDAlIHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhCisgICAgICB9CisgICAgICBoNSB7CisgICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOyBmb250OiBib2xkIDEwMCUgdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2EKKyAgICAgIH0KKyAgICAgIGg2IHsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IGZvbnQ6IGJvbGQgMTAwJSB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYQorICAgICAgfQorICAgICAgLkVycm9yIHsKKyAgICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6cmVkOworICAgICAgfQorICAgICAgLkZhaWx1cmUgeworICAgICAgICBmb250LXdlaWdodDpib2xkOyBjb2xvcjpwdXJwbGU7CisgICAgICB9CisgICAgICAuUHJvcGVydGllcyB7CisgICAgICAgIHRleHQtYWxpZ246cmlnaHQ7CisgICAgICB9CisgICAgICA8L3N0eWxlPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKyAgICAgICAgdmFyIFRlc3RDYXNlcyA9IG5ldyBBcnJheSgpOworICAgICAgICB2YXIgY3VyOworICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iLi90ZXN0c3VpdGUiPiAgICAgIAorICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwcm9wZXJ0aWVzIi8+CisgICAgICAgIDwveHNsOmZvci1lYWNoPgorCisgICAgICAgPC9zY3JpcHQ+CisgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24gZGlzcGxheVByb3BlcnRpZXMgKG5hbWUpIHsKKyAgICAgICAgICB2YXIgd2luID0gd2luZG93Lm9wZW4oJycsJ0pVbml0U3lzdGVtUHJvcGVydGllcycsJ3Njcm9sbGJhcnM9MSxyZXNpemFibGU9MScpOworICAgICAgICAgIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQub3BlbigpOworICAgICAgICAgIGRvYy53cml0ZSgiPGh0bWw+PGhlYWQ+PHRpdGxlPlByb3BlcnRpZXMgb2YgIiArIG5hbWUgKyAiPC90aXRsZT4iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjxzdHlsZT4iKQorICAgICAgICAgIGRvYy53cml0ZSgiYm9keSB7Zm9udDpub3JtYWwgNjglIHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhOyBjb2xvcjojMDAwMDAwOyB9Iik7CisgICAgICAgICAgZG9jLndyaXRlKCJ0YWJsZSB0ciB0ZCwgdGFibGUgdHIgdGggeyBmb250LXNpemU6IDY4JTsgfSIpOworICAgICAgICAgIGRvYy53cml0ZSgidGFibGUucHJvcGVydGllcyB7IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsgYm9yZGVyLWxlZnQ6c29saWQgMSAjY2NjY2NjOyBib3JkZXItdG9wOnNvbGlkIDEgI2NjY2NjYzsgcGFkZGluZzo1cHg7IH0iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoInRhYmxlLnByb3BlcnRpZXMgdGggeyB0ZXh0LWFsaWduOmxlZnQ7IGJvcmRlci1yaWdodDpzb2xpZCAxICNjY2NjY2M7IGJvcmRlci1ib3R0b206c29saWQgMSAjY2NjY2NjOyBiYWNrZ3JvdW5kLWNvbG9yOiNlZWVlZWU7IH0iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoInRhYmxlLnByb3BlcnRpZXMgdGQgeyBmb250Om5vcm1hbDsgdGV4dC1hbGlnbjpsZWZ0OyBib3JkZXItcmlnaHQ6c29saWQgMSAjY2NjY2NjOyBib3JkZXItYm90dG9tOnNvbGlkIDEgI2NjY2NjYzsgYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZjsgfSIpOworICAgICAgICAgIGRvYy53cml0ZSgiaDMgeyBtYXJnaW4tYm90dG9tOiAwLjVlbTsgZm9udDogYm9sZCAxMTUlIHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhIH0iKTsKKyAgICAgICAgICBkb2Mud3JpdGUoIjwvc3R5bGU+Iik7CisgICAgICAgICAgZG9jLndyaXRlKCI8L2hlYWQ+PGJvZHk+Iik7CisgICAgICAgICAgZG9jLndyaXRlKCI8aDM+UHJvcGVydGllcyBvZiAiICsgbmFtZSArICI8L2gzPiIpOworICAgICAgICAgIGRvYy53cml0ZSgiPGRpdiBhbGlnbj1cInJpZ2h0XCI+PGEgaHJlZj1cImphdmFzY3JpcHQ6d2luZG93LmNsb3NlKCk7XCI+Q2xvc2U8L2E+PC9kaXY+Iik7CisgICAgICAgICAgZG9jLndyaXRlKCI8dGFibGUgY2xhc3M9J3Byb3BlcnRpZXMnPiIpOworICAgICAgICAgIGRvYy53cml0ZSgiPHRyPjx0aD5OYW1lPC90aD48dGg+VmFsdWU8L3RoPjwvdHI+Iik7CisgICAgICAgICAgZm9yIChwcm9wIGluIFRlc3RDYXNlc1tuYW1lXSkgeworICAgICAgICAgICAgZG9jLndyaXRlKCI8dHI+PHRoPiIgKyBwcm9wICsgIjwvdGg+PHRkPiIgKyBUZXN0Q2FzZXNbbmFtZV1bcHJvcF0gKyAiPC90ZD48L3RyPiIpOworICAgICAgICAgIH0KKyAgICAgICAgICBkb2Mud3JpdGUoIjwvdGFibGU+Iik7CisgICAgICAgICAgZG9jLndyaXRlKCI8L2JvZHk+PC9odG1sPiIpOworICAgICAgICAgIGRvYy5jbG9zZSgpOworICAgICAgICAgIHdpbi5mb2N1cygpOworICAgICAgICB9CisgICAgICBdXT4gIAorICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8YSBuYW1lPSJ0b3AiPjwvYT4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIi8+ICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgPCEtLSBTdW1tYXJ5IHBhcnQgLS0+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3VtbWFyeSIvPgorICAgICAgICAgICAgPGhyIHNpemU9IjEiIHdpZHRoPSI5NSUiIGFsaWduPSJsZWZ0Ii8+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDwhLS0gUGFja2FnZSBMaXN0IHBhcnQgLS0+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFja2FnZWxpc3QiLz4KKyAgICAgICAgICAgIDxociBzaXplPSIxIiB3aWR0aD0iOTUlIiBhbGlnbj0ibGVmdCIvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8IS0tIEZvciBlYWNoIHBhY2thZ2UgY3JlYXRlIGl0cyBwYXJ0IC0tPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhY2thZ2VzIi8+CisgICAgICAgICAgICA8aHIgc2l6ZT0iMSIgd2lkdGg9Ijk1JSIgYWxpZ249ImxlZnQiLz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPCEtLSBGb3IgZWFjaCBjbGFzcyBjcmVhdGUgdGhlICBwYXJ0IC0tPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNsYXNzZXMiLz4KKyAgICAgICAgICAgIAorICAgICAgICA8L2JvZHk+CisgICAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisgICAgCisgICAgCisgICAgCisgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisgICAgPCEtLSBXcml0ZSBhIGxpc3Qgb2YgYWxsIHBhY2thZ2VzIHdpdGggYW4gaHlwZXJsaW5rIHRvIHRoZSBhbmNob3Igb2YgICAgLS0+CisgICAgPCEtLSBvZiB0aGUgcGFja2FnZSBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisgICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYWNrYWdlbGlzdCI+ICAgCisgICAgICAgIDxoMj5QYWNrYWdlczwvaDI+CisgICAgICAgIE5vdGU6IHBhY2thZ2Ugc3RhdGlzdGljcyBhcmUgbm90IGNvbXB1dGVkIHJlY3Vyc2l2ZWx5LCB0aGV5IG9ubHkgc3VtIHVwIGFsbCBvZiBpdHMgdGVzdHN1aXRlcyBudW1iZXJzLgorICAgICAgICA8dGFibGUgY2xhc3M9ImRldGFpbHMiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIyIiB3aWR0aD0iOTUlIj4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ0ZXN0c3VpdGUudGVzdC5oZWFkZXIiLz4KKyAgICAgICAgICAgIDwhLS0gbGlzdCBhbGwgcGFja2FnZXMgcmVjdXJzaXZlbHkgLS0+CisgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iLi90ZXN0c3VpdGVbbm90KC4vQHBhY2thZ2UgPSBwcmVjZWRpbmctc2libGluZzo6dGVzdHN1aXRlL0BwYWNrYWdlKV0iPgorICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBwYWNrYWdlIi8+CisgICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ0ZXN0c3VpdGVzLWluLXBhY2thZ2UiIHNlbGVjdD0iL3Rlc3RzdWl0ZXMvdGVzdHN1aXRlWy4vQHBhY2thZ2UgPSBjdXJyZW50KCkvQHBhY2thZ2VdIi8+CisgICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ0ZXN0Q291bnQiIHNlbGVjdD0ic3VtKCR0ZXN0c3VpdGVzLWluLXBhY2thZ2UvQHRlc3RzKSIvPgorICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZXJyb3JDb3VudCIgc2VsZWN0PSJzdW0oJHRlc3RzdWl0ZXMtaW4tcGFja2FnZS9AZXJyb3JzKSIvPgorICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZmFpbHVyZUNvdW50IiBzZWxlY3Q9InN1bSgkdGVzdHN1aXRlcy1pbi1wYWNrYWdlL0BmYWlsdXJlcykiLz4KKyAgICAgICAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InRpbWVDb3VudCIgc2VsZWN0PSJzdW0oJHRlc3RzdWl0ZXMtaW4tcGFja2FnZS9AdGltZSkiLz4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8IS0tIHdyaXRlIGEgc3VtbWFyeSBmb3IgdGhlIHBhY2thZ2UgLS0+CisgICAgICAgICAgICAgICAgPHRyIHZhbGlnbj0idG9wIj4KKyAgICAgICAgICAgICAgICAgICAgPCEtLSBzZXQgYSBuaWNlIGNvbG9yIGRlcGVuZGluZyBpZiB0aGVyZSBpcyBhbiBlcnJvci9mYWlsdXJlIC0tPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGZhaWx1cmVDb3VudCAmZ3Q7IDAiPkZhaWx1cmU8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkZXJyb3JDb3VudCAmZ3Q7IDAiPkVycm9yPC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0iI3tAcGFja2FnZX0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcGFja2FnZSIvPjwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiR0ZXN0Q291bnQiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlcnJvckNvdW50Ii8+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZmFpbHVyZUNvdW50Ii8+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS10aW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ2YWx1ZSIgc2VsZWN0PSIkdGltZUNvdW50Ii8+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICA8L3RhYmxlPiAgICAgICAgCisgICAgPC94c2w6dGVtcGxhdGU+CisgICAgCisgICAgCisgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisgICAgPCEtLSBXcml0ZSBhIHBhY2thZ2UgbGV2ZWwgcmVwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisgICAgPCEtLSBJdCBjcmVhdGVzIGEgdGFibGUgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgZG9jdW1lbnQ6ICAgICAgICAgICAgICAgICAgLS0+CisgICAgPCEtLSBOYW1lIHwgVGVzdHMgfCBFcnJvcnMgfCBGYWlsdXJlcyB8IFRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisgICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYWNrYWdlcyI+CisgICAgICAgIDwhLS0gY3JlYXRlIGFuIGFuY2hvciB0byB0aGlzIHBhY2thZ2UgbmFtZSAtLT4KKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii90ZXN0c3VpdGVzL3Rlc3RzdWl0ZVtub3QoLi9AcGFja2FnZSA9IHByZWNlZGluZy1zaWJsaW5nOjp0ZXN0c3VpdGUvQHBhY2thZ2UpXSI+CisgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAcGFja2FnZSIvPgorICAgICAgICAgICAgICAgIDxhIG5hbWU9IntAcGFja2FnZX0iPjwvYT4KKyAgICAgICAgICAgICAgICA8aDM+UGFja2FnZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHBhY2thZ2UiLz48L2gzPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZGV0YWlscyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSI5NSUiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0idGVzdHN1aXRlLnRlc3QuaGVhZGVyIi8+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPCEtLSBtYXRjaCB0aGUgdGVzdHN1aXRlcyBvZiB0aGlzIHBhY2thZ2UgLS0+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iL3Rlc3RzdWl0ZXMvdGVzdHN1aXRlWy4vQHBhY2thZ2UgPSBjdXJyZW50KCkvQHBhY2thZ2VdIiBtb2RlPSJwcmludC50ZXN0Ii8+CisgICAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KKyAgICAgICAgICAgICAgICA8cC8+CisgICAgICAgICAgICAgICAgPHAvPgorICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICA8L3hzbDp0ZW1wbGF0ZT4KKyAgICAKKyAgICA8eHNsOnRlbXBsYXRlIG5hbWU9ImNsYXNzZXMiPgorICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0idGVzdHN1aXRlIj4KKyAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgICA8IS0tIGNyZWF0ZSBhbiBhbmNob3IgdG8gdGhpcyBjbGFzcyBuYW1lIC0tPgorICAgICAgICAgICAgPGEgbmFtZT0ie0BuYW1lfSI+PC9hPgorICAgICAgICAgICAgPGgzPlRlc3RDYXNlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvaDM+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZGV0YWlscyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSI5NSUiPgorICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0idGVzdGNhc2UudGVzdC5oZWFkZXIiLz4KKyAgICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgICB0ZXN0IGNhbiBldmVuIG5vdCBiZSBzdGFydGVkIGF0IGFsbCAoZmFpbHVyZSB0byBsb2FkIHRoZSBjbGFzcykKKyAgICAgICAgICAgICAgc28gcmVwb3J0IHRoZSBlcnJvciBkaXJlY3RseQorICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9Ii4vZXJyb3IiPgorICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkVycm9yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI0Ij48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZXJyb3IiLz48L3RkPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi90ZXN0Y2FzZSIgbW9kZT0icHJpbnQudGVzdCIvPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9IlByb3BlcnRpZXMiPgorICAgICAgICAgICAgICAgIDxhPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj5qYXZhc2NyaXB0OmRpc3BsYXlQcm9wZXJ0aWVzKCc8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHBhY2thZ2UiLz4uPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Jyk7PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzICYjMTg3OworICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHAvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KKyAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgPC94c2w6dGVtcGxhdGU+CisgICAgCisgICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzdW1tYXJ5Ij4KKyAgICAgICAgPGgyPlN1bW1hcnk8L2gyPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InRlc3RDb3VudCIgc2VsZWN0PSJzdW0odGVzdHN1aXRlL0B0ZXN0cykiLz4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJlcnJvckNvdW50IiBzZWxlY3Q9InN1bSh0ZXN0c3VpdGUvQGVycm9ycykiLz4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmYWlsdXJlQ291bnQiIHNlbGVjdD0ic3VtKHRlc3RzdWl0ZS9AZmFpbHVyZXMpIi8+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idGltZUNvdW50IiBzZWxlY3Q9InN1bSh0ZXN0c3VpdGUvQHRpbWUpIi8+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ic3VjY2Vzc1JhdGUiIHNlbGVjdD0iKCR0ZXN0Q291bnQgLSAkZmFpbHVyZUNvdW50IC0gJGVycm9yQ291bnQpIGRpdiAkdGVzdENvdW50Ii8+CisgICAgICAgIDx0YWJsZSBjbGFzcz0iZGV0YWlscyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSI5NSUiPgorICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICAgICAgPHRoPlRlc3RzPC90aD4KKyAgICAgICAgICAgIDx0aD5GYWlsdXJlczwvdGg+CisgICAgICAgICAgICA8dGg+RXJyb3JzPC90aD4KKyAgICAgICAgICAgIDx0aD5TdWNjZXNzIHJhdGU8L3RoPgorICAgICAgICAgICAgPHRoPlRpbWU8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGZhaWx1cmVDb3VudCAmZ3Q7IDAiPkZhaWx1cmU8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGVycm9yQ291bnQgJmd0OyAwIj5FcnJvcjwveHNsOndoZW4+CisgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdGVzdENvdW50Ii8+PC90ZD4KKyAgICAgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGZhaWx1cmVDb3VudCIvPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlcnJvckNvdW50Ii8+PC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS1wZXJjZW50Ij4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InZhbHVlIiBzZWxlY3Q9IiRzdWNjZXNzUmF0ZSIvPgorICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXRpbWUiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iJHRpbWVDb3VudCIvPgorICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI5NSUiPgorICAgICAgICA8dHI+CisgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsiPgorICAgICAgICBOb3RlOiA8aT5mYWlsdXJlczwvaT4gYXJlIGFudGljaXBhdGVkIGFuZCBjaGVja2VkIGZvciB3aXRoIGFzc2VydGlvbnMgd2hpbGUgPGk+ZXJyb3JzPC9pPiBhcmUgdW5hbnRpY2lwYXRlZC4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICA8L3hzbDp0ZW1wbGF0ZT4KKyAgICAKKyAgPCEtLQorICAgV3JpdGUgcHJvcGVydGllcyBpbnRvIGEgSmF2YVNjcmlwdCBkYXRhIHN0cnVjdHVyZS4KKyAgIFRoaXMgaXMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGlkZWEgYnkgRXJpayBIYXRjaGVyIChlaGF0Y2hlckBhcGFjaGUub3JnKQorICAgLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InByb3BlcnRpZXMiPgorICAgIGN1ciA9IFRlc3RDYXNlc1snPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4uL0BwYWNrYWdlIi8+Ljx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi9AbmFtZSIvPiddID0gbmV3IEFycmF5KCk7CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9InByb3BlcnR5Ij4KKyAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICBjdXJbJzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPiddID0gJzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJKUy1lc2NhcGUiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHJpbmciIHNlbGVjdD0iQHZhbHVlIi8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4nOworICAgIDwveHNsOmZvci1lYWNoPgorICA8L3hzbDp0ZW1wbGF0ZT4KKyAgICAKKzwhLS0gUGFnZSBIRUFERVIgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9InBhZ2VIZWFkZXIiPgorICAgIDxoMT5Vbml0IFRlc3QgUmVzdWx0czwvaDE+CisgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICA8dHI+CisgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKyAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+RGVzaWduZWQgZm9yIHVzZSB3aXRoIDxhIGhyZWY9J2h0dHA6Ly93d3cuanVuaXQub3JnJz5KVW5pdDwvYT4gYW5kIDxhIGhyZWY9J2h0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvYW50Jz5BbnQ8L2E+LjwvdGQ+CisgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICAgIDxociBzaXplPSIxIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVzdHN1aXRlIiBtb2RlPSJoZWFkZXIiPgorICAgIDx0ciB2YWxpZ249InRvcCI+CisgICAgICAgIDx0aCB3aWR0aD0iODAlIj5OYW1lPC90aD4KKyAgICAgICAgPHRoPlRlc3RzPC90aD4KKyAgICAgICAgPHRoPkVycm9yczwvdGg+CisgICAgICAgIDx0aD5GYWlsdXJlczwvdGg+CisgICAgICAgIDx0aCBub3dyYXA9Im5vd3JhcCI+VGltZShzKTwvdGg+CisgICAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIGNsYXNzIGhlYWRlciAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0idGVzdHN1aXRlLnRlc3QuaGVhZGVyIj4KKyAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICA8dGggd2lkdGg9IjgwJSI+TmFtZTwvdGg+CisgICAgICAgIDx0aD5UZXN0czwvdGg+CisgICAgICAgIDx0aD5FcnJvcnM8L3RoPgorICAgICAgICA8dGg+RmFpbHVyZXM8L3RoPgorICAgICAgICA8dGggbm93cmFwPSJub3dyYXAiPlRpbWUocyk8L3RoPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBtZXRob2QgaGVhZGVyIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJ0ZXN0Y2FzZS50ZXN0LmhlYWRlciI+CisgICAgPHRyIHZhbGlnbj0idG9wIj4KKyAgICAgICAgPHRoPk5hbWU8L3RoPgorICAgICAgICA8dGg+U3RhdHVzPC90aD4KKyAgICAgICAgPHRoIHdpZHRoPSI4MCUiPlR5cGU8L3RoPgorICAgICAgICA8dGggbm93cmFwPSJub3dyYXAiPlRpbWUocyk8L3RoPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIGNsYXNzIGluZm9ybWF0aW9uIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGVzdHN1aXRlIiBtb2RlPSJwcmludC50ZXN0Ij4KKyAgICA8dHIgdmFsaWduPSJ0b3AiPgorICAgICAgICA8IS0tIHNldCBhIG5pY2UgY29sb3IgZGVwZW5kaW5nIGlmIHRoZXJlIGlzIGFuIGVycm9yL2ZhaWx1cmUgLS0+CisgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAZmFpbHVyZXNbLiZndDsgMF0iPkZhaWx1cmU8L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAZXJyb3JzWy4mZ3Q7IDBdIj5FcnJvcjwveHNsOndoZW4+CisgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAKKyAgICAgICAgPCEtLSBwcmludCB0ZXN0c3VpdGUgaW5mb3JtYXRpb24gLS0+CisgICAgICAgIDx0ZD48YSBocmVmPSIje0BuYW1lfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPjwvdGQ+CisgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHRlc3RzIi8+PC90ZD4KKyAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZXJyb3JzIi8+PC90ZD4KKyAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZmFpbHVyZXMiLz48L3RkPgorICAgICAgICA8dGQ+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS10aW1lIj4KKyAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iQHRpbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvdGQ+CisgICAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0ZXN0Y2FzZSIgbW9kZT0icHJpbnQudGVzdCI+CisgICAgPHRyIHZhbGlnbj0idG9wIj4KKyAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZhaWx1cmUgfCBlcnJvciI+RXJyb3I8L3hzbDp3aGVuPgorICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L3RkPgorICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmYWlsdXJlIj4KKyAgICAgICAgICAgICAgICA8dGQ+RmFpbHVyZTwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZmFpbHVyZSIvPjwvdGQ+CisgICAgICAgICAgICA8L3hzbDp3aGVuPgorICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImVycm9yIj4KKyAgICAgICAgICAgICAgICA8dGQ+RXJyb3I8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImVycm9yIi8+PC90ZD4KKyAgICAgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgICAgICA8dGQ+U3VjY2VzczwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgICAgIDwveHNsOmNob29zZT4KKyAgICAgICAgPHRkPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdGltZSI+CisgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InZhbHVlIiBzZWxlY3Q9IkB0aW1lIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJmYWlsdXJlIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS1mYWlsdXJlcyIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVycm9yIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS1mYWlsdXJlcyIvPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gU3R5bGUgZm9yIHRoZSBlcnJvciBhbmQgZmFpbHVyZSBpbiB0aGUgdGVzY2FzZSB0ZW1wbGF0ZSAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGlzcGxheS1mYWlsdXJlcyI+CisgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJub3QoQG1lc3NhZ2UpIj5OL0E8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbWVzc2FnZSIvPgorICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgPC94c2w6Y2hvb3NlPgorICAgIDwhLS0gZGlzcGxheSB0aGUgc3RhY2t0cmFjZSAtLT4KKyAgICA8Y29kZT4KKyAgICAgICAgPGJyLz48YnIvPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYnItcmVwbGFjZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0id29yZCIgc2VsZWN0PSIuIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9jb2RlPgorICAgIDwhLS0gdGhlIGxhdGVyIGlzIGJldHRlciBidXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMgZm9yIG5vbi0yMSIgbW9uaXRvcnMuLi4gLS0+CisgICAgPCEtLXByZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvcHJlLS0+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJKUy1lc2NhcGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ic3RyaW5nIi8+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJ0bXAxIiBzZWxlY3Q9InN0cmluZ3V0aWxzOnJlcGxhY2Uoc3RyaW5nKCRzdHJpbmcpLCdcJywnXFwnKSIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idG1wMiIgc2VsZWN0PSJzdHJpbmd1dGlsczpyZXBsYWNlKHN0cmluZygkdG1wMSksJnF1b3Q7JyZxdW90OywmcXVvdDtcJmFwb3M7JnF1b3Q7KSIvPgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdG1wMiIvPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLQorICAgIHRlbXBsYXRlIHRoYXQgd2lsbCBjb252ZXJ0IGEgY2FycmlhZ2UgcmV0dXJuIGludG8gYSBiciB0YWcKKyAgICBAcGFyYW0gd29yZCB0aGUgdGV4dCBmcm9tIHdoaWNoIHRvIGNvbnZlcnQgQ1IgdG8gQlIgdGFnCistLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0iYnItcmVwbGFjZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJ3b3JkIi8+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJiciI+PGJyLz48L3hzbDpwYXJhbT4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0nc3RyaW5ndXRpbHM6cmVwbGFjZShzdHJpbmcoJHdvcmQpLCImI3hBOyIsJGJyKScvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGlzcGxheS10aW1lIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InZhbHVlIi8+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImZvcm1hdC1udW1iZXIoJHZhbHVlLCcwLjAwMCcpIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXBlcmNlbnQiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idmFsdWUiLz4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iZm9ybWF0LW51bWJlcigkdmFsdWUsJzAuMDAlJykiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgorCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2xvZy54c2wgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL2xvZy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3Mjc5MAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvbG9nLnhzbApAQCAtMCwwICsxLDIxMCBAQAorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB2ZXJzaW9uPSIxLjAiPgorPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBpbmRlbnQ9InllcyIgZW5jb2Rpbmc9IlVTLUFTQ0lJIi8+Cis8IS0tCisgICAgQ29weXJpZ2h0ICAyMDAwLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAKKy0tPgorIAorPCEtLQorCisgIFRoZSBwdXJwb3NlIGhhdmUgdGhpcyBYU0wgaXMgdG8gcHJvdmlkZSBhIG5pY2Ugd2F5IHRvIGxvb2sgYXQgdGhlIG91dHB1dAorICBmcm9tIHRoZSBBbnQgWG1sTG9nZ2VyIChpZTogYW50IC1saXN0ZW5lciBvcmcuYXBhY2hlLnRvb2xzLmFudC5YbWxMb2dnZXIgKQorICAKKyAgQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c2JhaWxsaWV6QGFwYWNoZS5vcmciPlN0ZXBoYW5lIEJhaWxsaWV6PC9hPgorICAKKy0tPgorPHhzbDpkZWNpbWFsLWZvcm1hdCBkZWNpbWFsLXNlcGFyYXRvcj0iLiIgZ3JvdXBpbmctc2VwYXJhdG9yPSIsIiAvPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIC5iYW5uZXJjZWxsIHsKKyAgICAgIGJvcmRlcjogMHB4OworICAgICAgcGFkZGluZzogMHB4OworICAgIH0KKyAgICBib2R5IHsKKyAgICAgIG1hcmdpbjogMDsKKyAgICAgIGZvbnQ6bm9ybWFsIDEwMCUgYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmOworICAgICAgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOworICAgICAgY29sb3I6IzAwMDAwMDsKKyAgICB9CisgICAgdGFibGUuc3RhdHVzIHsKKyAgICAgIGZvbnQ6Ym9sZCA4MCUgYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmOworICAgICAgYmFja2dyb3VuZC1jb2xvcjojNTI1RDc2OworICAgICAgY29sb3I6I2ZmZmZmZjsKKyAgICB9CisgICAgdGFibGUubG9nIHRyIHRkLCB0ciB0aCB7CisgICAgICBmb250LXNpemU6IDgwJTsKKyAgICB9CisgICAgLmVycm9yIHsKKyAgICAgIGNvbG9yOnJlZDsKKyAgICB9CisgICAgLndhcm4geworICAgICAgY29sb3I6YnJvd247CisgICAgfQorICAgIC5pbmZvIHsKKyAgICAgIGNvbG9yOmdyYXk7CisgICAgfQorICAgIC5kZWJ1Z3sKKyAgICAgIGNvbG9yOmdyYXk7CisgICAgfQorICAgIC5mYWlsZWQgeworICAgICAgZm9udC1zaXplOjgwJTsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICAgIGNvbG9yOiNGRkZGRkY7CisgICAgICBmb250LXdlaWdodDogYm9sZAorICAgIH0KKyAgICAuY29tcGxldGUgeworICAgICAgZm9udC1zaXplOjgwJTsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1MjVENzY7CisgICAgICBjb2xvcjojRkZGRkZGOworICAgICAgZm9udC13ZWlnaHQ6IGJvbGQKKyAgICB9CisgICAgLmEgdGQgeyAKKyAgICAgIGJhY2tncm91bmQ6ICNlZmVmZWY7CisgICAgfQorICAgIC5iIHRkIHsgCisgICAgICBiYWNrZ3JvdW5kOiAjZmZmOworICAgIH0KKyAgICB0aCwgdGQgeworICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisgICAgfQorICAgIHRoIHsKKyAgICAgIGJhY2tncm91bmQ6ICNjY2M7CisgICAgICBjb2xvcjogYmxhY2s7CisgICAgfQorICAgIHRhYmxlLCB0aCwgdGQgeworICAgICAgYm9yZGVyOiBub25lCisgICAgfQorICAgIGgzIHsKKyAgICAgIGZvbnQ6Ym9sZCA4MCUgYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmOworICAgICAgYmFja2dyb3VuZDogIzUyNUQ3NjsKKyAgICAgIGNvbG9yOiB3aGl0ZTsKKyAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICAgIHBhZGRpbmc6IDVweDsKKyAgICAgIG1hcmdpbi1yaWdodDogMnB4OworICAgICAgbWFyZ2luLWxlZnQ6IDJweDsKKyAgICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAgfQorICAgIDwvc3R5bGU+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgPCEtLSBqYWthcnRhIGxvZ28gLS0+CisgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+CisgICAgPHRyPgorICAgICAgPHRkIHZhbGlnbj0idG9wIiBjbGFzcz0iYmFubmVyY2VsbCI+CisgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvIj4KKyAgICAgICAgPGltZyBzcmM9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvaW1hZ2VzL2pha2FydGEtbG9nby5naWYiIGFsdD0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZyIgYWxpZ249ImxlZnQiIGJvcmRlcj0iMCIvPgorICAgICAgICA8L2E+CisgICAgICA8L3RkPgorICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOmJvdHRvbSI+CisgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvYW50Ij5BcGFjaGUgQW50PC9hPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDwvdGFibGU+CisgICAgICAKKyAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+CisgICAgPHRyPjx0ZD48aHIgbm9zaGFkZT0ieWVzIiBzaXplPSIxIi8+PC90ZD48L3RyPgorICAgIDwvdGFibGU+CisKKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImJ1aWxkIi8+CisKKyAgICA8IS0tIEZPT1RFUiAtLT4KKyAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgPHRyPjx0ZD48aHIgbm9zaGFkZT0ieWVzIiBzaXplPSIxIi8+PC90ZD48L3RyPgorICAgICAgPHRyPjx0ZD4KKyAgICAgIDxkaXYgYWxpZ249ImNlbnRlciI+PGZvbnQgY29sb3I9IiM1MjVENzYiIHNpemU9Ii0xIj48ZW0+CisgICAgICBDb3B5cmlnaHQgJiMxNjk7IDIwMDAtMjAwMiwgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgICAgIDwvZW0+PC9mb250PjwvZGl2PgorICAgICAgPC90ZD48L3RyPgorICAgIDwvdGFibGU+CisgIDwvYm9keT4KKzwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJidWlsZCI+CisgIDwhLS0gYnVpbGQgc3RhdHVzIC0tPgorICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgIDx4c2w6aWYgdGVzdD0iQGVycm9yIj5mYWlsZWQ8L3hzbDppZj4KKyAgICAgIDx4c2w6aWYgdGVzdD0ibm90KEBlcnJvcikiPmNvbXBsZXRlPC94c2w6aWY+CisgICAgPC94c2w6YXR0cmlidXRlPgorICAgIDx0cj4KKyAgICAgIDx4c2w6aWYgdGVzdD0iQGVycm9yIj4KKyAgICAgICAgPHRkIG5vd3JhcD0ieWVzIj5CdWlsZCBGYWlsZWQ8L3RkPiAKKyAgICAgIDwveHNsOmlmPgorICAgICAgPHhzbDppZiB0ZXN0PSJub3QoQGVycm9yKSI+CisgICAgICAgIDx0ZCBub3dyYXA9InllcyI+QnVpbGQgQ29tcGxldGU8L3RkPgorICAgICAgPC94c2w6aWY+CisgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCIgbm93cmFwPSJ5ZXMiPlRvdGFsIFRpbWU6IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdGltZSIvPjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY29sc3Bhbj0iMiI+CisgICAgICAgIDx4c2w6aWYgdGVzdD0iQGVycm9yIj4KKyAgICAgICAgICA8dHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBlcnJvciIvPjwvdHQ+PGJyLz4KKyAgICAgICAgICA8aSBzdHlsZT0iZm9udC1zaXplOjgwJSI+U2VlIHRoZSA8YSBocmVmPSIjc3RhY2t0cmFjZSIgYWx0PSJDbGljayBmb3IgZGV0YWlscyI+c3RhY2t0cmFjZTwvYT4uPC9pPgorICAgICAgICA8L3hzbDppZj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKyAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIzIiB3aWR0aD0iMTAwJSIgc3R5bGU9ImZvbnQtc2l6ZTo4MCUiPgorICAgIDx0ciBjbGFzcz0iYSI+PHRkIHdpZHRoPSIxIj5hbnQuZmlsZTwvdGQ+PHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoLy9tZXNzYWdlW2NvbnRhaW5zKHRleHQoKSwnYW50LmZpbGUnKV0sICctPicpIi8+PC90ZD48L3RyPgorICAgIDx0ciBjbGFzcz0iYiI+PHRkIHdpZHRoPSIxIj5hbnQudmVyc2lvbjwvdGQ+PHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoLy9tZXNzYWdlW2NvbnRhaW5zKHRleHQoKSwnYW50LnZlcnNpb24nKV0sICctPicpIi8+PC90ZD48L3RyPgorICAgIDx0ciBjbGFzcz0iYSI+PHRkIHdpZHRoPSIxIj5qYXZhLnZlcnNpb248L3RkPjx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nLWFmdGVyKC8vbWVzc2FnZVtjb250YWlucyh0ZXh0KCksJ2phdmEudm0udmVyc2lvbicpXSwgJy0+JykiLz48L3RkPjwvdHI+CisgICAgPHRyIGNsYXNzPSJiIj48dGQgd2lkdGg9IjEiPm9zLm5hbWU8L3RkPjx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nLWFmdGVyKC8vbWVzc2FnZVtjb250YWlucyh0ZXh0KCksJ29zLm5hbWUnKV0sICctPicpIi8+PC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8IS0tIGJ1aWxkIGluZm9ybWF0aW9uIC0tPgorICA8aDM+QnVpbGQgZXZlbnRzPC9oMz4KKyAgPHRhYmxlIGNsYXNzPSJsb2ciIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIzIiB3aWR0aD0iMTAwJSI+CisgIDx0cj4KKyAgICA8dGggbm93cmFwPSJ5ZXMiIGFsaWduPSJsZWZ0IiB3aWR0aD0iMSUiPnRhcmdldDwvdGg+CisgICAgPHRoIG5vd3JhcD0ieWVzIiBhbGlnbj0ibGVmdCIgd2lkdGg9IjElIj50YXNrPC90aD4KKyAgICA8dGggbm93cmFwPSJ5ZXMiIGFsaWduPSJsZWZ0Ij5tZXNzYWdlPC90aD4KKyAgPC90cj4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuLy9tZXNzYWdlW0Bwcmlvcml0eSAhPSAnZGVidWcnXSIvPgorICA8L3RhYmxlPgorICA8cD4KKyAgPCEtLSBzdGFja3RyYWNlIC0tPgorICA8eHNsOmlmIHRlc3Q9InN0YWNrdHJhY2UiPgorICA8YSBuYW1lPSJzdGFja3RyYWNlIi8+CisgIDxoMz5FcnJvciBkZXRhaWxzPC9oMz4KKyAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICA8dHI+PHRkPgorICAgICAgPHByZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3RhY2t0cmFjZSIvPjwvcHJlPgorICAgIDwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC94c2w6aWY+CisgIDwvcD4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIHJlcG9ydCBldmVyeSBtZXNzYWdlIGJ1dCB0aG9zZSB3aXRoIGRlYnVnIHByaW9yaXR5IC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWVzc2FnZVtAcHJpb3JpdHkhPSdkZWJ1ZyddIj4KKyAgPHRyIHZhbGlnbj0idG9wIj4KKyAgICA8IS0tIGFsdGVybmF0ZWQgcm93IHN0eWxlIC0tPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSBtb2QgMiA9IDEiPmE8L3hzbDppZj4KKyAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSBtb2QgMiA9IDAiPmI8L3hzbDppZj4KKyAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgPHRkIG5vd3JhcD0ieWVzIiB3aWR0aD0iMSUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi8uLi9AbmFtZSIvPjwvdGQ+CisgICAgPHRkIG5vd3JhcD0ieWVzIiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCIgd2lkdGg9IjElIj5bIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi9AbmFtZSIvPiBdPC90ZD4KKyAgICA8dGQgY2xhc3M9IntAcHJpb3JpdHl9IiBub3dyYXA9InllcyI+CisgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0idGV4dCgpIi8+CisgICAgPC90ZD4KKyAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2V0Yy9tYXVkaXQtZnJhbWVzLnhzbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvbWF1ZGl0LWZyYW1lcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhZjE4MAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvbWF1ZGl0LWZyYW1lcy54c2wKQEAgLTAsMCArMSw1MTAgQEAKKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zOmx4c2x0PSJodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdCIKKyAgICB4bWxuczpyZWRpcmVjdD0ib3JnLmFwYWNoZS54YWxhbi5saWIuUmVkaXJlY3QiCisgICAgZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXM9InJlZGlyZWN0Ij4KKzx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIgaW5kZW50PSJ5ZXMiIGVuY29kaW5nPSJVUy1BU0NJSSIvPgorPHhzbDpkZWNpbWFsLWZvcm1hdCBkZWNpbWFsLXNlcGFyYXRvcj0iLiIgZ3JvdXBpbmctc2VwYXJhdG9yPSIsIiAvPgorPCEtLQorICAgIENvcHlyaWdodCAgMjAwMS0yMDA0IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorICAgCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgCistLT4KKzwhLS0KKworICAgIFN0eWxlc2hlZXQgdG8gdHJhbnNmb3JtIGFuIFhNTCBmaWxlIGdlbmVyYXRlZCBieSB0aGUgQW50IE1BdWRpdCB0YXNrIGludG8KKyAgICBhIHNldCBvZiBKYXZhRG9jLWxpa2UgSFRNTCBwYWdlIHRvIG1ha2UgcGFnZXMgbW9yZSBjb252ZW5pZW50IHRvIGJlIGJyb3dzZWQuCisKKyAgICBJdCB1c2UgdGhlIFhhbGFuIHJlZGlyZWN0IGV4dGVuc2lvbiB0byB3cml0ZSB0byBtdWx0aXBsZSBvdXRwdXQgZmlsZXMuCisKKyAgICBAYXV0aG9yIFN0ZXBoYW5lIEJhaWxsaWV6IDxhIGhyZWY9Im1haWx0bzpzYmFpbGxpZXpAYXBhY2hlLm9yZyIvPgorLS0+CisKKzx4c2w6cGFyYW0gbmFtZT0ib3V0cHV0LmRpciIgc2VsZWN0PSInLiciLz4KKworCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjbGFzc2VzIj4KKyAgICA8IS0tIGNyZWF0ZSB0aGUgaW5kZXguaHRtbCAtLT4KKyAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9pbmRleC5odG1sIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZGV4Lmh0bWwiLz4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBjcmVhdGUgdGhlIHN0eWxlc2hlZXQuY3NzIC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3N0eWxlc2hlZXQuY3NzIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0eWxlc2hlZXQuY3NzIi8+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gY3JlYXRlIHRoZSBvdmVydmlldy1wYWNrYWdlcy5odG1sIGF0IHRoZSByb290IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+CisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ib3ZlcnZpZXcucGFja2FnZXMiLz4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBjcmVhdGUgdGhlIGFsbC1wYWNrYWdlcy5odG1sIGF0IHRoZSByb290IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L292ZXJ2aWV3LWZyYW1lLmh0bWwiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFsbC5wYWNrYWdlcyIvPgorICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICA8IS0tIGNyZWF0ZSB0aGUgYWxsLWNsYXNzZXMuaHRtbCBhdCB0aGUgcm9vdCAtLT4KKyAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9hbGxjbGFzc2VzLWZyYW1lLmh0bWwiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFsbC5jbGFzc2VzIi8+CisgICAgPC9yZWRpcmVjdDp3cml0ZT4KKworICAgIDwhLS0gcHJvY2VzcyBhbGwgcGFja2FnZXMgLS0+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii4vY2xhc3Nbbm90KC4vQHBhY2thZ2UgPSBwcmVjZWRpbmctc2libGluZzo6Y2xhc3MvQHBhY2thZ2UpXSI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWNrYWdlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJuYW1lIiBzZWxlY3Q9IkBwYWNrYWdlIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6Zm9yLWVhY2g+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhY2thZ2UiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibmFtZSIvPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5kaXIiPgorICAgICAgICA8eHNsOmlmIHRlc3Q9Im5vdCgkbmFtZSA9ICcnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InRyYW5zbGF0ZSgkbmFtZSwnLicsJy8nKSIvPjwveHNsOmlmPgorICAgICAgICA8eHNsOmlmIHRlc3Q9IiRuYW1lID0gJyciPi48L3hzbDppZj4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8IS0tUHJvY2Vzc2luZyBwYWNrYWdlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPiBpbiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG91dHB1dC5kaXIiLz4gLS0+CisgICAgPCEtLSBjcmVhdGUgYSBjbGFzc2VzLWxpc3QuaHRtbCBpbiB0aGUgcGFja2FnZSBkaXJlY3RvcnkgLS0+CisgICAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0veyRwYWNrYWdlLmRpcn0vcGFja2FnZS1mcmFtZS5odG1sIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNsYXNzZXMubGlzdCI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibmFtZSIgc2VsZWN0PSIkbmFtZSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgICA8IS0tIGNyZWF0ZSBhIHBhY2thZ2Utc3VtbWFyeS5odG1sIGluIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSAtLT4KKyAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS97JHBhY2thZ2UuZGlyfS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWNrYWdlLnN1bW1hcnkiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5hbWUiIHNlbGVjdD0iJG5hbWUiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorCisgICAgPCEtLSBmb3IgZWFjaCBjbGFzcywgY3JlYXRlcyBhIEBuYW1lLmh0bWwgLS0+CisgICAgPCEtLSBAYnVnIHRoZXJlIHdpbGwgYmUgYSBwcm9ibGVtIHdpdGggaW5uZXIgY2xhc3NlcyBoYXZpbmcgdGhlIHNhbWUgbmFtZSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiAtLT4KKyAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2NsYXNzZXMvY2xhc3NbQHBhY2thZ2UgPSAkbmFtZV0iPgorICAgICAgICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS97JHBhY2thZ2UuZGlyfS97QG5hbWV9Lmh0bWwiPgorICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjbGFzcy5kZXRhaWxzIi8+CisgICAgICAgIDwvcmVkaXJlY3Q6d3JpdGU+CisgICAgPC94c2w6Zm9yLWVhY2g+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmRleC5odG1sIj4KKzxIVE1MPgorICAgIDxIRUFEPjxUSVRMRT5BdWRpdCBSZXN1bHRzLjwvVElUTEU+PC9IRUFEPgorICAgIDxGUkFNRVNFVCBjb2xzPSIyMCUsODAlIj4KKyAgICAgICAgPEZSQU1FU0VUIHJvd3M9IjMwJSw3MCUiPgorICAgICAgICAgICAgPEZSQU1FIHNyYz0ib3ZlcnZpZXctZnJhbWUuaHRtbCIgbmFtZT0icGFja2FnZUxpc3RGcmFtZSIvPgorICAgICAgICAgICAgPEZSQU1FIHNyYz0iYWxsY2xhc3Nlcy1mcmFtZS5odG1sIiBuYW1lPSJjbGFzc0xpc3RGcmFtZSIvPgorICAgICAgICA8L0ZSQU1FU0VUPgorICAgICAgICA8RlJBTUUgc3JjPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiIG5hbWU9ImNsYXNzRnJhbWUiLz4KKyAgICA8L0ZSQU1FU0VUPgorICAgIDxub2ZyYW1lcz4KKyAgICAgICAgPEgyPkZyYW1lIEFsZXJ0PC9IMj4KKyAgICAgICAgPFA+CisgICAgICAgIFRoaXMgZG9jdW1lbnQgaXMgZGVzaWduZWQgdG8gYmUgdmlld2VkIHVzaW5nIHRoZSBmcmFtZXMgZmVhdHVyZS4gSWYgeW91IHNlZSB0aGlzIG1lc3NhZ2UsIHlvdSBhcmUgdXNpbmcgYSBub24tZnJhbWUtY2FwYWJsZSB3ZWIgY2xpZW50LgorICAgICAgICA8L1A+CisgICAgPC9ub2ZyYW1lcz4KKzwvSFRNTD4KKzwveHNsOnRlbXBsYXRlPgorCisKKzwhLS0gdGhpcyBpcyB0aGUgc3R5bGVzaGVldCBjc3MgdG8gdXNlIGZvciBuZWFybHkgZXZlcnl0aGluZyAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0ic3R5bGVzaGVldC5jc3MiPgorICAgIC5iYW5uZXJjZWxsIHsKKyAgICAgIGJvcmRlcjogMHB4OworICAgICAgcGFkZGluZzogMHB4OworICAgIH0KKyAgICBib2R5IHsKKyAgICAgIG1hcmdpbi1sZWZ0OiAxMDsKKyAgICAgIG1hcmdpbi1yaWdodDogMTA7CisgICAgICBmb250Om5vcm1hbCA4MCUgYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmOworICAgICAgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOworICAgICAgY29sb3I6IzAwMDAwMDsKKyAgICB9CisgICAgLmEgdGQgeworICAgICAgYmFja2dyb3VuZDogI2VmZWZlZjsKKyAgICB9CisgICAgLmIgdGQgeworICAgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICB9CisgICAgdGgsIHRkIHsKKyAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworICAgIH0KKyAgICB0aCB7CisgICAgICBmb250LXdlaWdodDpib2xkOworICAgICAgYmFja2dyb3VuZDogI2NjYzsKKyAgICAgIGNvbG9yOiBibGFjazsKKyAgICB9CisgICAgdGFibGUsIHRoLCB0ZCB7CisgICAgICBmb250LXNpemU6MTAwJTsKKyAgICAgIGJvcmRlcjogbm9uZQorICAgIH0KKyAgICB0YWJsZS5sb2cgdHIgdGQsIHRyIHRoIHsKKworICAgIH0KKyAgICBoMiB7CisgICAgICBmb250LXdlaWdodDpib2xkOworICAgICAgZm9udC1zaXplOjE0MCU7CisgICAgICBtYXJnaW4tYm90dG9tOiA1OworICAgIH0KKyAgICBoMyB7CisgICAgICBmb250LXNpemU6MTAwJTsKKyAgICAgIGZvbnQtd2VpZ2h0OmJvbGQ7CisgICAgICBiYWNrZ3JvdW5kOiAjNTI1RDc2OworICAgICAgY29sb3I6IHdoaXRlOworICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgcGFkZGluZzogNXB4OworICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7CisgICAgICBtYXJnaW4tbGVmdDogMnB4OworICAgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICB9Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIHByaW50IHRoZSB2aW9sYXRpb25zIG9mIHRoZSBjbGFzcyAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNsYXNzIiBtb2RlPSJjbGFzcy5kZXRhaWxzIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InBhY2thZ2UubmFtZSIgc2VsZWN0PSJAcGFja2FnZSIvPgorICAgIDxIVE1MPgorICAgICAgICA8SEVBRD4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IiRwYWNrYWdlLm5hbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvSEVBRD4KKyAgICAgICAgPEJPRFk+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciIvPgorICAgICAgICAgICAgPEgzPkNsYXNzIDx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWUgPSAnJykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcGFja2FnZS5uYW1lIi8+LjwveHNsOmlmPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvSDM+CisKKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0ibG9nIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjbGFzcy5hdWRpdC5oZWFkZXIiLz4KKyAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByaW50LmF1ZGl0Ii8+CisgICAgICAgICAgICA8L3RhYmxlPgorCisgICAgICAgICAgICA8SDM+VmlvbGF0aW9uczwvSDM+CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImxvZyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0idmlvbGF0aW9uLmF1ZGl0LmhlYWRlciIvPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi92aW9sYXRpb24iIG1vZGU9InByaW50LmF1ZGl0Ij4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IGRhdGEtdHlwZT0ibnVtYmVyIiBzZWxlY3Q9IkBsaW5lIi8+CisgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlRm9vdGVyIi8+CisgICAgICAgIDwvQk9EWT4KKyAgICA8L0hUTUw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIGxpc3Qgb2YgY2xhc3NlcyBpbiBhIHBhY2thZ2UgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9ImNsYXNzZXMubGlzdCI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJuYW1lIi8+CisgICAgPEhUTUw+CisgICAgICAgIDxIRUFEPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiIHNlbGVjdD0iJG5hbWUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwvSEVBRD4KKyAgICAgICAgPEJPRFk+CisgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxIMj48YSBocmVmPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG5hbWUiLz48L2E+PC9IMj4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKworICAgICAgICAgICAgPGgyPkNsYXNzZXM8L2gyPgorICAgICAgICAgICAgPFRBQkxFIFdJRFRIPSIxMDAlIj4KKyAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii9jbGFzc2VzL2NsYXNzWy4vQHBhY2thZ2UgPSAkbmFtZV0iIG1vZGU9ImNsYXNzZXMubGlzdCI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgICAgICAgPC9UQUJMRT4KKyAgICAgICAgPC9CT0RZPgorICAgIDwvSFRNTD4KKzwveHNsOnRlbXBsYXRlPgorPCEtLSB0aGUgY2xhc3MgdG8gbGlzdCAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNsYXNzIiBtb2RlPSJjbGFzc2VzLmxpc3QiPgorICAgIDx0cj4KKyAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgIDwhLS0gQGJ1ZyBuYW1pbmcgdG8gZml4IGZvciBpbm5lciBjbGFzc2VzIC0tPgorICAgICAgICAgICAgPGEgaHJlZj0ie0BuYW1lfS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvYT4KKyAgICAgICAgPC90ZD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLQorICAgIENyZWF0ZXMgYW4gYWxsLWNsYXNzZXMuaHRtbCBmaWxlIHRoYXQgY29udGFpbnMgYSBsaW5rIHRvIGFsbCBwYWNrYWdlLXN1bW1hcnkuaHRtbAorICAgIG9uIGVhY2ggY2xhc3MuCistLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNsYXNzZXMiIG1vZGU9ImFsbC5jbGFzc2VzIj4KKyAgICA8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhY2thZ2UubmFtZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgIDxoMj5DbGFzc2VzPC9oMj4KKyAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuLy9jbGFzcyIgbW9kZT0iYWxsLmNsYXNzZXMiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIDwvYm9keT4KKyAgICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2xhc3MiIG1vZGU9ImFsbC5jbGFzc2VzIj4KKyAgICA8IS0tIChhbmNlc3Rvcjo6cGFja2FnZSlbbGFzdCgpXSBpcyBidWdneSBpbiBNU1hNTDMgPyAtLT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InBhY2thZ2UubmFtZSIgc2VsZWN0PSJAcGFja2FnZSIvPgorICAgIDx0cj4KKyAgICAgICAgPHRkIG5vd3JhcD0ibm93cmFwIj4KKyAgICAgICAgICAgIDxhIHRhcmdldD0iY2xhc3NGcmFtZSI+CisgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWU9JycpIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJ0cmFuc2xhdGUoJHBhY2thZ2UubmFtZSwnLicsJy8nKSIvPjx4c2w6dGV4dD4vPC94c2w6dGV4dD4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PHhzbDp0ZXh0Pi5odG1sPC94c2w6dGV4dD4KKyAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvdGQ+CisgICAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCisKKzwhLS0KKyAgICBDcmVhdGVzIGFuIGh0bWwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGluayB0byBhbGwgcGFja2FnZS1zdW1tYXJ5Lmh0bWwgZmlsZXMgb24KKyAgICBlYWNoIHBhY2thZ2UgZXhpc3Rpbmcgb24gdGVzdHN1aXRlcy4KKyAgICBAYnVnIHRoZXJlIHdpbGwgYmUgYSBwcm9ibGVtIGhlcmUsIEkgZG9uJ3Qga25vdyB5ZXQgaG93IHRvIGhhbmRsZSB1bm5hbWVkIHBhY2thZ2UgOigKKy0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2xhc3NlcyIgbW9kZT0iYWxsLnBhY2thZ2VzIj4KKyAgICA8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhY2thZ2UubmFtZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgIDxoMj48YSBocmVmPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+SG9tZTwvYT48L2gyPgorICAgICAgICAgICAgPGgyPlBhY2thZ2VzPC9oMj4KKyAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNsYXNzW25vdCguL0BwYWNrYWdlID0gcHJlY2VkaW5nLXNpYmxpbmc6OmNsYXNzL0BwYWNrYWdlKV0iIG1vZGU9ImFsbC5wYWNrYWdlcyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAcGFja2FnZSIgb3JkZXI9ImFzY2VuZGluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPC9ib2R5PgorICAgIDwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjbGFzcyIgbW9kZT0iYWxsLnBhY2thZ2VzIj4KKyAgICA8dHI+CisgICAgICAgIDx0ZCBub3dyYXA9Im5vd3JhcCI+CisgICAgICAgICAgICA8YSBocmVmPSJ7dHJhbnNsYXRlKEBwYWNrYWdlLCcuJywnLycpfS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj4KKyAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHBhY2thZ2UiLz4KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC90ZD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2xhc3NlcyIgbW9kZT0ib3ZlcnZpZXcucGFja2FnZXMiPgorICAgIDxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IG9ubG9hZD0ib3BlbignYWxsY2xhc3Nlcy1mcmFtZS5odG1sJywnY2xhc3NMaXN0RnJhbWUnKSI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIi8+CisgICAgICAgIDxoMz5TdW1tYXJ5PC9oMz4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJsb2ciIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIyIiB3aWR0aD0iMTAwJSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0aD5BdWRpdGVkIGNsYXNzZXM8L3RoPgorICAgICAgICAgICAgPHRoPlJlcG9ydGVkIGNsYXNzZXM8L3RoPgorICAgICAgICAgICAgPHRoPlZpb2xhdGlvbnM8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHIgY2xhc3M9ImEiPgorICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAYXVkaXRlZCIvPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByZXBvcnRlZCIvPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2aW9sYXRpb25zIi8+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgorICAgICAgICA8dHI+CisgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsiPgorICAgICAgICBOb3RlOiBSdWxlcyBjaGVja2VkIGhhdmUgb3JpZ2luYXRlZCBmcm9tIHN0eWxlIGd1aWRlbGluZXMgc3VnZ2VzdGVkIGJ5IHRoZSBsYW5ndWFnZSBkZXNpZ25lcnMsCisgICAgICAgIGV4cGVyaWVuY2UgZnJvbSB0aGUgSmF2YSBkZXZlbG9wbWVudCBjb21tdW5pdHkgYW5kIGluc2l0ZSBleHBlcmllbmNlLiBWaW9sYXRpb25zIGFyZSBnZW5lcmFsbHkKKyAgICAgICAgcmVwb3J0ZWQgd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL2pscy9zZWNvbmRfZWRpdGlvbi9odG1sL2pUT0MuZG9jLmh0bWwiPkphdmEgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbnM8L2E+IChKTFMgeC54LngpCisgICAgICAgIGFuZCBNZXRhbWF0YSBBdWRpdCBydWxlcyAoeC54KS4KKyAgICAgICAgUGxlYXNlIGNvbnN1bHQgdGhlc2UgZG9jdW1lbnRzIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHZpb2xhdGlvbnMuCisgICAgICAgIDxwLz4KKyAgICAgICAgUnVsZXMgY2hlY2tlZCBhbHNvIGVuZm9yY2UgYWRoZXJlbmNlIHRvIDxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZG9jcy9jb2RlY29udi9odG1sL0NvZGVDb252VE9DLmRvYy5odG1sIj5TdW4gSmF2YSBjb2RpbmcgZ3VpZGVsaW5lczwvYT4gaW4gdXNlIGF0IEpha2FydGEuCisgICAgICAgIDxwLz4KKyAgICAgICAgT25lIHNob3VsZCBub3RlIHRoYXQgdGhlc2UgdmlvbGF0aW9ucyBkbyBub3QgbmVjZXNzYXJ5IHVuZGVybGluZSBlcnJvcnMgYnV0IHNob3VsZCBiZSB1c2VkCisgICAgICAgIGFzIGFuIGluZGljYXRpb24gZm9yIDxpPnBvc3NpYmxlPC9pPiBlcnJvcnMuIEFzIGFsd2F5cywgdXNlIHlvdXIgYmVzdCBqdWRnbWVudCBhbmQgcmV2aWV3CisgICAgICAgIHRoZW0gY2FyZWZ1bGx5LCBpdCBtaWdodCBzYXZlIHlvdSBob3VycyBvZiBkZWJ1Z2dpbmcuCisgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisKKyAgICAgICAgPGgzPlBhY2thZ2VzPC9oMz4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJsb2ciIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIyIiB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2xhc3MuYXVkaXQuaGVhZGVyIi8+CisgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iY2xhc3Nbbm90KC4vQHBhY2thZ2UgPSBwcmVjZWRpbmctc2libGluZzo6Y2xhc3MvQHBhY2thZ2UpXSI+CisgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQHBhY2thZ2UiIG9yZGVyPSJhc2NlbmRpbmciLz4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFsdGVybmF0ZS1yb3ciLz4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9Int0cmFuc2xhdGUoQHBhY2thZ2UsJy4nLCcvJyl9L3BhY2thZ2Utc3VtbWFyeS5odG1sIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHBhY2thZ2UiLz48L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdW0oL2NsYXNzZXMvY2xhc3NbLi9AcGFja2FnZSA9IGN1cnJlbnQoKS9AcGFja2FnZV0vQHZpb2xhdGlvbnMpIi8+PC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICAgIDwvdGFibGU+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlRm9vdGVyIi8+CisgICAgICAgIDwvYm9keT4KKyAgICAgICAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYWNrYWdlLnN1bW1hcnkiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibmFtZSIvPgorICAgIDxIVE1MPgorICAgICAgICA8SEVBRD4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IiRuYW1lIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L0hFQUQ+CisgICAgICAgIDxCT0RZPgorICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ib25sb2FkIj5vcGVuKCdwYWNrYWdlLWZyYW1lLmh0bWwnLCdjbGFzc0xpc3RGcmFtZScpPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhZ2VIZWFkZXIiLz4KKyAgICAgICAgICAgIDxoMz5QYWNrYWdlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkbmFtZSIvPjwvaDM+CisKKyAgICAgICAgICAgIDwhLS10YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjbGFzcy5tZXRyaWNzLmhlYWRlciIvPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJpbnQubWV0cmljcyIvPgorICAgICAgICAgICAgPC90YWJsZS0tPgorCisgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KC9jbGFzc2VzL2NsYXNzWy4vQHBhY2thZ2UgPSAkbmFtZV0pICZndDsgMCI+CisgICAgICAgICAgICAgICAgPEgzPkNsYXNzZXM8L0gzPgorICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0ibG9nIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2xhc3MuYXVkaXQuaGVhZGVyIi8+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iL2NsYXNzZXMvY2xhc3NbLi9AcGFja2FnZSA9ICRuYW1lXSIgbW9kZT0icHJpbnQuYXVkaXQiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlRm9vdGVyIi8+CisgICAgICAgIDwvQk9EWT4KKyAgICA8L0hUTUw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tCisgICAgdHJhbnNmb3JtIHN0cmluZyBsaWtlIGEuYi5jIHRvIC4uLy4uLy4uLworICAgIEBwYXJhbSBwYXRoIHRoZSBwYXRoIHRvIHRyYW5zZm9ybSBpbnRvIGEgZGVzY2VuZGluZyBkaXJlY3RvcnkgcGF0aAorLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9InBhdGgiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0icGF0aCIvPgorICAgIDx4c2w6aWYgdGVzdD0iY29udGFpbnMoJHBhdGgsJy4nKSI+CisgICAgICAgIDx4c2w6dGV4dD4uLi88L3hzbDp0ZXh0PgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGF0aCI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGF0aCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZy1hZnRlcigkcGF0aCwnLicpIi8+PC94c2w6d2l0aC1wYXJhbT4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmlmIHRlc3Q9Im5vdChjb250YWlucygkcGF0aCwnLicpKSBhbmQgbm90KCRwYXRoID0gJycpIj4KKyAgICAgICAgPHhzbDp0ZXh0Pi4uLzwveHNsOnRleHQ+CisgICAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIGNyZWF0ZSB0aGUgbGluayB0byB0aGUgc3R5bGVzaGVldCBiYXNlZCBvbiB0aGUgcGFja2FnZSBuYW1lIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InBhY2thZ2UubmFtZSIvPgorICAgIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBUSVRMRT0iU3R5bGUiPjx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPjx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWUgPSAndW5uYW1lZCBwYWNrYWdlJykiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXRoIj48eHNsOndpdGgtcGFyYW0gbmFtZT0icGF0aCIgc2VsZWN0PSIkcGFja2FnZS5uYW1lIi8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3hzbDppZj5zdHlsZXNoZWV0LmNzczwveHNsOmF0dHJpYnV0ZT48L0xJTks+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBQYWdlIEhFQURFUiAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFnZUhlYWRlciI+CisKKyAgPCEtLSBqYWthcnRhIGxvZ28gLS0+CisgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgorICA8dHI+CisgICAgPHRkIGNsYXNzPSJiYW5uZXJjZWxsIiByb3dzcGFuPSIyIj4KKyAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvIj4KKyAgICAgIDxpbWcgc3JjPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2ltYWdlcy9qYWthcnRhLWxvZ28uZ2lmIiBhbHQ9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmciIGFsaWduPSJsZWZ0IiBib3JkZXI9IjAiLz4KKyAgICAgIDwvYT4KKyAgICA8L3RkPgorICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxoMj5Tb3VyY2UgQ29kZSBBdWRpdDwvaDI+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPkRlc2lnbmVkIGZvciB1c2Ugd2l0aCA8YSBocmVmPSdodHRwOi8vd3d3LndlYmdhaW4uY29tL3Byb2R1Y3RzL3F1YWxpdHlfYW5hbHl6ZXIvJz5XZWJnYWluIFFBL01ldGFtYXRhIEF1ZGl0PC9hPiBhbmQgPGEgaHJlZj0naHR0cDovL2pha2FydGEuYXBhY2hlLm9yZyc+QW50PC9hPi48L3RkPgorICAgICAgICA8L3RyPgorICA8L3RhYmxlPgorICAgIDxociBzaXplPSIxIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBQYWdlIEhFQURFUiAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFnZUZvb3RlciI+CisgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICAgIDx0cj48dGQ+PGhyIG5vc2hhZGU9InllcyIgc2l6ZT0iMSIvPjwvdGQ+PC90cj4KKyAgICAgIDx0cj48dGQ+CisgICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPjxmb250IGNvbG9yPSIjNTI1RDc2IiBzaXplPSItMSI+PGVtPgorICAgICAgQ29weXJpZ2h0ICYjMTY5OyAxOTk5LTIwMDEsIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAgICA8L2VtPjwvZm9udD48L2Rpdj4KKyAgICAgIDwvdGQ+PC90cj4KKyAgICA8L3RhYmxlPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLSBjbGFzcyBoZWFkZXIgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9ImNsYXNzLmF1ZGl0LmhlYWRlciI+CisgICAgPHRyPgorICAgICAgICA8dGggd2lkdGg9IjgwJSI+TmFtZTwvdGg+CisgICAgICAgIDx0aD5WaW9sYXRpb25zPC90aD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gbWV0aG9kIGhlYWRlciAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0idmlvbGF0aW9uLmF1ZGl0LmhlYWRlciI+CisgICAgPHRyPgorICAgICAgICA8dGg+TGluZTwvdGg+CisgICAgICAgIDx0aD5NZXNzYWdlPC90aD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLSBjbGFzcyBpbmZvcm1hdGlvbiAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNsYXNzIiBtb2RlPSJwcmludC5hdWRpdCI+CisgICAgPHRyPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGUtcm93Ii8+CisgICAgICAgIDx0ZD48YSBocmVmPSJ7QG5hbWV9Lmh0bWwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvYT48L3RkPgorICAgICAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAdmlvbGF0aW9ucyIvPjwvdGQ+CisgICAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ2aW9sYXRpb24iIG1vZGU9InByaW50LmF1ZGl0Ij4KKyAgICA8dHI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFsdGVybmF0ZS1yb3ciLz4KKyAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGluZSIvPjwvdGQ+CisgICAgICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBtZXNzYWdlIi8+PC90ZD4KKyAgICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gYWx0ZXJuYXRlZCByb3cgc3R5bGUgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9ImFsdGVybmF0ZS1yb3ciPgorPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCkgbW9kIDIgPSAxIj5hPC94c2w6aWY+CisgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSBtb2QgMiA9IDAiPmI8L3hzbDppZj4KKzwveHNsOmF0dHJpYnV0ZT4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgorCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL21tZXRyaWNzLWZyYW1lcy54c2wgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL21tZXRyaWNzLWZyYW1lcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwNWVhOAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvbW1ldHJpY3MtZnJhbWVzLnhzbApAQCAtMCwwICsxLDEwMzMgQEAKKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIgorICB4bWxuczpseHNsdD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiCisgIHhtbG5zOnhhbGFuPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4iCisgIHhtbG5zOnJlZGlyZWN0PSJvcmcuYXBhY2hlLnhhbGFuLmxpYi5SZWRpcmVjdCIKKyAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9InhhbGFuIgorICBleHRlbnNpb24tZWxlbWVudC1wcmVmaXhlcz0icmVkaXJlY3QiPgorPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBpbmRlbnQ9InllcyIgZW5jb2Rpbmc9IlVTLUFTQ0lJIi8+Cis8eHNsOmRlY2ltYWwtZm9ybWF0IGRlY2ltYWwtc2VwYXJhdG9yPSIuIiBncm91cGluZy1zZXBhcmF0b3I9IiwiIC8+Cis8IS0tCisgICAgQ29weXJpZ2h0ICAyMDAxLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAKKy0tPgorPCEtLQorICBAYXV0aG9yIFN0ZXBoYW5lIEJhaWxsaWV6IDxhIGhyZWY9Im1haWx0bzpzYmFpbGxpZXpAYXBhY2hlLm9yZyIvPgorICAtLT4KKzx4c2w6cGFyYW0gbmFtZT0ib3V0cHV0LmRpciIgc2VsZWN0PSInLiciLz4KKworPCEtLSBkZWZhdWx0IG1heCB2YWx1ZSBmb3IgdGhlIG1ldHJpY3MgLS0+Cis8eHNsOnBhcmFtIG5hbWU9InZnLm1heCIgc2VsZWN0PSIxMCIvPgorPHhzbDpwYXJhbSBuYW1lPSJsb2MubWF4IiBzZWxlY3Q9IjEwMDAiLz4KKzx4c2w6cGFyYW0gbmFtZT0iZGl0Lm1heCIgc2VsZWN0PSIxMCIvPgorPHhzbDpwYXJhbSBuYW1lPSJub2EubWF4IiBzZWxlY3Q9IjI1MCIvPgorPHhzbDpwYXJhbSBuYW1lPSJucm0ubWF4IiBzZWxlY3Q9IjUwIi8+Cis8eHNsOnBhcmFtIG5hbWU9Im5sbS5tYXgiIHNlbGVjdD0iMjUwIi8+Cis8eHNsOnBhcmFtIG5hbWU9IndtYy5tYXgiIHNlbGVjdD0iMjUwIi8+Cis8eHNsOnBhcmFtIG5hbWU9InJmYy5tYXgiIHNlbGVjdD0iNTAiLz4KKzx4c2w6cGFyYW0gbmFtZT0iZGFjLm1heCIgc2VsZWN0PSIxMCIvPgorPHhzbDpwYXJhbSBuYW1lPSJmYW5vdXQubWF4IiBzZWxlY3Q9IjEwIi8+Cis8eHNsOnBhcmFtIG5hbWU9ImNiby5tYXgiIHNlbGVjdD0iMTUiLz4KKzx4c2w6cGFyYW0gbmFtZT0ibGNvbS5tYXgiIHNlbGVjdD0iMTAiLz4KKzx4c2w6cGFyYW0gbmFtZT0ibm9jbC5tYXgiIHNlbGVjdD0iMTAiLz4KKworCis8IS0tIGNyZWF0ZSBhIHRyZWUgZnJhZ21lbnQgdG8gc3BlZWQgdXAgcHJvY2Vzc2luZyAtLT4KKzx4c2w6dmFyaWFibGUgbmFtZT0iZG9jdHJlZS52YXIiPgorICA8eHNsOmVsZW1lbnQgbmFtZT0iY2xhc3NlcyI+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii4vL2NsYXNzIj4KKyAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJjbGFzcyI+CisgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InBhY2thZ2UiPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIoYW5jZXN0b3I6OnBhY2thZ2UpW2xhc3QoKV0vQG5hbWUiLz4KKyAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSJAKiIvPgorICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNsYXNzLm5hbWUiLz4KKyAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSJtZXRob2QiLz4KKyAgICAgIDwveHNsOmVsZW1lbnQ+CisgICAgPC94c2w6Zm9yLWVhY2g+CisgIDwveHNsOmVsZW1lbnQ+Cis8L3hzbDp2YXJpYWJsZT4KKworPHhzbDp2YXJpYWJsZSBuYW1lPSJkb2N0cmVlIiBzZWxlY3Q9InhhbGFuOm5vZGVzZXQoJGRvY3RyZWUudmFyKSIvPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJtZXRyaWNzIj4KKworICA8IS0tIGNyZWF0ZSB0aGUgaW5kZXguaHRtbCAtLT4KKyAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0vaW5kZXguaHRtbCI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZGV4Lmh0bWwiLz4KKyAgPC9yZWRpcmVjdDp3cml0ZT4KKworICA8IS0tIGNyZWF0ZSB0aGUgc3R5bGVzaGVldC5jc3MgLS0+CisgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3N0eWxlc2hlZXQuY3NzIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3R5bGVzaGVldC5jc3MiLz4KKyAgPC9yZWRpcmVjdDp3cml0ZT4KKworICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9tZXRyaWNzLXJlZmVyZW5jZS5odG1sIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibWV0cmljcy1yZWZlcmVuY2UuaHRtbCIvPgorICA8L3JlZGlyZWN0OndyaXRlPgorCisgIDwhLS0gY3JlYXRlIHRoZSBvdmVydmlldy1wYWNrYWdlcy5odG1sIGF0IHRoZSByb290IC0tPgorICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ib3ZlcnZpZXcucGFja2FnZXMiLz4KKyAgPC9yZWRpcmVjdDp3cml0ZT4KKworICA8IS0tIGNyZWF0ZSB0aGUgYWxsLXBhY2thZ2VzLmh0bWwgYXQgdGhlIHJvb3QgLS0+CisgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L292ZXJ2aWV3LWZyYW1lLmh0bWwiPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYWxsLnBhY2thZ2VzIi8+CisgIDwvcmVkaXJlY3Q6d3JpdGU+CisKKyAgPCEtLSBjcmVhdGUgdGhlIGFsbC1jbGFzc2VzLmh0bWwgYXQgdGhlIHJvb3QgLS0+CisgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L2FsbGNsYXNzZXMtZnJhbWUuaHRtbCI+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhbGwuY2xhc3NlcyIvPgorICA8L3JlZGlyZWN0OndyaXRlPgorCisgIDwhLS0gcHJvY2VzcyBhbGwgcGFja2FnZXMgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi8vcGFja2FnZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFja2FnZSI+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IkBuYW1lIi8+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5kaXIiPgorICAgIDx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWUgPSAndW5uYW1lZCBwYWNrYWdlJykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJ0cmFuc2xhdGUoJHBhY2thZ2UubmFtZSwnLicsJy8nKSIvPjwveHNsOmlmPgorICAgIDx4c2w6aWYgdGVzdD0iJHBhY2thZ2UubmFtZSA9ICd1bm5hbWVkIHBhY2thZ2UnIj4uPC94c2w6aWY+CisgIDwveHNsOnZhcmlhYmxlPgorICA8IS0tIGNyZWF0ZSBhIGNsYXNzZXMtbGlzdC5odG1sIGluIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSAtLT4KKyAgPHJlZGlyZWN0OndyaXRlIGZpbGU9Inskb3V0cHV0LmRpcn0veyRwYWNrYWdlLmRpcn0vcGFja2FnZS1mcmFtZS5odG1sIj4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNsYXNzZXMubGlzdCIvPgorICA8L3JlZGlyZWN0OndyaXRlPgorCisgIDwhLS0gY3JlYXRlIGEgcGFja2FnZS1zdW1tYXJ5Lmh0bWwgaW4gdGhlIHBhY2thZ2UgZGlyZWN0b3J5IC0tPgorICA8cmVkaXJlY3Q6d3JpdGUgZmlsZT0ieyRvdXRwdXQuZGlyfS97JHBhY2thZ2UuZGlyfS9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYWNrYWdlLnN1bW1hcnkiLz4KKyAgPC9yZWRpcmVjdDp3cml0ZT4KKworICA8IS0tIGZvciBlYWNoIGNsYXNzLCBjcmVhdGVzIGEgQG5hbWUuaHRtbCAtLT4KKyAgPCEtLSBAYnVnIHRoZXJlIHdpbGwgYmUgYSBwcm9ibGVtIHdpdGggaW5uZXIgY2xhc3NlcyBoYXZpbmcgdGhlIHNhbWUgbmFtZSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiAtLT4KKyAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRkb2N0cmVlL2NsYXNzZXMvY2xhc3NbQHBhY2thZ2UgPSBjdXJyZW50KCkvQG5hbWVdIj4KKyAgICAgIDwhLS1Qcm9jZXNzaW5nIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkY2xhc3MubmFtZSIvPjx4c2w6dGV4dD4mIzEwOzwveHNsOnRleHQ+IC0tPgorICAgIDxyZWRpcmVjdDp3cml0ZSBmaWxlPSJ7JG91dHB1dC5kaXJ9L3skcGFja2FnZS5kaXJ9L3tAbmFtZX0uaHRtbCI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNsYXNzLmRldGFpbHMiLz4KKyAgICA8L3JlZGlyZWN0OndyaXRlPgorICA8L3hzbDpmb3ItZWFjaD4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIGxpdHRsZSB0cmljayB0byBjb21wdXRlIHRoZSBjbGFzc25hbWUgZm9yIGlubmVyIGFuZCBub24gaW5uZXIgY2xhc3NlcyAtLT4KKzwhLS0gdGhpcyBpcyBhbGwgaW4gb25lIGxpbmUgdG8gYXZvaWQgQ1JMRiBpbiB0aGUgbmFtZSAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNsYXNzIiBtb2RlPSJjbGFzcy5uYW1lIj4KKyAgICA8eHNsOmlmIHRlc3Q9InBhcmVudDo6Y2xhc3MiPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icGFyZW50OjpjbGFzcyIgbW9kZT0iY2xhc3MubmFtZSIvPi48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L3hzbDppZj48eHNsOmlmIHRlc3Q9Im5vdChwYXJlbnQ6OmNsYXNzKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4Lmh0bWwiPgorPEhUTUw+CisgIDxIRUFEPjxUSVRMRT5NZXRyaWNzIFJlc3VsdHMuPC9USVRMRT48L0hFQUQ+CisgIDxGUkFNRVNFVCBjb2xzPSIyMCUsODAlIj4KKyAgICA8RlJBTUVTRVQgcm93cz0iMzAlLDcwJSI+CisgICAgICA8RlJBTUUgc3JjPSJvdmVydmlldy1mcmFtZS5odG1sIiBuYW1lPSJwYWNrYWdlTGlzdEZyYW1lIi8+CisgICAgICA8RlJBTUUgc3JjPSJhbGxjbGFzc2VzLWZyYW1lLmh0bWwiIG5hbWU9ImNsYXNzTGlzdEZyYW1lIi8+CisgICAgPC9GUkFNRVNFVD4KKyAgICA8RlJBTUUgc3JjPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiIG5hbWU9ImNsYXNzRnJhbWUiLz4KKyAgPC9GUkFNRVNFVD4KKyAgPG5vZnJhbWVzPgorICAgIDxIMj5GcmFtZSBBbGVydDwvSDI+CisgICAgPFA+CisgICAgVGhpcyBkb2N1bWVudCBpcyBkZXNpZ25lZCB0byBiZSB2aWV3ZWQgdXNpbmcgdGhlIGZyYW1lcyBmZWF0dXJlLiBJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSwgeW91IGFyZSB1c2luZyBhIG5vbi1mcmFtZS1jYXBhYmxlIHdlYiBjbGllbnQuCisgICAgPC9QPgorICA8L25vZnJhbWVzPgorPC9IVE1MPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gdGhpcyBpcyB0aGUgc3R5bGVzaGVldCBjc3MgdG8gdXNlIGZvciBuZWFybHkgZXZlcnl0aGluZyAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0ibWV0cmljcy1yZWZlcmVuY2UuaHRtbCI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgdGl0bGU9IlN0eWxlIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZXNoZWV0LmNzcyIvPgorPC9oZWFkPgorPGJvZHkgc3R5bGU9InRleHQtYWxpZ246anVzdGlmeTsiPgorPGgyPk1ldHJpY3MgUmVmZXJlbmNlPC9oMj4KKzxhIGhyZWY9IiNWKEcpIj5WKEcpPC9hPiB8Cis8YSBocmVmPSIjTE9DIj5MT0M8L2E+IHwKKzxhIGhyZWY9IiNESVQiPkRJVDwvYT4gfAorPGEgaHJlZj0iI05PQSI+Tk9BPC9hPiB8Cis8YSBocmVmPSIjTlJNIj5OUk08L2E+IHwKKzxhIGhyZWY9IiNOTE0iPk5MTTwvYT4gfAorPGEgaHJlZj0iI1dNQyI+V01DPC9hPiB8Cis8YSBocmVmPSIjUkZDIj5SRkM8L2E+IHwKKzxhIGhyZWY9IiNEQUMiPkRBQzwvYT4gfAorPGEgaHJlZj0iI0ZBTk9VVCI+RkFOT1VUPC9hPiB8Cis8YSBocmVmPSIjQ0JPIj5DQk88L2E+IHwKKzxhIGhyZWY9IiNMQ09NIj5MQ09NPC9hPiB8Cis8YSBocmVmPSIjTk9DIj5OT0M8L2E+CisKKzxhIG5hbWU9IlYoRykiLz4KKzxoMz5DeWNsb21hdGljIENvbXBsZXhpdHkgLSBWKEcpPC9oMz4KK1RoaXMgbWV0cmljIHdhcyBpbnRyb2R1Y2VkIGluIHRoZSAxOTcwcyB0byBtZWFzdXJlIHRoZSBhbW91bnQgb2YgY29udHJvbAorZmxvdyBjb21wbGV4aXR5IG9yIGJyYW5jaGluZyBjb21wbGV4aXR5IGluIGEgbW9kdWxlIHN1Y2ggYXMgYQorc3Vicm91dGluZS4gSXQgZ2l2ZXMgdGhlIG51bWJlciBvZiBwYXRocyB0aGF0IG1heSBiZSB0YWtlbiB0aHJvdWdoIHRoZQorY29kZSwgYW5kIHdhcyBpbml0aWFsbHkgZGV2ZWxvcGVkIHRvIGdpdmUgc29tZSBtZWFzdXJlIG9mIHRoZSBjb3N0IG9mCitwcm9kdWNpbmcgYSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2R1bGUgYnkgZXhlY3V0aW5nIGVhY2ggcGF0aC4KKzxwLz4KK01ldGhvZHMgd2l0aCBhIGhpZ2ggY3ljbG9tYXRpYyBjb21wbGV4aXR5IHRlbmQgdG8gYmUgbW9yZSBkaWZmaWN1bHQgdG8KK3VuZGVyc3RhbmQgYW5kIG1haW50YWluLiBJbiBnZW5lcmFsIHRoZSBtb3JlIGNvbXBsZXggdGhlIG1ldGhvZHMgb2YgYW4KK2FwcGxpY2F0aW9uLCB0aGUgbW9yZSBkaWZmaWN1bHQgaXQgd2lsbCBiZSB0byB0ZXN0IGl0LCBhbmQgdGhpcyB3aWxsIGFkdmVyc2VseQorYWZmZWN0IGl0cyByZWxpYWJpbGl0eS4KKzxwLz4KK1YoRykgaXMgYSBtZWFzdXJlIG9mIHRoZSBjb250cm9sIGZsb3cgY29tcGxleGl0eSBvZiBhIG1ldGhvZCBvcgorY29uc3RydWN0b3IuICBJdCBjb3VudHMgdGhlIG51bWJlciBvZiBicmFuY2hlcyBpbiB0aGUgYm9keSBvZiB0aGUgbWV0aG9kLAorZGVmaW5lZCBhczoKKzx1bD4KKzxsaT53aGlsZSBzdGF0ZW1lbnRzOzwvbGk+Cis8bGk+aWYgc3RhdGVtZW50czs8L2xpPgorPGxpPmZvciBzdGF0ZW1lbnRzLjwvbGk+Cis8L3VsPgorCitUaGUgbWV0cmljIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gY291bnQgZWFjaCBjYXNlIG9mIGEgc3dpdGNoCitzdGF0ZW1lbnQgYXMgd2VsbC4KKworPGEgbmFtZT0iTE9DIi8+Cis8aDM+TGluZXMgb2YgQ29kZSAtIExPQzwvaDM+CisKK1RoaXMgaXMgcGVyaGFwcyB0aGUgc2ltcGxlc3Qgb2YgYWxsIHRoZSBtZXRyaWNzIHRvIGRlZmluZSBhbmQgY29tcHV0ZS4KK0NvdW50aW5nIGxpbmVzIGhhcyBhIGxvbmcgaGlzdG9yeSBhcyBhIHNvZnR3YXJlIG1ldHJpYyBkYXRpbmcgZnJvbSBiZWZvcmUKK3RoZSByaXNlIG9mIHN0cnVjdHVyZWQgcHJvZ3JhbW1pbmcsIGFuZCBpdCBpcyBzdGlsbCBpbiB3aWRlc3ByZWFkIHVzZSB0b2RheS4KK1RoZSBzaXplIG9mIGEgbWV0aG9kIGFmZmVjdHMgdGhlIGVhc2Ugd2l0aCB3aGljaCBpdCBjYW4gYmUgdW5kZXJzdG9vZCwgaXRzCityZXVzYWJpbGl0eSBhbmQgaXRzIG1haW50YWluYWJpbGl0eS4gVGhlcmUgYXJlIGEgdmFyaWV0eSBvZiB3YXlzIHRoYXQgdGhlIHNpemUKK2NhbiBiZSBjYWxjdWxhdGVkLiBUaGVzZSBpbmNsdWRlIGNvdW50aW5nIGFsbCB0aGUgbGluZXMgb2YgY29kZSwgdGhlIG51bWJlcgorb2Ygc3RhdGVtZW50cywgdGhlIGJsYW5rIGxpbmVzIG9mIGNvZGUsIHRoZSBsaW5lcyBvZiBjb21tZW50YXJ5LCBhbmQgdGhlCitsaW5lcyBjb25zaXN0aW5nIG9ubHkgb2Ygc3ludGF4IHN1Y2ggYXMgYmxvY2sgZGVsaW1pdGVycy4KKzxwLz4KK1RoaXMgbWV0cmljIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHNpemluZyBvdGhlciBjb25zdHJ1Y3RzIGFzIHdlbGwsIGZvcgorZXhhbXBsZSwgdGhlIG92ZXJhbGwgc2l6ZSBvZiBhIEphdmEgY2xhc3Mgb3IgcGFja2FnZSBjYW4gYmUgbWVhc3VyZWQgYnkKK2NvdW50aW5nIHRoZSBudW1iZXIgb2Ygc291cmNlIGxpbmVzIGl0IGNvbnNpc3RzIG9mLgorPHAvPgorTE9DIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiBhIGNvbXBpbGF0aW9uIHVuaXQgKHNvdXJjZSBmaWxlKSwKK2NsYXNzIG9yIGludGVyZmFjZSwgbWV0aG9kLCBjb25zdHJ1Y3Rvciwgb3IgZmllbGQuICBJdCBjYW4gYmUgY29uZmlndXJlZCB0bworaWdub3JlOgorPHVsPgorPGxpPmJsYW5rIGxpbmVzOzwvbGk+Cis8bGk+bGluZXMgY29uc2lzdGluZyBvbmx5IG9mIGNvbW1lbnRzOzwvbGk+Cis8bGk+bGluZXMgY29uc2lzdGluZyBvbmx5IG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgYnJhY2VzLjwvbGk+Cis8L3VsPgorCis8YSBuYW1lPSJESVQiLz4KKzxoMz5EZXB0aCBvZiBJbmhlcml0YW5jZSBIaWVyYXJjaHkgLSBESVQ8L2gzPgorCitUaGlzIG1ldHJpYyBjYWxjdWxhdGVzIGhvdyBmYXIgZG93biB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5IGEgY2xhc3MgaXMKK2RlY2xhcmVkLiBJbiBKYXZhIGFsbCBjbGFzc2VzIGhhdmUgamF2YS5sYW5nLk9iamVjdCBhcyB0aGVpciB1bHRpbWF0ZQorc3VwZXJjbGFzcywgd2hpY2ggaXMgZGVmaW5lZCB0byBoYXZlIGEgZGVwdGggb2YgMS4gU28gYSBjbGFzcyB0aGF0CitpbW1lZGlhdGVseSBleHRlbmRzIGphdmEubGFuZy5PYmplY3QgaGFzIGEgbWV0cmljIHZhbHVlIG9mIDI7IGFueSBvZiBpdHMKK3N1YmNsYXNzZXMgd2lsbCBoYXZlIGEgdmFsdWUgb2YgMywgYW5kIHNvIG9uLgorPHAvPgorQSBjbGFzcyB0aGF0IGlzIGRlZXAgd2l0aGluIHRoZSB0cmVlIGluaGVyaXRzIG1vcmUgbWV0aG9kcyBhbmQgc3RhdGUKK3ZhcmlhYmxlcywgdGhlcmVieSBpbmNyZWFzaW5nIGl0cyBjb21wbGV4aXR5IGFuZCBtYWtpbmcgaXQgZGlmZmljdWx0IHRvCitwcmVkaWN0IGl0cyBiZWhhdmlvci4gSXQgY2FuIGJlIGhhcmRlciB0byB1bmRlcnN0YW5kIGEgc3lzdGVtIHdpdGggbWFueQoraW5oZXJpdGFuY2UgbGF5ZXJzLgorPHAvPgorRElUIGlzIGRlZmluZWQgZm9yIGNsYXNzZXMgYW5kIGludGVyZmFjZXM6Cis8dWw+Cis8bGk+YWxsIGludGVyZmFjZSB0eXBlcyBoYXZlIGEgZGVwdGggb2YgMTs8L2xpPgorPGxpPnRoZSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0IGhhcyBhIGRlcHRoIG9mIDE7PC9saT4KKzxsaT5hbGwgb3RoZXIgY2xhc3NlcyBoYXZlIGEgZGVwdGggb2YgMSArIHRoZSBkZXB0aCBvZiB0aGVpciBzdXBlciBjbGFzcy48L2xpPgorPC91bD4KKworPGEgbmFtZT0iTk9BIi8+Cis8aDM+TnVtYmVyIG9mIEF0dHJpYnV0ZXMgLSBOT0E8L2gzPgorCitUaGUgbnVtYmVyIG9mIGRpc3RpbmN0IHN0YXRlIHZhcmlhYmxlcyBpbiBhIGNsYXNzIHNlcnZlcyBhcyBvbmUgbWVhc3VyZSBvZgoraXRzIGNvbXBsZXhpdHkuIFRoZSBtb3JlIHN0YXRlIGEgY2xhc3MgcmVwcmVzZW50cyB0aGUgbW9yZSBkaWZmaWN1bHQgaXQgaXMgdG8KK21haW50YWluIGludmFyaWFudHMgZm9yIGl0LiBJdCBhbHNvIGhpbmRlcnMgY29tcHJlaGVuc2liaWxpdHkgYW5kIHJldXNlLgorPHAvPgorSW4gSmF2YSwgc3RhdGUgY2FuIGJlIGV4cG9zZWQgdG8gc3ViY2xhc3NlcyB0aHJvdWdoIHByb3RlY3RlZCBmaWVsZHMsIHdoaWNoCitlbnRhaWxzIHRoYXQgdGhlIHN1YmNsYXNzIGFsc28gYmUgYXdhcmUgb2YgYW5kIG1haW50YWluIGFueSBpbnZhcmlhbnRzLiBUaGlzCitpbnRlcmZlcmVuY2Ugd2l0aCB0aGUgY2xhc3MncyBkYXRhIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGEgc291cmNlIG9mIGRlZmVjdHMKK2FuZCBoaWRkZW4gZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHN0YXRlIHZhcmlhYmxlcy4KKzxwLz4KK05PQSBpcyBkZWZpbmVkIGZvciBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzLiAgSXQgY291bnRzIHRoZSBudW1iZXIgb2YgZmllbGRzCitkZWNsYXJlZCBpbiB0aGUgY2xhc3Mgb3IgaW50ZXJmYWNlLgorCis8YSBuYW1lPSJOUk0iLz4KKzxoMz5OdW1iZXIgb2YgUmVtb3RlIE1ldGhvZHMgLSBOUk08L2gzPgorCitOUk0gaXMgZGVmaW5lZCBmb3IgY2xhc3Nlcy4gIEEgcmVtb3RlIG1ldGhvZCBjYWxsIGlzIGRlZmluZWQgYXMgYW4KK2ludm9jYXRpb24gb2YgYSBtZXRob2QgdGhhdCBpcyBub3QgZGVjbGFyZWQgaW4gYW55IG9mOgorPHVsPgorPGxpPnRoZSBjbGFzcyBpdHNlbGY7PC9saT4KKzxsaT5hIGNsYXNzIG9yIGludGVyZmFjZSB0aGF0IHRoZSBjbGFzcyBleHRlbmRzIG9yIGltcGxlbWVudHM7PC9saT4KKzxsaT5hIGNsYXNzIG9yIG1ldGhvZCB0aGF0IGV4dGVuZHMgdGhlIGNsYXNzLjwvbGk+Cis8L3VsPgorCitUaGUgdmFsdWUgaXMgdGhlIGNvdW50IG9mIGFsbCB0aGUgcmVtb3RlIG1ldGhvZCBjYWxscyBpbiBhbGwgb2YgdGhlIG1ldGhvZHMKK2FuZCBjb25zdHJ1Y3RvcnMgb2YgdGhlIGNsYXNzLgorCis8YSBuYW1lPSJOTE0iLz4KKzxoMz5OdW1iZXIgb2YgTG9jYWwgTWV0aG9kcyAtIE5MTTwvaDM+CisKK05MTSBpcyBkZWZpbmVkIGZvciBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzLiAgQSBsb2NhbCBtZXRob2QgaXMgZGVmaW5lZCBhcyBhCittZXRob2QgdGhhdCBpcyBkZWNsYXJlZCBpbiB0aGUgY2xhc3Mgb3IgaW50ZXJmYWNlLiBOTE0gY2FuIGJlIGNvbmZpZ3VyZWQgdG8KK2luY2x1ZGUgdGhlIGxvY2FsIG1ldGhvZHMgb2YgYWxsIG9mIHRoZSBjbGFzcydzIHN1cGVyY2xhc3Nlcy4gIE1ldGhvZHMgd2l0aAorcHVibGljLCBwcm90ZWN0ZWQsIHBhY2thZ2UgYW5kIHByaXZhdGUgdmlzaWJpbGl0eSBjYW4gYmUgaW5kZXBlbmRlbnRseQorY291bnRlZCBieSBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKworPGEgbmFtZT0iV01DIi8+Cis8aDM+V2VpZ2h0ZWQgTWV0aG9kcyBwZXIgQ2xhc3MgLSBXTUM8L2gzPgorCitJZiB0aGUgbnVtYmVyIG9mIG1ldGhvZHMgaW4gYSBjbGFzcyBjYW4gYmUgZGV0ZXJtaW5lZCBkdXJpbmcgdGhlIGRlc2lnbgorYW5kIG1vZGVsaW5nIHBoYXNlIG9mIGEgcHJvamVjdCwgaXQgY2FuIGJlIHVzZWQgYXMgYSBwcmVkaWN0b3Igb2YgaG93CittdWNoIHRpbWUgYW5kIGVmZm9ydCBpcyBuZWVkZWQgdG8gZGV2ZWxvcCwgZGVidWcgYW5kIG1haW50YWluIGl0LiBUaGlzCittZXRyaWMgY2FuIGJlIGZ1cnRoZXIgcmVmaW5lZCBieSBpbmNvcnBvcmF0aW5nIGEgd2VpZ2h0aW5nIGZvciB0aGUKK2NvbXBsZXhpdHkgb2YgZWFjaCBtZXRob2QuIFRoZSB1c3VhbCB3ZWlnaHRpbmcgaXMgZ2l2ZW4gYnkgdGhlIGN5Y2xvbWF0aWMKK2NvbXBsZXhpdHkgb2YgdGhlIG1ldGhvZC4KKzxwLz4KK1RoZSBzdWJjbGFzc2VzIG9mIGEgY2xhc3MgaW5oZXJpdCBhbGwgb2YgaXRzIHB1YmxpYyBhbmQgcHJvdGVjdGVkIG1ldGhvZHMsCithbmQgcG9zc2libHkgaXRzIHBhY2thZ2UgbWV0aG9kcyBhcyB3ZWxsLCBzbyB0aGUgbnVtYmVyIG9mIG1ldGhvZHMgYQorY2xhc3MgaGFzIGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvbXBsZXhpdHkgb2YgaXRzIHN1YmNsYXNzZXMuIENsYXNzZXMgd2l0aAorbGFyZ2UgbnVtYmVycyBvZiBtZXRob2RzIGFyZSBvZnRlbiBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24sCityZWR1Y2luZyB0aGUgYWJpbGl0eSB0byByZXVzZSB0aGVtLgorPHAvPgorVGhlIGRlZmluaXRpb24gb2YgV01DIGlzIGJhc2VkIHVwb24gTkxNLCBhbmQgaXQgcHJvdmlkZXMgdGhlIHNhbWUKK2NvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgY291bnRpbmcgaW5oZXJpdGVkIG1ldGhvZHMgYW5kIG9mIHZhcnlpbmcKK3Zpc2liaWxpdHkuIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCBOTE0gYWx3YXlzIGNvdW50cyBlYWNoIG1ldGhvZCBhcyAxLAord2hlcmVhcyBXTUMgd2lsbCB3ZWlnaHQgZWFjaCBtZXRob2QuIFRoZXJlIGFyZSB0d28gd2VpZ2h0aW5nIHNjaGVtZXM6Cis8dWw+Cis8bGk+VihHKSB0aGUgY3ljbG9tYXRpYyBjb21wbGV4aXR5IG9mIHRoZSBtZXRob2QgaXMgdXNlZCBhcyBpdHMgd2VpZ2h0LgorICAgTWV0aG9kcyBmcm9tIGNsYXNzIGZpbGVzIGFyZSBnaXZlbiBhIFYoRykgb2YgMS48L2xpPgorPGxpPnRoZSBhcml0eSwgb3IgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIG9mIHRoZSBtZXRob2QgYXJlIHVzZWQgdG8KKyAgIGRldGVybWluZSB0aGUgd2VpZ2h0LjwvbGk+Cis8L3VsPgorCis8YSBuYW1lPSJSRkMiLz4KKzxoMz5SZXNwb25zZSBGb3IgQ2xhc3MgLSBSRkM8L2gzPgorCitUaGUgcmVzcG9uc2Ugc2V0IG9mIGEgY2xhc3MgaXMgdGhlIHNldCBvZiBhbGwgbWV0aG9kcyB0aGF0IGNhbiBiZSBpbnZva2VkIGFzCithIHJlc3VsdCBvZiBhIG1lc3NhZ2Ugc2VudCB0byBhbiBvYmplY3Qgb2YgdGhlIGNsYXNzLiBUaGlzIGluY2x1ZGVzIG1ldGhvZHMKK2luIHRoZSBjbGFzcydzIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBhbmQgbWV0aG9kcyB0aGF0IGNhbiBiZSBpbnZva2VkIG9uCitvdGhlciBvYmplY3RzLiBUaGUgUmVzcG9uc2UgRm9yIENsYXNzIG1ldHJpYyBpcyBkZWZpbmVkIHRvIGJlIHNpemUgb2YgdGhlCityZXNwb25zZSBzZXQgZm9yIHRoZSBjbGFzcy4gQSBjbGFzcyB3aGljaCBwcm92aWRlcyBhIGxhcmdlciByZXNwb25zZSBzZXQgaXMKK2NvbnNpZGVyZWQgdG8gYmUgbW9yZSBjb21wbGV4IHRoYW4gb25lIHdpdGggYSBzbWFsbGVyIHJlc3BvbnNlIHNldC4KKzxwLz4KK09uZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBpZiBhIG1ldGhvZCBjYWxsIG9uIGEgY2xhc3MgY2FuIHJlc3VsdCBpbiBhIGxhcmdlCitudW1iZXIgb2YgZGlmZmVyZW50IG1ldGhvZCBjYWxscyBvbiB0aGUgdGFyZ2V0IGFuZCBvdGhlciBjbGFzc2VzLCB0aGVuIGl0CitjYW4gYmUgaGFyZGVyIHRvIHRlc3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBjbGFzcyBhbmQgZGVidWcgcHJvYmxlbXMuIEl0IHdpbGwKK3R5cGljYWxseSByZXF1aXJlIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhhdAorb2JqZWN0cyBvZiB0aGUgY2xhc3MgY2FuIGhhdmUgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgorPHAvPgorUkZDIGlzIGRlZmluZWQgYXMgdGhlIHN1bSBvZiBOTE0gYW5kIE5STSBmb3IgdGhlIGNsYXNzLiAgVGhlIGxvY2FsIG1ldGhvZHMKK2luY2x1ZGUgYWxsIG9mIHRoZSBwdWJsaWMsIHByb3RlY3RlZCwgcGFja2FnZSBhbmQgcHJpdmF0ZSBtZXRob2RzLCBidXQgbm90CittZXRob2RzIGRlY2xhcmVkIG9ubHkgaW4gYSBzdXBlcmNsYXNzLgorCis8YSBuYW1lPSJEQUMiLz4KKzxoMz5EYXRhIEFic3RyYWN0aW9uIENvdXBsaW5nIC0gREFDPC9oMz4KKworREFDIGlzIGRlZmluZWQgZm9yIGNsYXNzZXMgYW5kIGludGVyZmFjZXMuICBJdCBjb3VudHMgdGhlIG51bWJlciBvZiByZWZlcmVuY2UKK3R5cGVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIGZpZWxkIGRlY2xhcmF0aW9ucyBvZiB0aGUgY2xhc3Mgb3IgaW50ZXJmYWNlLiAgVGhlCitjb21wb25lbnQgdHlwZXMgb2YgYXJyYXlzIGFyZSBhbHNvIGNvdW50ZWQuICBBbnkgZmllbGQgd2l0aCBhIHR5cGUgdGhhdCBpcworZWl0aGVyIGEgc3VwZXJ0eXBlIG9yIGEgc3VidHlwZSBvZiB0aGUgY2xhc3MgaXMgbm90IGNvdW50ZWQuCisKKzxhIG5hbWU9IkZBTk9VVCIvPgorPGgzPkZhbiBPdXQgLSBGQU5PVVQ8L2gzPgorCitGQU5PVVQgaXMgZGVmaW5lZCBmb3IgY2xhc3NlcyBhbmQgaW50ZXJmYWNlcywgY29uc3RydWN0b3JzIGFuZCBtZXRob2RzLiBJdAorY291bnRzIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlIHR5cGVzIHRoYXQgYXJlIHVzZWQgaW46Cis8dWw+Cis8bGk+ZmllbGQgZGVjbGFyYXRpb25zOzwvbGk+Cis8bGk+Zm9ybWFsIHBhcmFtZXRlcnMgYW5kIHJldHVybiB0eXBlczs8L2xpPgorPGxpPnRocm93cyBkZWNsYXJhdGlvbnM7PC9saT4KKzxsaT5sb2NhbCB2YXJpYWJsZXMuPC9saT4KKzwvdWw+CisKK1RoZSBjb21wb25lbnQgdHlwZXMgb2YgYXJyYXlzIGFyZSBhbHNvIGNvdW50ZWQuIEFueSB0eXBlIHRoYXQgaXMgZWl0aGVyIGEKK3N1cGVydHlwZSBvciBhIHN1YnR5cGUgb2YgdGhlIGNsYXNzIGlzIG5vdCBjb3VudGVkLgorCis8YSBuYW1lPSJDQk8iLz4KKzxoMz5Db3VwbGluZyBCZXR3ZWVuIE9iamVjdHMgLSBDQk88L2gzPgorCitXaGVuIG9uZSBvYmplY3Qgb3IgY2xhc3MgdXNlcyBhbm90aGVyIG9iamVjdCBvciBjbGFzcyB0aGV5IGFyZSBzYWlkIHRvIGJlCitjb3VwbGVkLiBPbmUgbWFqb3Igc291cmNlIG9mIGNvdXBsaW5nIGlzIHRoYXQgYmV0d2VlbiBhIHN1cGVyY2xhc3MgYW5kIGEKK3N1YmNsYXNzLiBBIGNvdXBsaW5nIGlzIGFsc28gaW50cm9kdWNlZCB3aGVuIGEgbWV0aG9kIG9yIGZpZWxkIGluIGFub3RoZXIKK2NsYXNzIGlzIGFjY2Vzc2VkLCBvciB3aGVuIGFuIG9iamVjdCBvZiBhbm90aGVyIGNsYXNzIGlzIHBhc3NlZCBpbnRvIG9yIG91dAorb2YgYSBtZXRob2QgaW52b2NhdGlvbi4gQ291cGxpbmcgQmV0d2VlbiBPYmplY3RzIGlzIGEgbWVhc3VyZSBvZiB0aGUKK25vbi1pbmhlcml0YW5jZSBjb3VwbGluZyBiZXR3ZWVuIHR3byBvYmplY3RzLgorPHAvPgorQSBoaWdoIHZhbHVlIG9mIGNvdXBsaW5nIHJlZHVjZXMgdGhlIG1vZHVsYXJpdHkgb2YgdGhlIGNsYXNzIGFuZCBtYWtlcworcmV1c2UgbW9yZSBkaWZmaWN1bHQuIFRoZSBtb3JlIGluZGVwZW5kZW50IGEgY2xhc3MgaXMgdGhlIG1vcmUgbGlrZWx5IGl0IGlzCit0aGF0IGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcmV1c2UgaXQgaW4gYW5vdGhlciBwYXJ0IG9mIHRoZSBzeXN0ZW0uIFdoZW4gYQorY2xhc3MgaXMgY291cGxlZCB0byBhbm90aGVyIGNsYXNzIGl0IGJlY29tZXMgc2Vuc2l0aXZlIHRvIGNoYW5nZXMgaW4gdGhhdAorY2xhc3MsIHRoZXJlYnkgbWFraW5nIG1haW50ZW5hbmNlIGZvciBkaWZmaWN1bHQuIEluIGFkZGl0aW9uLCBhIGNsYXNzIHRoYXQgaXMKK292ZXJseSBkZXBlbmRlbnQgb24gb3RoZXIgY2xhc3NlcyBjYW4gYmUgZGlmZmljdWx0IHRvIHVuZGVyc3RhbmQgYW5kIHRlc3QgaW4KK2lzb2xhdGlvbi4KKzxwLz4KK0NCTyBpcyBkZWZpbmVkIGZvciBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzLCBjb25zdHJ1Y3RvcnMgYW5kIG1ldGhvZHMuIEl0Citjb3VudHMgdGhlIG51bWJlciBvZiByZWZlcmVuY2UgdHlwZXMgdGhhdCBhcmUgdXNlZCBpbjoKKzx1bD4KKzxsaT5maWVsZCBkZWNsYXJhdGlvbnM8L2xpPgorPGxpPmZvcm1hbCBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdHlwZXM8L2xpPgorPGxpPnRocm93cyBkZWNsYXJhdGlvbnM8L2xpPgorPGxpPmxvY2FsIHZhcmlhYmxlczwvbGk+Cis8L3VsPgorCitJdCBhbHNvIGNvdW50czoKKzx1bD4KKzxsaT50eXBlcyBmcm9tIHdoaWNoIGZpZWxkIGFuZCBtZXRob2Qgc2VsZWN0aW9ucyBhcmUgbWFkZTwvbGk+Cis8L3VsPgorCitUaGUgY29tcG9uZW50IHR5cGVzIG9mIGFycmF5cyBhcmUgYWxzbyBjb3VudGVkLiBBbnkgdHlwZSB0aGF0IGlzIGVpdGhlciBhCitzdXBlcnR5cGUgb3IgYSBzdWJ0eXBlIG9mIHRoZSBjbGFzcyBpcyBub3QgY291bnRlZC4KKworPGEgbmFtZT0iTENPTSIvPgorPGgzPkxhY2sgb2YgQ29oZXNpb24gT2YgTWV0aG9kcyAtIExDT008L2gzPgorCitUaGUgY29oZXNpb24gb2YgYSBjbGFzcyBpcyB0aGUgZGVncmVlIHRvIHdoaWNoIGl0cyBtZXRob2RzIGFyZSByZWxhdGVkIHRvCitlYWNoIG90aGVyLiBJdCBpcyBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyB0aGUgcGF0dGVybiBvZiBzdGF0ZSB2YXJpYWJsZQorYWNjZXNzZXMgd2l0aGluIHRoZSBzZXQgb2YgbWV0aG9kcy4gSWYgYWxsIHRoZSBtZXRob2RzIGFjY2VzcyB0aGUgc2FtZSBzdGF0ZQordmFyaWFibGVzIHRoZW4gdGhleSBoYXZlIGhpZ2ggY29oZXNpb247IGlmIHRoZXkgYWNjZXNzIGRpc2pvaW50IHNldHMgb2YKK3ZhcmlhYmxlcyB0aGVuIHRoZSBjb2hlc2lvbiBpcyBsb3cuIEFuIGV4dHJlbWUgZXhhbXBsZSBvZiBsb3cgY29oZXNpb24KK3dvdWxkIGJlIGlmIG5vbmUgb2YgdGhlIG1ldGhvZHMgYWNjZXNzZWQgYW55IG9mIHRoZSBzdGF0ZSB2YXJpYWJsZXMuCisKK0lmIGEgY2xhc3MgZXhoaWJpdHMgbG93IG1ldGhvZCBjb2hlc2lvbiBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVzaWduIG9mIHRoZQorY2xhc3MgaGFzIHByb2JhYmx5IGJlZW4gcGFydGl0aW9uZWQgaW5jb3JyZWN0bHksIGFuZCBjb3VsZCBiZW5lZml0IGJ5IGJlaW5nCitzcGxpdCBpbnRvIG1vcmUgY2xhc3NlcyB3aXRoIGluZGl2aWR1YWxseSBoaWdoZXIgY29oZXNpb24uIE9uIHRoZSBvdGhlcgoraGFuZCwgYSBoaWdoIHZhbHVlIG9mIGNvaGVzaW9uIChhIGxvdyBsYWNrIG9mIGNvaGVzaW9uKSBpbXBsaWVzIHRoYXQgdGhlCitjbGFzcyBpcyB3ZWxsIGRlc2lnbmVkLiBBIGNvaGVzaXZlIGNsYXNzIHdpbGwgdGVuZCB0byBwcm92aWRlIGEgaGlnaCBkZWdyZWUKK29mIGVuY2Fwc3VsYXRpb24sIHdoZXJlYXMgYSBsYWNrIG9mIGNvaGVzaW9uIGRlY3JlYXNlcyBlbmNhcHN1bGF0aW9uIGFuZAoraW5jcmVhc2VzIGNvbXBsZXhpdHkuCis8cC8+CitBbm90aGVyIGZvcm0gb2YgY29oZXNpb24gdGhhdCBpcyB1c2VmdWwgZm9yIEphdmEgcHJvZ3JhbXMgaXMgY29oZXNpb24KK2JldHdlZW4gbmVzdGVkIGFuZCBlbmNsb3NpbmcgY2xhc3Nlcy4gQSBuZXN0ZWQgY2xhc3MgdGhhdCBoYXMgdmVyeSBsb3cKK2NvaGVzaW9uIHdpdGggaXRzIGVuY2xvc2luZyBjbGFzcyB3b3VsZCBwcm9iYWJseSBiZXR0ZXIgZGVzaWduZWQgYXMgYSBwZWVyCitjbGFzcyByYXRoZXIgdGhhbiBhIG5lc3RlZCBjbGFzcy4KKzxwLz4KK0xDT00gaXMgZGVmaW5lZCBmb3IgY2xhc3Nlcy4gT3BlcmF0aW9uYWxseSwgTENPTSB0YWtlcyBlYWNoIHBhaXIgb2YKK21ldGhvZHMgaW4gdGhlIGNsYXNzIGFuZCBkZXRlcm1pbmVzIHRoZSBzZXQgb2YgZmllbGRzIHRoZXkgZWFjaCBhY2Nlc3MuIElmCit0aGV5IGhhdmUgZGlzam9pbnQgc2V0cyBvZiBmaWVsZCBhY2Nlc3NlcyBpbmNyZWFzZSB0aGUgY291bnQgUCBieSBvbmUuIElmIHRoZXkKK3NoYXJlIGF0IGxlYXN0IG9uZSBmaWVsZCBhY2Nlc3MgdGhlbiBpbmNyZWFzZSBRIGJ5IG9uZS4gQWZ0ZXIgY29uc2lkZXJpbmcKK2VhY2ggcGFpciBvZiBtZXRob2RzLAorTENPTSA9IChQID4gUSkgPyAoUCAtIFEpIDogMAorPHAvPgorSW5kaXJlY3QgYWNjZXNzIHRvIGZpZWxkcyB2aWEgbG9jYWwgbWV0aG9kcyBjYW4gYmUgY29uc2lkZXJlZCBieSBzZXR0aW5nIGEKK21ldHJpYyBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4KKworPGEgbmFtZT0iTk9DIi8+Cis8aDM+TnVtYmVyIE9mIENsYXNzZXMgLSBOT0M8L2gzPgorCitUaGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBzeXN0ZW0gY2FuIGJlIGVzdGltYXRlZCBieSBjYWxjdWxhdGluZyB0aGUgbnVtYmVyCitvZiBjbGFzc2VzIGl0IGNvbnRhaW5zLiBBIGxhcmdlIHN5c3RlbSB3aXRoIG1vcmUgY2xhc3NlcyBpcyBtb3JlIGNvbXBsZXgKK3RoYW4gYSBzbWFsbGVyIG9uZSBiZWNhdXNlIHRoZSBudW1iZXIgb2YgcG90ZW50aWFsIGludGVyYWN0aW9ucyBiZXR3ZWVuCitvYmplY3RzIGlzIGhpZ2hlci4gVGhpcyByZWR1Y2VzIHRoZSBjb21wcmVoZW5zaWJpbGl0eSBvZiB0aGUgc3lzdGVtIHdoaWNoCitpbiB0dXJuIG1ha2VzIGl0IGhhcmRlciB0byB0ZXN0LCBkZWJ1ZyBhbmQgbWFpbnRhaW4uCis8cC8+CitJZiB0aGUgbnVtYmVyIG9mIGNsYXNzZXMgaW4gdGhlIHN5c3RlbSBjYW4gYmUgcHJvamVjdGVkIGR1cmluZyB0aGUgaW5pdGlhbAorZGVzaWduIHBoYXNlIG9mIHRoZSBwcm9qZWN0IGl0IGNhbiBzZXJ2ZSBhcyBhIGJhc2UgZm9yIGVzdGltYXRpbmcgdGhlIHRvdGFsCitlZmZvcnQgYW5kIGNvc3Qgb2YgZGV2ZWxvcGluZywgZGVidWdnaW5nIGFuZCBtYWludGFpbmluZyB0aGUgc3lzdGVtLgorPHAvPgorVGhlIE5PQyBtZXRyaWMgY2FuIGFsc28gdXNlZnVsbHkgYmUgYXBwbGllZCBhdCB0aGUgcGFja2FnZSBhbmQgY2xhc3MgbGV2ZWwKK2FzIHdlbGwgYXMgdGhlIHRvdGFsIHN5c3RlbS4KKzxwLz4KK05PQ0wgaXMgZGVmaW5lZCBmb3IgY2xhc3MgYW5kIGludGVyZmFjZXMuIEl0IGNvdW50cyB0aGUgbnVtYmVyIG9mIGNsYXNzZXMgb3IKK2ludGVyZmFjZXMgdGhhdCBhcmUgZGVjbGFyZWQuIFRoaXMgaXMgdXN1YWxseSAxLCBidXQgbmVzdGVkIGNsYXNzIGRlY2xhcmF0aW9ucword2lsbCBpbmNyZWFzZSB0aGlzIG51bWJlci4KKzwvYm9keT4KKzwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIHRoaXMgaXMgdGhlIHN0eWxlc2hlZXQgY3NzIHRvIHVzZSBmb3IgbmVhcmx5IGV2ZXJ5dGhpbmcgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9InN0eWxlc2hlZXQuY3NzIj4KKyAgICAuYmFubmVyY2VsbCB7CisgICAgICBib3JkZXI6IDBweDsKKyAgICAgIHBhZGRpbmc6IDBweDsKKyAgICB9CisgICAgYm9keSB7CisgICAgICBtYXJnaW4tbGVmdDogMTA7CisgICAgICBtYXJnaW4tcmlnaHQ6IDEwOworICAgICAgZm9udDpub3JtYWwgODAlIGFyaWFsLGhlbHZldGljYSxzYW5zZXJpZjsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6I0ZGRkZGRjsKKyAgICAgIGNvbG9yOiMwMDAwMDA7CisgICAgfQorICAgIC5hIHRkIHsKKyAgICAgIGJhY2tncm91bmQ6ICNlZmVmZWY7CisgICAgfQorICAgIC5iIHRkIHsKKyAgICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgfQorICAgIHRoLCB0ZCB7CisgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKKyAgICB9CisgICAgdGggeworICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsKKyAgICAgIGJhY2tncm91bmQ6ICNjY2M7CisgICAgICBjb2xvcjogYmxhY2s7CisgICAgfQorICAgIHRhYmxlLCB0aCwgdGQgeworICAgICAgZm9udC1zaXplOjEwMCU7CisgICAgICBib3JkZXI6IG5vbmUKKyAgICB9CisgICAgdGFibGUubG9nIHRyIHRkLCB0ciB0aCB7CisKKyAgICB9CisgICAgaDIgeworICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsKKyAgICAgIGZvbnQtc2l6ZToxNDAlOworICAgICAgbWFyZ2luLWJvdHRvbTogNTsKKyAgICB9CisgICAgaDMgeworICAgICAgZm9udC1zaXplOjEwMCU7CisgICAgICBmb250LXdlaWdodDpib2xkOworICAgICAgYmFja2dyb3VuZDogIzUyNUQ3NjsKKyAgICAgIGNvbG9yOiB3aGl0ZTsKKyAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICAgIHBhZGRpbmc6IDVweDsKKyAgICAgIG1hcmdpbi1yaWdodDogMnB4OworICAgICAgbWFyZ2luLWxlZnQ6IDJweDsKKyAgICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAgfQorICAgIC5FcnJvciB7CisgICAgICBmb250LXdlaWdodDpib2xkOyBjb2xvcjpyZWQ7CisgICAgfQorCis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBwcmludCB0aGUgbWV0cmljcyBvZiB0aGUgY2xhc3MgLS0+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjbGFzcyIgbW9kZT0iY2xhc3MuZGV0YWlscyI+CisgIDwhLS14c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IihhbmNlc3Rvcjo6cGFja2FnZSlbbGFzdCgpXS9AbmFtZSIvLS0+CisgIDx4c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IkBwYWNrYWdlIi8+CisgIDxIVE1MPgorICAgIDxIRUFEPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IiRwYWNrYWdlLm5hbWUiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9IRUFEPgorICAgIDxCT0RZPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhZ2VIZWFkZXIiLz4KKworICAgICAgPEgzPkNsYXNzIDx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWUgPSAndW5uYW1lZCBwYWNrYWdlJykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcGFja2FnZS5uYW1lIi8+LjwveHNsOmlmPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvSDM+CisgICAgICA8dGFibGUgY2xhc3M9ImxvZyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFsbC5tZXRyaWNzLmhlYWRlciIvPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByaW50Lm1ldHJpY3MiLz4KKyAgICAgIDwvdGFibGU+CisKKyAgICAgIDxIMz5NZXRob2RzPC9IMz4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibG9nIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibWV0aG9kLm1ldHJpY3MuaGVhZGVyIi8+CisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kIiBtb2RlPSJwcmludC5tZXRyaWNzIi8+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFnZUZvb3RlciIvPgorICAgIDwvQk9EWT4KKyAgPC9IVE1MPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLSBsaXN0IG9mIGNsYXNzZXMgaW4gYSBwYWNrYWdlIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFja2FnZSIgbW9kZT0iY2xhc3Nlcy5saXN0Ij4KKyAgPEhUTUw+CisgICAgPEhFQUQ+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWNrYWdlLm5hbWUiIHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9IRUFEPgorICAgIDxCT0RZPgorICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBub3dyYXA9Im5vd3JhcCI+CisgICAgICAgICAgICA8SDI+PGEgaHJlZj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPjwvSDI+CisgICAgICAgICAgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisKKyAgICAgIDxIMj5DbGFzc2VzPC9IMj4KKyAgICAgIDxUQUJMRSBXSURUSD0iMTAwJSI+CisgICAgICAgIDwhLS0geGFsYW4tbm9kZXNldDpub2Rlc2V0IGZvciBYYWxhbiAxLjIuMiAtLT4KKyAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZG9jdHJlZS9jbGFzc2VzL2NsYXNzW0BwYWNrYWdlID0gY3VycmVudCgpL0BuYW1lXSI+CisgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGQgbm93cmFwPSJub3dyYXAiPgorICAgICAgICAgICAgICA8YSBocmVmPSJ7QG5hbWV9Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICA8L1RBQkxFPgorICAgIDwvQk9EWT4KKyAgPC9IVE1MPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLQorICBDcmVhdGVzIGFuIGFsbC1jbGFzc2VzLmh0bWwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGluayB0byBhbGwgcGFja2FnZS1zdW1tYXJ5Lmh0bWwKKyAgb24gZWFjaCBjbGFzcy4KKy0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0cmljcyIgbW9kZT0iYWxsLmNsYXNzZXMiPgorICA8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjcmVhdGUuc3R5bGVzaGVldC5saW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhY2thZ2UubmFtZSIgc2VsZWN0PSInJyIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICA8aDI+Q2xhc3NlczwvaDI+CisgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZG9jdHJlZS9jbGFzc2VzL2NsYXNzIj4KKyAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhbGwuY2xhc3NlcyIvPgorICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgPC90YWJsZT4KKyAgICA8L2JvZHk+CisgIDwvaHRtbD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjbGFzcyIgbW9kZT0iYWxsLmNsYXNzZXMiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IkBwYWNrYWdlIi8+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJjbGFzcy5uYW1lIiBzZWxlY3Q9IkBuYW1lIi8+CisgIDx0cj4KKyAgICA8dGQgbm93cmFwPSJub3dyYXAiPgorICAgICAgPGEgdGFyZ2V0PSJjbGFzc0ZyYW1lIj4KKyAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+CisgICAgICAgICAgPHhzbDppZiB0ZXN0PSJub3QoJHBhY2thZ2UubmFtZT0ndW5uYW1lZCBwYWNrYWdlJykiPgorICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InRyYW5zbGF0ZSgkcGFja2FnZS5uYW1lLCcuJywnLycpIi8+PHhzbDp0ZXh0Pi88L3hzbDp0ZXh0PgorICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkY2xhc3MubmFtZSIvPjx4c2w6dGV4dD4uaHRtbDwveHNsOnRleHQ+CisgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjbGFzcy5uYW1lIi8+CisgICAgICA8L2E+CisgICAgPC90ZD4KKyAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tCisgIENyZWF0ZXMgYW4gaHRtbCBmaWxlIHRoYXQgY29udGFpbnMgYSBsaW5rIHRvIGFsbCBwYWNrYWdlLXN1bW1hcnkuaHRtbCBmaWxlcyBvbgorICBlYWNoIHBhY2thZ2UgZXhpc3Rpbmcgb24gdGVzdHN1aXRlcy4KKyAgQGJ1ZyB0aGVyZSB3aWxsIGJlIGEgcHJvYmxlbSBoZXJlLCBJIGRvbid0IGtub3cgeWV0IGhvdyB0byBoYW5kbGUgdW5uYW1lZCBwYWNrYWdlIDooCistLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1ldHJpY3MiIG1vZGU9ImFsbC5wYWNrYWdlcyI+CisgIDxodG1sPgorICAgIDxoZWFkPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9Ii4vcGFja2FnZS9AbmFtZSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICA8aDI+PGEgaHJlZj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPkhvbWU8L2E+PC9oMj4KKyAgICAgIDxoMj5QYWNrYWdlczwvaDI+CisgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuLy9wYWNrYWdlW25vdCguL0BuYW1lID0gJ3VubmFtZWQgcGFja2FnZScpXSIgbW9kZT0iYWxsLnBhY2thZ2VzIj4KKyAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgICA8L3RhYmxlPgorICAgIDwvYm9keT4KKyAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InBhY2thZ2UiIG1vZGU9ImFsbC5wYWNrYWdlcyI+CisgIDx0cj4KKyAgICA8dGQgbm93cmFwPSJub3dyYXAiPgorICAgICAgPGEgaHJlZj0ie3RyYW5zbGF0ZShAbmFtZSwnLicsJy8nKX0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+CisgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICAgICAgPC9hPgorICAgIDwvdGQ+CisgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJtZXRyaWNzIiBtb2RlPSJvdmVydmlldy5wYWNrYWdlcyI+CisgIDxodG1sPgorICAgIDxoZWFkPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IicnIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9Im9wZW4oJ2FsbGNsYXNzZXMtZnJhbWUuaHRtbCcsJ2NsYXNzTGlzdEZyYW1lJykiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIi8+CisgICAgPGgzPlN1bW1hcnk8L2gzPgorICAgIDx0YWJsZSBjbGFzcz0ibG9nIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgIDx0cj4KKyAgICAgIDx0aD48YSBocmVmPSJtZXRyaWNzLXJlZmVyZW5jZS5odG1sI1YoRykiPlYoRyk8L2E+PC90aD4KKyAgICAgIDx0aD48YSBocmVmPSJtZXRyaWNzLXJlZmVyZW5jZS5odG1sI0xPQyI+TE9DPC9hPjwvdGg+CisgICAgICA8dGg+PGEgaHJlZj0ibWV0cmljcy1yZWZlcmVuY2UuaHRtbCNESVQiPkRJVDwvYT48L3RoPgorICAgICAgPHRoPjxhIGhyZWY9Im1ldHJpY3MtcmVmZXJlbmNlLmh0bWwjTk9BIj5OT0E8L2E+PC90aD4KKyAgICAgIDx0aD48YSBocmVmPSJtZXRyaWNzLXJlZmVyZW5jZS5odG1sI05STSI+TlJNPC9hPjwvdGg+CisgICAgICA8dGg+PGEgaHJlZj0ibWV0cmljcy1yZWZlcmVuY2UuaHRtbCNOTE0iPk5MTTwvYT48L3RoPgorICAgICAgPHRoPjxhIGhyZWY9Im1ldHJpY3MtcmVmZXJlbmNlLmh0bWwjV01DIj5XTUM8L2E+PC90aD4KKyAgICAgIDx0aD48YSBocmVmPSJtZXRyaWNzLXJlZmVyZW5jZS5odG1sI1JGQyI+UkZDPC9hPjwvdGg+CisgICAgICA8dGg+PGEgaHJlZj0ibWV0cmljcy1yZWZlcmVuY2UuaHRtbCNEQUMiPkRBQzwvYT48L3RoPgorICAgICAgPHRoPjxhIGhyZWY9Im1ldHJpY3MtcmVmZXJlbmNlLmh0bWwjRkFOT1VUIj5GQU5PVVQ8L2E+PC90aD4KKyAgICAgIDx0aD48YSBocmVmPSJtZXRyaWNzLXJlZmVyZW5jZS5odG1sI0NCTyI+Q0JPPC9hPjwvdGg+CisgICAgICA8dGg+PGEgaHJlZj0ibWV0cmljcy1yZWZlcmVuY2UuaHRtbCNMQ09NIj5MQ09NPC9hPjwvdGg+CisgICAgICA8dGg+PGEgaHJlZj0ibWV0cmljcy1yZWZlcmVuY2UuaHRtbCNOT0NMIj5OT0NMPC9hPjwvdGg+CisgICAgPC90cj4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByaW50Lm1ldHJpY3MiLz4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KKyAgICA8dHI+CisgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyI+CisgICAgTm90ZTogTWV0cmljcyBldmFsdWF0ZSB0aGUgcXVhbGl0eSBvZiBzb2Z0d2FyZSBieSBhbmFseXppbmcgdGhlIHByb2dyYW0gc291cmNlIGFuZCBxdWFudGlmeWluZworICAgIHZhcmlvdXMga2luZCBvZiBjb21wbGV4aXR5LiBDb21wbGV4aXR5IGlzIGEgY29tbW9uIHNvdXJjZSBvZiBwcm9ibGVtcyBhbmQgZGVmZWN0cyBpbiBzb2Z0d2FyZS4KKyAgICBIaWdoIGNvbXBsZXhpdHkgbWFrZXMgaXQgbW9yZSBkaWZmaWN1bHQgdG8gZGV2ZWxvcCwgdW5kZXJzdGFuZCwgbWFpbnRhaW4sIGV4dGVuZCwgdGVzdCBhbmQgZGVidWcKKyAgICBhIHByb2dyYW0uCisgICAgPHAvPgorICAgIFRoZSBwcmltYXJ5IHVzZSBvZiBtZXRyaWNzIGlzIHRvIGZvY3VzIHlvdXIgYXR0ZW50aW9uIG9uIHRob3NlIHBhcnRzIG9mIGNvZGUgdGhhdCBwb3RlbnRpYWxseSBhcmUKKyAgICBjb21wbGV4aXR5IGhvdCBzcG90cy4gT25jZSB0aGUgY29tcGxleCBhcmVhcyB5b3VyIHByb2dyYW0gaGF2ZSBiZWVuIHVuY292ZXJlZCwgeW91IGNhbiB0YWtlIHJlbWVkaWFsCisgICAgYWN0aW9ucy4KKyAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBtZXRyaWNzIGFuZCB0aGVpciBtZWFuaW5nLCBwbGVhc2UgY29uc3VsdAorICAgIE1ldGFtYXRhIE1ldHJpY3MgbWFudWFsLgorICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8L3RhYmxlPgorCisgICAgPGgzPlBhY2thZ2VzPC9oMz4KKyAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjIiIHdpZHRoPSIxMDAlIj4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbGwubWV0cmljcy5oZWFkZXIiLz4KKyAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIuLy9wYWNrYWdlW25vdChAbmFtZSA9ICd1bm5hbWVkIHBhY2thZ2UnKV0iPgorICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByaW50Lm1ldHJpY3MiLz4KKyAgICAgIDwveHNsOmZvci1lYWNoPgorICAgIDwvdGFibGU+CisgICAgPCEtLSBAYnVnIHRoZXJlIGNvdWxkIHNvbWUgY2xhc3NlcyBhdCB0aGlzIGxldmVsIChjbGFzc2VzIGluIHVubmFtZWQgcGFja2FnZSkgLS0+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhZ2VGb290ZXIiLz4KKyAgICA8L2JvZHk+CisgICAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InBhY2thZ2UiIG1vZGU9InBhY2thZ2Uuc3VtbWFyeSI+CisgIDxIVE1MPgorICAgIDxIRUFEPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNyZWF0ZS5zdHlsZXNoZWV0LmxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIiBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwvSEVBRD4KKyAgICA8Ym9keSBvbmxvYWQ9Im9wZW4oJ3BhY2thZ2UtZnJhbWUuaHRtbCcsJ2NsYXNzTGlzdEZyYW1lJykiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhZ2VIZWFkZXIiLz4KKyAgICAgIDwhLS0gY3JlYXRlIGFuIGFuY2hvciB0byB0aGlzIHBhY2thZ2UgbmFtZSAtLT4KKyAgICAgIDxoMz5QYWNrYWdlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvaDM+CisKKyAgICAgIDx0YWJsZSBjbGFzcz0ibG9nIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMiIgd2lkdGg9IjEwMCUiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWxsLm1ldHJpY3MuaGVhZGVyIi8+CisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJpbnQubWV0cmljcyIvPgorICAgICAgPC90YWJsZT4KKworICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgorICAgICAgPHRyPgorICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyI+CisgICAgICBOb3RlOiBNZXRyaWNzIGV2YWx1YXRlIHRoZSBxdWFsaXR5IG9mIHNvZnR3YXJlIGJ5IGFuYWx5emluZyB0aGUgcHJvZ3JhbSBzb3VyY2UgYW5kIHF1YW50aWZ5aW5nCisgICAgICB2YXJpb3VzIGtpbmQgb2YgY29tcGxleGl0eS4gQ29tcGxleGl0eSBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgcHJvYmxlbXMgYW5kIGRlZmVjdHMgaW4gc29mdHdhcmUuCisgICAgICBIaWdoIGNvbXBsZXhpdHkgbWFrZXMgaXQgbW9yZSBkaWZmaWN1bHQgdG8gZGV2ZWxvcCwgdW5kZXJzdGFuZCwgbWFpbnRhaW4sIGV4dGVuZCwgdGVzdCBhbmQgZGVidWcKKyAgICAgIGEgcHJvZ3JhbS4KKyAgICAgIDxwLz4KKyAgICAgIFRoZSBwcmltYXJ5IHVzZSBvZiBtZXRyaWNzIGlzIHRvIGZvY3VzIHlvdXIgYXR0ZW50aW9uIG9uIHRob3NlIHBhcnRzIG9mIGNvZGUgdGhhdCBwb3RlbnRpYWxseSBhcmUKKyAgICAgIGNvbXBsZXhpdHkgaG90IHNwb3RzLiBPbmNlIHRoZSBjb21wbGV4IGFyZWFzIHlvdXIgcHJvZ3JhbSBoYXZlIGJlZW4gdW5jb3ZlcmVkLCB5b3UgY2FuIHRha2UgcmVtZWRpYWwKKyAgICAgIGFjdGlvbnMuCisgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBtZXRyaWNzIGFuZCB0aGVpciBtZWFuaW5nLCBwbGVhc2UgY29uc3VsdAorICAgICAgTWV0YW1hdGEgTWV0cmljcyBtYW51YWwuCisgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisKKyAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iY2xhc3Nlcy1pbi1wYWNrYWdlIiBzZWxlY3Q9IiRkb2N0cmVlL2NsYXNzZXMvY2xhc3NbQHBhY2thZ2UgPSBjdXJyZW50KCkvQG5hbWVdIi8+CisgICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KCRjbGFzc2VzLWluLXBhY2thZ2UpICZndDsgMCI+CisgICAgICAgIDxIMz5DbGFzc2VzPC9IMz4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJsb2ciIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIyIiB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFsbC5tZXRyaWNzLmhlYWRlciIvPgorICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkY2xhc3Nlcy1pbi1wYWNrYWdlIj4KKyAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJpbnQubWV0cmljcyIvPgorICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgICA8L3RhYmxlPgorICAgICAgPC94c2w6aWY+CisKKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYWdlRm9vdGVyIi8+CisgICAgPC9ib2R5PgorICA8L0hUTUw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tCisgICAgdHJhbnNmb3JtIHN0cmluZyBsaWtlIGEuYi5jIHRvIC4uLy4uLy4uLworICAgIEBwYXJhbSBwYXRoIHRoZSBwYXRoIHRvIHRyYW5zZm9ybSBpbnRvIGEgZGVzY2VuZGluZyBkaXJlY3RvcnkgcGF0aAorLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9InBhdGgiPgorICA8eHNsOnBhcmFtIG5hbWU9InBhdGgiLz4KKyAgPHhzbDppZiB0ZXN0PSJjb250YWlucygkcGF0aCwnLicpIj4KKyAgICA8eHNsOnRleHQ+Li4vPC94c2w6dGV4dD4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGF0aCI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGF0aCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZy1hZnRlcigkcGF0aCwnLicpIi8+PC94c2w6d2l0aC1wYXJhbT4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8L3hzbDppZj4KKyAgPHhzbDppZiB0ZXN0PSJub3QoY29udGFpbnMoJHBhdGgsJy4nKSkgYW5kIG5vdCgkcGF0aCA9ICcnKSI+CisgICAgPHhzbDp0ZXh0Pi4uLzwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKworPCEtLSBjcmVhdGUgdGhlIGxpbmsgdG8gdGhlIHN0eWxlc2hlZXQgYmFzZWQgb24gdGhlIHBhY2thZ2UgbmFtZSAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0iY3JlYXRlLnN0eWxlc2hlZXQubGluayI+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFja2FnZS5uYW1lIi8+CisgIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBUSVRMRT0iU3R5bGUiPjx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPjx4c2w6aWYgdGVzdD0ibm90KCRwYWNrYWdlLm5hbWUgPSAndW5uYW1lZCBwYWNrYWdlJykiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXRoIj48eHNsOndpdGgtcGFyYW0gbmFtZT0icGF0aCIgc2VsZWN0PSIkcGFja2FnZS5uYW1lIi8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3hzbDppZj5zdHlsZXNoZWV0LmNzczwveHNsOmF0dHJpYnV0ZT48L0xJTks+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIFBhZ2UgSGVhZGVyIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYWdlSGVhZGVyIj4KKworICA8IS0tIGpha2FydGEgbG9nbyAtLT4KKyAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+CisgIDx0cj4KKyAgICA8dGQgY2xhc3M9ImJhbm5lcmNlbGwiIHJvd3NwYW49IjIiPgorICAgICAgPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy8iPgorICAgICAgPGltZyBzcmM9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvaW1hZ2VzL2pha2FydGEtbG9nby5naWYiIGFsdD0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZyIgYWxpZ249ImxlZnQiIGJvcmRlcj0iMCIvPgorICAgICAgPC9hPgorICAgIDwvdGQ+CisgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48aDI+U291cmNlIENvZGUgTWV0cmljczwvaDI+PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPkRlc2lnbmVkIGZvciB1c2Ugd2l0aCA8YSBocmVmPSdodHRwOi8vd3d3LndlYmdhaW4uY29tL3Byb2R1Y3RzL3F1YWxpdHlfYW5hbHl6ZXIvJz5XZWJnYWluIFFBL01ldGFtYXRhIE1ldHJpY3M8L2E+IGFuZCA8YSBocmVmPSdodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnJz5BbnQ8L2E+LjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKyAgPGhyIHNpemU9IjEiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIFBhZ2UgRm9vdGVyIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYWdlRm9vdGVyIj4KKyAgICA8dGFibGUgd2lkdGg9IjEwMCUiPgorICAgICAgPHRyPjx0ZD48aHIgbm9zaGFkZT0ieWVzIiBzaXplPSIxIi8+PC90ZD48L3RyPgorICAgICAgPHRyPjx0ZD4KKyAgICAgIDxkaXYgYWxpZ249ImNlbnRlciI+PGZvbnQgY29sb3I9IiM1MjVENzYiIHNpemU9Ii0xIj48ZW0+CisgICAgICBDb3B5cmlnaHQgJiMxNjk7IDE5OTktMjAwMSwgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgICAgIDwvZW0+PC9mb250PjwvZGl2PgorICAgICAgPC90ZD48L3RyPgorICAgIDwvdGFibGU+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBjbGFzcyBoZWFkZXIgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9ImFsbC5tZXRyaWNzLmhlYWRlciI+CisgIDx0cj4KKyAgICA8dGggd2lkdGg9IjgwJSI+TmFtZTwvdGg+CisgICAgPHRoIG5vd3JhcD0ibm93cmFwIj5WKEcpPC90aD4KKyAgICA8dGg+TE9DPC90aD4KKyAgICA8dGg+RElUPC90aD4KKyAgICA8dGg+Tk9BPC90aD4KKyAgICA8dGg+TlJNPC90aD4KKyAgICA8dGg+TkxNPC90aD4KKyAgICA8dGg+V01DPC90aD4KKyAgICA8dGg+UkZDPC90aD4KKyAgICA8dGg+REFDPC90aD4KKyAgICA8dGg+RkFOT1VUPC90aD4KKyAgICA8dGg+Q0JPPC90aD4KKyAgICA8dGg+TENPTTwvdGg+CisgICAgPHRoPk5PQ0w8L3RoPgorICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gbWV0aG9kIGhlYWRlciAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0ibWV0aG9kLm1ldHJpY3MuaGVhZGVyIj4KKyAgPHRyPgorICAgIDx0aCB3aWR0aD0iODAlIj5OYW1lPC90aD4KKyAgICA8dGggbm93cmFwPSJub3dyYXAiPlYoRyk8L3RoPgorICAgIDx0aD5MT0M8L3RoPgorICAgIDx0aD5GQU5PVVQ8L3RoPgorICAgIDx0aD5DQk88L3RoPgorICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKzwhLS0gbWV0aG9kIGluZm9ybWF0aW9uIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kIiBtb2RlPSJwcmludC5tZXRyaWNzIj4KKyAgPHRyPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGUtcm93Ii8+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQG5hbWUiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkB2ZyIvPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQGxvYyIvPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQGZhbm91dCIvPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQGNibyIvPjwvdGQ+CisgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBjbGFzcyBpbmZvcm1hdGlvbiAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNsYXNzIiBtb2RlPSJwcmludC5tZXRyaWNzIj4KKyAgPHRyPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGUtcm93Ii8+CisgICAgPHRkPjxhIGhyZWY9IntAbmFtZX0uaHRtbCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQHZnIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAbG9jIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAZGl0Ii8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAbm9hIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAbnJtIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAbmxtIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAd21jIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAcmZjIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAZGFjIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAZmFub3V0Ii8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAY2JvIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAbGNvbSIvPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQG5vY2wiLz48L3RkPgorICA8L3RyPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImZpbGV8cGFja2FnZSIgbW9kZT0icHJpbnQubWV0cmljcyI+CisgIDx0cj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWx0ZXJuYXRlLXJvdyIvPgorICAgIDx0ZD4KKyAgICA8YSBocmVmPSJ7dHJhbnNsYXRlKEBuYW1lLCcuJywnLycpfS9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KKyAgICA8L2E+CisgICAgPC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAdmciLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBsb2MiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBkaXQiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBub2EiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBucm0iLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBubG0iLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkB3bWMiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkByZmMiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBkYWMiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBmYW5vdXQiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBjYm8iLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkBsY29tIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAbm9jbCIvPjwvdGQ+CisgIDwvdHI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0cmljcyIgbW9kZT0icHJpbnQubWV0cmljcyI+CisgIDx0cj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWx0ZXJuYXRlLXJvdyIvPgorICAgICAgPCEtLSB0aGUgZ2xvYmFsIG1ldHJpY3MgaXMgdGhlIHRvcCBwYWNrYWdlIG1ldHJpY3MgLS0+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9wYWNrYWdlL0B2ZyIvPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9wYWNrYWdlL0Bsb2MiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vcGFja2FnZS9AZGl0Ii8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL3BhY2thZ2UvQG5vYSIvPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9wYWNrYWdlL0Bucm0iLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vcGFja2FnZS9AbmxtIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL3BhY2thZ2UvQHdtYyIvPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9wYWNrYWdlL0ByZmMiLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vcGFja2FnZS9AZGFjIi8+PC90ZD4KKyAgICA8dGQ+PHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL3BhY2thZ2UvQGZhbm91dCIvPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9wYWNrYWdlL0BjYm8iLz48L3RkPgorICAgIDx0ZD48eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vcGFja2FnZS9AbGNvbSIvPjwvdGQ+CisgICAgPHRkPjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9wYWNrYWdlL0Bub2NsIi8+PC90ZD4KKyAgPC90cj4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIGFsdGVybmF0ZWQgcm93IHN0eWxlIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhbHRlcm5hdGUtcm93Ij4KKzx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpIG1vZCAyID0gMSI+YTwveHNsOmlmPgorICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCkgbW9kIDIgPSAwIj5iPC94c2w6aWY+Cis8L3hzbDphdHRyaWJ1dGU+Cis8L3hzbDp0ZW1wbGF0ZT4KKworCis8IS0tIGhvdyB0byBkaXNwbGF5IHRoZSBtZXRyaWNzIHdpdGggdGhlaXIgbWF4IHZhbHVlIC0tPgorPCEtLSBAdG9kbyB0aGUgbWF4IHZhbHVlcyBtdXN0IGJlIGV4dGVybmFsIHRvIHRoZSB4c2wgLS0+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQHZnIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS12YWx1ZSI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iY3VycmVudCgpIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibWF4IiBzZWxlY3Q9IiR2Zy5tYXgiLz4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJAbG9jIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS12YWx1ZSI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iY3VycmVudCgpIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibWF4IiBzZWxlY3Q9IiRsb2MubWF4Ii8+CisgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQGRpdCI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdmFsdWUiPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InZhbHVlIiBzZWxlY3Q9ImN1cnJlbnQoKSIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im1heCIgc2VsZWN0PSIkZGl0Lm1heCIvPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkBub2EiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXZhbHVlIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ2YWx1ZSIgc2VsZWN0PSJjdXJyZW50KCkiLz4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJtYXgiIHNlbGVjdD0iJG5vYS5tYXgiLz4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJAbnJtIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS12YWx1ZSI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iY3VycmVudCgpIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibWF4IiBzZWxlY3Q9IiRucm0ubWF4Ii8+CisgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQG5sbSI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdmFsdWUiPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InZhbHVlIiBzZWxlY3Q9ImN1cnJlbnQoKSIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im1heCIgc2VsZWN0PSIkbmxtLm1heCIvPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkB3bWMiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXZhbHVlIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ2YWx1ZSIgc2VsZWN0PSJjdXJyZW50KCkiLz4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJtYXgiIHNlbGVjdD0iJHdtYy5tYXgiLz4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJAcmZjIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS12YWx1ZSI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iY3VycmVudCgpIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibWF4IiBzZWxlY3Q9IiRyZmMubWF4Ii8+CisgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQGRhYyI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpc3BsYXktdmFsdWUiPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InZhbHVlIiBzZWxlY3Q9ImN1cnJlbnQoKSIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im1heCIgc2VsZWN0PSIkZGFjLm1heCIvPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkBmYW5vdXQiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXZhbHVlIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ2YWx1ZSIgc2VsZWN0PSJjdXJyZW50KCkiLz4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJtYXgiIHNlbGVjdD0iJGZhbm91dC5tYXgiLz4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJAY2JvIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGlzcGxheS12YWx1ZSI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idmFsdWUiIHNlbGVjdD0iY3VycmVudCgpIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibWF4IiBzZWxlY3Q9IiRjYm8ubWF4Ii8+CisgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQGxjb20iPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXZhbHVlIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ2YWx1ZSIgc2VsZWN0PSJjdXJyZW50KCkiLz4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJtYXgiIHNlbGVjdD0iJGxjb20ubWF4Ii8+CisgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQG5vY2wiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXZhbHVlIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ2YWx1ZSIgc2VsZWN0PSJjdXJyZW50KCkiLz4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJtYXgiIHNlbGVjdD0iJG5vY2wubWF4Ii8+CisgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkaXNwbGF5LXZhbHVlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InZhbHVlIi8+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJtYXgiLz4KKyAgICA8eHNsOmlmIHRlc3Q9IiR2YWx1ZSA+ICRtYXgiPgorICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPkVycm9yPC94c2w6YXR0cmlidXRlPgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdmFsdWUiLz4KKyAgPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CisKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9ldGMvdGFnZGlmZi54c2wgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL3RhZ2RpZmYueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTFlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvZXRjL3RhZ2RpZmYueHNsCkBAIC0wLDAgKzEsMTc3IEBACis8IS0tCisgICAgQ29weXJpZ2h0ICAyMDA0IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorICAgCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgCistLT4KKzwhLS0gYSBzdHlsZXNoZWV0IHRvIGRpc3BsYXkgY2hhbmdlbG9ncyBhbGEgbmV0YmVhbnMgLS0+Cis8eHNsOnN0eWxlc2hlZXQKKyAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgICB2ZXJzaW9uPSIxLjAiPgorICA8eHNsOnBhcmFtIG5hbWU9InRpdGxlIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0ibW9kdWxlIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3Zzd2ViIi8+CisKKyAgPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBpbmRlbnQ9InllcyIvPgorCisgIDwhLS0gQ29weSBzdGFuZGFyZCBkb2N1bWVudCBlbGVtZW50cy4gIEVsZW1lbnRzIHRoYXQKKyAgICAgICBzaG91bGQgYmUgaWdub3JlZCBtdXN0IGJlIGZpbHRlcmVkIGJ5IGFwcGx5LXRlbXBsYXRlcworICAgICAgIHRhZ3MuIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIj4KKyAgICA8eHNsOmNvcHk+CisgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSJhdHRyaWJ1dGU6OipbLiAhPSAnJ10iLz4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKyAgICA8L3hzbDpjb3B5PgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0YWdkaWZmIj4KKyAgICA8SFRNTD4KKyAgICAgIDxIRUFEPgorICAgICAgICA8VElUTEU+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiR0aXRsZSIvPjwvVElUTEU+CisgICAgICA8L0hFQUQ+CisgICAgICA8Qk9EWSBsaW5rPSIjMDAwMDAwIiBhbGluaz0iIzAwMDAwMCIgdmxpbms9IiMwMDAwMDAiIHRleHQ9IiMwMDAwMDAiPgorICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAgICAgIGJvZHksIHAgeworICAgICAgICAgIGZvbnQtZmFtaWx5OiB2ZXJkYW5hLGFyaWFsLGhlbHZldGljYTsKKyAgICAgICAgICBmb250LXNpemU6IDgwJTsKKyAgICAgICAgICBjb2xvcjojMDAwMDAwOworICAgICAgICAgIH0KKwkgIC5kYXRlQW5kQXV0aG9yIHsKKyAgICAgICAgICBmb250LWZhbWlseTogdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2E7CisgICAgICAgICAgZm9udC1zaXplOiA4MCU7CisgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgdGV4dC1hbGlnbjpsZWZ0OworICAgICAgICAgIGJhY2tncm91bmQ6I2E2Y2FmMDsKKwkgIH0KKyAgICAgICAgICB0ciwgdGR7CisgICAgICAgICAgZm9udC1mYW1pbHk6IHZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhOworICAgICAgICAgIGZvbnQtc2l6ZTogODAlOworICAgICAgICAgIGJhY2tncm91bmQ6I2VlZWVlMDsKKyAgICAgICAgICB9CSAgCisJICA8L3N0eWxlPiAgICAgICAgCisgICAgICAgICAgPGgxPgorICAgICAgICAgICAgPGEgbmFtZT0idG9wIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHRpdGxlIi8+PC9hPgorICAgICAgICAgIDwvaDE+CisgICAgICAgICAgVGFnZGlmZiBiZXR3ZWVuIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAc3RhcnRUYWciLz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBzdGFydERhdGUiLz4gYW5kCisJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGVuZFRhZyIvPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGVuZERhdGUiLz4KKyAgICAgICAgICA8cCBhbGlnbj0icmlnaHQiPkRlc2lnbmVkIGZvciB1c2Ugd2l0aCA8YSBocmVmPSJodHRwOi8vYW50LmFwYWNoZS5vcmcvIj5BbnQ8L2E+LjwvcD4KKyAgICAgICAgICA8aHIgc2l6ZT0iMiIvPgorCTxhIG5hbWU9IlRPUCIvPgorCTx0YWJsZSB3aWR0aD0iMTAwJSI+CisJCTx0cj4KKwkJCTx0ZCBhbGlnbj0icmlnaHQiPgorCQkJCTxhIGhyZWY9IiNOZXciPk5ldyBGaWxlczwvYT4gfAorCQkJCTxhIGhyZWY9IiNNb2RpZmllZCI+TW9kaWZpZWQgRmlsZXM8L2E+IHwKKwkJCQk8YSBocmVmPSIjUmVtb3ZlZCI+UmVtb3ZlZCBGaWxlczwvYT4KKwkJCTwvdGQ+CisJCTwvdHI+CisJPC90YWJsZT4KKyAgICAgICAgPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMSI+CisJCTx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaG93LWVudHJpZXMiPgorCQkJPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRpdGxlIj5OZXcgRmlsZXM8L3hzbDp3aXRoLXBhcmFtPgorCQkJPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFuY2hvciI+TmV3PC94c2w6d2l0aC1wYXJhbT4KKwkJCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJlbnRyaWVzIiBzZWxlY3Q9Ii4vL2VudHJ5W2ZpbGUvcmV2aXNpb25dW25vdChmaWxlL3ByZXZyZXZpc2lvbildIi8+CisJCTwveHNsOmNhbGwtdGVtcGxhdGU+CisKKwkJPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNob3ctZW50cmllcyI+CisJCQk8eHNsOndpdGgtcGFyYW0gbmFtZT0idGl0bGUiPk1vZGlmaWVkIEZpbGVzPC94c2w6d2l0aC1wYXJhbT4KKwkJCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbmNob3IiPk1vZGlmaWVkPC94c2w6d2l0aC1wYXJhbT4KKwkJCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJlbnRyaWVzIiBzZWxlY3Q9Ii4vL2VudHJ5W2ZpbGUvcmV2aXNpb25dW2ZpbGUvcHJldnJldmlzaW9uXSIvPgorCQk8L3hzbDpjYWxsLXRlbXBsYXRlPgorCisJCTx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaG93LWVudHJpZXMiPgorCQkJPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRpdGxlIj5SZW1vdmVkIEZpbGVzPC94c2w6d2l0aC1wYXJhbT4KKwkJCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbmNob3IiPlJlbW92ZWQ8L3hzbDp3aXRoLXBhcmFtPgorCQkJPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImVudHJpZXMiIHNlbGVjdD0iLi8vZW50cnlbbm90KGZpbGUvcmV2aXNpb24pXVtub3QoZmlsZS9wcmV2cmV2aXNpb24pXSIvPgorCQk8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L1RBQkxFPgorICAgICAgICAKKyAgICAgIDwvQk9EWT4KKyAgICA8L0hUTUw+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0ic2hvdy1lbnRyaWVzIj4KKwk8eHNsOnBhcmFtIG5hbWU9InRpdGxlIi8+CisJPHhzbDpwYXJhbSBuYW1lPSJhbmNob3IiLz4KKwk8eHNsOnBhcmFtIG5hbWU9ImVudHJpZXMiLz4KKwk8VFI+CisJCTxURCBjb2xzcGFuPSIyIiBjbGFzcz0iZGF0ZUFuZEF1dGhvciI+CisJCQk8YT4KKwkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGFuY2hvciIvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHRpdGxlIi8+IC0gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KCRlbnRyaWVzKSIvPiBlbnRyaWVzCisJCQk8L2E+CisJCQk8YSBocmVmPSIjVE9QIj4oYmFjayB0byB0b3ApPC9hPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgd2lkdGg9IjIwIj4KKwkJCTx4c2w6dGV4dD4gICAgPC94c2w6dGV4dD4KKwkJPC9URD4KKwkJPFREPgorCQkgICAgICAgIDx1bD4KKwkJCQk8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRlbnRyaWVzIi8+CisJCQk8L3VsPgorCQk8L1REPgorCTwvVFI+CisgIDwveHNsOnRlbXBsYXRlPiAgCisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZW50cnkiPgorCTx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZmlsZSIvPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJkYXRlIj4KKyAgICA8aT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvaT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGltZSI+CisgICAgPGk+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L2k+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciI+CisgICAgPGk+CisgICAgICA8YT4KKyAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+bWFpbHRvOjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPgorICAgICAgPC9hPgorICAgIDwvaT4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZmlsZSI+CisgICAgPGxpPgorICAgICAgPGEgdGFyZ2V0PSJfbmV3Ij4KKyAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjdnN3ZWIiLz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG1vZHVsZSIgLz4vPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUiIC8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIgLz4KKyAgICAgIDwvYT4KKyAgICAgIDx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aChwcmV2cmV2aXNpb24pID4gMCBvciBzdHJpbmctbGVuZ3RoKHJldmlzaW9uKSA+IDAiPgorICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgorICAgICAgPGEgdGFyZ2V0PSJfbmV3Ij4KKyAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9InN0cmluZy1sZW5ndGgocHJldnJldmlzaW9uKSA9IDAgIj4KKyAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkY3Zzd2ViIi8+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRtb2R1bGUiIC8+Lzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lIiAvPj9yZXY9PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJldmlzaW9uIiAvPiZhbXA7Y29udGVudC10eXBlPXRleHQveC1jdnN3ZWItbWFya3VwPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGN2c3dlYiIvPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkbW9kdWxlIiAvPi88eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIgLz4/cjE9PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJldmlzaW9uIiAvPiZhbXA7cjI9PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InByZXZyZXZpc2lvbiIvPiZhbXA7ZGlmZl9mb3JtYXQ9aDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgICAgIDwveHNsOmNob29zZT4gKDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJyZXZpc2lvbiIvPikKKyAgICAgIDwvYT4KKyAgICAgIDwveHNsOmlmPgorICAgIDwvbGk+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDwhLS0gQW55IGVsZW1lbnRzIHdpdGhpbiBhIG1zZyBhcmUgcHJvY2Vzc2VkLAorICAgICAgIHNvIHRoYXQgd2UgY2FuIHByZXNlcnZlIEhUTUwgdGFncy4gLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1zZyI+CisgICAgPGI+PHhzbDphcHBseS10ZW1wbGF0ZXMvPjwvYj4KKyAgPC94c2w6dGVtcGxhdGU+CisgIAorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFudGxyLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFudGxyLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTE5MmE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtYW50bHIuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1iY2VsLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1iY2VsLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDIzN2I4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtYXBhY2hlLWJjZWwuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1ic2YuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtYXBhY2hlLWJzZi5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwYjhjNQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1ic2YuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1sb2c0ai5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1hcGFjaGUtbG9nNGouamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNWVkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1hcGFjaGUtbG9nNGouamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1vcm8uamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtYXBhY2hlLW9yby5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5OWY3OAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1vcm8uamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1yZWdleHAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtYXBhY2hlLXJlZ2V4cC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0ZTMzYwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1yZWdleHAuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWFwYWNoZS1yZXNvbHZlci5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1hcGFjaGUtcmVzb2x2ZXIuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjZlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1hcGFjaGUtcmVzb2x2ZXIuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWNvbW1vbnMtbG9nZ2luZy5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1jb21tb25zLWxvZ2dpbmcuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDkxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1jb21tb25zLWxvZ2dpbmcuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWNvbW1vbnMtbmV0LmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWNvbW1vbnMtbmV0LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQ5Yjk3Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtY29tbW9ucy1uZXQuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWphaS5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1qYWkuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OGJjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1qYWkuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWphdmFtYWlsLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWphdmFtYWlsLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2NmNDBlCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtamF2YW1haWwuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWpkZXBlbmQuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtamRlcGVuZC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjNGY0YgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWpkZXBlbmQuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWptZi5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1qbWYuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzkwOWMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1qbWYuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWpzY2guamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtanNjaC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1ZWU5YQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWpzY2guamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWp1bml0LmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWp1bml0LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzU5MTEyCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtanVuaXQuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWxhdW5jaGVyLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LWxhdW5jaGVyLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2M4ZmZmCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtbGF1bmNoZXIuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LW5ldHJleHguamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtbmV0cmV4eC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzYTNkYQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LW5ldHJleHguamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LW5vZGVwcy5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1ub2RlcHMuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjEzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1ub2RlcHMuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LXN0YXJ0ZWFtLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LXN0YXJ0ZWFtLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTMxZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtc3RhcnRlYW0uamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LXN0eWxlYm9vay5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1zdHlsZWJvb2suamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOWNmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuYW50XzEuNy4wLnYyMDA4MDMwNjE5MTAvbGliL2FudC1zdHlsZWJvb2suamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LXN3aW5nLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LXN3aW5nLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTllNDcyCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtc3dpbmcuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LXRyYXguamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtdHJheC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3OTA5NwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LXRyYXguamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LXdlYmxvZ2ljLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LXdlYmxvZ2ljLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzU2N2JjCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQtd2VibG9naWMuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9saWIvYW50LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTExNGJkCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL2xpYi9hbnQuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9wbHVnaW4ucHJvcGVydGllcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5hbnRfMS43LjAudjIwMDgwMzA2MTkxMC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjVmOGEwCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuYXBhY2hlLmFudF8xLjcuMC52MjAwODAzMDYxOTEwL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcGx1Z2luTmFtZSA9IEFwYWNoZSBBbnQKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nXzEuMC40LjIwMDgwOTE5MTUzMC5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nXzEuMC40LjIwMDgwOTE5MTUzMC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmMGMyYgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmdfMS4wLjQuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUubG9nNGpfMS4yLjEzLjIwMDgwOTE5MTUzMC5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5hcGFjaGUubG9nNGpfMS4yLjEzLjIwMDgwOTE5MTUzMC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhZmIyMwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmFwYWNoZS5sb2c0al8xLjIuMTMuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHNfMy40LjAuSTIwMDgwNTA5LTIwMDAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzXzMuNC4wLkkyMDA4MDUwOS0yMDAwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y1MGZmCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzXzMuNC4wLkkyMDA4MDUwOS0yMDAwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUuY29udGVudHR5cGVfMy4zLjAudjIwMDgwNjA0LTE0MDAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmNvbnRlbnR0eXBlXzMuMy4wLnYyMDA4MDYwNC0xNDAwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDRjNTA2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmNvbnRlbnR0eXBlXzMuMy4wLnYyMDA4MDYwNC0xNDAwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmdfMS4xLjAuSTIwMDgwNTI3LTIwMDAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nXzEuMS4wLkkyMDA4MDUyNy0yMDAwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFiMTNiCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nXzEuMS4wLkkyMDA4MDUyNy0yMDAwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnNfMy40LjAudjIwMDgwNjAzLTIwMDAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zXzMuNC4wLnYyMDA4MDYwMy0yMDAwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmFmY2FhCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zXzMuNC4wLnYyMDA4MDYwMy0yMDAwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjQuMC52MjAwODA1MTIuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy40LjAudjIwMDgwNTEyLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjg4NzRjCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy40LjAudjIwMDgwNTEyLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZV8zLjQuMC52MjAwODA1MTIuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWVfMy40LjAudjIwMDgwNTEyLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWJiYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWVfMy40LjAudjIwMDgwNTEyLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVjZi5maWxldHJhbnNmZXJfMi4wLjAudjIwMDgwNjExLTE3MTUuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lY2YuZmlsZXRyYW5zZmVyXzIuMC4wLnYyMDA4MDYxMS0xNzE1LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDVkYWUwCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lY2YuZmlsZXRyYW5zZmVyXzIuMC4wLnYyMDA4MDYxMS0xNzE1LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVjZi5pZGVudGl0eV8yLjAuMC52MjAwODA2MTEtMTcxNS5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVjZi5pZGVudGl0eV8yLjAuMC52MjAwODA2MTEtMTcxNS5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2N2U3NQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZWNmLmlkZW50aXR5XzIuMC4wLnYyMDA4MDYxMS0xNzE1LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVjZi5wcm92aWRlci5maWxldHJhbnNmZXJfMi4wLjAudjIwMDgwNjExLTE3MTUuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lY2YucHJvdmlkZXIuZmlsZXRyYW5zZmVyXzIuMC4wLnYyMDA4MDYxMS0xNzE1LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTFkMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lY2YucHJvdmlkZXIuZmlsZXRyYW5zZmVyXzIuMC4wLnYyMDA4MDYxMS0xNzE1LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVjZl8yLjAuMC52MjAwODA2MTEtMTcxNS5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVjZl8yLjAuMC52MjAwODA2MTEtMTcxNS5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQzOTI1OAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZWNmXzIuMC4wLnYyMDA4MDYxMS0xNzE1LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQuaW5zdGFsbGVyYnVpbGRlcl8xLjAuMC4yMDA4MDkxOTE1MzAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXJfMS4wLjAuMjAwODA5MTkxNTMwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDBjYzNjCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXJfMS4wLjAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXJfMS4wLjAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyXzEuMC4wLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGIwNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyXzEuMC4wLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWxfMC4wLjEuMjAwODA5MTkxNTMwL01FVEEtSU5GL01BTklGRVNULk1GIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsXzAuMC4xLjIwMDgwOTE5MTUzMC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTA5ZTBmCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsXzAuMC4xLjIwMDgwOTE5MTUzMC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE3IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitSZXF1aXJlLUJ1bmRsZTogb3JnLmpkb20sb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5LG9yDQorIGcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhLG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjIiO3Jlc29sdQ0KKyB0aW9uOj1vcHRpb25hbA0KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsDQorQnVuZGxlLUNsYXNzUGF0aDogamRvbS5qYXIsIGVwcG1vZGVsLmphcg0KK0J1bmRsZS1WZXJzaW9uOiAwLjAuMS4yMDA4MDkxOTE1MzANCitCdW5kbGUtTmFtZTogRVBQIGRvd25sb2FkIHdpemFyZCBtb2RlbA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsDQorSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUubG9nNGosb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO3ZlcnNpb249IjMuNA0KKyAuMCIsb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5LG9yZy5lY2xpcHNlLmUNCisgcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmNvcmUsb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92DQorIGlzaW9uYWwucDIubWV0YWRhdGEucXVlcnksb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMg0KKyAucXVlcnkNCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUNCisNCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWxfMC4wLjEuMjAwODA5MTkxNTMwL2VwcG1vZGVsLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbF8wLjAuMS4yMDA4MDkxOTE1MzAvZXBwbW9kZWwuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzM0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWxfMC4wLjEuMjAwODA5MTkxNTMwL2VwcG1vZGVsLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWxfMC4wLjEuMjAwODA5MTkxNTMwL2pkb20uamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsXzAuMC4xLjIwMDgwOTE5MTUzMC9qZG9tLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODgzYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsXzAuMC4xLjIwMDgwOTE5MTUzMC9qZG9tLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmRfMS4wLjAuMjAwODA5MTkxNTMwLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZF8xLjAuMC4yMDA4MDkxOTE1MzAuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYmY4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmRfMS4wLjAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guYXBwXzEuMS4wLnYyMDA4MDQyMS0yMDA2LmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5hcHBfMS4xLjAudjIwMDgwNDIxLTIwMDYuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzliYjUKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guYXBwXzEuMS4wLnYyMDA4MDQyMS0yMDA2LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uXzMuNC4wLnYyMDA4MDQyMS0yMDA2LmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb25fMy40LjAudjIwMDgwNDIxLTIwMDYuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYWM3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uXzMuNC4wLnYyMDA4MDQyMS0yMDA2LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeV8xLjAuMTAwLjIwMDgwOTE5MTUzMC5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeV8xLjAuMTAwLjIwMDgwOTE5MTUzMC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxY2E4ZQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5XzEuMC4xMDAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5zZXJ2bGV0XzEuMC4xMDAuMjAwODA5MTkxNTMwLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnNlcnZsZXRfMS4wLjEwMC4yMDA4MDkxOTE1MzAuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMzVjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5zZXJ2bGV0XzEuMC4xMDAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5zZXJ2bGV0YnJpZGdlXzEuMC4wLjIwMDgwOTE5MTUzMC5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5zZXJ2bGV0YnJpZGdlXzEuMC4wLjIwMDgwOTE5MTUzMC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkZDdkYgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnNlcnZsZXRicmlkZ2VfMS4wLjAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gucDIuY29yZV8xLjAuMC4yMDA4MDkxOTE1MzAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnAyLmNvcmVfMS4wLjAuMjAwODA5MTkxNTMwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTlmMzNmCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnAyLmNvcmVfMS4wLjAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gucDIubWV0YWRhdGEucmVwb3NpdG9yeV8xLjAuMC52MjAwODA2MDQuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhLnJlcG9zaXRvcnlfMS4wLjAudjIwMDgwNjA0LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjkzODI1Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhLnJlcG9zaXRvcnlfMS4wLjAudjIwMDgwNjA0LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gucDIubWV0YWRhdGFfMS4wLjAudjIwMDgwNTE0LTE5MDAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhXzEuMC4wLnYyMDA4MDUxNC0xOTAwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI5OTRjCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhXzEuMC4wLnYyMDA4MDUxNC0xOTAwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gucHJlZmVyZW5jZXNfMy4yLjIwMC52MjAwODA0MjEtMjAwNi5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gucHJlZmVyZW5jZXNfMy4yLjIwMC52MjAwODA0MjEtMjAwNi5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlMjI3MAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5wcmVmZXJlbmNlc18zLjIuMjAwLnYyMDA4MDQyMS0yMDA2LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gucmVnaXN0cnlfMy40LjAudjIwMDgwNTE2LTA5NTAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnJlZ2lzdHJ5XzMuNC4wLnYyMDA4MDUxNi0wOTUwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQ1YmI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnJlZ2lzdHJ5XzMuNC4wLnYyMDA4MDUxNi0wOTUwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guc2VjdXJpdHlfMS4wLjAudjIwMDgwNTEyLTE4MDAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnNlY3VyaXR5XzEuMC4wLnYyMDA4MDUxMi0xODAwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzczN2VmCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnNlY3VyaXR5XzEuMC4wLnYyMDA4MDUxMi0xODAwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZV8xLjAuMTAwLjIwMDgwOTE5MTUzMC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDI2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZV8xLjAuMTAwLjIwMDgwOTE5MTUzMC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDEzIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlO3ZlcnNpb249IjEuMC4wIg0KK0J1bmRsZS1WZW5kb3I6ICVidW5kbGVQcm92aWRlcg0KK0J1bmRsZS1DbGFzc1BhdGg6IHNlcnZsZXRicmlkZ2UuamFyDQorQnVuZGxlLVZlcnNpb246IDEuMC4xMDAuMjAwODA5MTkxNTMwDQorQnVuZGxlLU5hbWU6ICVidW5kbGVOYW1lDQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZQ0KK0ltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0O3ZlcnNpb249IjIuMy4wIixqYXZheC5zZXJ2bGV0Lmh0dHA7dmVyc2kNCisgb249IjIuMy4wIg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBDREMtMS4wL0ZvdW5kYXRpb24tMS4wLEoyU0UtMS4zDQorDQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2VfMS4wLjEwMC4yMDA4MDkxOTE1MzAvYWJvdXQuaHRtbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL2Fib3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlMWNkZgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL2Fib3V0Lmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiLz4KKzx0aXRsZT5BYm91dDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KKyAKKzxwPkphbnVhcnkgMzAsIDIwMDc8L3A+CQorPGgzPkxpY2Vuc2U8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSAKK2luZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgCithdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyAKK2JlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKK2FwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyAKK3Byb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQoraW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQKK2FuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnPC9hPi48L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZV8xLjAuMTAwLjIwMDgwOTE5MTUzMC9zY3JpcHRzL3dlYmFwcEJ1aWxkZXIueG1sIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2VfMS4wLjEwMC4yMDA4MDkxOTE1MzAvc2NyaXB0cy93ZWJhcHBCdWlsZGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDYwMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2VfMS4wLjEwMC4yMDA4MDkxOTE1MzAvc2NyaXB0cy93ZWJhcHBCdWlsZGVyLnhtbApAQCAtMCwwICsxLDEwMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8cHJvamVjdCBuYW1lPSJwcm9qZWN0IiBkZWZhdWx0PSJkZWZhdWx0Ij4JCisJPGRlc2NyaXB0aW9uPgorICAgICAgICAgICAgV2ViYXBwIEJ1aWxkZXIKKyAgICA8L2Rlc2NyaXB0aW9uPgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgICAgICAgICAgdGFyZ2V0OiBkZWZhdWx0ICAgICAgICAgICAgICAKKyAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIAk8cHJvcGVydHkgbmFtZT0icHJvai5kaXIiIHZhbHVlPSIke2Jhc2VkaXJ9Ly4uIi8+CisJCTwhLS0gCisJCU9uIHdpbmRvd3MgYmUgY2F1dGlvdXMgYWJvdXQgbG9uZyBmaWxlIG5hbWVzIGZvciAke2J1aWxkLmRpcn0KKwkJVGhlc2UgbG9uZyBwYXRoIHByb2JsZW1zIHdlcmUgcmVzb2x2ZWQgaW4gSlJFIDEuNS4wXzA4CisJCS0tPgorICAgIAk8cHJvcGVydHkgbmFtZT0iYnVpbGQuZGlyIiB2YWx1ZT0iJHtwcm9qLmRpcn0vYnVpbGQiLz4KKyAgICAJPHByb3BlcnR5IG5hbWU9InRlbXBsYXRlcy5kaXIiIHZhbHVlPSIke3Byb2ouZGlyfS90ZW1wbGF0ZXMiLz4KKwkJPHByb3BlcnR5IG5hbWU9IndlYmFwcC5uYW1lIiB2YWx1ZT0iYnJpZGdlIi8+CisJCTwhLS0gCisJCXRoZSBzZXJ2bGV0YnJpZGdlIGZlYXR1cmUgY2FuIGJlIGZvdW5kIGluIHRoZSBlY2xpcHNlIGRlcG90IAorCQlSZXBvc2l0b3J5IFBhdGg6IC9jdnNyb290L2VjbGlwc2UKKwkJTW9kdWxlOiBlcXVpbm94LWluY3ViYXRvci9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2UuZmVhdHVyZQorCQktLT4gCisJCTxwcm9wZXJ0eSBuYW1lPSJmZWF0dXJlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZS5mZWF0dXJlIi8+CisJCTxhdmFpbGFibGUgZmlsZT0iJHtwcm9qLmRpcn0vc2VydmxldGJyaWRnZS5qYXIiIHByb3BlcnR5PSJzZXJ2bGV0YnJpZGdlLmphci1wcmVzZW50Ii8+CisJCTwhLS0KKwkJSWYgeW91IGFyZSB1c2luZyB0aGlzIHNjcmlwdCBpbiBhIGhlYWQtbGVzcyBidWlsZCBkZWZpbmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorCQkiaWdub3JlLnBkZUV4cG9ydEZlYXR1cmVzIiAoYXZhaWxhYmxlIG9ubHkgaW4gdGhlIElERSAtIGRvIHRoZSBmZWF0dXJlIGV4cG9ydCB3aXRoIFBERSBCdWlsZCkKKwkJImlnbm9yZS5zZXJ2bGV0YnJpZGdlLmphciIgKGlmIHlvdSdyZSBjb21waWxpbmcgb3IgZXh0cmFjdGluZyB0aGUgamFyIHlvdXJzZWxmKQorCQktLT4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICAgICAgICAgIHRhcmdldDogcHJlcGFyZSAgICAgICAgICAgICAgCisgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CQorCTx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CisJCTxkZWxldGUgZGlyPSIke2J1aWxkLmRpcn0vJHt3ZWJhcHAubmFtZX0iLz4KKwkJPG1rZGlyIGRpcj0iJHtidWlsZC5kaXJ9LyR7d2ViYXBwLm5hbWV9L1dFQi1JTkYvbGliIi8+CisJPC90YXJnZXQ+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgICAgICAgICAgdGFyZ2V0OiBkZWZhdWx0ICAgICAgICAgICAgICAKKyAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9ImRlZmF1bHQiIGRlcGVuZHM9ImNvcHlSZXNvdXJjZXMsIHNlcnZsZXRicmlkZ2UuamFyLCBwZGVFeHBvcnRGZWF0dXJlcyIvPgorCQorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICAgICAgICAgIHRhcmdldDogY29weVJlc291cmNlcyAgICAgICAgICAgICAgCisgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CQorCTx0YXJnZXQgbmFtZT0iY29weVJlc291cmNlcyIgZGVwZW5kcz0icHJlcGFyZSI+CisJCTxjb3B5IHRvZGlyPSIke2J1aWxkLmRpcn0vJHt3ZWJhcHAubmFtZX0iPgorCQkJPGZpbGVzZXQgZGlyPSIke3RlbXBsYXRlcy5kaXJ9Ii8+CisJCTwvY29weT4KKwk8L3RhcmdldD4KKwkKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgICAgICAgICB0YXJnZXQ6IHNlcnZsZXRicmlkZ2UuamFyICAgICAgICAgICAgICAKKyAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4JCisJPHRhcmdldCBuYW1lPSJzZXJ2bGV0YnJpZGdlLmphciIgZGVwZW5kcz0icHJlcGFyZSIgdW5sZXNzPSJpZ25vcmUuc2VydmxldGJyaWRnZS5qYXIiPgorCQk8YW50Y2FsbCB0YXJnZXQ9Imphci1zZXJ2bGV0YnJpZGdlLmphciIgLz4KKwkJPGFudGNhbGwgdGFyZ2V0PSJjb3B5LXNlcnZsZXRicmlkZ2UuamFyIi8+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgICAgICAgICB0YXJnZXQ6IGNvcHktc2VydmxldGJyaWRnZS5qYXIgICAgICAgICAgICAgIAorICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgkKKwk8dGFyZ2V0IG5hbWU9ImNvcHktc2VydmxldGJyaWRnZS5qYXIiIGlmPSJzZXJ2bGV0YnJpZGdlLmphci1wcmVzZW50Ij4KKwkJPGNvcHkgdG9kaXI9IiR7YnVpbGQuZGlyfS8ke3dlYmFwcC5uYW1lfS9XRUItSU5GL2xpYiI+CisJCQk8ZmlsZXNldCBmaWxlPSIke3Byb2ouZGlyfS9zZXJ2bGV0YnJpZGdlLmphciIvPgorCQk8L2NvcHk+CisJPC90YXJnZXQ+CisJCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgICAgICAgICAgdGFyZ2V0OiBqYXItc2VydmxldGJyaWRnZS5qYXIgICAgICAgICAgICAgIAorICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgkKKwk8dGFyZ2V0IG5hbWU9Imphci1zZXJ2bGV0YnJpZGdlLmphciIgdW5sZXNzPSJzZXJ2bGV0YnJpZGdlLmphci1wcmVzZW50Ij4KKwkJPGphciBkZXN0ZmlsZT0iJHtidWlsZC5kaXJ9LyR7d2ViYXBwLm5hbWV9L1dFQi1JTkYvbGliL3NlcnZsZXRicmlkZ2UuamFyIj4KKwkJCTxmaWxlc2V0IGRpcj0iJHtwcm9qLmRpcn0vYmluIj4KKwkJCQk8aW5jbHVkZSBuYW1lPSIqKi8qLmNsYXNzIi8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvamFyPgorCTwvdGFyZ2V0PgorCQorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICAgICAgICAgIHRhcmdldDogcGRlRXhwb3J0RmVhdHVyZXMgICAgICAgICAgICAgIAorICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgkJCisJPHRhcmdldCBuYW1lPSJwZGVFeHBvcnRGZWF0dXJlcyIgZGVwZW5kcz0icHJlcGFyZSIgdW5sZXNzPSJpZ25vcmUucGRlRXhwb3J0RmVhdHVyZXMiPgorCQk8IS0tIAorCQlGZWF0dXJlcyBnZXQgYnVpbHQgYXN5bmNocm9ub3VzbHkgYnV0IHRoaXMgYXBwcm9hY2ggaXMgc29tZXRpbWVzIGNvbnZlbmllbnQuCisJCVNvIHRoYXQgdGhlIHBkZS5leHBvcnRGZWF0dXJlcyB0YXNrIGlzIGF2YWlsYWJsZSBpbiB0aGUgSURFIHNlbGVjdCAKKwkJIlJ1biBpbiB0aGUgc2FtZSBKUkUgYXMgdGhlIHdvcmtzcGFjZSIgZnJvbSB0aGUgSlJFIHRhYiBmcm9tICJSdW4gQW50Li4iCisJCS0tPiAKKwkJPHBkZS5leHBvcnRGZWF0dXJlcworCQkJZmVhdHVyZXM9IiR7ZmVhdHVyZXN9IgorCQkJZGVzdGluYXRpb249IiR7YnVpbGQuZGlyfS8ke3dlYmFwcC5uYW1lfS9XRUItSU5GL2VjbGlwc2UiCisJCQlleHBvcnRUeXBlPSJkaXJlY3RvcnkiIAorCQkJdXNlSkFSRm9ybWF0PSJmYWxzZSIKKwkJCWV4cG9ydFNvdXJjZT0iZmFsc2UiCisJCS8+CisJPC90YXJnZXQ+Cis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL3NlcnZsZXRicmlkZ2UuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2VfMS4wLjEwMC4yMDA4MDkxOTE1MzAvc2VydmxldGJyaWRnZS5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjZWI5YQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL3NlcnZsZXRicmlkZ2UuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL3RlbXBsYXRlcy9XRUItSU5GL2VjbGlwc2UvLmVjbGlwc2Vwcm9kdWN0IGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2VfMS4wLjEwMC4yMDA4MDkxOTE1MzAvdGVtcGxhdGVzL1dFQi1JTkYvZWNsaXBzZS8uZWNsaXBzZXByb2R1Y3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL3RlbXBsYXRlcy9XRUItSU5GL2VjbGlwc2UvLmVjbGlwc2Vwcm9kdWN0CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZV8xLjAuMTAwLjIwMDgwOTE5MTUzMC90ZW1wbGF0ZXMvV0VCLUlORi9lY2xpcHNlL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL3RlbXBsYXRlcy9XRUItSU5GL2VjbGlwc2UvY29uZmlndXJhdGlvbi9jb25maWcuaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDYxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZV8xLjAuMTAwLjIwMDgwOTE5MTUzMC90ZW1wbGF0ZXMvV0VCLUlORi9lY2xpcHNlL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaQpAQCAtMCwwICsxLDMgQEAKKyNFY2xpcHNlIFJ1bnRpbWUgQ29uZmlndXJhdGlvbiBGaWxlCitvc2dpLmJ1bmRsZXM9b3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb25AMjpzdGFydCwgb3JnLmVjbGlwc2UudXBkYXRlLmNvbmZpZ3VyYXRvckBzdGFydCwgb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnNlcnZsZXRicmlkZ2VAc3RhcnQsIG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeUBzdGFydAorb3NnaS5idW5kbGVzLmRlZmF1bHRTdGFydExldmVsPTQKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL3RlbXBsYXRlcy9XRUItSU5GL2VjbGlwc2UvbGF1bmNoLmluaSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL3RlbXBsYXRlcy9XRUItSU5GL2VjbGlwc2UvbGF1bmNoLmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTZmOTllCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2VfMS4wLjEwMC4yMDA4MDkxOTE1MzAvdGVtcGxhdGVzL1dFQi1JTkYvZWNsaXBzZS9sYXVuY2guaW5pCkBAIC0wLDAgKzEsMTEgQEAKKyMgRWNsaXBzZSBSdW50aW1lIENvbmZpZ3VyYXRpb24gT3ZlcnJpZGVzCisjIFRoZXNlIHByb3BlcnRpZXMgYXJlIGxvYWRlZCBwcmlvciB0byBzdGFydGluZyB0aGUgZnJhbWV3b3JrIGFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvIG92ZXJyaWRlIFN5c3RlbSBQcm9wZXJ0aWVzCisjIEBudWxsIGlzIGEgc3BlY2lhbCB2YWx1ZSB1c2VkIHRvIG92ZXJyaWRlIGFuZCBjbGVhciB0aGUgZnJhbWV3b3JrJ3MgY29weSBvZiBhIFN5c3RlbSBQcm9wZXJ0eSBwcmlvciB0byBzdGFydGluZyB0aGUgZnJhbWV3b3JrCisjICIqIiBjYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoIEBudWxsIHRvIGNsZWFyIFN5c3RlbSBQcm9wZXJ0aWVzIHRoYXQgbWF0Y2ggYSBwcmVmaXggbmFtZS4gCisKK29zZ2kuKj1AbnVsbAorb3JnLm9zZ2kuKj1AbnVsbAorZWNsaXBzZS4qPUBudWxsCisKK29zZ2kucGFyZW50Q2xhc3Nsb2FkZXI9YXBwCitvc2dpLmNvbnRleHRDbGFzc0xvYWRlclBhcmVudD1hcHAKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlXzEuMC4xMDAuMjAwODA5MTkxNTMwL3RlbXBsYXRlcy9XRUItSU5GL3dlYi54bWwgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZV8xLjAuMTAwLjIwMDgwOTE5MTUzMC90ZW1wbGF0ZXMvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNGMzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZV8xLjAuMTAwLjIwMDgwOTE5MTUzMC90ZW1wbGF0ZXMvV0VCLUlORi93ZWIueG1sCkBAIC0wLDAgKzEsNDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgd2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBXZWIgQXBwbGljYXRpb24gMi4yLy9FTiIgImh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1hcHBfMl8yLmR0ZCI+Cis8d2ViLWFwcCBpZD0iV2ViQXBwIj4KKwk8c2VydmxldCBpZD0iYnJpZGdlIj4KKwkJPHNlcnZsZXQtbmFtZT5lcXVpbm94YnJpZGdlc2VydmxldDwvc2VydmxldC1uYW1lPgorCQk8ZGlzcGxheS1uYW1lPkVxdWlub3ggQnJpZGdlIFNlcnZsZXQ8L2Rpc3BsYXktbmFtZT4KKwkJPGRlc2NyaXB0aW9uPkVxdWlub3ggQnJpZGdlIFNlcnZsZXQ8L2Rlc2NyaXB0aW9uPgorCQk8c2VydmxldC1jbGFzcz5vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2UuQnJpZGdlU2VydmxldDwvc2VydmxldC1jbGFzcz4KKwkJPGluaXQtcGFyYW0+CisJCQk8cGFyYW0tbmFtZT5jb21tYW5kbGluZTwvcGFyYW0tbmFtZT4KKwkJCTxwYXJhbS12YWx1ZT4tY29uc29sZTwvcGFyYW0tdmFsdWU+CQkJCisJCTwvaW5pdC1wYXJhbT4JCQorCQk8aW5pdC1wYXJhbT4KKwkJCTxwYXJhbS1uYW1lPmVuYWJsZUZyYW1ld29ya0NvbnRyb2xzPC9wYXJhbS1uYW1lPgorCQkJPHBhcmFtLXZhbHVlPnRydWU8L3BhcmFtLXZhbHVlPgkJCQorCQk8L2luaXQtcGFyYW0+CisJCTwhLS0KKwkJICBvcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2UgYW5kIHRoZSBTZXJ2bGV0IEFQSSBhcmUgZXhwb3J0ZWQgYXV0b21hdGljYWxseSB0byB0aGUgdW5kZXJseWluZyBPU0dpIGZyYW1ld29yay4KKwkJICBUaGUgZXh0ZW5kZWRGcmFtZXdvcmtFeHBvcnRzIHBhcmFtZXRlciBhbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YgYWRkaXRpb25hbCBqYXZhIHBhY2thZ2UgZXhwb3J0cy4KKwkJICBUaGUgZm9ybWF0IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZXhwb3J0cyBhcyBzcGVjaWZpZWQgYnkgdGhlICJFeHBvcnQtUGFja2FnZSIgYnVuZGxlIG1hbmlmZXN0IGhlYWRlci4KKwkJICBGb3IgZXhhbXBsZTogY29tLm15Y29tcGFueS5leHBvcnRzOyB2ZXJzaW9uPTEuMC4wLCBjb20ubXljb21wYW55Lm90aGVyZXhwb3J0czsgdmVyc2lvbj0xLjAuMAorCQkgIC0tPgorCQk8aW5pdC1wYXJhbT4KKwkJCTxwYXJhbS1uYW1lPmV4dGVuZGVkRnJhbWV3b3JrRXhwb3J0czwvcGFyYW0tbmFtZT4KKwkJCTxwYXJhbS12YWx1ZT48L3BhcmFtLXZhbHVlPgkJCQorCQk8L2luaXQtcGFyYW0+CisKKwkJPCEtLSAKKwkJICBZb3UgY2FuIHNwZWNpZnkgeW91ciBvd24gZnJhbWV3b3JrIGxhdW5jaGVyIGhlcmUuCisJCSAgVGhlIGRlZmF1bHQgaXM6IG9yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZS5GcmFtZXdvcmtMYXVuY2hlcgorCQk8aW5pdC1wYXJhbT4KKwkJCTxwYXJhbS1uYW1lPmZyYW1ld29ya0xhdW5jaGVyQ2xhc3M8L3BhcmFtLW5hbWU+CisJCQk8cGFyYW0tdmFsdWU+b3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlLkZyYW1ld29ya0xhdW5jaGVyPC9wYXJhbS12YWx1ZT4KKwkJPC9pbml0LXBhcmFtPgkKKwkJLS0+CQkKKwkJPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+CisJPC9zZXJ2bGV0PgorCTxzZXJ2bGV0LW1hcHBpbmc+CisJCTxzZXJ2bGV0LW5hbWU+ZXF1aW5veGJyaWRnZXNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KKwkJPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKwk8L3NlcnZsZXQtbWFwcGluZz4KKwk8IS0tCisJICBUaGlzIGlzIHJlcXVpcmVkIGlmIHlvdXIgYXBwbGljYXRpb24gYnVuZGxlcyBleHBvc2UgSlNQcy4gCisJLS0+CQorCTxzZXJ2bGV0LW1hcHBpbmc+CisJCTxzZXJ2bGV0LW5hbWU+ZXF1aW5veGJyaWRnZXNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KKwkJPHVybC1wYXR0ZXJuPiouanNwPC91cmwtcGF0dGVybj4KKwk8L3NlcnZsZXQtbWFwcGluZz4JCis8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLm9zZ2kuc2VydmljZXNfMy4xLjIwMC52MjAwNzEyMDMuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2VzXzMuMS4yMDAudjIwMDcxMjAzLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzI0YzYyCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2VzXzMuMS4yMDAudjIwMDcxMjAzLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLm9zZ2lfMy40LjAudjIwMDgwNjA1LTE5MDAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5vc2dpXzMuNC4wLnYyMDA4MDYwNS0xOTAwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDJjMDJkCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5vc2dpXzMuNC4wLnYyMDA4MDYwNS0xOTAwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLnJhcC5qZmFjZV8xLjEuMC4yMDA4MDkxOTE1MzAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5yYXAuamZhY2VfMS4xLjAuMjAwODA5MTkxNTMwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzFhNDQxCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5yYXAuamZhY2VfMS4xLjAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLnJhcC5yd3QucTA3XzEuMS4xLjIwMDgwOTE5MTUzMC5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLnJhcC5yd3QucTA3XzEuMS4xLjIwMDgwOTE5MTUzMC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRlYmU2MwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UucmFwLnJ3dC5xMDdfMS4xLjEuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLnJhcC5yd3RfMS4xLjEuMjAwODA5MTkxNTMwLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UucmFwLnJ3dF8xLjEuMS4yMDA4MDkxOTE1MzAuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ODMzYmQKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLnJhcC5yd3RfMS4xLjEuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLnJhcC51aS53b3JrYmVuY2hfMS4xLjAuMjAwODA5MTkxNTMwLmphciBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmVjbGlwc2UucmFwLnVpLndvcmtiZW5jaF8xLjEuMC4yMDA4MDkxOTE1MzAuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjBkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLnJhcC51aS53b3JrYmVuY2hfMS4xLjAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLnJhcC51aV8xLjEuMC4yMDA4MDkxOTE1MzAuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5yYXAudWlfMS4xLjAuMjAwODA5MTkxNTMwLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTJjMDc1Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS5yYXAudWlfMS4xLjAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5lY2xpcHNlLnVwZGF0ZS5jb25maWd1cmF0b3JfMy4yLjIwMC52MjAwODA0MTcuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS51cGRhdGUuY29uZmlndXJhdG9yXzMuMi4yMDAudjIwMDgwNDE3LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGNmZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2VjbGlwc2UvcGx1Z2lucy9vcmcuZWNsaXBzZS51cGRhdGUuY29uZmlndXJhdG9yXzMuMi4yMDAudjIwMDgwNDE3LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5qZG9tXzEuMC4wLjIwMDgwOTE5MTUzMC5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5qZG9tXzEuMC4wLjIwMDgwOTE5MTUzMC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJiNWEwMwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLmpkb21fMS4wLjAuMjAwODA5MTkxNTMwLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5zYXQ0ai5jb3JlXzIuMC4wLnYyMDA4MDYwMi5qYXIgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvZWNsaXBzZS9wbHVnaW5zL29yZy5zYXQ0ai5jb3JlXzIuMC4wLnYyMDA4MDYwMi5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjZDNjYgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi9lY2xpcHNlL3BsdWdpbnMvb3JnLnNhdDRqLmNvcmVfMi4wLjAudjIwMDgwNjAyLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvbGliL3NlcnZsZXRicmlkZ2UuamFyIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2xpYi9zZXJ2bGV0YnJpZGdlLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmViNmMxCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2J1aWxkL2VwcHdpemFyZC9XRUItSU5GL2xpYi9zZXJ2bGV0YnJpZGdlLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvd2ViLnhtbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9idWlsZC9lcHB3aXphcmQvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMmY4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvYnVpbGQvZXBwd2l6YXJkL1dFQi1JTkYvd2ViLnhtbApAQCAtMCwwICsxLDY4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhRE9DVFlQRSB3ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjIvL0VOIiAiaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvd2ViLWFwcF8yXzIuZHRkIj4NCis8d2ViLWFwcCBpZD0iV2ViQXBwIj4NCisJPHNlcnZsZXQgaWQ9ImJyaWRnZSI+DQorCQk8c2VydmxldC1uYW1lPmVxdWlub3hicmlkZ2VzZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+DQorCQk8ZGlzcGxheS1uYW1lPkVxdWlub3ggQnJpZGdlIFNlcnZsZXQ8L2Rpc3BsYXktbmFtZT4NCisJCTxkZXNjcmlwdGlvbj5FcXVpbm94IEJyaWRnZSBTZXJ2bGV0PC9kZXNjcmlwdGlvbj4NCisJCTxzZXJ2bGV0LWNsYXNzPm9yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZS5CcmlkZ2VTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPg0KKyAgICANCisgICAgPCEtLSB0aGUgT1NHaSBjb25zb2xlIGlzIHVzZWZ1bCBmb3IgdHJvdWJsZSBzaG9vdGluZyBidXQgd2lsbCBmaWxsIHVwIHlvdXIgDQorICAgICAgICAgICAgIGFwcHNlcnZlciBsb2cgcXVpY2tseSwgc28gZGVhY3RpdmF0ZSBvbiBwcm9kdWN0aW9uIHVzZSAtLT4NCisgICAgICA8Y29udGV4dC1wYXJhbT4NCisgICAgPHBhcmFtLW5hbWU+Y29tbWFuZGxpbmU8L3BhcmFtLW5hbWU+DQorICAgIDxwYXJhbS12YWx1ZT5vcmcuc3ByaW5nZnJhbWV3b3JrLm9zZ2kud2ViLmNvbnRleHQuc3VwcG9ydC5Pc2dpQnVuZGxlWG1sV2ViQXBwbGljYXRpb25Db250ZXh0PC9wYXJhbS12YWx1ZT4NCisgIDwvY29udGV4dC1wYXJhbT4NCisgICAgDQorCQk8aW5pdC1wYXJhbT4NCisJCQk8cGFyYW0tbmFtZT5jb21tYW5kbGluZTwvcGFyYW0tbmFtZT4NCisJCQk8cGFyYW0tdmFsdWU+LWNvbnNvbGUgLWNvbnNvbGVMb2c8L3BhcmFtLXZhbHVlPgkJCQ0KKwkJPC9pbml0LXBhcmFtPgkJDQorCQkNCisgICAgDQorICAgIDwhLS0gRnJhbWV3b3JrIENvbnRyb2xzIGNvdWxkIGJlIHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3NlLCBidXQNCisgICAgICAgICB3ZSBkaXNhYmxlIGl0IGluIFJBUCBlbnZpcm9ubWVudCBwZXIgZGVmYXVsdCAtLT4NCisJCTxpbml0LXBhcmFtPg0KKwkJCTxwYXJhbS1uYW1lPmVuYWJsZUZyYW1ld29ya0NvbnRyb2xzPC9wYXJhbS1uYW1lPg0KKwkJCTxwYXJhbS12YWx1ZT5mYWxzZTwvcGFyYW0tdmFsdWU+CQkJDQorCQk8L2luaXQtcGFyYW0+DQorCQkNCisJCTwhLS0NCisJCSAgb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlIGFuZCB0aGUgU2VydmxldCBBUEkgYXJlIGV4cG9ydGVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIHVuZGVybHlpbmcgT1NHaSBmcmFtZXdvcmsuDQorCQkgIFRoZSBleHRlbmRlZEZyYW1ld29ya0V4cG9ydHMgcGFyYW1ldGVyIGFsbG93cyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBhZGRpdGlvbmFsIGphdmEgcGFja2FnZSBleHBvcnRzLg0KKwkJICBUaGUgZm9ybWF0IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZXhwb3J0cyBhcyBzcGVjaWZpZWQgYnkgdGhlICJFeHBvcnQtUGFja2FnZSIgYnVuZGxlIG1hbmlmZXN0IGhlYWRlci4NCisJCSAgRm9yIGV4YW1wbGU6IGNvbS5teWNvbXBhbnkuZXhwb3J0czsgdmVyc2lvbj0xLjAuMCwgY29tLm15Y29tcGFueS5vdGhlcmV4cG9ydHM7IHZlcnNpb249MS4wLjANCisJCSAgLS0+DQorCQk8aW5pdC1wYXJhbT4NCisJCQk8cGFyYW0tbmFtZT5leHRlbmRlZEZyYW1ld29ya0V4cG9ydHM8L3BhcmFtLW5hbWU+DQorCQkJPHBhcmFtLXZhbHVlPjwvcGFyYW0tdmFsdWU+CQkJDQorCQk8L2luaXQtcGFyYW0+DQorDQorPHJlc291cmNlLWVudi1yZWY+DQorPGRlc2NyaXB0aW9uPlRlc3QgcmVhZCByZXNvdXJjZSBlbnZpcm9ubWVudCB2YXJpYWJsZTwvZGVzY3JpcHRpb24+DQorPHJlc291cmNlLWVudi1yZWYtbmFtZT5zaW1wbGVWYWx1ZTwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPg0KKzxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amF2YS5sYW5nLkludGVnZXI8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4NCis8L3Jlc291cmNlLWVudi1yZWY+ICAgIA0KKw0KKwkJPCEtLSANCisJCSAgWW91IGNhbiBzcGVjaWZ5IHlvdXIgb3duIGZyYW1ld29yayBsYXVuY2hlciBoZXJlLg0KKwkJICBUaGUgZGVmYXVsdCBpczogb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlLkZyYW1ld29ya0xhdW5jaGVyDQorCQk8aW5pdC1wYXJhbT4NCisJCQk8cGFyYW0tbmFtZT5mcmFtZXdvcmtMYXVuY2hlckNsYXNzPC9wYXJhbS1uYW1lPg0KKwkJCTxwYXJhbS12YWx1ZT5vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2UuRnJhbWV3b3JrTGF1bmNoZXI8L3BhcmFtLXZhbHVlPg0KKwkJPC9pbml0LXBhcmFtPgkNCisJCS0tPgkJDQorCQk8bG9hZC1vbi1zdGFydHVwPjE8L2xvYWQtb24tc3RhcnR1cD4NCisJPC9zZXJ2bGV0Pg0KKwk8c2VydmxldC1tYXBwaW5nPg0KKwkJPHNlcnZsZXQtbmFtZT5lcXVpbm94YnJpZGdlc2VydmxldDwvc2VydmxldC1uYW1lPg0KKwkJPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4NCisJPC9zZXJ2bGV0LW1hcHBpbmc+DQorCTwhLS0NCisJICBUaGlzIGlzIHJlcXVpcmVkIGlmIHlvdXIgYXBwbGljYXRpb24gYnVuZGxlcyBleHBvc2UgSlNQcy4gDQorCS0tPgkNCisJPHNlcnZsZXQtbWFwcGluZz4NCisJCTxzZXJ2bGV0LW5hbWU+ZXF1aW5veGJyaWRnZXNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4NCisJCTx1cmwtcGF0dGVybj4qLmpzcDwvdXJsLXBhdHRlcm4+DQorCTwvc2VydmxldC1tYXBwaW5nPgkNCis8L3dlYi1hcHA+DQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NjRhOGEKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTAsMCArMSwyOTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUiCisgICAgICBsYWJlbD0iUkFQIERlbW8gRGVwbG95bWVudCBGZWF0dXJlIgorICAgICAgdmVyc2lvbj0iMS4xLjAucXVhbGlmaWVyIgorICAgICAgcHJvdmlkZXItbmFtZT0iZWNsaXBzZS5vcmciPgorCisgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2Rlc2NyaXB0aW9uIj4KKyAgICAgIFtFbnRlciBGZWF0dXJlIERlc2NyaXB0aW9uIGhlcmUuXQorICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodCB1cmw9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vY29weXJpZ2h0Ij4KKyAgICAgIFtFbnRlciBDb3B5cmlnaHQgRGVzY3JpcHRpb24gaGVyZS5dCisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2xpY2Vuc2UiPgorICAgICAgW0VudGVyIExpY2Vuc2UgRGVzY3JpcHRpb24gaGVyZS5dCisgICA8L2xpY2Vuc2U+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuY29yZS5jb250ZW50dHlwZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmNvcmUuam9icyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnNlcnZsZXQiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuc2VydmxldGJyaWRnZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucHJlZmVyZW5jZXMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnJlZ2lzdHJ5IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uub3NnaSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZXMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5yYXAuamZhY2UiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5yYXAucnd0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucmFwLnVpLndvcmtiZW5jaCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmFwcCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnJhcC51aSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnJhcC5yd3QucTA3IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgZnJhZ21lbnQ9InRydWUiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0iY29tLmlibS5pY3UiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmNvcmUiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZWNmIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZWNmLmZpbGV0cmFuc2ZlciIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVjZi5pZGVudGl0eSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVjZi5wcm92aWRlci5maWxldHJhbnNmZXIiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuc2F0NGouY29yZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guc2VjdXJpdHkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcHAud2l6YXJkIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmpkb20iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuYXBhY2hlLmFudCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlciIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnVwZGF0ZS5jb25maWd1cmF0b3IiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2UiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmFwYWNoZS5sb2c0aiIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL3NjcmlwdC93ZWJhcHBCdWlsZGVyLnhtbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9zY3JpcHQvd2ViYXBwQnVpbGRlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzZjBjNgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS9zY3JpcHQvd2ViYXBwQnVpbGRlci54bWwKQEAgLTAsMCArMSwxMDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzxwcm9qZWN0IG5hbWU9InByb2plY3QiIGRlZmF1bHQ9ImRlZmF1bHQiPg0KKyAgPGRlc2NyaXB0aW9uPg0KKyAgICBFeGFtcGxlIG9mIGEgd2ViYXBwbGljYXRpb24gYnVpbGQgc2NyaXB0IGZvciBSQVAgYXBwbGljYXRpb25zIHRoYXQgdXNlDQorICAgIHRoZSBlcXVpbm94IHNlcnZsZXQgYnJpZGdlIHRvIHJ1biBpbiBhIHNlcnZsZXQgY29udGFpbmVyLg0KKyAgPC9kZXNjcmlwdGlvbj4NCisNCisgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IA0KKyAgICAgICAgICB0YXJnZXQ6IGluaXQgICAgICAgICAgICAgIA0KKyAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+DQorICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm9qLmRpciIgdmFsdWU9IiR7YmFzZWRpcn0vLi4iIC8+DQorICAgIDwhLS0NCisgICAgICAgIFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB0aGUgc2VydmxldCBicmlkZ2UgcHJvamVjdCBpcyBhdmFpbGFibGUNCisgICAgICAgIGluIHRoZSBjdXJyZW50IHdvcmtzcGFjZS4gTm90ZTogVGhlIGxvY2F0aW9uIGlzIGhhcmRjb2RlZCBhbmQgbXVzdCBiZQ0KKyAgICAgICAgYWRqdXN0ZWQgdG8geW91ciBuZWVkcy4NCisgICAgICAgIC0tPg0KKyAgICA8cHJvcGVydHkgbmFtZT0ic2VydmxldGJyaWRnZS5kaXIiDQorICAgICAgICAgICAgICB2YWx1ZT0iJHtwcm9qLmRpcn0vLi4vb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlIiAvPg0KKyAgICA8IS0tIA0KKwkJT24gd2luZG93cyBiZSBjYXV0aW91cyBhYm91dCBsb25nIGZpbGUgbmFtZXMgZm9yICR7YnVpbGQuZGlyfQ0KKwkJVGhlc2UgbG9uZyBwYXRoIHByb2JsZW1zIHdlcmUgcmVzb2x2ZWQgaW4gSlJFIDEuNS4wXzA4DQorCQktLT4NCisgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmRpciIgdmFsdWU9IiR7cHJvai5kaXJ9L2J1aWxkIiAvPg0KKyAgICA8cHJvcGVydHkgbmFtZT0idGVtcGxhdGVzLmRpciIgdmFsdWU9IiR7cHJvai5kaXJ9L3RlbXBsYXRlcyIgLz4NCisgICAgPHByb3BlcnR5IG5hbWU9IndlYmFwcC5uYW1lIiB2YWx1ZT0iZXBwd2l6YXJkIiAvPg0KKyAgICA8cHJvcGVydHkgbmFtZT0iZmVhdHVyZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlIiAvPg0KKyAgICA8IS0tDQorCQlJZiB5b3UgYXJlIHVzaW5nIHRoaXMgc2NyaXB0IGluIGEgaGVhZC1sZXNzIGJ1aWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6DQorCQkiaWdub3JlLnBkZUV4cG9ydEZlYXR1cmVzIiAoYXZhaWxhYmxlIG9ubHkgaW4gdGhlIElERSAtIGRvIHRoZSBmZWF0dXJlIGV4cG9ydCB3aXRoIFBERSBCdWlsZCkNCisJCSJpZ25vcmUuc2VydmxldGJyaWRnZS5qYXIiIChpZiB5b3UncmUgY29tcGlsaW5nIG9yIGV4dHJhY3RpbmcgdGhlIGphciB5b3Vyc2VsZikNCisJCS0tPg0KKyAgPC90YXJnZXQ+DQorDQorICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSANCisgICAgICAgICAgdGFyZ2V0OiBwcmVwYXJlICAgICAgICAgICAgICANCisgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQorICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPg0KKyAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5kaXJ9LyR7d2ViYXBwLm5hbWV9IiAvPg0KKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmRpcn0vJHt3ZWJhcHAubmFtZX0vV0VCLUlORi9saWIiIC8+DQorICA8L3RhcmdldD4NCisNCisgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IA0KKyAgICAgICAgICB0YXJnZXQ6IGRlZmF1bHQgICAgICAgICAgICAgIA0KKyAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCisgIDx0YXJnZXQgbmFtZT0iZGVmYXVsdCINCisgICAgICAgICAgZGVwZW5kcz0iY29weVJlc291cmNlcywgc2VydmxldGJyaWRnZS5qYXIsIHBkZUV4cG9ydEZlYXR1cmVzIiAvPg0KKw0KKyAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gDQorICAgICAgICAgIHRhcmdldDogY29weVJlc291cmNlcyAgICAgICAgICAgICAgDQorICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KKyAgPHRhcmdldCBuYW1lPSJjb3B5UmVzb3VyY2VzIiBkZXBlbmRzPSJwcmVwYXJlIj4NCisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuZGlyfS8ke3dlYmFwcC5uYW1lfSI+DQorICAgICAgPGZpbGVzZXQgZGlyPSIke3RlbXBsYXRlcy5kaXJ9IiAvPg0KKyAgICA8L2NvcHk+DQorICA8L3RhcmdldD4NCisNCisgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IA0KKyAgICAgICAgICB0YXJnZXQ6IHNlcnZsZXRicmlkZ2UuamFyICAgICAgICAgICAgICANCisgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQorICA8dGFyZ2V0IG5hbWU9InNlcnZsZXRicmlkZ2UuamFyIg0KKyAgICAgICAgICBkZXBlbmRzPSJwcmVwYXJlIg0KKyAgICAgICAgICB1bmxlc3M9Imlnbm9yZS5zZXJ2bGV0YnJpZGdlLmphciI+DQorICAgIDxhbnRjYWxsIHRhcmdldD0iamFyLXNlcnZsZXRicmlkZ2UuamFyIiAvPg0KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvcHktc2VydmxldGJyaWRnZS5qYXIiIC8+DQorICA8L3RhcmdldD4NCisNCisgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IA0KKyAgICAgICAgICB0YXJnZXQ6IGNvcHktc2VydmxldGJyaWRnZS5qYXIgICAgICAgICAgICAgIA0KKyAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCisgIDx0YXJnZXQgbmFtZT0iY29weS1zZXJ2bGV0YnJpZGdlLmphciIgaWY9InNlcnZsZXRicmlkZ2UuamFyLXByZXNlbnQiPg0KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5kaXJ9LyR7d2ViYXBwLm5hbWV9L1dFQi1JTkYvbGliIj4NCisgICAgICA8ZmlsZXNldCBmaWxlPSIke3NlcnZsZXRicmlkZ2UuZGlyfS9zZXJ2bGV0YnJpZGdlLmphciIgLz4NCisgICAgPC9jb3B5Pg0KKyAgPC90YXJnZXQ+DQorDQorICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSANCisgICAgICAgICAgdGFyZ2V0OiBqYXItc2VydmxldGJyaWRnZS5qYXIgICAgICAgICAgICAgIA0KKyAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCisgIDx0YXJnZXQgbmFtZT0iamFyLXNlcnZsZXRicmlkZ2UuamFyIiB1bmxlc3M9InNlcnZsZXRicmlkZ2UuamFyLXByZXNlbnQiPg0KKyAgICA8amFyIGRlc3RmaWxlPSIke2J1aWxkLmRpcn0vJHt3ZWJhcHAubmFtZX0vV0VCLUlORi9saWIvc2VydmxldGJyaWRnZS5qYXIiPg0KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtzZXJ2bGV0YnJpZGdlLmRpcn0vYmluIj4NCisgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiIC8+DQorICAgICAgPC9maWxlc2V0Pg0KKyAgICA8L2phcj4NCisgIDwvdGFyZ2V0Pg0KKw0KKyAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gDQorICAgICAgICAgIHRhcmdldDogcGRlRXhwb3J0RmVhdHVyZXMgICAgICAgICAgICAgIA0KKyAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCisgIDx0YXJnZXQgbmFtZT0icGRlRXhwb3J0RmVhdHVyZXMiDQorICAgICAgICAgIGRlcGVuZHM9InByZXBhcmUiDQorICAgICAgICAgIHVubGVzcz0iaWdub3JlLnBkZUV4cG9ydEZlYXR1cmVzIj4NCisgICAgPCEtLSANCisJCUZlYXR1cmVzIGdldCBidWlsdCBhc3luY2hyb25vdXNseSBidXQgdGhpcyBhcHByb2FjaCBpcyBzb21ldGltZXMgY29udmVuaWVudC4NCisJCVNvIHRoYXQgdGhlIHBkZS5leHBvcnRGZWF0dXJlcyB0YXNrIGlzIGF2YWlsYWJsZSBpbiB0aGUgSURFIHNlbGVjdCANCisJCSJSdW4gaW4gdGhlIHNhbWUgSlJFIGFzIHRoZSB3b3Jrc3BhY2UiIGZyb20gdGhlIEpSRSB0YWIgZnJvbSAiUnVuIEFudC4uIg0KKwkJLS0+DQorICAgIDxwZGUuZXhwb3J0RmVhdHVyZXMgZmVhdHVyZXM9IiR7ZmVhdHVyZXN9Ig0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uPSIke2J1aWxkLmRpcn0vJHt3ZWJhcHAubmFtZX0vV0VCLUlORi9lY2xpcHNlIg0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydFR5cGU9ImRpcmVjdG9yeSINCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VKQVJGb3JtYXQ9ImZhbHNlIg0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydFNvdXJjZT0iZmFsc2UiIC8+DQorICA8L3RhcmdldD4NCis8L3Byb2plY3Q+DQorDQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL3NyYy9vcmcvZWNsaXBzZS9yYXAvdG9vbHMvQ29uZmlnSW5pQ3JlYXRvci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL3NyYy9vcmcvZWNsaXBzZS9yYXAvdG9vbHMvQ29uZmlnSW5pQ3JlYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2I1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvc3JjL29yZy9lY2xpcHNlL3JhcC90b29scy9Db25maWdJbmlDcmVhdG9yLmphdmEKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSC4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucmFwLnRvb2xzOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQorDQorDQorLyoqDQorICogPHA+VGhpcyB0b29sIGNyZWF0ZXMgdGhlIGNvbnRlbnQgb2YgYSBzaW1wbGUgY29uZmlnLmluaSBmaWxlLg0KKyAqIFJ1biB0aGlzIGFmdGVyIHRoZSBBTlQgYnVpbGQgc2NyaXB0cyAod2ViYXBwQnVpbGRlci54bWwgYW5kIHRoZSANCisgKiBwZGUuZXhwb3J0RmVhdHVyZXMpIGhhdmUgZmluaXNoZWQuIEFmdGVyIHRoYXQgcmVwbGFjZSB0aGUgY29udGVudA0KKyAqIG9mIHRoZSBjb25maWcuaW5pIGZpbGUgaW4gdGhlIGJ1aWxkLjwvcD4gDQorICogDQorICogPHA+Tm90ZTogdGhpcyBpcyBub3QgbWVhbnQgdG8gYmUgYSBoaWdoIGVuZCBkZXBsb3ltZW50IHRvb2wgb3IgdGhlIG9ubHkNCisgKiBwb3NzaWJpbGl0eSBvZiBob3cgdGhlIGNvbnRlbnQgb2YgeW91ciBjb25maWcuaW5pIHNob3VsZCBsb29rIGxpa2UgaWYgeW91DQorICogYXJlIGNyZWF0aW5nIGEgUkFQIFdBUi4gVGhpcyBzaG91bGQgc2ltcGxpZnkgdGhlIHRhc2sgdG8gZ2V0DQorICogYSBtaW5pbWFsaXN0aWMgcnVudGltZSBjb25maWd1cmF0aW9uIHRoYXQgd29ya3MuLi48L3A+DQorICovDQorcHVibGljIGNsYXNzIENvbmZpZ0luaUNyZWF0b3Igew0KKyAgDQorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggZmluYWwgU3RyaW5nW10gYXJ4ICkgew0KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorICAgIC8vIHJlcGxhY2UgdGhpcyB3aXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBwbHVnaW4gZGlyZWN0b3J5IG9mDQorICAgIC8vIHRoZSBkZXBsb3ltZW50IGJ1aWxkIGZvciBleGFtcGxlDQorICAgIC8vIEZpbGUgZmlsZSA9IG5ldyBGaWxlKCAiQzpcXHByb2plY3RzXFxvcmcuZWNsaXBzZS5yYXBcXG9yZy5lY2xpcHNlLnJhcC5kZW1vLmZlYXR1cmVcXGJ1aWxkXFxyYXBkZW1vXFxXRUItSU5GXFxlY2xpcHNlXFxwbHVnaW5zIiApOw0KKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoImJ1aWxkXFxlcHB3aXphcmRcXFdFQi1JTkZcXGVjbGlwc2VcXHBsdWdpbnMiKTsNCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKyAgICANCisgICAgU3RyaW5nW10gbGlzdCA9IGZpbGUubGlzdCgpOw0KKyAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOw0KKyAgICBidWZmZXIuYXBwZW5kKCAiI0VjbGlwc2UgUnVudGltZSBDb25maWd1cmF0aW9uIEZpbGVcbiIgKTsNCisgICAgDQorICAgIGJ1ZmZlci5hcHBlbmQoICJvc2dpLmJ1bmRsZXM9IiApOw0KKyAgICBmb3IoIGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKysgKSB7DQorICAgICAgaWYoICAgIGxpc3RbIGkgXS5lbmRzV2l0aCggIi5qYXIiICkNCisgICAgICAgICAgJiYgIWxpc3RbIGkgXS5zdGFydHNXaXRoKCAib3JnLmVjbGlwc2Uub3NnaV8iICkgKQ0KKyAgICAgIHsNCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIGxpc3RbIGkgXSApOw0KKyAgICAgICAgaWYoICFsaXN0WyBpIF0uc3RhcnRzV2l0aCggIm9yZy5lY2xpcHNlLnJhcC5yd3QucTA3XyIgKSApIHsNCisgICAgICAgICAgaWYoIGxpc3RbIGkgXS5zdGFydHNXaXRoKCAib3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb25fIiApICkgew0KKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoICJAMjpzdGFydCIgKTsNCisgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCAiQHN0YXJ0IiApOw0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBpZiggaSArIDEgPCBsaXN0Lmxlbmd0aCApIHsNCisgICAgICAgICAgYnVmZmVyLmFwcGVuZCggIiwiICk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICBidWZmZXIuYXBwZW5kKCAiLG9yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZS5leHRlbnNpb25idW5kbGUiICk7ICAgICAgICAgIA0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgfQ0KKyAgICBidWZmZXIuYXBwZW5kKCAiXG4iICk7DQorICAgIGJ1ZmZlci5hcHBlbmQoICJvc2dpLmJ1bmRsZXMuZGVmYXVsdFN0YXJ0TGV2ZWw9NFxuIiApOw0KKyAgICANCisgICAgLy8gd3JpdGUgdGhlIGNvbnRlbnQgdG8gdGhlIGNvbnNvbGUNCisgICAgU3lzdGVtLm91dC5wcmludCggYnVmZmVyICk7DQorICB9DQorfQ0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS90ZW1wbGF0ZXMvV0VCLUlORi9lY2xpcHNlLy5lY2xpcHNlcHJvZHVjdCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS90ZW1wbGF0ZXMvV0VCLUlORi9lY2xpcHNlLy5lY2xpcHNlcHJvZHVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL3RlbXBsYXRlcy9XRUItSU5GL2VjbGlwc2UvLmVjbGlwc2Vwcm9kdWN0CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvdGVtcGxhdGVzL1dFQi1JTkYvZWNsaXBzZS9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvdGVtcGxhdGVzL1dFQi1JTkYvZWNsaXBzZS9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3NDAyMAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS90ZW1wbGF0ZXMvV0VCLUlORi9lY2xpcHNlL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaQpAQCAtMCwwICsxLDMgQEAKKyNFY2xpcHNlIFJ1bnRpbWUgQ29uZmlndXJhdGlvbiBGaWxlDQorb3NnaS5idW5kbGVzPW9yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uQDI6c3RhcnQsIG9yZy5lY2xpcHNlLnVwZGF0ZS5jb25maWd1cmF0b3JAc3RhcnQsIG9yZy5lY2xpcHNlLnJhcC51aUA0OnN0YXJ0LCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmtpY2tzdGFydGVyQDU6c3RhcnQsIG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5zZXJ2bGV0YnJpZGdlQHN0YXJ0LCBvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnlAc3RhcnRvc2dpLmJ1bmRsZXMuZGVmYXVsdA0KK1N0YXJ0TGV2ZWw9NA0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC53YXIuZmVhdHVyZS90ZW1wbGF0ZXMvV0VCLUlORi9lY2xpcHNlL2xhdW5jaC5pbmkgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvdGVtcGxhdGVzL1dFQi1JTkYvZWNsaXBzZS9sYXVuY2guaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWYxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvdGVtcGxhdGVzL1dFQi1JTkYvZWNsaXBzZS9sYXVuY2guaW5pCkBAIC0wLDAgKzEsMTEgQEAKKyMgRWNsaXBzZSBSdW50aW1lIENvbmZpZ3VyYXRpb24gT3ZlcnJpZGVzDQorIyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBsb2FkZWQgcHJpb3IgdG8gc3RhcnRpbmcgdGhlIGZyYW1ld29yayBhbmQgY2FuIGFsc28gYmUgdXNlZCB0byBvdmVycmlkZSBTeXN0ZW0gUHJvcGVydGllcw0KKyMgQG51bGwgaXMgYSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gb3ZlcnJpZGUgYW5kIGNsZWFyIHRoZSBmcmFtZXdvcmsncyBjb3B5IG9mIGEgU3lzdGVtIFByb3BlcnR5IHByaW9yIHRvIHN0YXJ0aW5nIHRoZSBmcmFtZXdvcmsNCisjICIqIiBjYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoIEBudWxsIHRvIGNsZWFyIFN5c3RlbSBQcm9wZXJ0aWVzIHRoYXQgbWF0Y2ggYSBwcmVmaXggbmFtZS4gDQorDQorb3NnaS4qPUBudWxsDQorb3JnLm9zZ2kuKj1AbnVsbA0KK2VjbGlwc2UuKj1AbnVsbA0KKw0KK29zZ2kucGFyZW50Q2xhc3Nsb2FkZXI9YXBwDQorb3NnaS5jb250ZXh0Q2xhc3NMb2FkZXJQYXJlbnQ9YXBwDQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL3RlbXBsYXRlcy9XRUItSU5GL3dlYi54bWwgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQud2FyLmZlYXR1cmUvdGVtcGxhdGVzL1dFQi1JTkYvd2ViLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjJmODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLndhci5mZWF0dXJlL3RlbXBsYXRlcy9XRUItSU5GL3dlYi54bWwKQEAgLTAsMCArMSw2OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IURPQ1RZUEUgd2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBXZWIgQXBwbGljYXRpb24gMi4yLy9FTiIgImh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1hcHBfMl8yLmR0ZCI+DQorPHdlYi1hcHAgaWQ9IldlYkFwcCI+DQorCTxzZXJ2bGV0IGlkPSJicmlkZ2UiPg0KKwkJPHNlcnZsZXQtbmFtZT5lcXVpbm94YnJpZGdlc2VydmxldDwvc2VydmxldC1uYW1lPg0KKwkJPGRpc3BsYXktbmFtZT5FcXVpbm94IEJyaWRnZSBTZXJ2bGV0PC9kaXNwbGF5LW5hbWU+DQorCQk8ZGVzY3JpcHRpb24+RXF1aW5veCBCcmlkZ2UgU2VydmxldDwvZGVzY3JpcHRpb24+DQorCQk8c2VydmxldC1jbGFzcz5vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXRicmlkZ2UuQnJpZGdlU2VydmxldDwvc2VydmxldC1jbGFzcz4NCisgICAgDQorICAgIDwhLS0gdGhlIE9TR2kgY29uc29sZSBpcyB1c2VmdWwgZm9yIHRyb3VibGUgc2hvb3RpbmcgYnV0IHdpbGwgZmlsbCB1cCB5b3VyIA0KKyAgICAgICAgICAgICBhcHBzZXJ2ZXIgbG9nIHF1aWNrbHksIHNvIGRlYWN0aXZhdGUgb24gcHJvZHVjdGlvbiB1c2UgLS0+DQorICAgICAgPGNvbnRleHQtcGFyYW0+DQorICAgIDxwYXJhbS1uYW1lPmNvbW1hbmRsaW5lPC9wYXJhbS1uYW1lPg0KKyAgICA8cGFyYW0tdmFsdWU+b3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpLndlYi5jb250ZXh0LnN1cHBvcnQuT3NnaUJ1bmRsZVhtbFdlYkFwcGxpY2F0aW9uQ29udGV4dDwvcGFyYW0tdmFsdWU+DQorICA8L2NvbnRleHQtcGFyYW0+DQorICAgIA0KKwkJPGluaXQtcGFyYW0+DQorCQkJPHBhcmFtLW5hbWU+Y29tbWFuZGxpbmU8L3BhcmFtLW5hbWU+DQorCQkJPHBhcmFtLXZhbHVlPi1jb25zb2xlIC1jb25zb2xlTG9nPC9wYXJhbS12YWx1ZT4JCQkNCisJCTwvaW5pdC1wYXJhbT4JCQ0KKwkJDQorICAgIA0KKyAgICA8IS0tIEZyYW1ld29yayBDb250cm9scyBjb3VsZCBiZSB1c2VmdWwgZm9yIHRlc3RpbmcgcHVycG9zZSwgYnV0DQorICAgICAgICAgd2UgZGlzYWJsZSBpdCBpbiBSQVAgZW52aXJvbm1lbnQgcGVyIGRlZmF1bHQgLS0+DQorCQk8aW5pdC1wYXJhbT4NCisJCQk8cGFyYW0tbmFtZT5lbmFibGVGcmFtZXdvcmtDb250cm9sczwvcGFyYW0tbmFtZT4NCisJCQk8cGFyYW0tdmFsdWU+ZmFsc2U8L3BhcmFtLXZhbHVlPgkJCQ0KKwkJPC9pbml0LXBhcmFtPg0KKwkJDQorCQk8IS0tDQorCQkgIG9yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZSBhbmQgdGhlIFNlcnZsZXQgQVBJIGFyZSBleHBvcnRlZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSB1bmRlcmx5aW5nIE9TR2kgZnJhbWV3b3JrLg0KKwkJICBUaGUgZXh0ZW5kZWRGcmFtZXdvcmtFeHBvcnRzIHBhcmFtZXRlciBhbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YgYWRkaXRpb25hbCBqYXZhIHBhY2thZ2UgZXhwb3J0cy4NCisJCSAgVGhlIGZvcm1hdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGV4cG9ydHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSAiRXhwb3J0LVBhY2thZ2UiIGJ1bmRsZSBtYW5pZmVzdCBoZWFkZXIuDQorCQkgIEZvciBleGFtcGxlOiBjb20ubXljb21wYW55LmV4cG9ydHM7IHZlcnNpb249MS4wLjAsIGNvbS5teWNvbXBhbnkub3RoZXJleHBvcnRzOyB2ZXJzaW9uPTEuMC4wDQorCQkgIC0tPg0KKwkJPGluaXQtcGFyYW0+DQorCQkJPHBhcmFtLW5hbWU+ZXh0ZW5kZWRGcmFtZXdvcmtFeHBvcnRzPC9wYXJhbS1uYW1lPg0KKwkJCTxwYXJhbS12YWx1ZT48L3BhcmFtLXZhbHVlPgkJCQ0KKwkJPC9pbml0LXBhcmFtPg0KKw0KKzxyZXNvdXJjZS1lbnYtcmVmPg0KKzxkZXNjcmlwdGlvbj5UZXN0IHJlYWQgcmVzb3VyY2UgZW52aXJvbm1lbnQgdmFyaWFibGU8L2Rlc2NyaXB0aW9uPg0KKzxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+c2ltcGxlVmFsdWU8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4NCis8cmVzb3VyY2UtZW52LXJlZi10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+DQorPC9yZXNvdXJjZS1lbnYtcmVmPiAgICANCisNCisJCTwhLS0gDQorCQkgIFlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biBmcmFtZXdvcmsgbGF1bmNoZXIgaGVyZS4NCisJCSAgVGhlIGRlZmF1bHQgaXM6IG9yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZS5GcmFtZXdvcmtMYXVuY2hlcg0KKwkJPGluaXQtcGFyYW0+DQorCQkJPHBhcmFtLW5hbWU+ZnJhbWV3b3JrTGF1bmNoZXJDbGFzczwvcGFyYW0tbmFtZT4NCisJCQk8cGFyYW0tdmFsdWU+b3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlLkZyYW1ld29ya0xhdW5jaGVyPC9wYXJhbS12YWx1ZT4NCisJCTwvaW5pdC1wYXJhbT4JDQorCQktLT4JCQ0KKwkJPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+DQorCTwvc2VydmxldD4NCisJPHNlcnZsZXQtbWFwcGluZz4NCisJCTxzZXJ2bGV0LW5hbWU+ZXF1aW5veGJyaWRnZXNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4NCisJCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+DQorCTwvc2VydmxldC1tYXBwaW5nPg0KKwk8IS0tDQorCSAgVGhpcyBpcyByZXF1aXJlZCBpZiB5b3VyIGFwcGxpY2F0aW9uIGJ1bmRsZXMgZXhwb3NlIEpTUHMuIA0KKwktLT4JDQorCTxzZXJ2bGV0LW1hcHBpbmc+DQorCQk8c2VydmxldC1uYW1lPmVxdWlub3hicmlkZ2VzZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+DQorCQk8dXJsLXBhdHRlcm4+Ki5qc3A8L3VybC1wYXR0ZXJuPg0KKwk8L3NlcnZsZXQtbWFwcGluZz4JDQorPC93ZWItYXBwPg0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9FUFAgd2l6YXJkIE9TR2kubGF1bmNoIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL0VQUCB3aXphcmQgT1NHaS5sYXVuY2gKaW5kZXggZTY1MDcyNi4uNDNjNmMxMCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL0VQUCB3aXphcmQgT1NHaS5sYXVuY2gKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL0VQUCB3aXphcmQgT1NHaS5sYXVuY2gKQEAgLTEzLDEyICsxMywxMiBAQAogPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLmFwcGVuZEVudmlyb25tZW50VmFyaWFibGVzIiB2YWx1ZT0idHJ1ZSIvPgogPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuUFJPR1JBTV9BUkdVTUVOVFMiIHZhbHVlPSItb3MgJHt0YXJnZXQub3N9IC13cyAke3RhcmdldC53c30gLWFyY2ggJHt0YXJnZXQuYXJjaH0gLW5sICR7dGFyZ2V0Lm5sfSAtY29uc29sZSAtY29uc29sZUxvZyIvPgogPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuU09VUkNFX1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5wZGUudWkud29ya2JlbmNoQ2xhc3NwYXRoUHJvdmlkZXIiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNX0FSR1VNRU5UUyIgdmFsdWU9Ii1EZWNsaXBzZS5pZ25vcmVBcHA9dHJ1ZSAtRG9zZ2kubm9TaHV0ZG93bj10cnVlIC1Eb3JnLm9zZ2kuc2VydmljZS5odHRwLnBvcnQ9ODAwOCAtRG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5qZXR0eS5jb250ZXh0LnNlc3Npb25pbmFjdGl2ZWludGVydmFsPTMwMDAwIC1YbXMxMjhtIC1YbXg1MTJtIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5WTV9BUkdVTUVOVFMiIHZhbHVlPSItRGVjbGlwc2UuaWdub3JlQXBwPXRydWUgLURvc2dpLm5vU2h1dGRvd249dHJ1ZSAtRG9yZy5vc2dpLnNlcnZpY2UuaHR0cC5wb3J0PTg4ODggLURvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuamV0dHkuY29udGV4dC5zZXNzaW9uaW5hY3RpdmVpbnRlcnZhbD0xMjAgLVhtczEyOG0gLVhteDUxMm0gLURsb2c0ai5jb25maWd1cmF0aW9uPWZpbGU6bG9nNGoucHJvcGVydGllcyIvPgogPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3dvcmtzcGFjZV9sb2M6b3JnLmVjbGlwc2UuZXBwLndpemFyZH0iLz4KIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJwZGUudmVyc2lvbiIgdmFsdWU9IjMuMyIvPgogPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJzaG93X3NlbGVjdGVkX29ubHkiIHZhbHVlPSJmYWxzZSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9InRhcmdldF9idW5kbGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZXF1aW5veC5zZWN1cml0eS53aW4zMi54ODZAZGVmYXVsdDpmYWxzZSxvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZ0BkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS54bWwucmVzb2x2ZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnNAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb21wYXRpYmlsaXR5LmF1dGhAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVjZi5maWxldHJhbnNmZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5hcGFjaGUueGVyY2VzQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnJlZ2lzdHJ5QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LmNvbW1vbkBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZ0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuamZhY2VAZGVmYXVsdDpkZWZhdWx0LGphdmF4LnNlcnZsZXRAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUubmV0LndpbjMyLng4NkBkZWZhdWx0OmZhbHNlLGphdmF4LnhtbEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5hcHBAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVjZi5wcm92aWRlci5maWxldHJhbnNmZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUucnVudGltZUBkZWZhdWx0OmRlZmF1bHQsY29tLmlibS5pY3VAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3gucDIubWV0YWRhdGEucmVwb3NpdG9yeUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5zZWN1cml0eUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZWNmQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5zd3RAMjI6ZGVmYXVsdCxvcmcuZWNsaXBzZS5qZmFjZS5kYXRhYmluZGluZ0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wcmVmZXJlbmNlc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5uZXRAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb21wYXRpYmlsaXR5LnJlZ2lzdHJ5QGRlZmF1bHQ6ZmFsc2Usb3JnLmVjbGlwc2UuY29yZS5jb250ZW50dHlwZUBkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS54bWwuc2VyaWFsaXplckBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5qb2JzQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lY2YuaWRlbnRpdHlAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3gucDIuY29yZUBkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS5hbnRAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLm9zZ2lAOixvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2VzQGRlZmF1bHQ6ZGVmYXVsdCIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9InRhcmdldF9idW5kbGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWNmLmZpbGV0cmFuc2ZlckBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5jb3JlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZ0BkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmdAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb21wYXRpYmlsaXR5LmF1dGhAZGVmYXVsdDpkZWZhdWx0LG9yZy5hcGFjaGUueGVyY2VzKjIuOS4wLnYyMDA4MDUyNzA0MDBAZGVmYXVsdDpkZWZhdWx0LGNvbS5pYm0uaWN1QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5qZmFjZUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5hcHBAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUuY29udGVudHR5cGVAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVjZkBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZ0BkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS54bWwucmVzb2x2ZXIqMS4yLjAudjIwMDgwNjAzMDMxMkBkZWZhdWx0OmRlZmF1bHQsamF2YXguc2VydmxldEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5uZXRAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmNvcmUuam9ic0BkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS54bWwucmVzb2x2ZXIqMS4xLjAuMjAwODA1MDgtMTQzMFBSREBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZWNmLmlkZW50aXR5QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuYXBhY2hlLmFudEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZWNmLnByb3ZpZGVyLmZpbGV0cmFuc2ZlckBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbXBhdGliaWxpdHkucmVnaXN0cnlAZGVmYXVsdDpmYWxzZSxvcmcuZWNsaXBzZS5vc2dpQDosb3JnLmVjbGlwc2UuZXF1aW5veC5wcmVmZXJlbmNlc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5yZWdpc3RyeUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9uc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5zZWN1cml0eUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2Uuc3d0QDIyOmRlZmF1bHQsb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlc0BkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLm1ldGFkYXRhLnJlcG9zaXRvcnlAZGVmYXVsdDpkZWZhdWx0LG9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5hcGFjaGUueGVyY2VzKjIuOC4wLjIwMDgwNTA4LTE0MzBQUkRAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmpmYWNlLmRhdGFiaW5kaW5nQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94LmNvbW1vbkBkZWZhdWx0OmRlZmF1bHQsamF2YXgueG1sQGRlZmF1bHQ6ZGVmYXVsdCIvPgogPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJ0cmFjaW5nIiB2YWx1ZT0iZmFsc2UiLz4KIDxib29sZWFuQXR0cmlidXRlIGtleT0idXNlRGVmYXVsdENvbmZpZ0FyZWEiIHZhbHVlPSJ0cnVlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0id29ya3NwYWNlX2J1bmRsZXMiIHZhbHVlPSJvcmcuamRvbUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbEBkZWZhdWx0OmRlZmF1bHQsb3JnLm1vcnRiYXkuamV0dHlAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnJhcC51aUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UucmFwLnJ3dEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnNlcnZsZXRAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnJhcC51aS53b3JrYmVuY2hAZGVmYXVsdDpkZWZhdWx0LG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnJhcC5yd3QucTA3QGRlZmF1bHQ6ZmFsc2UsamF2YXguc2VydmxldEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UucmFwLmpmYWNlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuamV0dHlAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXBwLndpemFyZC5raWNrc3RhcnRlckBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXBwLndpemFyZEBkZWZhdWx0OmRlZmF1bHQiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJ3b3Jrc3BhY2VfYnVuZGxlcyIgdmFsdWU9Im9yZy5tb3J0YmF5LmpldHR5QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnlAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVwcC53aXphcmQua2lja3N0YXJ0ZXJAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5qZXR0eUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0YnJpZGdlQGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5yYXAucnd0LnEwN0BkZWZhdWx0OmZhbHNlLG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5zZXJ2bGV0QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuZWNsaXBzZS5yYXAuamZhY2VAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVwcC53aXphcmRAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLnJhcC51aUBkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS5sb2c0akBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UucmFwLnVpLndvcmtiZW5jaEBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyQGRlZmF1bHQ6ZGVmYXVsdCxqYXZheC5zZXJ2bGV0QGRlZmF1bHQ6ZGVmYXVsdCxvcmcuamRvbUBkZWZhdWx0OmRlZmF1bHQsb3JnLmVjbGlwc2UucmFwLnJ3dEBkZWZhdWx0OmRlZmF1bHQsb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmdAZGVmYXVsdDpkZWZhdWx0LG9yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWxAZGVmYXVsdDpkZWZhdWx0Ii8+CiA8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNDI4YjQ4YS4uZDQyMGE0YyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMTMsNiArMTMsNyBAQAogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0O3ZlcnNpb249IjIuNC4wIiwKICBqYXZheC5zZXJ2bGV0Lmh0dHA7dmVyc2lvbj0iMi40LjAiLAorIG9yZy5hcGFjaGUubG9nNGosCiAgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5jb3JlLmhlbHBlcnMsCiAgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YSwKICBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnksCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvYnVpbGQucHJvcGVydGllcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc1NTZhYzguLmE2NTk3MmIgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0zLDYgKzMsNyBAQAogYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKICAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAogICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBpY29ucy8KKyAgICAgICAgICAgICAgIGljb25zLyxcCiAKLXNyYy5pbmNsdWRlcyA9IGljb25zLworc3JjLmluY2x1ZGVzID0gaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9lcHAtd2l6YXJkLnByb2R1Y3QgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvZXBwLXdpemFyZC5wcm9kdWN0CmluZGV4IDhjZWU3N2MuLjAyOGIwOTYgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9lcHAtd2l6YXJkLnByb2R1Y3QKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL2VwcC13aXphcmQucHJvZHVjdApAQCAtMyw4ICszLDggQEAKIAogPHByb2R1Y3QgbmFtZT0iRVBQIFdpemFyZCIgaWQ9Im9yZy5lY2xpcHNlLmVwcC53aXphcmQucHJvZHVjdCIgYXBwbGljYXRpb249Im9yZy5lY2xpcHNlLmVwcC53aXphcmQuYXBwbGljYXRpb24iIHVzZUZlYXR1cmVzPSJmYWxzZSI+CiAKLQogICAgPGNvbmZpZ0luaSB1c2U9ImRlZmF1bHQiPgorICAgICAgPGxpbnV4Pi9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL2NvbmZpZy5pbmk8L2xpbnV4PgogICAgICAgPHdpbjMyPi9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL2NvbmZpZy5pbmk8L3dpbjMyPgogICAgPC9jb25maWdJbmk+CiAKQEAgLTE0LDcgKzE0LDYgQEAKIAogICAgPHdpbmRvd0ltYWdlcy8+CiAKLQogICAgPGxhdW5jaGVyPgogICAgICAgPHNvbGFyaXMvPgogICAgICAgPHdpbiB1c2VJY289ImZhbHNlIj4KQEAgLTIyLDcgKzIxLDYgQEAKICAgICAgIDwvd2luPgogICAgPC9sYXVuY2hlcj4KIAotCiAgICA8dm0+CiAgICA8L3ZtPgogCkBAIC01Nyw3ICs1NSw2IEBACiAgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnByZWZlcmVuY2VzIi8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnJlZ2lzdHJ5Ii8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnNlY3VyaXR5Ii8+Ci0gICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnNlY3VyaXR5LndpbjMyLng4NiIgZnJhZ21lbnQ9InRydWUiLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldGJyaWRnZSIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uub3NnaSIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlcyIvPgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL2VwcHdpemFyZC5wcm9wZXJ0aWVzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL2VwcHdpemFyZC5wcm9wZXJ0aWVzCmluZGV4IDFmYmM4ZWIuLjI5ZDAxNzYgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9lcHB3aXphcmQucHJvcGVydGllcworKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvZXBwd2l6YXJkLnByb3BlcnRpZXMKQEAgLTEsNyArMSw3IEBACiAjIG1vZGVsIGRlc2NyaXB0aW9uIGRpcmVjdG9yeSBjb250YWluaW5nICJlcHBtb2RlbC54bWwiIGFuZCBncm91cCBpbWFnZXMKIG1vZGVsPWRhdGEvbW9kZWwKICMgb3V0Z29pbmcgc2VydmljZSBwcm92aWRlcnMgY29uZmlndXJhdGlvbiBkaXJlY3RvcnksIGNvbnRhaW5pbmcgIm91dGdvaW5nLnByb3BlcnRpZXMiIGFuZCBpbWFnZXMKLW91dGdvaW5nPWRhdGEvb3V0Z29pbmcKK2V4dGVybmFsU2VydmljZVByb3ZpZGVycz1kYXRhL2V4dGVybmFsU2VydmljZVByb3ZpZGVycwogIyBFUFAgUDIgTWV0YWRhdGEgcmVwb3NpdG9yeSwgdXNlZCBmb3IgcmVzb2x2aW5nIElVIHJlZmVyZW5jZXMgaW4gImVwcG1vZGVsLnhtbCIKIGVwcC5tZXRhZGF0YT1maWxlOmRhdGEvbWV0YWRhdGEvCiAjZXBwLm1ldGFkYXRhPWh0dHA6Ly9sb2NhbGhvc3QvZXBwLwpAQCAtMTUsNCArMTUsMTIgQEAKIAogIyBQMiBpbnN0YWxsZXIgYXJ0aWZhY3QgcmVwb3NpdG9yaWVzCiBlY2xpcHNlLnAyLmFydGlmYWN0cz1odHRwOi8vMTkyLjE2OC42LjE1NS9wMmcvLGh0dHA6Ly8xOTIuMTY4LjYuMTU1L3AydS8KLSNlY2xpcHNlLnAyLmFydGlmYWN0cz1odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS91cGRhdGVzLzMuNC8saHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL2dhbnltZWRlLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyNlY2xpcHNlLnAyLmFydGlmYWN0cz1odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS91cGRhdGVzLzMuNC8saHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL2dhbnltZWRlLworCisjIFVSTCB0byBUZXJtcyBvZiBVc2UKK3Rlcm1zb2Z1c2UudXJsPWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvdGVybXNvZnVzZS5waHAKKyMgVVJMIHRvIFByaXZhY3kgUG9saWN5Citwcml2YWN5LnVybD1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL3ByaXZhY3kucGhwCisKKyMgRG93bmxvYWQvZXh0ZXJuYWwgc2VydmljZSBwcm92aWRlciBzdGF0aXN0aWNzCitzdGF0cy5sb2dnaW5nLmZpbGU9c3RhdGlzdGljcy5sb2cKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvaW5zdGFsbGVyYnVpbGRlci5wcm9wZXJ0aWVzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL2luc3RhbGxlcmJ1aWxkZXIucHJvcGVydGllcwppbmRleCBjOTBjNmIxLi4yZDI1ZDI0IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvaW5zdGFsbGVyYnVpbGRlci5wcm9wZXJ0aWVzCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9pbnN0YWxsZXJidWlsZGVyLnByb3BlcnRpZXMKQEAgLTIsMyArMiw1IEBACiBkb3dubG9hZHM9Li4vb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnN0YWxsZXJidWlsZGVyL29wdC9lcHAKICMgZGlyZWN0b3J5IHVzZWQgZm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkb3dubG9hZCBmaWxlcyAKIHRtcGRpcj0uLi9vcmcuZWNsaXBzZS5lcHAud2l6YXJkLmluc3RhbGxlcmJ1aWxkZXIvb3B0L2VwcC90bXAKKyMgTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGluc3RhbGxlciBjYWNoZSAoZWFjaCBlbnRyeSB1c2VzIGFib3V0IDUgTUIgZGlzayBzcGFjZSBpbiB0aGUgdG1wZGlyKQoraW5zdGFsbGVyLmNhY2hlLnNpemU9MjAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL2xvZzRqLnByb3BlcnRpZXMgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvbG9nNGoucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmExMWNmCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL2xvZzRqLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNyBAQAorbG9nNGoucm9vdExvZ2dlcj1kZWJ1Zywgc3Rkb3V0LCBSCisKK2xvZzRqLmFwcGVuZGVyLnN0ZG91dD1vcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlcgorbG9nNGouYXBwZW5kZXIuc3Rkb3V0LmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQKKworIyBQYXR0ZXJuIHRvIG91dHB1dCB0aGUgY2FsbGVyJ3MgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci4KK2xvZzRqLmFwcGVuZGVyLnN0ZG91dC5sYXlvdXQuQ29udmVyc2lvblBhdHRlcm49JWR7SVNPODYwMX0gJTVwIFsldF0gKCVGOiVMKSAtICVtJW4KKworbG9nNGouYXBwZW5kZXIuUj1vcmcuYXBhY2hlLmxvZzRqLlJvbGxpbmdGaWxlQXBwZW5kZXIKK2xvZzRqLmFwcGVuZGVyLlIuRmlsZT1leGFtcGxlLmxvZworCitsb2c0ai5hcHBlbmRlci5SLk1heEZpbGVTaXplPTEwMEtCCisjIEtlZXAgb25lIGJhY2t1cCBmaWxlCitsb2c0ai5hcHBlbmRlci5SLk1heEJhY2t1cEluZGV4PTEKKworbG9nNGouYXBwZW5kZXIuUi5sYXlvdXQ9b3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0Citsb2c0ai5hcHBlbmRlci5SLmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHtJU084NjAxfSAlcCAldCAlYyAtICVtJW4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9wbHVnaW4ueG1sIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3BsdWdpbi54bWwKaW5kZXggMWU1ZmI4OS4uN2FmMjBiMiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3BsdWdpbi54bWwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3BsdWdpbi54bWwKQEAgLTM0LDQgKzM0LDE0IEBACiAgICAgICAgIDwvcnVuPgogICAgICA8L2FwcGxpY2F0aW9uPgogICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UucmFwLnVpLmJyYW5kaW5nIj4KKyAgICAgPGJyYW5kaW5nCisgICAgICAgICAgIGRlZmF1bHRFbnRyeXBvaW50SWQ9Im9yZy5lY2xpcHNlLmVwcC53aXphcmQiCisgICAgICAgICAgIGZhdmljb249Imljb25zL2NsYXNzaWMucG5nIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZXBwLndpemFyZC5icmFuZGluZy5lcHB3aXphcmQiCisgICAgICAgICAgIHNlcnZsZXROYW1lPSJnbyIKKyAgICAgICAgICAgdGl0bGU9IkVjbGlwc2UgV2l6YXJkIj4KKyAgICAgPC9icmFuZGluZz4KKyAgPC9leHRlbnNpb24+CiA8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9BcHBsaWNhdGlvbi5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL0FwcGxpY2F0aW9uLmphdmEKaW5kZXggYmNjYzcxOC4uZWU0N2ZkZiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL0FwcGxpY2F0aW9uLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL0FwcGxpY2F0aW9uLmphdmEKQEAgLTE4LDI0ICsxOCwyMyBAQAogQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKIHB1YmxpYyBjbGFzcyBBcHBsaWNhdGlvbiBpbXBsZW1lbnRzIElBcHBsaWNhdGlvbiB7CiAKLQlwdWJsaWMgT2JqZWN0IHN0YXJ0KElBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZvciAoQnVuZGxlIGJ1bmRsZSA6IGNvbnRleHQuZ2V0QnJhbmRpbmdCdW5kbGUoKS5nZXRCdW5kbGVDb250ZXh0KCkKLQkJCQkuZ2V0QnVuZGxlcygpKSB7Ci0JCQl0cnkgewotCQkJCWlmICghKGJ1bmRsZSBpbnN0YW5jZW9mIEJ1bmRsZUZyYWdtZW50KSkKLQkJCQl7Ci0JCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9CQorICBwdWJsaWMgT2JqZWN0IHN0YXJ0KCBJQXBwbGljYXRpb25Db250ZXh0IGNvbnRleHQgKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmb3IoIEJ1bmRsZSBidW5kbGUgOiBjb250ZXh0LmdldEJyYW5kaW5nQnVuZGxlKCkKKyAgICAgIC5nZXRCdW5kbGVDb250ZXh0KCkKKyAgICAgIC5nZXRCdW5kbGVzKCkgKQorICAgIHsKKyAgICAgIHRyeSB7CisgICAgICAgIGlmKCAhKCBidW5kbGUgaW5zdGFuY2VvZiBCdW5kbGVGcmFnbWVudCApICkgeworICAgICAgICAgIGJ1bmRsZS5zdGFydCgpOworICAgICAgICB9CisgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGw7CisgIH0KIAotCXB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotCX0KLQorICBwdWJsaWMgdm9pZCBzdG9wKCkgeworICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgfQogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL0FjdGl2YXRvci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL0FjdGl2YXRvci5qYXZhCmluZGV4IGU1MTY1YmMuLmY3ZGJlMTcgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9BY3RpdmF0b3IuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvQWN0aXZhdG9yLmphdmEKQEAgLTE2LDggKzE2LDggQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwogCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsLkVQUE1vZGVsOwogaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwogaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwogCkBAIC0yNiw4NSArMjYsOTggQEAKICAqLwogcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewogCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfQ09ORklHVVJBVElPTiA9ICJvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmNvbmZpZ3VyYXRpb24iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0NPTkZJR1VSQVRJT05fREVGQVVMVF9WQUxVRSA9ICJlcHB3aXphcmQucHJvcGVydGllcyI7Ci0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UuZXBwLndpemFyZCI7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisgIHN0YXRpYyBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlciggQWN0aXZhdG9yLmNsYXNzICk7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0NPTkZJR1VSQVRJT04gPSAib3JnLmVjbGlwc2UuZXBwLndpemFyZC5jb25maWd1cmF0aW9uIjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfQ09ORklHVVJBVElPTl9ERUZBVUxUX1ZBTFVFID0gImVwcHdpemFyZC5wcm9wZXJ0aWVzIjsKKyAgLy8gVGhlIHBsdWctaW4gSUQKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLmVwcC53aXphcmQiOworICAvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisgIHByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CiAKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWN0aXZhdG9yKCkgewotCX0KKyAgLyoqCisgICAqIFRoZSBjb25zdHJ1Y3RvcgorICAgKi8KKyAgcHVibGljIEFjdGl2YXRvcigpIHsKKyAgfQogCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZQotCSAqIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ci0JICogKQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KKyAgLyoKKyAgICogKG5vbi1KYXZhZG9jKQorICAgKiBAc2VlCisgICAqIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0CisgICAqICkKKyAgICovCisgIHB1YmxpYyB2b2lkIHN0YXJ0KCBCdW5kbGVDb250ZXh0IGNvbnRleHQgKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zdGFydCggY29udGV4dCApOworICAgIC8vIFByb3BlcnR5Q29uZmlndXJhdG9yLmNvbmZpZ3VyZSgibG9nNGoucHJvcGVydGllcyIpOworICAgIHBsdWdpbiA9IHRoaXM7CisgICAgbW9kZWxDYWNoZSA9IG5ldyBNb2RlbENhY2hlKCBnZXRDb25maWd1cmF0aW9uKCkgKTsKKyAgICBzdGF0c0xvZ2dlciA9IG5ldyBTdGF0c0xvZ2dlciggY29uZmlndXJhdGlvbi5nZXRTdGF0c0xvZ2dpbmdGaWxlKCkgKTsKKyAgfQogCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZQotCSAqIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQKLQkgKiApCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KKyAgLyoKKyAgICogKG5vbi1KYXZhZG9jKQorICAgKiBAc2VlCisgICAqIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQKKyAgICogKQorICAgKi8KKyAgcHVibGljIHZvaWQgc3RvcCggQnVuZGxlQ29udGV4dCBjb250ZXh0ICkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcGx1Z2luID0gbnVsbDsKKyAgICBzdXBlci5zdG9wKCBjb250ZXh0ICk7CisgIH0KIAotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQorICAvKioKKyAgICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisgICAqIAorICAgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKyAgICovCisgIHB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisgICAgcmV0dXJuIHBsdWdpbjsKKyAgfQorICAvKgorICAgKiBwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGZpbmFsIEV4Y2VwdGlvbiBleGMpIHsgSVN0YXR1cyBzdGF0dXMgPSBuZXcKKyAgICogU3RhdHVzKElTdGF0dXMuRVJST1IsIFBMVUdJTl9JRCwgZXhjLmdldE1lc3NhZ2UoKSwgZXhjKTsKKyAgICogZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhzdGF0dXMpOyB9IHB1YmxpYyBzdGF0aWMgdm9pZCBsb2coZmluYWwgSVN0YXR1cworICAgKiBzdGF0dXMpIHsgU3lzdGVtLmVyci5wcmludGxuKHN0YXR1cy5nZXRNZXNzYWdlKCkgKyAiXG4iICsKKyAgICogc3RhdHVzLmdldEV4Y2VwdGlvbigpKTsgZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhzdGF0dXMpOyB9CisgICAqLworICBwcml2YXRlIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG51bGw7CisgIHByaXZhdGUgTW9kZWxDYWNoZSBtb2RlbENhY2hlOworICBwcml2YXRlIFN0YXRzTG9nZ2VyIHN0YXRzTG9nZ2VyOwogCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhmaW5hbCBFeGNlcHRpb24gZXhjKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBQTFVHSU5fSUQsIGV4Yy5nZXRNZXNzYWdlKCksCi0JCQkJZXhjKTsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhzdGF0dXMpOwotCX0KKyAgcHVibGljIHN5bmNocm9uaXplZCBDb25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKSB7CisgICAgaWYoIGNvbmZpZ3VyYXRpb24gPT0gbnVsbCApIHsKKyAgICAgIFN0cmluZyBjb25maWd1cmF0aW9uRmlsZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSggUFJPUEVSVFlfQ09ORklHVVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVFlfQ09ORklHVVJBVElPTl9ERUZBVUxUX1ZBTFVFICk7CisgICAgICBsb2dnZXIuaW5mbyggIkxvYWRpbmcgY29uZmlndXJhdGlvbiBmcm9tIGZpbGU6ICIKKyAgICAgICAgICAgICAgICAgICArIG5ldyBGaWxlKCBjb25maWd1cmF0aW9uRmlsZSApLmdldEFic29sdXRlUGF0aCgpICk7CisgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgRmlsZUlucHV0U3RyZWFtIGluU3RyZWFtID0gbnVsbDsKKyAgICAgIHRyeSB7CisgICAgICAgIGluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbSggY29uZmlndXJhdGlvbkZpbGUgKTsKKyAgICAgICAgcHJvcGVydGllcy5sb2FkKCBpblN0cmVhbSApOworICAgICAgICBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oIHByb3BlcnRpZXMgKTsKKyAgICAgIH0gY2F0Y2goIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBleGMgKSB7CisgICAgICAgIGxvZ2dlci5lcnJvciggIlVuYWJsZSB0byBsb2FkIGNvbmZpZ3VyYXRpb24iLCBleGMgKTsKKyAgICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGV4YyApIHsKKyAgICAgICAgbG9nZ2VyLmVycm9yKCAiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJhdGlvbiIsIGV4YyApOworICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYoIGluU3RyZWFtICE9IG51bGwgKSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluU3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gZSApIHsKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCAiQ291bGQgbm90IGNsb3NlIGZpbGUgJyIgKyBjb25maWd1cmF0aW9uRmlsZSwgZSApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKKyAgfQogCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhmaW5hbCBJU3RhdHVzIHN0YXR1cykgewotCQlTeXN0ZW0uZXJyLnByaW50bG4oc3RhdHVzLmdldE1lc3NhZ2UoKSArICJcbiIgKyBzdGF0dXMuZ2V0RXhjZXB0aW9uKCkpOwotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0JfQorICBwdWJsaWMgRVBQTW9kZWwgZ2V0TW9kZWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbW9kZWxDYWNoZS5nZXRNb2RlbCgpOworICB9CiAKLQlwcml2YXRlIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG51bGw7Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIENvbmZpZ3VyYXRpb24gZ2V0Q29uZmlndXJhdGlvbigpIHsKLQkJaWYgKGNvbmZpZ3VyYXRpb24gPT0gbnVsbCkgewotCQkJU3RyaW5nIGNvbmZpZ3VyYXRpb25GaWxlID0gU3lzdGVtLmdldFByb3BlcnR5KAotCQkJCQlQUk9QRVJUWV9DT05GSUdVUkFUSU9OLAotCQkJCQlQUk9QRVJUWV9DT05GSUdVUkFUSU9OX0RFRkFVTFRfVkFMVUUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBmaWxlOiAiCi0JCQkJCSsgbmV3IEZpbGUoY29uZmlndXJhdGlvbkZpbGUpLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCQl0cnkgewkJCQkKLQkJCQlwcm9wZXJ0aWVzLmxvYWQobmV3IEZpbGVJbnB1dFN0cmVhbShjb25maWd1cmF0aW9uRmlsZSkpOwotCQkJCWNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbihwcm9wZXJ0aWVzKTsKLQkJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBleGMpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJU3lzdGVtLmVyci5wcmludGxuKCk7Ci0JCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjKSB7Ci0JCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gY29uZmlndXJhdGlvbjsKLQl9CisgIHB1YmxpYyBTdGF0c0xvZ2dlciBnZXRTdGF0c0xvZ2dlcigpIHsKKyAgICByZXR1cm4gc3RhdHNMb2dnZXI7CisgIH0KIH0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9Db25maWd1cmF0aW9uLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvQ29uZmlndXJhdGlvbi5qYXZhCmluZGV4IGFmMjQ0MWEuLjQ4MDc3ODUgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9Db25maWd1cmF0aW9uLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL0NvbmZpZ3VyYXRpb24uamF2YQpAQCAtMTEsOTggKzExLDE1OSBAQAogcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsKIAogcHVibGljIGNsYXNzIENvbmZpZ3VyYXRpb24geworCisgIHN0YXRpYyBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlciggQ29uZmlndXJhdGlvbi5jbGFzcyApOwogICBmaW5hbCBzdGF0aWMgU3RyaW5nIE1PREVMID0gIm1vZGVsIjsKICAgZmluYWwgc3RhdGljIFN0cmluZyBFWFRFUk5BTF9TRVJWSUNFX1BST1ZJREVSUyA9ICJleHRlcm5hbFNlcnZpY2VQcm92aWRlcnMiOwogICBmaW5hbCBzdGF0aWMgU3RyaW5nIEVQUF9NRVRBREFUQV9SRVBPU0lUT1JZID0gImVwcC5tZXRhZGF0YSI7CiAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU5TVEFMTEVSX1VSTCA9ICJpbnN0YWxsZXIudXJsIjsKICAgZmluYWwgc3RhdGljIFN0cmluZyBCQVNFX0lVUyA9ICJiYXNlSVVzIjsKKyAgZmluYWwgc3RhdGljIFN0cmluZyBURVJNU19PRl9VU0VfVVJMID0gInRlcm1zb2Z1c2UudXJsIjsKKyAgZmluYWwgc3RhdGljIFN0cmluZyBURVJNU19PRl9VU0VfVVJMX0RFRkFVTFQgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC90ZXJtc29mdXNlLnBocCI7CisgIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJJVkFDWV9VUkwgPSAicHJpdmFjeS51cmwiOworICBmaW5hbCBzdGF0aWMgU3RyaW5nIFBSSVZBQ1lfVVJMX0RFRkFVTFQgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9wcml2YWN5LnBocCI7CisgIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFNfTE9HR0lOR19GSUxFID0gInN0YXRzLmxvZ2dpbmcuZmlsZSI7CisgIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFNfTE9HR0lOR19GSUxFX0RFRkFVTFQgPSAic3RhdHMudHh0IjsKICAgZmluYWwgcHVibGljIHN0YXRpYyBTdHJpbmcgUDJfTUVUQURBVEFfUkVQT1NJVE9SSUVTID0gImVjbGlwc2UucDIubWV0YWRhdGEiOwogICBmaW5hbCBwdWJsaWMgc3RhdGljIFN0cmluZyBQMl9BUlRJRkFDVF9SRVBPU0lUT1JJRVMgPSAiZWNsaXBzZS5wMi5hcnRpZmFjdHMiOwogICBmaW5hbCBwdWJsaWMgc3RhdGljIFN0cmluZyBQMl9ST09UUyA9ICJlY2xpcHNlLnAyLnJvb3RzIjsKLSAgCiAgIHByb3RlY3RlZCBGaWxlIG1vZGVsRGlyZWN0b3J5OwogICBwcm90ZWN0ZWQgRmlsZSBleHRlcm5hbFNlcnZpY2VQcm92aWRlckRpcmVjdG9yeTsKICAgcHJvdGVjdGVkIFN0cmluZyBlcHBNZXRhZGF0YVJlcG9zaXRvcnk7CiAgIHByb3RlY3RlZCBTdHJpbmcgaW5zdGFsbGVyVVJMOwogICBwcm90ZWN0ZWQgU3RyaW5nIGJhc2VJVXM7CisgIHByb3RlY3RlZCBTdHJpbmcgdGVybXNPZlVzZVVSTDsKIAotCXB1YmxpYyBTdHJpbmcgZ2V0QmFzZUlVcygpIHsKLQlyZXR1cm4gYmFzZUlVczsKLX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SW5zdGFsbGVyVVJMKCkgewotCQlyZXR1cm4gaW5zdGFsbGVyVVJMOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RXBwTWV0YWRhdGFSZXBvc2l0b3J5KCkgewotCQlyZXR1cm4gZXBwTWV0YWRhdGFSZXBvc2l0b3J5OwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgbWV0YWRhdGFSZXBvc2l0b3JpZXM7Ci0gIHByb3RlY3RlZCBTdHJpbmcgYXJ0aWZhY3RSZXBvc2l0b3JpZXM7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TWV0YWRhdGFSZXBvc2l0b3JpZXMoKSB7Ci0JCXJldHVybiBtZXRhZGF0YVJlcG9zaXRvcmllczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0UmVwb3NpdG9yaWVzKCkgewotCQlyZXR1cm4gYXJ0aWZhY3RSZXBvc2l0b3JpZXM7Ci0JfQotCi0JcHJvdGVjdGVkIEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbiBleHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb247Ci0gIAotICBwdWJsaWMgRXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uIGdldEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbigpIHsKLSAgICByZXR1cm4gZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uOworICBwdWJsaWMgU3RyaW5nIGdldFRlcm1zT2ZVc2VVUkwoKSB7CisgICAgcmV0dXJuIHRlcm1zT2ZVc2VVUkw7CiAgIH0KIAorICBwdWJsaWMgdm9pZCBzZXRUZXJtc09mVXNlVVJMKCBTdHJpbmcgdGVybXNPZlVzZVVSTCApIHsKKyAgICB0aGlzLnRlcm1zT2ZVc2VVUkwgPSB0ZXJtc09mVXNlVVJMOworICB9CisKKyAgcHVibGljIEZpbGUgZ2V0U3RhdHNMb2dnaW5nRmlsZSgpIHsKKyAgICByZXR1cm4gc3RhdHNMb2dnaW5nRmlsZTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldFN0YXRzTG9nZ2luZ0ZpbGUoIEZpbGUgc3RhdHNMb2dnaW5nRmlsZSApIHsKKyAgICB0aGlzLnN0YXRzTG9nZ2luZ0ZpbGUgPSBzdGF0c0xvZ2dpbmdGaWxlOworICB9CisgIHByb3RlY3RlZCBGaWxlIHN0YXRzTG9nZ2luZ0ZpbGU7CisKKyAgcHVibGljIFN0cmluZyBnZXRCYXNlSVVzKCkgeworICAgIHJldHVybiBiYXNlSVVzOworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXRJbnN0YWxsZXJVUkwoKSB7CisgICAgcmV0dXJuIGluc3RhbGxlclVSTDsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0RXBwTWV0YWRhdGFSZXBvc2l0b3J5KCkgeworICAgIHJldHVybiBlcHBNZXRhZGF0YVJlcG9zaXRvcnk7CisgIH0KKyAgcHJvdGVjdGVkIFN0cmluZyBtZXRhZGF0YVJlcG9zaXRvcmllczsKKyAgcHJvdGVjdGVkIFN0cmluZyBhcnRpZmFjdFJlcG9zaXRvcmllczsKKworICBwdWJsaWMgU3RyaW5nIGdldE1ldGFkYXRhUmVwb3NpdG9yaWVzKCkgeworICAgIHJldHVybiBtZXRhZGF0YVJlcG9zaXRvcmllczsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RSZXBvc2l0b3JpZXMoKSB7CisgICAgcmV0dXJuIGFydGlmYWN0UmVwb3NpdG9yaWVzOworICB9CisgIHByb3RlY3RlZCBFeHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24gZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uOworCisgIHB1YmxpYyBFeHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24gZ2V0RXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uKCkKKyAgeworICAgIHJldHVybiBleHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb247CisgIH0KICAgcHJpdmF0ZSBQcm9wZXJ0aWVzIHByb3BlcnRpZXM7Ci0gIAorICBwcml2YXRlIFN0cmluZyBwcml2YWN5VVJMOworCisgIHB1YmxpYyBTdHJpbmcgZ2V0UHJpdmFjeVVSTCgpIHsKKyAgICByZXR1cm4gcHJpdmFjeVVSTDsKKyAgfQorCiAgIHB1YmxpYyBGaWxlIGdldE1vZGVsRGlyZWN0b3J5KCkgewogICAgIHJldHVybiBtb2RlbERpcmVjdG9yeTsKICAgfQotICAKKwogICBwdWJsaWMgRmlsZSBnZXRFeHRlcm5hbFNlcnZpY2VQcm92aWRlckRpcmVjdG9yeSgpIHsKICAgICByZXR1cm4gZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJEaXJlY3Rvcnk7CiAgIH0KLSAgCiAKLSAgcHVibGljIENvbmZpZ3VyYXRpb24oUHJvcGVydGllcyBwcm9wZXJ0aWVzKQotICB7CisgIHB1YmxpYyBDb25maWd1cmF0aW9uKCBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgKSB7CiAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKLSAgICBtb2RlbERpcmVjdG9yeSA9IGNyZWF0ZURpcmVjdG9yeU9iamVjdChNT0RFTCk7Ci0gICAgZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJEaXJlY3RvcnkgPSBjcmVhdGVEaXJlY3RvcnlPYmplY3QoRVhURVJOQUxfU0VSVklDRV9QUk9WSURFUlMpOworICAgIG1vZGVsRGlyZWN0b3J5ID0gY3JlYXRlRGlyZWN0b3J5T2JqZWN0KCBNT0RFTCApOworICAgIGV4dGVybmFsU2VydmljZVByb3ZpZGVyRGlyZWN0b3J5ID0gY3JlYXRlRGlyZWN0b3J5T2JqZWN0KCBFWFRFUk5BTF9TRVJWSUNFX1BST1ZJREVSUyApOwogICAgIGxvYWRFeHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24oKTsKLSAgICAKLSAgICBpbnN0YWxsZXJVUkwgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KElOU1RBTExFUl9VUkwpOwotCi0gICAgbWV0YWRhdGFSZXBvc2l0b3JpZXMgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KFAyX01FVEFEQVRBX1JFUE9TSVRPUklFUyk7Ci0gICAgYXJ0aWZhY3RSZXBvc2l0b3JpZXMgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KFAyX0FSVElGQUNUX1JFUE9TSVRPUklFUyk7Ci0gICAgZXBwTWV0YWRhdGFSZXBvc2l0b3J5ID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eShFUFBfTUVUQURBVEFfUkVQT1NJVE9SWSk7Ci0gICAgYmFzZUlVcyA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkoQkFTRV9JVVMsIiIpOworICAgIGluc3RhbGxlclVSTCA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkoIElOU1RBTExFUl9VUkwgKTsKKyAgICBtZXRhZGF0YVJlcG9zaXRvcmllcyA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkoIFAyX01FVEFEQVRBX1JFUE9TSVRPUklFUyApOworICAgIGFydGlmYWN0UmVwb3NpdG9yaWVzID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSggUDJfQVJUSUZBQ1RfUkVQT1NJVE9SSUVTICk7CisgICAgZXBwTWV0YWRhdGFSZXBvc2l0b3J5ID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSggRVBQX01FVEFEQVRBX1JFUE9TSVRPUlkgKTsKKyAgICBiYXNlSVVzID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSggQkFTRV9JVVMsICIiICk7CisgICAgdGVybXNPZlVzZVVSTCA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkoIFRFUk1TX09GX1VTRV9VUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TX09GX1VTRV9VUkxfREVGQVVMVCApOworICAgIHByaXZhY3lVUkwgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KCBQUklWQUNZX1VSTCwgUFJJVkFDWV9VUkxfREVGQVVMVCApOworICAgIHN0YXRzTG9nZ2luZ0ZpbGUgPSBuZXcgRmlsZSggcHJvcGVydGllcy5nZXRQcm9wZXJ0eSggU1RBVFNfTE9HR0lOR19GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVFNfTE9HR0lOR19GSUxFX0RFRkFVTFQgKSApOworICAgIHRyeSB7CisgICAgICBzdGF0c0xvZ2dpbmdGaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKKyAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBlICkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJVbmFibGUgdG8gY3JlYXRlIHN0YXRzIGxvZ2dpbmcgZmlsZSIsIGUgKTsKKyAgICB9CisgICAgaWYoICFzdGF0c0xvZ2dpbmdGaWxlLmNhbldyaXRlKCkgKSB7CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIkNhbm5vdCB3cml0ZSB0byBzdGF0cyBsb2dnaW5nIGZpbGUgJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0YXRzTG9nZ2luZ0ZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICInIiApOworICAgIH0KKyAgICBpZiggbG9nZ2VyLmlzSW5mb0VuYWJsZWQoKSApIHsKKyAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgc2IuYXBwZW5kKCAiRVBQIFdpemFyZCBjb25maWd1cmF0aW9uOiIgKTsKKyAgICAgIHNiLmFwcGVuZCggIlxuXHQgbW9kZWxEaXJlY3Rvcnk6ICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICAgKyBtb2RlbERpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSApOworICAgICAgc2IuYXBwZW5kKCAiXG5cdCBleHRlcm5hbFNlcnZpY2VQcm92aWRlckRpcmVjdG9yeTogIgorICAgICAgICAgICAgICAgICArIGV4dGVybmFsU2VydmljZVByb3ZpZGVyRGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpICk7CisgICAgICBzYi5hcHBlbmQoICJcblx0IG1ldGFkYXRhUmVwb3NpdG9yaWVzOiAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICsgbWV0YWRhdGFSZXBvc2l0b3JpZXMgKTsKKyAgICAgIHNiLmFwcGVuZCggIlxuXHQgYXJ0aWZhY3RSZXBvc2l0b3JpZXM6ICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICAgKyBhcnRpZmFjdFJlcG9zaXRvcmllcyApOworICAgICAgc2IuYXBwZW5kKCAiXG5cdCBiYXNlSVVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIiArIGJhc2VJVXMgKTsKKyAgICAgIHNiLmFwcGVuZCggIlxuXHQgaW5zdGFsbGVyVVJMOiAgICAgICAgICAgICAgICAgICAgICIgKyBpbnN0YWxsZXJVUkwgKTsKKyAgICAgIHNiLmFwcGVuZCggIlxuXHQgc3RhdHNMb2dnaW5nRmlsZTogICAgICAgICAgICAgICAgICIgKyBzdGF0c0xvZ2dpbmdGaWxlICk7CisgICAgICBzYi5hcHBlbmQoICJcblx0IHRlcm1zT2ZVc2VVUkw6ICAgICAgICAgICAgICAgICAgICAiICsgdGVybXNPZlVzZVVSTCApOworICAgICAgbG9nZ2VyLmluZm8oIHNiICk7CisgICAgfQogICB9CiAKICAgcHJpdmF0ZSB2b2lkIGxvYWRFeHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24oKSB7Ci0gICAgZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uID0gbmV3IEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbihleHRlcm5hbFNlcnZpY2VQcm92aWRlckRpcmVjdG9yeSk7Ci0gICAgCisgICAgZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uID0gbmV3IEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbiggZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJEaXJlY3RvcnkgKTsKICAgfQogCiAgIHByaXZhdGUgRmlsZSBjcmVhdGVEaXJlY3RvcnlPYmplY3QoIFN0cmluZyBrZXkgKSB7Ci0gICAgU3RyaW5nIHZhbHVlID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSggIGtleSApOwotICAgIGlmKHZhbHVlID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvbmZpZ3VyYXRpb24gdmFsdWUgZm9yICciK2tleSArIicgbm90IGRlZmluZWQgaW4gY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIik7CisgICAgU3RyaW5nIHZhbHVlID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSgga2V5ICk7CisgICAgaWYoIHZhbHVlID09IG51bGwgKSB7CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIkNvbmZpZ3VyYXRpb24gdmFsdWUgZm9yICciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICInIG5vdCBkZWZpbmVkIGluIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyIgKTsKICAgICB9Ci0gICAgRmlsZSBmaWxlID0gIG5ldyBGaWxlKHZhbHVlKTsKLSAgICBpZighZmlsZS5jYW5SZWFkKCkpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbm5vdCByZWFkIGZyb20gZmlsZSAnIitmaWxlLmdldEFic29sdXRlUGF0aCgpKyInIik7ICAgICAgCisgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoIHZhbHVlICk7CisgICAgaWYoICFmaWxlLmlzRGlyZWN0b3J5KCkgKSB7CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIiciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBmaWxlLmdldEFic29sdXRlUGF0aCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiJyBpcyBub3QgYSBkaXJlY3RvcnkiICk7CiAgICAgfQotICAgIGlmKCFmaWxlLmlzRGlyZWN0b3J5KCkpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIiciK2ZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkrIicgaXMgbm90IGEgZGlyZWN0b3J5Iik7ICAgICAgCisgICAgaWYoICFmaWxlLmNhblJlYWQoKSApIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiQ2Fubm90IHJlYWQgZnJvbSBkaXJlY3RvcnkgJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICInIiApOwogICAgIH0KICAgICByZXR1cm4gZmlsZTsKICAgfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL0V4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbi5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL0V4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbi5qYXZhCmluZGV4IDg5MmQwZTQuLmFjNzQ1OTcgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9FeHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24uamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvRXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uLmphdmEKQEAgLTEyLDg3ICsxMiwxMDYgQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsKKwogcHVibGljIGNsYXNzIEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVSTCA9ICJ1cmwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJQ09OID0gImljb24iOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExBQkVMID0gImxhYmVsIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVElFU19FWFRFTlNJT04gPSAiLnByb3BlcnRpZXMiOwogCi0JcHVibGljIHN0YXRpYyBjbGFzcyBFbnRyeSB7Ci0JCXB1YmxpYyBTdHJpbmcgbGFiZWw7Ci0JCXB1YmxpYyBTdHJpbmcgZGVzY3JpcHRpb247Ci0JCXB1YmxpYyBGaWxlIGljb247CisgIHN0YXRpYyBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlciggRXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uLmNsYXNzICk7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUkwgPSAidXJsIjsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElDT04gPSAiaWNvbiI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMQUJFTCA9ICJsYWJlbCI7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUSUVTX0VYVEVOU0lPTiA9ICIucHJvcGVydGllcyI7CisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRW50cnkgewogCi0JCXB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKSB7Ci0JCQlyZXR1cm4gbGFiZWw7Ci0JCX0KKyAgICBwdWJsaWMgU3RyaW5nIGxhYmVsOworICAgIHB1YmxpYyBTdHJpbmcgZGVzY3JpcHRpb247CisgICAgcHVibGljIEZpbGUgaWNvbjsKIAotCQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotCQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCQl9CisgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKKyAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CiAKLQkJcHVibGljIEZpbGUgZ2V0SWNvbigpIHsKLQkJCXJldHVybiBpY29uOwotCQl9CisgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKKyAgICB9CiAKLQkJcHVibGljIFN0cmluZyBnZXRVcmxUZW1wbGF0ZSgpIHsKLQkJCXJldHVybiB1cmxUZW1wbGF0ZTsKLQkJfQorICAgIHB1YmxpYyBGaWxlIGdldEljb24oKSB7CisgICAgICByZXR1cm4gaWNvbjsKKyAgICB9CiAKLQkJcHVibGljIEVudHJ5KFN0cmluZyBsYWJlbCwgRmlsZSBpY29uLCBTdHJpbmcgZGVzY3JpcHRpb24sCi0JCQkJU3RyaW5nIHVybFRlbXBsYXRlKSB7Ci0JCQlzdXBlcigpOwotCQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQkJdGhpcy5pY29uID0gaWNvbjsKLQkJCXRoaXMubGFiZWwgPSBsYWJlbDsKLQkJCXRoaXMudXJsVGVtcGxhdGUgPSB1cmxUZW1wbGF0ZTsKLQkJfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXJsVGVtcGxhdGUoKSB7CisgICAgICByZXR1cm4gdXJsVGVtcGxhdGU7CisgICAgfQogCi0JCXB1YmxpYyBTdHJpbmcgdXJsVGVtcGxhdGU7Ci0JfQorICAgIHB1YmxpYyBFbnRyeSggU3RyaW5nIGxhYmVsLAorICAgICAgICAgICAgICAgICAgRmlsZSBpY29uLAorICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHVybFRlbXBsYXRlICkKKyAgICB7CisgICAgICBzdXBlcigpOworICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgdGhpcy5pY29uID0gaWNvbjsKKyAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKyAgICAgIHRoaXMudXJsVGVtcGxhdGUgPSB1cmxUZW1wbGF0ZTsKKyAgICB9CisgICAgcHVibGljIFN0cmluZyB1cmxUZW1wbGF0ZTsKKyAgfQorICBwcml2YXRlIExpc3Q8RW50cnk+IGVudHJpZXMgPSBuZXcgQXJyYXlMaXN0PEVudHJ5PigpOwogCi0JcHJpdmF0ZSBMaXN0PEVudHJ5PiBlbnRyaWVzID0gbmV3IEFycmF5TGlzdDxFbnRyeT4oKTsKKyAgcHVibGljIEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbiggRmlsZSBleHRlcm5hbFNlcnZpY2VQcm92aWRlckRpcmVjdG9yeSApCisgIHsKKyAgICBmb3IoIEZpbGUgcHJvcGVydGllc0ZpbGUgOiBleHRlcm5hbFNlcnZpY2VQcm92aWRlckRpcmVjdG9yeS5saXN0RmlsZXMoKSApIHsKKyAgICAgIGlmKCBwcm9wZXJ0aWVzRmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIFBST1BFUlRJRVNfRVhURU5TSU9OICkgKSB7CisgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBpblN0cmVhbSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgICAgICBpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIHByb3BlcnRpZXNGaWxlICk7CisgICAgICAgICAgcHJvcGVydGllcy5sb2FkKCBpblN0cmVhbSApOworICAgICAgICAgIFN0cmluZyBsYWJlbCA9IGdldE1hbmRhdG9yeVByb3BlcnR5KCBwcm9wZXJ0aWVzLCBMQUJFTCApOworICAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGdldE1hbmRhdG9yeVByb3BlcnR5KCBwcm9wZXJ0aWVzLCBERVNDUklQVElPTiApOworICAgICAgICAgIFN0cmluZyBpY29uID0gZ2V0TWFuZGF0b3J5UHJvcGVydHkoIHByb3BlcnRpZXMsIElDT04gKTsKKyAgICAgICAgICBTdHJpbmcgdXJsID0gZ2V0TWFuZGF0b3J5UHJvcGVydHkoIHByb3BlcnRpZXMsIFVSTCApOworICAgICAgICAgIEVudHJ5IGVudHJ5ID0gbmV3IEVudHJ5KCBsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGUoIGV4dGVybmFsU2VydmljZVByb3ZpZGVyRGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsICk7CisgICAgICAgICAgZW50cmllcy5hZGQoIGVudHJ5ICk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleGMgKSB7CisgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJDb3VsZCBub3QgbG9hZCBleHRlcm5hbCBzZXJ2aWNlIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gZmlsZSciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHByb3BlcnRpZXNGaWxlLmdldEFic29sdXRlUGF0aCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICInIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjICk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgaWYoIGluU3RyZWFtICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICBpblN0cmVhbS5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaCggSU9FeGNlcHRpb24gZSApIHsKKyAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oICJDb3VsZCBub3QgY2xvc2UgZmlsZSAnIiArIHByb3BlcnRpZXNGaWxlLCBlICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CiAKLQlwdWJsaWMgRXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uKEZpbGUgZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJEaXJlY3RvcnkpIHsKLQkJZm9yIChGaWxlIHByb3BlcnRpZXNGaWxlIDogZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJEaXJlY3RvcnkubGlzdEZpbGVzKCkpIHsKLQkJCWlmIChwcm9wZXJ0aWVzRmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoUFJPUEVSVElFU19FWFRFTlNJT04pKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJCQkJcHJvcGVydGllcy5sb2FkKG5ldyBGaWxlSW5wdXRTdHJlYW0ocHJvcGVydGllc0ZpbGUpKTsKKyAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWFuZGF0b3J5UHJvcGVydHkoIFByb3BlcnRpZXMgcHJvcGVydGllcywgU3RyaW5nIHN0cmluZyApIHsKKyAgICBTdHJpbmcgcmVzdWx0ID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSggc3RyaW5nICk7CisgICAgaWYoIHJlc3VsdCA9PSBudWxsICkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJFeHRlcm5hbCBzZXJ2aWNlIHByb3ZpZGVyIGtleSAnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiJyBub3QgZm91bmQgaW4gcHJvcGVydGllcyIgKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQogCi0JCQkJCVN0cmluZyBsYWJlbCA9IGdldE1hbmRhdG9yeVByb3BlcnR5KHByb3BlcnRpZXMsIExBQkVMKTsKLQkJCQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0TWFuZGF0b3J5UHJvcGVydHkocHJvcGVydGllcywKLQkJCQkJCQlERVNDUklQVElPTik7Ci0JCQkJCVN0cmluZyBpY29uID0gZ2V0TWFuZGF0b3J5UHJvcGVydHkocHJvcGVydGllcywgSUNPTik7Ci0JCQkJCVN0cmluZyB1cmwgPSBnZXRNYW5kYXRvcnlQcm9wZXJ0eShwcm9wZXJ0aWVzLCBVUkwpOwotCQkJCQlFbnRyeSBlbnRyeSA9IG5ldyBFbnRyeShsYWJlbCwgbmV3IEZpbGUoZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJEaXJlY3RvcnksCi0JCQkJCQkJaWNvbiksIGRlc2NyaXB0aW9uLCB1cmwpOwotCQkJCQllbnRyaWVzLmFkZChlbnRyeSk7Ci0JCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgewotCQkJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLQkJCQkJCQkiQ291bGQgbm90IGxvYWQgZXh0ZXJuYWwgc2VydmljZSBwcm92aWRlciBjb25maWd1cmF0aW9uIGZpbGUnIgotCQkJCQkJCQkJKyBwcm9wZXJ0aWVzRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICInIiwKLQkJCQkJCQlleGMpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldE1hbmRhdG9yeVByb3BlcnR5KFByb3BlcnRpZXMgcHJvcGVydGllcywgU3RyaW5nIHN0cmluZykgewotCQlTdHJpbmcgcmVzdWx0ID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eShzdHJpbmcpOwotCQlpZiAocmVzdWx0ID09IG51bGwpIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHRlcm5hbCBzZXJ2aWNlIHByb3ZpZGVyIGtleSAnIgotCQkJCQkrIHN0cmluZyArICInIG5vdCBmb3VuZCBpbiBwcm9wZXJ0aWVzIik7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxFbnRyeT4gZ2V0RW50cmllcygpIHsKLQkJcmV0dXJuIGVudHJpZXM7Ci0JfQorICBwdWJsaWMgTGlzdDxFbnRyeT4gZ2V0RW50cmllcygpIHsKKyAgICByZXR1cm4gZW50cmllczsKKyAgfQogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL0xpbmtVdGlsLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvTGlua1V0aWwuamF2YQppbmRleCBiMmFkMzc1Li5kYWM2MjZhIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvTGlua1V0aWwuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvTGlua1V0aWwuamF2YQpAQCAtMSwzICsxLDEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWw7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5yd3QuZ3JhcGhpY3MuR3JhcGhpY3M7CkBAIC02LDEzICsxNiwxNCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CiAKIHB1YmxpYyBjbGFzcyBMaW5rVXRpbCB7Ci0Jc3RhdGljIEN1cnNvciBoYW5kQ3Vyc29yID0gR3JhcGhpY3MuZ2V0Q3Vyc29yKFNXVC5DVVJTT1JfSEFORCk7IAotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRIYW5kQ3Vyc29yKENvbnRyb2wgY29udHJvbCkKLQl7Ci0JCWNvbnRyb2wuc2V0Q3Vyc29yKGhhbmRDdXJzb3IpOwotCX0KLQlwdWJsaWMgc3RhdGljIHZvaWQgcmVzZXRDdXJzb3IoQ29udHJvbCBjb250cm9sKQotCXsKLQkJY29udHJvbC5zZXRDdXJzb3IobnVsbCk7Ci0JfQorCisgIHN0YXRpYyBDdXJzb3IgaGFuZEN1cnNvciA9IEdyYXBoaWNzLmdldEN1cnNvciggU1dULkNVUlNPUl9IQU5EICk7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHNldEhhbmRDdXJzb3IoIENvbnRyb2wgY29udHJvbCApIHsKKyAgICBjb250cm9sLnNldEN1cnNvciggaGFuZEN1cnNvciApOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0Q3Vyc29yKCBDb250cm9sIGNvbnRyb2wgKSB7CisgICAgY29udHJvbC5zZXRDdXJzb3IoIG51bGwgKTsKKyAgfQogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL01vZGVsQ2FjaGUuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9Nb2RlbENhY2hlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljYTU0NAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9Nb2RlbENhY2hlLmphdmEKQEAgLTAsMCArMSwxMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsLkVQUE1vZGVsOworCisvKioKKyAqIENhY2hlIGZvciBtb2RlbCBkYXRhLCBzbyBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlIHBhcnNlZCBmb3IgZWFjaCBzZXNzaW9uLCBidXQKKyAqIHN0aWxsIGlzIHVwIHRvIGRhdGUuCisgKiAKKyAqIEBhdXRob3IgbXdvZWxrZXIKKyAqLworcHVibGljIGNsYXNzIE1vZGVsQ2FjaGUgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFUFBNT0RFTF9YTUxfRklMRU5BTUUgPSAiZXBwbW9kZWwueG1sIjsKKyAgc3RhdGljIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCBNb2RlbENhY2hlLmNsYXNzICk7CisgIHByaXZhdGUgT2JqZWN0IExPQ0sgPSBuZXcgT2JqZWN0KCk7CisgIHByaXZhdGUgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOworICBwcml2YXRlIEVQUE1vZGVsIG1vZGVsOworICBwcml2YXRlIGxvbmcgVVBEQVRFX0NIRUNLX0lOX1NFQyA9IDEwOworICBwcml2YXRlIGxvbmcgVVBEQVRFX0lOVEVSVkFMX0lOX1NFQyA9IDYwICogNjA7IC8vIGhvdXJseQorICBwcml2YXRlIGxvbmcgRVJST1JfVVBEQVRFX0lOVEVSVkFMX0lOX1NFQyA9IDE7CisgIHByaXZhdGUgbG9uZyBsYXN0VXBkYXRlID0gMDsKKyAgLyoqCisgICAqIFRoaXMgdXBkYXRlciBUaHJlYWQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB0byBrZWVwIG1vZGVsIGluZm9ybWF0aW9uCisgICAqIHVwLXRvLWRhdGUgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgYXBwbGljYXRpb24gVGhyZWUgaW50ZXJ2YWxzIGFyZSB1c2VkOgorICAgKiBVUERBVEVfQ0hFQ0tfSU5fU0VDIC0gdXNlZCBmb3IgY2hlY2tpbmcgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9uIHRoZQorICAgKiBlcHBtb2RlbC54bWwgZmlsZSwgbW9kZWwgaXMgcmVsb2FkIGlmIGNoYW5nZWQgVVBEQVRFX0lOVEVSVkFMX0lOX1NFQyAtCisgICAqIG1vZGVsIGlzIHJlbG9hZGVkIGluIHRoaXMgaW50ZXJ2YWwsIHJlZ2FyZGxlc3Mgb2YgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcHMsCisgICAqIHBpY2tzIHVwIGNoYW5nZXMgaW4gdGhlIHVwc3RyZWFtIFAyIE1ldGFkYXRhIHJlcG9zaXRvcmllcworICAgKiBFUlJPUl9VUERBVEVfSU5URVJWQUxfSU5fU0VDIC0gVGhpcyBpbnRlcnZhbCBraWNrcyBpbiBpZiB0aGUgdXBkYXRlIGZhaWxzLAorICAgKiBlLmcuIHdoZW4gdGhlIG5ldHdvcmsgaXMgZG93bgorICAgKiAKKyAgICogQGF1dGhvciBtd29lbGtlcgorICAgKi8KKyAgcHJvdGVjdGVkIGNsYXNzIE1vZGVsVXBkYXRlciBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKworICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgIEZpbGUgbW9kZWxEaXJlY3RvcnkgPSBjb25maWd1cmF0aW9uLmdldE1vZGVsRGlyZWN0b3J5KCk7CisgICAgICBGaWxlIG1vZGVsWE1MID0gbmV3IEZpbGUoIG1vZGVsRGlyZWN0b3J5LCBFUFBNT0RFTF9YTUxfRklMRU5BTUUgKTsKKyAgICAgIGxvbmcgbGFzdE1vZGlmaWVkID0gMDsKKyAgICAgIHdoaWxlKCB0cnVlICkgeworICAgICAgICB0cnkgeworICAgICAgICAgIGxvbmcgbmV3TGFzdE1vZGlmaWVkID0gbW9kZWxYTUwubGFzdE1vZGlmaWVkKCk7CisgICAgICAgICAgaWYoIGxhc3RNb2RpZmllZCAhPSBuZXdMYXN0TW9kaWZpZWQgKSB7CisgICAgICAgICAgICByZWxvYWQoKTsKKyAgICAgICAgICAgIGxhc3RNb2RpZmllZCA9IG5ld0xhc3RNb2RpZmllZDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoIGxhc3RVcGRhdGUgKyAoIFVQREFURV9JTlRFUlZBTF9JTl9TRUMgKiAxMDAwICkgPCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSApCisgICAgICAgICAgeworICAgICAgICAgICAgcmVsb2FkKCk7CisgICAgICAgICAgfQorICAgICAgICAgIHNsZWVwKCBVUERBVEVfQ0hFQ0tfSU5fU0VDICk7CisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeworICAgICAgICAgIGxvZ2dlci5lcnJvciggIkVycm9yIHVwZGF0aW5nIG1vZGVsIiwgdCApOworICAgICAgICAgIHNsZWVwKCBFUlJPUl9VUERBVEVfSU5URVJWQUxfSU5fU0VDICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiByZWxvYWRzIHRoZSBtb2RlbCBhbmQgdXBkYXRlcyB0aGUgaW50ZXJuYWwgbWVtYmVyIHZhcmlhYmxlCisgICAgICogCisgICAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmVsb2FkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICBFUFBNb2RlbCB0ZW1wTW9kZWwgPSBsb2FkTW9kZWwoKTsKKyAgICAgIHN5bmNocm9uaXplZCggTE9DSyApIHsKKyAgICAgICAgbW9kZWwgPSB0ZW1wTW9kZWw7CisgICAgICAgIGxhc3RVcGRhdGUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgIH0KKyAgICAgIGxvZ2dlci5pbmZvKCAiVXBkYXRlZCBtb2RlbCIgKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2xlZXAoIGxvbmcgdGltZUluU2VjICkgeworICAgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLnNsZWVwKCB0aW1lSW5TZWMgKiAxMDAwICk7CisgICAgICB9IGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlICkgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmludGVycnVwdCgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1YmxpYyBNb2RlbENhY2hlKCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gKSB7CisgICAgc3VwZXIoKTsKKyAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICAgIFRocmVhZCB1cGRhdGVUaHJlYWQgPSBuZXcgVGhyZWFkKCBuZXcgTW9kZWxVcGRhdGVyKCkgKTsKKyAgICB1cGRhdGVUaHJlYWQuc2V0TmFtZSggIkVQUCBNb2RlbCB1cGRhdGVyIiApOworICAgIHVwZGF0ZVRocmVhZC5zZXREYWVtb24oIHRydWUgKTsKKyAgICB1cGRhdGVUaHJlYWQuc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyBFUFBNb2RlbCBnZXRNb2RlbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0ubmFub1RpbWUoKTsKKyAgICBzeW5jaHJvbml6ZWQoIExPQ0sgKSB7CisgICAgICBpZiggbW9kZWwgPT0gbnVsbCApIHsKKyAgICAgICAgbW9kZWwgPSBsb2FkTW9kZWwoKTsKKyAgICAgIH0KKyAgICAgIGxvbmcgZW5kID0gU3lzdGVtLm5hbm9UaW1lKCk7CisgICAgICBpZiggbG9nZ2VyLmlzRGVidWdFbmFibGVkKCkgKSB7CisgICAgICAgIGxvZ2dlci5kZWJ1ZyggIkNhY2hlIHRpbWU6ICIgKyAoIGVuZCAtIHN0YXJ0ICkgLyAxMDAwICk7CisgICAgICB9CisgICAgICByZXR1cm4gbW9kZWw7CisgICAgfQorICB9CisKKyAgcHJvdGVjdGVkIEVQUE1vZGVsIGxvYWRNb2RlbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGUgbW9kZWxEaXJlY3RvcnkgPSBjb25maWd1cmF0aW9uLmdldE1vZGVsRGlyZWN0b3J5KCk7CisgICAgRmlsZSBtb2RlbFhNTCA9IG5ldyBGaWxlKCBtb2RlbERpcmVjdG9yeSwgRVBQTU9ERUxfWE1MX0ZJTEVOQU1FICk7CisgICAgRVBQTW9kZWwgbW9kZWwgPSBudWxsOworICAgIG1vZGVsID0gRVBQTW9kZWwucmVhZCggbW9kZWxYTUwudG9VUkkoKS50b1VSTCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVSTCggY29uZmlndXJhdGlvbi5nZXRFcHBNZXRhZGF0YVJlcG9zaXRvcnkoKSApICk7CisgICAgcmV0dXJuIG1vZGVsOworICB9Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvT3NVdGlsLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvT3NVdGlsLmphdmEKaW5kZXggNWMzZjNlMy4uZjkxOGE4NSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL09zVXRpbC5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9Pc1V0aWwuamF2YQpAQCAtMTAsMzMgKzEwLDI0IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsOwogCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQogLyoqCiAgKiBAYXV0aG9yIEpvcmRpIEJvZWhtZSBMb3BleiA8amJvZWhtZUBpbm5vb3ByYWN0LmNvbT4KICAqLwogcHVibGljIGNsYXNzIE9zVXRpbCB7CiAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gUExBVEZPUk1TCi0gICAgPSBuZXcgU3RyaW5nW10geyAid2luMzIiLCAibGludXgiLAotCQkJIm1hY29zeCIgfTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBFWFRTID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0KLSAgc3RhdGljIHsKLSAgICBFWFRTLnB1dCggIndpbjMyIiwgInppcCIgKTsKLSAgICBFWFRTLnB1dCggImxpbnV4IiwgInRhci5neiIgKTsKLSAgICBFWFRTLnB1dCgibWFjb3N4IiwgInRhci5neiIpOworICBwdWJsaWMgc3RhdGljIFBsYXRmb3JtIGdldERlZmF1bHRPcyggU3RyaW5nIHVzZXJBZ2VudCApIHsKKyAgICBQbGF0Zm9ybSByZXN1bHQgPSBQbGF0Zm9ybS5XSU4zMjsKKyAgICBmb3IoIFBsYXRmb3JtIHBsYXRmb3JtIDogUGxhdGZvcm0udmFsdWVzKCkgKSB7CisgICAgICBTdHJpbmcgcGxhdGZvcm1IZWFkZXIgPSBwbGF0Zm9ybS5nZXRJZCgpLnN1YnN0cmluZyggMCwgMyApOworICAgICAgaWYoIHVzZXJBZ2VudC5pbmRleE9mKCBwbGF0Zm9ybUhlYWRlciApID4gLTEKKyAgICAgICAgICB8fCB1c2VyQWdlbnQuaW5kZXhPZiggcGxhdGZvcm1IZWFkZXIudG9VcHBlckNhc2UoKSApID4gLTEKKyAgICAgICAgICB8fCB1c2VyQWdlbnQuaW5kZXhPZiggcGxhdGZvcm1IZWFkZXIuc3Vic3RyaW5nKCAwLCAxICkudG9VcHBlckNhc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBsYXRmb3JtSGVhZGVyLnN1YnN0cmluZyggMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtSGVhZGVyLmxlbmd0aCgpICkgKSA+IC0xICkKKyAgICAgIHsKKyAgICAgICAgcmVzdWx0ID0gcGxhdGZvcm07CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiAgIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UGxhdGZvcm1zKCkgewotICAgIHJldHVybiBQTEFURk9STVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFyY2hpdmVFeHRlbnNpb24oIGZpbmFsIFN0cmluZyBvcyApIHsKLSAgICByZXR1cm4gRVhUUy5nZXQoIG9zICk7Ci0gIH0KLSAgCi0gIAotICAKIH0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9QMk1ldGFkYXRhQ29uc3RhbnRzLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvUDJNZXRhZGF0YUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzg1YTE1Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9QMk1ldGFkYXRhQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIAkJSGVucmlrIExpbmRiZXJnCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWw7Ci0KLS8qKgotICogQGF1dGhvciBIZW5yaWsgTGluZGJlcmcKLSAqIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFAyTWV0YWRhdGFDb25zdGFudHMKLXsKLQotCXN0YXRpYyBmaW5hbCBTdHJpbmcgSVVfTUVUQURBVEFfRk9STUFUID0gIkluc3RhbGxhYmxlVW5pdCI7IC8vJE5PTi1OTFMtMSQKLQotCXN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TVEFMTEFCTEVfRUxFTUVOVCA9ICJpbnN0YWxsYWJsZSI7IC8vJE5PTi1OTFMtMSQKLQotCXN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TVEFMTEFCTEVfVkVSU0lPTiA9ICIxLjAuMCI7IC8vJE5PTi1OTFMtMSQKLQotCXN0YXRpYyBmaW5hbCBTdHJpbmcgSVVfTUVUQURBVEFfRk9STUFUX1ZFUlNJT04gPSAiMS4wLjAiOyAvLyROT04tTkxTLTEkCi0KLQlzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSVVfVkVSU0lPTl9TVFJJTkcgPSAiMS4wLjAiOyAvLyROT04tTkxTLTEkCi0KLQlzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSVVfTElDRU5TRV9URU1QTEFURSA9ICJUaGUgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgbWF0ZXJpYWxzIGNvbnRhaW5lZCBoZXJlaW4gaGF2ZSBiZWVuIgotCQkJKyAiIGxpY2Vuc2VkIHVuZGVyIHRoZSBOQU1FT0ZMSUNFTlNFIC0gVkVSU0lPTiBieSB0aGUgY29weXJpZ2h0IGhvbGRlcihzKSIKLQkJCSsgIiBsaXN0ZWQgaW4gdGhlIENvcHlyaWdodCBzZWN0aW9uLiI7Ci0KLQlzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSVVfQ09QWVJJR0hUX1RFTVBMQVRFID0gIkFubm90YXRpb24gdG8gY29weXJpZ2h0IFVSTCwgb3IgdGhlIGFjdHVhbCBjb3B5cmlnaHQgdGV4dC4iOwotCi19CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvUDJNZXRhZGF0YVJlYWRlci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL1AyTWV0YWRhdGFSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI4ZGE1YS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvUDJNZXRhZGF0YVJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogCQlIZW5yaWsgTGluZGJlcmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5jb3JlLmhlbHBlcnMuTG9nSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEuSW5zdGFsbGFibGVVbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5BY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5pby5NZXRhZGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnBlcnNpc3RlbmNlLlhNTFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmNvcmUuUHJvdmlzaW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIubWV0YWRhdGEuTWV0YWRhdGFGYWN0b3J5Lkluc3RhbGxhYmxlVW5pdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5yZXNvbHZlci5WZXJzaW9uUmFuZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuVmVyc2lvbjsKLWltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBQMiBNZXRhZGF0YSBSZWFkZXIgdXNlZCB0byBjZW50cmFsaXplIHJlYWRpbmcgb2YgUDIgbWV0YWRhdGEgYXMgQVBJIGlzIGxpa2VseSB0byBjaGFuZ2UuCi0gKiBUaGUgSW5zdGFsbGFibGVVbml0IHJlYWRlciByZXVzZXMgdGhlIE1ldGFkYXRhUmVwb3NpdG9yeSBoYW5kbGVyIGZvciBJbnN0YWxsYWJsZVVuaXQgYnV0IGluIGFuIAotICogdWdseSB3YXkuCi0gKiAKLSAqIFRPRE86IFRoZSBmb3JtYXQsIHBhcnNlciBhbmQgd3JpdGVyIHNob3VsZCBlaXRoZXIgYmUgcHJpdmF0ZSwgYW5kIHVzZSBpdHMgb3duIGltcGwgb2YKLSAqIHRoZSBJSW5zdGFsbGFibGVVbml0IGludGVyZmFjZSBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBlZGl0aW5nLCBvciB0aGUgTWV0YWRhdGEgQVBJIHNob3VsZAotICogYWxsb3cgY3JlYXRpb24gb2YgbXV0YWJsZSBpbnN0YW5jZXMuCi0gKiAKLSAqIEBhdXRob3IgSGVucmlrIExpbmRiZXJnCi0gKi8KLUBTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpCi1wdWJsaWMgY2xhc3MgUDJNZXRhZGF0YVJlYWRlciBpbXBsZW1lbnRzIFAyTWV0YWRhdGFDb25zdGFudHMKLXsKLQotCS8qKgotCSAqIFJlYWRzIG1ldGFkYXRhIGZyb20gdGhlIGdpdmVuIHN0cmVhbSwgYW5kIHJldHVybnMgdGhlIGNvbnRhaW5lZCBhcnJheQotCSAqIG9mIGFic3RyYWN0IG1ldGFkYXRhIHJlcG9zaXRvcmllcy4KLQkgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBidWZmZXJpbmcsIGFuZCBjbG9zZXMgdGhlIHN0cmVhbSB3aGVuIGZpbmlzaGVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSW5zdGFsbGFibGVVbml0IHJlYWRJbnN0YWxsYWJsZVVuaXQoVVJMIGxvY2F0aW9uLCBJbnB1dFN0cmVhbSBpbnB1dCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgUHJvdmlzaW9uRXhjZXB0aW9uIHsKLQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBidWZmZXJlZElucHV0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXRyeSB7Ci0JCQkJYnVmZmVyZWRJbnB1dCA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGlucHV0KTsKLQotCQkJCVBhcnNlciByZXBvc2l0b3J5UGFyc2VyID0gbmV3IFBhcnNlcihBY3RpdmF0b3IuZ2V0Q29udGV4dCgpLCBBY3RpdmF0b3IuSUQpOwotCQkJCXJlcG9zaXRvcnlQYXJzZXIucGFyc2UoaW5wdXQsIG1vbml0b3IpOwotCQkJCUlTdGF0dXMgcmVzdWx0ID0gcmVwb3NpdG9yeVBhcnNlci5nZXRTdGF0dXMoKTsKLQkJCQlzd2l0Y2ggKHJlc3VsdC5nZXRTZXZlcml0eSgpKSB7Ci0JCQkJCWNhc2UgSVN0YXR1cy5DQU5DRUwgOgotCQkJCQkJdGhyb3cgbmV3IE9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uKCk7Ci0JCQkJCWNhc2UgSVN0YXR1cy5FUlJPUiA6Ci0JCQkJCQl0aHJvdyBuZXcgUHJvdmlzaW9uRXhjZXB0aW9uKHJlc3VsdCk7Ci0JCQkJCWNhc2UgSVN0YXR1cy5XQVJOSU5HIDoKLQkJCQkJY2FzZSBJU3RhdHVzLklORk8gOgotCQkJCQkJTG9nSGVscGVyLmxvZyhyZXN1bHQpOwotCQkJCX0KLQkJCQlyZXR1cm4gcmVwb3NpdG9yeVBhcnNlci5nZXRJbnN0YWxsYWJsZVVuaXQoKTsKLQkJCX0gCi0JCQljYXRjaChFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOyAvLyBSRU1PVkUgRU5USVJFIENBVENICi0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAoYnVmZmVyZWRJbnB1dCAhPSBudWxsKQotCQkJCQlidWZmZXJlZElucHV0LmNsb3NlKCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewotCQkJU3RyaW5nIG1zZyA9IE5MUy5iaW5kKE1lc3NhZ2VzLmlvX2ZhaWxlZFJlYWQsIGxvY2F0aW9uKTsKLQkJCXRocm93IG5ldyBQcm92aXNpb25FeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBBY3RpdmF0b3IuSUQsIFByb3Zpc2lvbkV4Y2VwdGlvbi5SRVBPU0lUT1JZX0ZBSUxFRF9SRUFELCBtc2csIGlvZSkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBpbnRlcmZhY2UgWE1MQ29uc3RhbnRzIGV4dGVuZHMgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5LmlvLlhNTENvbnN0YW50cyB7Ci0KLQkJLy8gQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFhNTCBmb3IgYSBNZXRhZGF0YVJlcG9zaXRvcnkKLQotCQkvLyBBIGZvcm1hdCB2ZXJzaW9uIG51bWJlciBmb3IgbWV0YWRhdGEgcmVwb3NpdG9yeSBYTUwuCi0JCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9WRVJTSU9OID0gIjEuMC4wIjsgLy8kTk9OLU5MUy0xJAotCQlwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb24gQ1VSUkVOVF9WRVJTSU9OID0gbmV3IFZlcnNpb24oWE1MX1ZFUlNJT04pOwotCQlwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25SYW5nZSBYTUxfVE9MRVJBTkNFID0gbmV3IFZlcnNpb25SYW5nZShDVVJSRU5UX1ZFUlNJT04sIHRydWUsIG5ldyBWZXJzaW9uKDIsIDAsIDApLCBmYWxzZSk7Ci0KLQkJLy8gQ29uc3RhbnRzIGZvciBwcm9jZXNzaW5nIEluc3RydWN0aW9ucwotCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQSV9JVV9UQVJHRVQgPSAiSW5zdGFsbGFibGVVbml0IjsgLy8kTk9OLU5MUy0xJAotCi0JCS8vIENvbnN0YW50cyBmb3IgbWV0YWRhdGEgSVUgZWxlbWVudHMKLQkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVVfRUxFTUVOVCA9ICJpbnN0YWxsYWJsZSI7IC8vJE5PTi1OTFMtMSQKLQotCX0KLQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByb3RlY3RlZCBYTUxXcml0ZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uW10gY3JlYXRlUEkoQ2xhc3MgaXVDbGFzcykgewotCQkvL1RPRE8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24sIGJ1dCBjdXJyZW50bHkgb2xkIGNsaWVudHMgcmVseSBvbiB0aGlzLiBTZWUgYnVnIDIxMDQ1MC4KLQkJcmV0dXJuIG5ldyBYTUxXcml0ZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uW10ge1hNTFdyaXRlci5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ubWFrZUNsYXNzVmVyc2lvbkluc3RydWN0aW9uKFhNTENvbnN0YW50cy5QSV9JVV9UQVJHRVQsIGl1Q2xhc3MsIFhNTENvbnN0YW50cy5DVVJSRU5UX1ZFUlNJT04pfTsKLQl9Ci0KLQotCS8qCi0JICogCVBhcnNlciBmb3IgdGhlIGNvbnRlbnRzIG9mIGEgaW5zdGFsbGFibGUgdW5pdCwKLQkgKiAJYXMgd3JpdHRlbiBieSB0aGUgV3JpdGVyIGNsYXNzLgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNsYXNzIFBhcnNlciBleHRlbmRzIE1ldGFkYXRhUGFyc2VyIGltcGxlbWVudHMgWE1MQ29uc3RhbnRzIHsKLQotCQlwcml2YXRlIEluc3RhbGxhYmxlVW5pdCB0aGVJbnN0YWxsYWJsZVVuaXQgPSBudWxsOwotCi0JCXB1YmxpYyBQYXJzZXIoQnVuZGxlQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgYnVuZGxlSWQpIHsKLQkJCXN1cGVyKGNvbnRleHQsIGJ1bmRsZUlkKTsKLQkJfQotCi0JCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBwYXJzZShJbnB1dFN0cmVhbSBzdHJlYW0sIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJCXRoaXMuc3RhdHVzID0gbnVsbDsKLQkJCXNldFByb2dyZXNzTW9uaXRvcihtb25pdG9yKTsKLQkJCW1vbml0b3IuYmVnaW5UYXNrKCJMb2FkaW5nIGluc3RhbGxhYmxlIHVuaXQiLCBJUHJvZ3Jlc3NNb25pdG9yLlVOS05PV04pOwotCQkJdHJ5IHsKLQkJCQkvLyBUT0RPOiBjdXJyZW50bHkgbm90IGNhY2hpbmcgdGhlIHBhcnNlciBzaW5jZSB3ZSBtYWtlIG5vIGFzc3VtcHRpb25zCi0JCQkJLy8JCSBvciByZXN0cmljdGlvbnMgb24gY29uY3VycmVudCBwYXJzaW5nCi0JCQkJZ2V0UGFyc2VyKCk7Ci0JCQkJSVVIYW5kbGVyIGl1SGFuZGxlciA9IG5ldyBJVUhhbmRsZXIoKTsKLQkJCQl4bWxSZWFkZXIuc2V0Q29udGVudEhhbmRsZXIobmV3IElVRG9jSGFuZGxlcihJVV9FTEVNRU5ULCBpdUhhbmRsZXIpKTsKLQkJCQl4bWxSZWFkZXIucGFyc2UobmV3IElucHV0U291cmNlKHN0cmVhbSkpOwotCQkJCWlmIChpc1ZhbGlkWE1MKCkpIHsKLQkJCQkJdGhlSW5zdGFsbGFibGVVbml0ID0gaXVIYW5kbGVyLmdldEluc3RhbGxhYmxlVW5pdCgpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKSB7Ci0JCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJCX0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCQl9IGZpbmFsbHkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJCXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0KLQkJcHVibGljIEluc3RhbGxhYmxlVW5pdCBnZXRJbnN0YWxsYWJsZVVuaXQoKSB7Ci0JCQlyZXR1cm4gdGhlSW5zdGFsbGFibGVVbml0OwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCBPYmplY3QgZ2V0Um9vdE9iamVjdCgpIHsKLQkJCXJldHVybiBnZXRJbnN0YWxsYWJsZVVuaXQoKTsKLQkJfQotCi0JCXByaXZhdGUgZmluYWwgY2xhc3MgSVVEb2NIYW5kbGVyIGV4dGVuZHMgRG9jSGFuZGxlciB7Ci0KLQkJCXB1YmxpYyBJVURvY0hhbmRsZXIoU3RyaW5nIHJvb3ROYW1lLCBSb290SGFuZGxlciByb290SGFuZGxlcikgewotCQkJCXN1cGVyKHJvb3ROYW1lLCByb290SGFuZGxlcik7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uKFN0cmluZyB0YXJnZXQsIFN0cmluZyBkYXRhKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCQlpZiAoUElfSVVfVEFSR0VULmVxdWFscyh0YXJnZXQpKSB7Ci0JCQkJCVZlcnNpb24gcmVwb3NpdG9yeVZlcnNpb24gPSBleHRyYWN0UElWZXJzaW9uKHRhcmdldCwgZGF0YSk7Ci0JCQkJCWlmICghUDJNZXRhZGF0YVJlYWRlci5YTUxDb25zdGFudHMuWE1MX1RPTEVSQU5DRS5pc0luY2x1ZGVkKHJlcG9zaXRvcnlWZXJzaW9uKSkgewotCQkJCQkJdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihOTFMuYmluZChNZXNzYWdlcy5pb19JbmNvbXBhdGlibGVWZXJzaW9uLCByZXBvc2l0b3J5VmVyc2lvbiwgUDJNZXRhZGF0YVJlYWRlci5YTUxDb25zdGFudHMuWE1MX1RPTEVSQU5DRSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCX0KLQotCQlwcml2YXRlIGZpbmFsIGNsYXNzIElVSGFuZGxlciBleHRlbmRzIFJvb3RIYW5kbGVyIHsKLQkJCXByaXZhdGUgSW5zdGFsbGFibGVVbml0SGFuZGxlciB1bml0SGFuZGxlciA9IG51bGw7Ci0JCQlBcnJheUxpc3Q8SW5zdGFsbGFibGVVbml0RGVzY3JpcHRpb24+IHVuaXRzID0gbnVsbDsKLQotCQkJcHJpdmF0ZSBJbnN0YWxsYWJsZVVuaXQgaW5zdGFsbGFibGVVbml0ID0gbnVsbDsKLQotCQkJcHVibGljIElVSGFuZGxlcigpIHsKLQkJCQlzdXBlcigpOwotCQkJfQotCi0JCQlwdWJsaWMgSW5zdGFsbGFibGVVbml0IGdldEluc3RhbGxhYmxlVW5pdCgpIHsKLQkJCQlyZXR1cm4gdGhpcy5pbnN0YWxsYWJsZVVuaXQ7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIHZvaWQgaGFuZGxlUm9vdEF0dHJpYnV0ZXMoQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7Ci0JCQkJLy8gcm9vdCBlbGVtZW50ICppcyogdGhlIEluc3RhbGxhYmxlIFVuaXQgLSB0aGUgZGVmYXVsdCBwYXJzZXIgaXMgZnJvbQotCQkJCS8vIHRoZSBtZXRhIGRhdGEgcmVwb3NpdG9yeSBwYXJzZXIsIGFuZCBpdCBleHBlY3RzIHRvIHBhcnNlIGEgbnVtYmVyIG9mCi0JCQkJLy8gdW5pdHMsIHJldHVybmluZyBJbnN0YWxsYWJsZVVuaXREZXNjcmlwdGlvbiBpbnN0YW5jZXMgaW4gYSBMaXN0LgotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgbmFtZSwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7Ci0JCQkJY2hlY2tDYW5jZWwoKTsKLQkJCQlpZiAobmFtZS5lcXVhbHMoSU5TVEFMTEFCTEVfVU5JVF9FTEVNRU5UKSkgewotCQkJCQl0aGlzLnVuaXRzID0gbmV3IEFycmF5TGlzdDxJbnN0YWxsYWJsZVVuaXREZXNjcmlwdGlvbj4oMSk7Ci0JCQkJCXRoaXMudW5pdEhhbmRsZXIgPSBuZXcgSW5zdGFsbGFibGVVbml0SGFuZGxlcih0aGlzLCBhdHRyaWJ1dGVzLCB1bml0cyk7CQotCQkJCX0gZWxzZSB7Ci0JCQkJCWludmFsaWRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwotCQkJCX0KLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgdm9pZCBmaW5pc2hlZCgpIHsKLQkJCQlpZiAoaXNWYWxpZFhNTCgpKSB7Ci0JCQkJCS8vIFRPRE86IFRoaXMgaXMgYW4gVWdseSBjYXN0IGJlY2F1c2UgdGhlIHVuaXQgaGFuZGxlciByZXR1cm5zIGFuIGludGVyZmFjZSByYXRoZXIgdGhhbiB0aGUgbXV0YWJsZSBpbnN0YW5jZS4KLQkJCQkJLy8KLQkJCQkJIHRoaXMuaW5zdGFsbGFibGVVbml0ID0gKEluc3RhbGxhYmxlVW5pdCkgdGhpcy51bml0SGFuZGxlci5nZXRJbnN0YWxsYWJsZVVuaXQoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7Ci0JCQlyZXR1cm4gTWVzc2FnZXMuaW9fcGFyc2VFcnJvcjsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkJLy8gVE9ETzoKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL1BsYXRmb3JtLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvUGxhdGZvcm0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDFmNmZkCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL1BsYXRmb3JtLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElubm9vcHJhY3QgSW5mb3JtYXRpb25zc3lzdGVtZSBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsOworCisvKioKKyAqIGVudW1lcmF0aW9uIG9mIGFsbCBzdXBwb3J0ZWQgcGxhdGZvcm1zCisgKiAKKyAqIEBhdXRob3IgbXdvZWxrZXIKKyAqLworcHVibGljIGVudW0gUGxhdGZvcm0geworICBXSU4zMigid2luMzIiLCAiV2luZG93cyIsICJ6aXAiKSwgTElOVVgoImxpbnV4IiwgIkxpbnV4IiwgInRhci5neiIpLCBNQUNPU1goCisgICAgICAibWFjb3N4IiwgIk1hYyBPUyBYIiwgInRhci5neiIpOworCisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGlkOworICBwcml2YXRlIGZpbmFsIFN0cmluZyBsYWJlbDsKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZXh0ZW5zaW9uOworCisgIHByaXZhdGUgUGxhdGZvcm0oIFN0cmluZyBpZCwgU3RyaW5nIGxhYmVsLCBTdHJpbmcgZXh0ZW5zaW9uICkgeworICAgIHRoaXMuaWQgPSBpZDsKKyAgICB0aGlzLmV4dGVuc2lvbiA9IGV4dGVuc2lvbjsKKyAgICB0aGlzLmxhYmVsID0gbGFiZWw7CisgIH0KKworICBwdWJsaWMgU3RyaW5nIGdldElkKCkgeworICAgIHJldHVybiBpZDsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKSB7CisgICAgcmV0dXJuIGxhYmVsOworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXRFeHRlbnNpb24oKSB7CisgICAgcmV0dXJuIGV4dGVuc2lvbjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL1N0YXRzTG9nZ2VyLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvU3RhdHNMb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzU3OTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL1N0YXRzTG9nZ2VyLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSW5ub29wcmFjdCBJbmZvcm1hdGlvbnNzeXN0ZW1lIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJbm5vb3ByYWN0IEluZm9ybWF0aW9uc3N5c3RlbWUgR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbDsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkJsb2NraW5nUXVldWU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZTsKKworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOworCisvKioKKyAqIENsYXNzIGZvciBsb2dnaW5nIHN0YXRpc3RpY3MgYWJvdXQgb3V0Z29pbmcgY2xpY2tzIExvZ2dlZCBpdGVtczogKiBjdXJyZW50CisgKiB0aW1lc3RhbXAgKiB1c2VyIGFnZW50ICogc2VsZWN0ZWQgSVUgcm9vdHMgKiBkZXN0aW5hdGlvbiBVUkwKKyAqIAorICogQGF1dGhvciBtd29lbGtlcgorICovCitwdWJsaWMgY2xhc3MgU3RhdHNMb2dnZXIgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBQkxFX0hFQURFUiA9ICInVGltZXN0YW1wCXJvb3RJVXMJZGVzdGluYXRpb24JdXNlci1hZ2VudCI7CisgIHN0YXRpYyBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlciggU3RhdHNMb2dnZXIuY2xhc3MgKTsKKyAgLyoqCisgICAqIENsYXNzIGVuY2Fwc3VsYXRpbmcgZGF0YSBmb3Igb25lIG91dGdvaW5nIGNsaWNrCisgICAqIAorICAgKiBAYXV0aG9yIG13b2Vsa2VyCisgICAqLworICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YXRpc3RpYyB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVNPODYwMV9EQVRFRk9STUFUID0gInl5eXktTU0tZGQnVCdISDptbTpzc1x0IjsKKyAgICBzdGF0aWMgRGF0ZUZvcm1hdCBkYXRlRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIElTTzg2MDFfREFURUZPUk1BVCApOworICAgIERhdGUgdGltZXN0YW1wID0gbmV3IERhdGUoKTsKKyAgICBTdHJpbmcgdXNlckFnZW50OworICAgIFN0cmluZyByb290czsKKyAgICBTdHJpbmcgZGVzdGluYXRpb247CisKKyAgICBwdWJsaWMgU3RhdGlzdGljKCBTdHJpbmcgZGVzdGluYXRpb24sIFN0cmluZyB1c2VyQWdlbnQsIFN0cmluZyByb290cyApIHsKKyAgICAgIHN1cGVyKCk7CisgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CisgICAgICB0aGlzLnVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKKyAgICAgIHRoaXMucm9vdHMgPSByb290czsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgIGJ1aWxkZXIuYXBwZW5kKCBkYXRlRm9ybWF0LmZvcm1hdCggdGltZXN0YW1wICkgKTsKKyAgICAgIGJ1aWxkZXIuYXBwZW5kKCByb290cyApOworICAgICAgYnVpbGRlci5hcHBlbmQoICJcdCIgKTsKKyAgICAgIGJ1aWxkZXIuYXBwZW5kKCBkZXN0aW5hdGlvbiApOworICAgICAgYnVpbGRlci5hcHBlbmQoICJcdCIgKTsKKyAgICAgIGJ1aWxkZXIuYXBwZW5kKCB1c2VyQWdlbnQgKTsKKyAgICAgIGJ1aWxkZXIuYXBwZW5kKCAiXHQiICk7CisgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworICAgIH0KKyAgfQorICAvLyBCbG9ja2luZyBxdWV1ZSBmb3IgYXN5bmNocm9ub3VzIHByb2R1Y2VyL2NvbnN1bWVyIHByb2Nlc3NpbmcKKyAgcHJvdGVjdGVkIEJsb2NraW5nUXVldWU8U3RhdGlzdGljPiBxdWV1ZSA9IG5ldyBMaW5rZWRCbG9ja2luZ1F1ZXVlPFN0YXRpc3RpYz4oKTsKKyAgcHJvdGVjdGVkIFRocmVhZCB0aHJlYWQ7CisgIHByaXZhdGUgUHJpbnRXcml0ZXIgd3JpdGVyOworCisgIHB1YmxpYyBTdGF0c0xvZ2dlciggRmlsZSBmaWxlICkgeworICAgIHRyeSB7CisgICAgICB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBCdWZmZXJlZFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIGZpbGUsIHRydWUgKSApICk7CisgICAgICB3cml0ZXIucHJpbnRsbiggVEFCTEVfSEVBREVSICk7CisgICAgICB0aHJlYWQgPSBuZXcgVGhyZWFkKCB0aGlzICk7CisgICAgICB0aHJlYWQuc2V0TmFtZSggIkRvd25sb2FkIFN0YXRpc3RpY3MgTG9nZ2VyIiApOworICAgICAgdGhyZWFkLnNldERhZW1vbiggdHJ1ZSApOworICAgICAgdGhyZWFkLnN0YXJ0KCk7CisgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CisgICAgICBsb2dnZXIuZXJyb3IoICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBTdGF0c0xvZ2dlciIsIHQgKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCBsb2coIFN0YXRpc3RpYyBzdGF0aXN0aWMgKSB7CisgICAgcXVldWUuYWRkKCBzdGF0aXN0aWMgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICB0cnkgeworICAgICAgd2hpbGUoIHRydWUgKSB7CisgICAgICAgIFN0YXRpc3RpYyBzdGF0aXN0aWM7CisgICAgICAgIHN0YXRpc3RpYyA9IHF1ZXVlLnRha2UoKTsKKyAgICAgICAgaW50ZXJuYWxMb2coIHN0YXRpc3RpYyApOworICAgICAgfQorICAgIH0gY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGUgKSB7CisgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmludGVycnVwdCgpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgdm9pZCBpbnRlcm5hbExvZyggU3RhdGlzdGljIHN0YXRpc3RpYyApIHsKKyAgICB3cml0ZXIucHJpbnRsbiggc3RhdGlzdGljICk7CisgICAgd3JpdGVyLmZsdXNoKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9TdHJpbmdVdGlsLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvU3RyaW5nVXRpbC5qYXZhCmluZGV4IGViMGFmN2YuLmE4YWJmNTcgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC9TdHJpbmdVdGlsLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL1N0cmluZ1V0aWwuamF2YQpAQCAtMTAsMTQgKzEwLDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsOwogCi0KLQogLyoqCiAgKiBAYXV0aG9yIEpvcmRpIEJvZWhtZSBMb3BleiA8amJvZWhtZUBpbm5vb3ByYWN0LmNvbT4KICAqLwogcHVibGljIGNsYXNzIFN0cmluZ1V0aWwgewogCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvQ29tbWFMaXN0KCBmaW5hbCBTdHJpbmdbXSBpdGVtcywgZmluYWwgYm9vbGVhbiBzcGFjZSApIHsKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9Db21tYUxpc3QoIGZpbmFsIFN0cmluZ1tdIGl0ZW1zLCBmaW5hbCBib29sZWFuIHNwYWNlICkKKyAgewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICBmb3IoIGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrICkgewogICAgICAgaWYoIGkgPiAwICkgewpAQCAtMzAsNSArMjksNCBAQAogICAgIH0KICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL1dpc2hsaXN0LmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvV2lzaGxpc3QuamF2YQppbmRleCBlMjY4ODI4Li4yMTRhOTFmIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvV2lzaGxpc3QuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvV2lzaGxpc3QuamF2YQpAQCAtMzgsNiArMzgsMTUgQEAKICAgcHJpdmF0ZSBMaXN0PElXaXNobGlzdExpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElXaXNobGlzdExpc3RlbmVyPigpOwogICBwcml2YXRlIEVQUE1vZGVsIG1vZGVsID0gbnVsbDsKICAgcHJpdmF0ZSBIYXNoTWFwPFN0cmluZywgSVVSZWY+IGl1UmVmTWFwOworICBwcml2YXRlIFBsYXRmb3JtIHBsYXRmb3JtOworCisgIHB1YmxpYyBQbGF0Zm9ybSBnZXRQbGF0Zm9ybSgpIHsKKyAgICByZXR1cm4gcGxhdGZvcm07CisgIH0KKworICBwdWJsaWMgdm9pZCBzZXRQbGF0Zm9ybSggUGxhdGZvcm0gcGxhdGZvcm0gKSB7CisgICAgdGhpcy5wbGF0Zm9ybSA9IHBsYXRmb3JtOworICB9CiAKICAgV2lzaGxpc3QoKSB7CiAgICAgLy8gcHJldmVudCBpbnN0YW50aWF0aW9uCkBAIC02MywzNSArNzIsMzggQEAKICAgfQogCiAgIHB1YmxpYyB2b2lkIGFkZCggZmluYWwgR3JvdXAgZ3JvdXAgKSB7Ci0gICAgZ3JvdXBzLmFkZCggZ3JvdXAgKTsKLSAgICBmb3IgKElVUmVmIGl1UmVmIDogZ3JvdXAuZ2V0SVVSZWZzKCkpIHsKLQkJCWl1UmVmcy5yZW1vdmUoaXVSZWYpOworICAgIC8vIGdyb3Vwcy5hZGQoZ3JvdXApOworICAgIGZvciggSVVSZWYgaXVSZWYgOiBncm91cC5nZXRJVVJlZnMoKSApIHsKKyAgICAgIGFkZCggaXVSZWYgKTsKICAgICB9CiAgICAgZmlyZUNoYW5nZSgpOwogICB9CiAKICAgcHVibGljIHZvaWQgcmVtb3ZlKCBmaW5hbCBHcm91cCBncm91cCApIHsKLSAgICBncm91cHMucmVtb3ZlKCBncm91cCApOworICAgIC8vIGdyb3Vwcy5yZW1vdmUoZ3JvdXApOwogICAgIGZvciggSVVSZWYgaXVSZWYgOiBncm91cC5nZXRJVVJlZnMoKSApIHsKLSAgICAgIGl1UmVmcy5yZW1vdmUoIGl1UmVmICk7CisgICAgICByZW1vdmUoIGl1UmVmICk7CiAgICAgfQogICAgIGZpcmVDaGFuZ2UoKTsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGFkZCggZmluYWwgSVVSZWYgaXVSZWYgKSB7Ci0gICAgaWYoICFncm91cHMuY29udGFpbnMoIGl1UmVmLmdldFBhcmVudCgpICkgKSB7Ci0gICAgICBpdVJlZnMuYWRkKCBpdVJlZiApOwotICAgICAgTGlzdDxJVVJlZj4gaW5jbHVkZWRTaWJsaW5ncyA9IGluY2x1ZGVkSVVSZWZzSW5Hcm91cCggaXVSZWYuZ2V0UGFyZW50KCkgKTsKLSAgICAgIElVUmVmW10gc2libGluZ0lVUmVmcyA9IGl1UmVmLmdldFBhcmVudCgpLmdldElVUmVmcygpOwotICAgICAgaWYoIGluY2x1ZGVkU2libGluZ3Muc2l6ZSgpID09IHNpYmxpbmdJVVJlZnMubGVuZ3RoICkgewotICAgICAgICAvLyBhbGwgaW5jbHVkZWQKLSAgICAgICAgZ3JvdXBzLmFkZCggaXVSZWYuZ2V0UGFyZW50KCkgKTsKLSAgICAgICAgZm9yKCBJVVJlZiBzaWJsaW5nSVVSZWYgOiBzaWJsaW5nSVVSZWZzICkgewotICAgICAgICAgIGl1UmVmcy5yZW1vdmUoIHNpYmxpbmdJVVJlZiApOworICBwdWJsaWMgdm9pZCBhZGQoIGZpbmFsIElVUmVmIHRvQWRkICkgeworICAgIExpc3Q8SVVSZWY+IGxpc3QgPSBtb2RlbC5nZXRBbGxSZWZzKCB0b0FkZCApOworICAgIGZvciggSVVSZWYgaXVSZWYgOiBsaXN0ICkgeworICAgICAgaWYoICFncm91cHMuY29udGFpbnMoIGl1UmVmLmdldFBhcmVudCgpICkgKSB7CisgICAgICAgIGl1UmVmcy5hZGQoIGl1UmVmICk7CisgICAgICAgIExpc3Q8SVVSZWY+IGluY2x1ZGVkU2libGluZ3MgPSBpbmNsdWRlZElVUmVmc0luR3JvdXAoIGl1UmVmLmdldFBhcmVudCgpICk7CisgICAgICAgIElVUmVmW10gc2libGluZ0lVUmVmcyA9IGl1UmVmLmdldFBhcmVudCgpLmdldElVUmVmcygpOworICAgICAgICBpZiggaW5jbHVkZWRTaWJsaW5ncy5zaXplKCkgPT0gc2libGluZ0lVUmVmcy5sZW5ndGggKSB7CisgICAgICAgICAgLy8gYWxsIGluY2x1ZGVkCisgICAgICAgICAgZ3JvdXBzLmFkZCggaXVSZWYuZ2V0UGFyZW50KCkgKTsKKyAgICAgICAgICBmb3IoIElVUmVmIHNpYmxpbmdJVVJlZiA6IHNpYmxpbmdJVVJlZnMgKSB7CisgICAgICAgICAgICBpdVJlZnMucmVtb3ZlKCBzaWJsaW5nSVVSZWYgKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGZpcmVDaGFuZ2UoKTsKICAgICB9CisgICAgZmlyZUNoYW5nZSgpOwogICB9CiAKICAgcHJpdmF0ZSBMaXN0PElVUmVmPiBpbmNsdWRlZElVUmVmc0luR3JvdXAoIEdyb3VwIGdyb3VwICkgewpAQCAtMTA0LDE2ICsxMTYsMTcgQEAKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKLSAgcHVibGljIHZvaWQgcmVtb3ZlKCBmaW5hbCBJVVJlZiBpdVJlZiApIHsKLSAgICBpZiggZ3JvdXBzLmNvbnRhaW5zKCBpdVJlZi5nZXRQYXJlbnQoKSApICkgewotICAgICAgZ3JvdXBzLnJlbW92ZSggaXVSZWYuZ2V0UGFyZW50KCkgKTsKLSAgICAgIGZvciggSVVSZWYgc2libGluZ0lVUmVmIDogaXVSZWYuZ2V0UGFyZW50KCkKLSAgICAgICAgLmdldElVUmVmcygpICkKLSAgICAgIHsKLSAgICAgICAgaXVSZWZzLmFkZCggc2libGluZ0lVUmVmICk7CisgIHB1YmxpYyB2b2lkIHJlbW92ZSggZmluYWwgSVVSZWYgdG9SZW1vdmUgKSB7CisgICAgTGlzdDxJVVJlZj4gbGlzdCA9IG1vZGVsLmdldEFsbFJlZnMoIHRvUmVtb3ZlICk7CisgICAgZm9yKCBJVVJlZiBpdVJlZiA6IGxpc3QgKSB7CisgICAgICBpZiggZ3JvdXBzLmNvbnRhaW5zKCBpdVJlZi5nZXRQYXJlbnQoKSApICkgeworICAgICAgICBncm91cHMucmVtb3ZlKCBpdVJlZi5nZXRQYXJlbnQoKSApOworICAgICAgICBmb3IoIElVUmVmIHNpYmxpbmdJVVJlZiA6IGl1UmVmLmdldFBhcmVudCgpLmdldElVUmVmcygpICkgeworICAgICAgICAgIGl1UmVmcy5hZGQoIHNpYmxpbmdJVVJlZiApOworICAgICAgICB9CiAgICAgICB9CisgICAgICBpdVJlZnMucmVtb3ZlKCBpdVJlZiApOwogICAgIH0KLSAgICBpdVJlZnMucmVtb3ZlKCBpdVJlZiApOwogICAgIGZpcmVDaGFuZ2UoKTsKICAgfQogCkBAIC0xNTcsMjAgKzE3MCwxOSBAQAogICAgIH0KICAgICByZXR1cm4gcmVzdWx0LnRvQXJyYXkoIG5ldyBTdHJpbmdbIHJlc3VsdC5zaXplKCkgXSApOwogICB9Ci0gIAorCiAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0ZWRJdUlkcygpIHsKICAgICBBcnJheUxpc3Q8U3RyaW5nPiBpdUlkcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgIGZvcihHcm91cCBncm91cDogZ3JvdXBzKQotICAgIHsKLSAgICAgIGZvcihJVVJlZiBpdVJlZjogZ3JvdXAuZ2V0SVVSZWZzKCkpewotICAgICAgICBpdUlkcy5hZGQoaXVSZWYuZ2V0UmVmSWQoKSk7CisgICAgZm9yKCBHcm91cCBncm91cCA6IGdyb3VwcyApIHsKKyAgICAgIGZvciggSVVSZWYgaXVSZWYgOiBncm91cC5nZXRJVVJlZnMoKSApIHsKKyAgICAgICAgaXVJZHMuYWRkKCBpdVJlZi5nZXRSZWZJZCgpICk7CiAgICAgICB9Ci0gICAgICAKICAgICB9Ci0gICAgZm9yKElVUmVmIGl1UmVmOiBpdVJlZnMpewotICAgICAgaXVJZHMuYWRkKGl1UmVmLmdldFJlZklkKCkpOworICAgIGZvciggSVVSZWYgaXVSZWYgOiBpdVJlZnMgKSB7CisgICAgICBpdUlkcy5hZGQoIGl1UmVmLmdldFJlZklkKCkgKTsKICAgICB9Ci0gICAgcmV0dXJuIFN0cmluZ1V0aWwudG9Db21tYUxpc3QoIGl1SWRzLnRvQXJyYXkobmV3IFN0cmluZ1tpdUlkcy5zaXplKCldKSwgZmFsc2UgKTsKKyAgICByZXR1cm4gU3RyaW5nVXRpbC50b0NvbW1hTGlzdCggaXVJZHMudG9BcnJheSggbmV3IFN0cmluZ1sgaXVJZHMuc2l6ZSgpIF0gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKICAgfQogCiAgIC8vIC8vLy8vLy8vLy8vLy8vLy8KQEAgLTIyNSwxOSArMjM3LDE5IEBACiAgICAgfQogICB9CiAKLSAgcHVibGljIFN0cmluZ1tdIGFkZElVUmVmcyhTdHJpbmdbXSBzdHJpbmdzKSB7CisgIHB1YmxpYyBTdHJpbmdbXSBhZGRJVVJlZnMoIFN0cmluZ1tdIHN0cmluZ3MgKSB7CiAgICAgaWYoIG1vZGVsID09IG51bGwgKSB7CiAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCAiRVBQIG1vZGVsIGlzIG5vdCBzZXQiICk7CiAgICAgfQogICAgIExpc3Q8U3RyaW5nPiB1bnJlc29sdmVkSVVSZWZzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCWZvciAoU3RyaW5nIGl1UmVmSWQgOiBzdHJpbmdzKSB7Ci0JCQlJVVJlZiBpdVJlZiA9IGl1UmVmTWFwLmdldChpdVJlZklkKTsKLQkJCWlmIChpdVJlZiAhPSBudWxsKSB7Ci0JCQkJYWRkKGl1UmVmKTsKKyAgICBmb3IoIFN0cmluZyBpdVJlZklkIDogc3RyaW5ncyApIHsKKyAgICAgIElVUmVmIGl1UmVmID0gaXVSZWZNYXAuZ2V0KCBpdVJlZklkICk7CisgICAgICBpZiggaXVSZWYgIT0gbnVsbCApIHsKKyAgICAgICAgYWRkKCBpdVJlZiApOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgdW5yZXNvbHZlZElVUmVmcy5hZGQoaXVSZWZJZCk7CisgICAgICAgIHVucmVzb2x2ZWRJVVJlZnMuYWRkKCBpdVJlZklkICk7CiAgICAgICB9CiAgICAgfQotICAgIHJldHVybiB1bnJlc29sdmVkSVVSZWZzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7CisgICAgcmV0dXJuIHVucmVzb2x2ZWRJVVJlZnMudG9BcnJheSggbmV3IFN0cmluZ1sgMCBdICk7CiAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvQ2hlY2tib3guamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9DaGVja2JveC5qYXZhCmluZGV4IDk2MjNhMTYuLjc2YzUwZWQgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9DaGVja2JveC5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9DaGVja2JveC5qYXZhCkBAIC0xMSw3ICsxMSw2IEBACiBwYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWwudWk7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLkxpbmtVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnJ3dC5saWZlY3ljbGUuV2lkZ2V0VXRpbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKQEAgLTIzLDEwICsyMiwxMCBAQAogCiAgIGJvb2xlYW4gc2VsZWN0ZWQgPSBmYWxzZTsKICAgYm9vbGVhbiBncmF5ZWQgPSBmYWxzZTsKLSAgCisKICAgcHVibGljIENoZWNrYm94KCBmaW5hbCBDb21wb3NpdGUgcGFyZW50ICkgewogICAgIHN1cGVyKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvcih0aGlzKTsgICAgCisgICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvciggdGhpcyApOwogICAgIHVwZGF0ZUltYWdlKCk7CiAgIH0KIApAQCAtNDIsMTIgKzQxLDEyIEBACiAgIHB1YmxpYyBib29sZWFuIGlzR3JheWVkKCkgewogICAgIHJldHVybiBncmF5ZWQ7CiAgIH0KLSAgCisKICAgcHVibGljIHZvaWQgc2V0R3JheWVkKCBib29sZWFuIGdyYXllZCApIHsKICAgICB0aGlzLmdyYXllZCA9IGdyYXllZDsKICAgICB1cGRhdGVJbWFnZSgpOwogICB9Ci0gCisKICAgcHVibGljIHZvaWQgcHJlc3NlZCgpIHsKICAgICBpZiggaXNHcmF5ZWQoKSApIHsKICAgICAgIHNldEdyYXllZCggZmFsc2UgKTsKQEAgLTYwLDggKzU5LDcgQEAKICAgfQogCiAgIC8vIGhlbHBpbmcgbWV0aG9kcwotICAvLy8vLy8vLy8vLy8vLy8vLy8KLSAgCisgIC8vIC8vLy8vLy8vLy8vLy8vLy8KICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUltYWdlKCkgewogICAgIGlmKCBpc0dyYXllZCgpICkgewogICAgICAgc2V0SW1hZ2UoIEltYWdlcy5DSEVDS0JPWF9HUkFZRUQuZ2V0KCkgKTsKQEAgLTcxLDUgKzY5LDQgQEAKICAgICAgIHNldEltYWdlKCBJbWFnZXMuQ0hFQ0tCT1hfVU5DSEVDS0VELmdldCgpICk7CiAgICAgfQogICB9Ci0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvQ29sb3JzLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvQ29sb3JzLmphdmEKaW5kZXggYzRiZTJhZC4uNWM3MjA3YyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL0NvbG9ycy5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9Db2xvcnMuamF2YQpAQCAtMTUsMTAgKzE1LDggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUkdCOwogCiBwdWJsaWMgZW51bSBDb2xvcnMgewotICBXSElURSgyNTUsMjU1LDI1NSksCi0gIEVDTElQU0VfQkxVRSg1MSw1MSwxMDIpLAotICBFQ0xJUFNFX1ZJT0xFVCgxMDIsNTEsMTAyKSwKLSAgU0FTSCgxODAsMTgwLDE4MCksOworICBXSElURSgyNTUsIDI1NSwgMjU1KSwgRUNMSVBTRV9CTFVFKDUxLCA1MSwgMTAyKSwgRUNMSVBTRV9WSU9MRVQoMTAyLCA1MSwgMTAyKSwgU0FTSCgKKyAgICAgIDE4MCwgMTgwLCAxODApLCA7CiAKICAgcHJpdmF0ZSBmaW5hbCBSR0IgcmdiOwogCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvRm9udHMuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9Gb250cy5qYXZhCmluZGV4IGYwM2Q0ZjkuLjJlOWU2MjcgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9Gb250cy5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9Gb250cy5qYXZhCkBAIC0xNSwyOSArMTUsMjAgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udERhdGE7CiAKLQogcHVibGljIGVudW0gRm9udHMgewotICBURVhUKCJzYW5zLXNlcmlmIiwgMTQsIFNXVC5OT05FKSwKLSAgVElUTEUoInNhbnMtc2VyaWYiLCAxOCwgU1dULkJPTEQpLAotICBIMigic2Fucy1zZXJpZiIsIDE1LCBTV1QuQk9MRCksCi0gIERFU0NSSVBUSU9OKCJzYW5zLXNlcmlmIiwgMTQsIFNXVC5OT05FKSwKLSAgR1JPVVAoIkdlb3JnaWEsVGltZXMsc2VyaWYiLCAxOCwgU1dULk5PTkUpLAotICBGRUFUVVJFKCJzYW5zLXNlcmlmIiwgMTQsIFNXVC5OT05FKSwKLSAgQlVUVE9OKCJzYW5zLXNlcmlmIiwgMTQsIFNXVC5CT0xEKSwKLSAgV0lTSExJU1RfSVRFTSgic2Fucy1zZXJpZiIsIDE2LCBTV1QuTk9ORSksCi0gIEJFVEEoInNhbnMtc2VyaWYiLCAyOCwKLQkJCVNXVC5JVEFMSUMpLAotICA7Ci0gIAorICBURVhUKCJzYW5zLXNlcmlmIiwgMTQsIFNXVC5OT05FKSwgVElUTEUoInNhbnMtc2VyaWYiLCAxOCwgU1dULkJPTEQpLCBIRUFERVIoCisgICAgICAic2Fucy1zZXJpZiIsIDI0LCBTV1QuQk9MRCksIEgyKCJzYW5zLXNlcmlmIiwgMTUsIFNXVC5CT0xEKSwgREVTQ1JJUFRJT04oCisgICAgICAic2Fucy1zZXJpZiIsIDE0LCBTV1QuTk9ORSksIEdST1VQKCJHZW9yZ2lhLFRpbWVzLHNlcmlmIiwgMTgsIFNXVC5OT05FKSwgRkVBVFVSRSgKKyAgICAgICJzYW5zLXNlcmlmIiwgMTQsIFNXVC5OT05FKSwgQlVUVE9OKCJzYW5zLXNlcmlmIiwgMTQsIFNXVC5CT0xEKSwgV0lTSExJU1RfSVRFTSgKKyAgICAgICJzYW5zLXNlcmlmIiwgMTYsIFNXVC5OT05FKSwgQkVUQSgic2Fucy1zZXJpZiIsIDI4LCBTV1QuSVRBTElDKSwgOworCiAgIHByaXZhdGUgZmluYWwgRm9udERhdGEgZm9udERhdGE7Ci0gIHByaXZhdGUgRm9udHMoU3RyaW5nIG5hbWUsIGludCBoZWlnaHQsIGludCBzdHlsZSApCi0gIHsKLSAgICBmb250RGF0YSA9IG5ldyBGb250RGF0YShuYW1lLCBoZWlnaHQsIHN0eWxlKTsKKworICBwcml2YXRlIEZvbnRzKCBTdHJpbmcgbmFtZSwgaW50IGhlaWdodCwgaW50IHN0eWxlICkgeworICAgIGZvbnREYXRhID0gbmV3IEZvbnREYXRhKCBuYW1lLCBoZWlnaHQsIHN0eWxlICk7CiAgIH0KLSAgCi0gIHB1YmxpYyBGb250IGdldCgpCi0gIHsKKworICBwdWJsaWMgRm9udCBnZXQoKSB7CiAgICAgcmV0dXJuIEdyYXBoaWNzLmdldEZvbnQoIGZvbnREYXRhICk7CiAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL0dyb3VwU2VsZWN0aW9uLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvR3JvdXBTZWxlY3Rpb24uamF2YQppbmRleCBjM2U5YjQxLi42ZjI2ZTlkIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvR3JvdXBTZWxlY3Rpb24uamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvR3JvdXBTZWxlY3Rpb24uamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwuR3JvdXA7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5tb2RlbC5JVVJlZjsKIGltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLm1ldGFkYXRhLklJbnN0YWxsYWJsZVVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uucnd0LmxpZmVjeWNsZS5XaWRnZXRVdGlsOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUFkYXB0ZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50OwpAQCAtMTIzLDggKzEyMiwxMCBAQAogICAgIGdyb3VwSWNvbkxheW91dC5tYXJnaW5IZWlnaHQgPSAxOwogICAgIGdyb3VwSWNvbkxheW91dC5tYXJnaW5XaWR0aCA9IDE7CiAgICAgZ3JvdXBJY29uLnNldExheW91dCggZ3JvdXBJY29uTGF5b3V0ICk7Ci0gICAgRmlsZSBtb2RlbERpcmVjdG9yeSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldE1vZGVsRGlyZWN0b3J5KCk7Ci0gICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoIG1vZGVsRGlyZWN0b3J5LGdyb3VwLmdldEljb24oKSApOworICAgIEZpbGUgbW9kZWxEaXJlY3RvcnkgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisgICAgICAuZ2V0Q29uZmlndXJhdGlvbigpCisgICAgICAuZ2V0TW9kZWxEaXJlY3RvcnkoKTsKKyAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZSggbW9kZWxEaXJlY3RvcnksIGdyb3VwLmdldEljb24oKSApOwogICAgIEltYWdlIGltYWdlID0gSW1hZ2VzLmxvYWQoIGZpbGUgKTsKICAgICBpZiggaW1hZ2UgPT0gbnVsbCApIHsKICAgICAgIGltYWdlID0gSW1hZ2VzLklDT05fR1JPVVBfRkFMTEJBQ0suZ2V0KCk7CkBAIC0xNjgsNyArMTY5LDcgQEAKICAgICBleHBCdG5HRC52ZXJ0aWNhbFNwYW4gPSAzOwogICAgIGV4cGFuZEJ1dHRvbi5zZXRMYXlvdXREYXRhKCBleHBCdG5HRCApOwogICAgIGV4cGFuZEJ1dHRvbi5zZXRJbWFnZSggSW1hZ2VzLklDT05fQ09MTEFQU0VELmdldCgpICk7Ci0gICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvcihleHBhbmRCdXR0b24pOworICAgIExpbmtVdGlsLnNldEhhbmRDdXJzb3IoIGV4cGFuZEJ1dHRvbiApOwogICAgIGV4cGFuZEJ1dHRvbi5hZGRNb3VzZUxpc3RlbmVyKCBuZXcgTW91c2VBZGFwdGVyKCkgewogCiAgICAgICBAT3ZlcnJpZGUKQEAgLTE4NiwyNCArMTg3LDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgKSApOwogICAgIGV4cGFuZGFibGVDb21wb3NpdGUuc2V0TGF5b3V0KCBuZXcgR3JpZExheW91dCggMSwgZmFsc2UgKSApOwotICAgIElVUmVmW10gZmVhdHVyZVJlZnMgPSBncm91cC5nZXRJVVJlZnMoKTsKLSAgICBmb3IoIGludCBqID0gMDsgaiA8IGZlYXR1cmVSZWZzLmxlbmd0aDsgaisrICkgewotICAgICAgZmluYWwgSVVSZWYgZmVhdHVyZVJlZiA9IGZlYXR1cmVSZWZzWyBqIF07CisgICAgSVVSZWZbXSBpdVJlZnMgPSBncm91cC5nZXRJVVJlZnMoKTsKKyAgICBmb3IoIGludCBqID0gMDsgaiA8IGl1UmVmcy5sZW5ndGg7IGorKyApIHsKKyAgICAgIGZpbmFsIElVUmVmIGl1UmVmID0gaXVSZWZzWyBqIF07CiAgICAgICBmaW5hbCBCdXR0b24gZmVhdHVyZUNoZWNrQm94ID0gbmV3IEJ1dHRvbiggZXhwYW5kYWJsZUNvbXBvc2l0ZSwgU1dULkNIRUNLICk7CiAgICAgICBmZWF0dXJlQ2hlY2tCb3guc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCkgKTsKLSAgICAgIGZlYXR1cmVDaGVja0JveC5zZXRUZXh0KCBmZWF0dXJlUmVmLmdldElVKCkuZ2V0UHJvcGVydHkoSUluc3RhbGxhYmxlVW5pdC5QUk9QX05BTUUpICk7CisgICAgICBmZWF0dXJlQ2hlY2tCb3guc2V0VGV4dCggaXVSZWYuZ2V0SVUoKQorICAgICAgICAuZ2V0UHJvcGVydHkoIElJbnN0YWxsYWJsZVVuaXQuUFJPUF9OQU1FICkgKTsKICAgICAgIGZlYXR1cmVDaGVja0JveC5zZXRGb250KCBGb250cy5GRUFUVVJFLmdldCgpICk7Ci0gICAgICBMaW5rVXRpbC5zZXRIYW5kQ3Vyc29yKGZlYXR1cmVDaGVja0JveCk7Ci0gICAgICBmZWF0dXJlQ2hlY2tCb3guc2V0VG9vbFRpcFRleHQoZmVhdHVyZVJlZi5nZXRJVSgpLmdldFByb3BlcnR5KElJbnN0YWxsYWJsZVVuaXQuUFJPUF9ERVNDUklQVElPTikpOworICAgICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvciggZmVhdHVyZUNoZWNrQm94ICk7CisgICAgICBmZWF0dXJlQ2hlY2tCb3guc2V0VG9vbFRpcFRleHQoIGl1UmVmLmdldElVKCkKKyAgICAgICAgLmdldFByb3BlcnR5KCBJSW5zdGFsbGFibGVVbml0LlBST1BfREVTQ1JJUFRJT04gKSApOwogICAgICAgZmVhdHVyZUNoZWNrQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGUgKSB7CiAgICAgICAgICAgYm9vbGVhbiBpc1NlbGVjdGVkID0gZmVhdHVyZUNoZWNrQm94LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgIGlmKCBpc1NlbGVjdGVkICkgewotICAgICAgICAgICAgV2lzaGxpc3QuZ2V0RGVmYXVsdCgpLmFkZCggZmVhdHVyZVJlZiApOworICAgICAgICAgICAgV2lzaGxpc3QuZ2V0RGVmYXVsdCgpLmFkZCggaXVSZWYgKTsKICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgV2lzaGxpc3QuZ2V0RGVmYXVsdCgpLnJlbW92ZSggZmVhdHVyZVJlZiApOworICAgICAgICAgICAgV2lzaGxpc3QuZ2V0RGVmYXVsdCgpLnJlbW92ZSggaXVSZWYgKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0gKTsKQEAgLTIxMSw3ICsyMTQsNyBAQAogCiAgICAgICAgIHB1YmxpYyB2b2lkIHdpc2hsaXN0Q2hhbmdlZCgpIHsKICAgICAgICAgICBXaXNobGlzdCB3aXNobGlzdCA9IFdpc2hsaXN0LmdldERlZmF1bHQoKTsKLSAgICAgICAgICBJbmNsdXNpb24gaW5jbHVzaW9uID0gd2lzaGxpc3QuaXNJbmNsdWRlZCggZmVhdHVyZVJlZiApOworICAgICAgICAgIEluY2x1c2lvbiBpbmNsdXNpb24gPSB3aXNobGlzdC5pc0luY2x1ZGVkKCBpdVJlZiApOwogICAgICAgICAgIGZlYXR1cmVDaGVja0JveC5zZXRTZWxlY3Rpb24oIGluY2x1c2lvbiA9PSBJbmNsdXNpb24uRlVMTCApOwogICAgICAgICB9CiAgICAgICB9ICk7CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvSVdpemFyZFNjcmVlbi5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL0lXaXphcmRTY3JlZW4uamF2YQppbmRleCA4YjdiYTMzLi43YmI2ZTU0IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvSVdpemFyZFNjcmVlbi5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9JV2l6YXJkU2NyZWVuLmphdmEKQEAgLTE2LDcgKzE2LDEwIEBACiAgKiBAYXV0aG9yIEpvcmRpIEJvZWhtZSBMb3BleiA8amJvZWhtZUBpbm5vb3ByYWN0LmNvbT4KICAqLwogcHVibGljIGludGVyZmFjZSBJV2l6YXJkU2NyZWVuIHsKKwogICBwdWJsaWMgU3RyaW5nIGdldExhYmVsKCk7CiAKICAgcHVibGljIENvbnRyb2wgZ2V0Q29udHJvbCgpOworCisgIHB1YmxpYyB2b2lkIHVwZGF0ZSgpOwogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL0ltYWdlcy5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL0ltYWdlcy5qYXZhCmluZGV4IDU3MzY3MTMuLjRjYmQ4ZGEgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9JbWFnZXMuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvSW1hZ2VzLmphdmEKQEAgLTEzLDYyICsxMyw2MCBAQAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCi1pbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5BY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnJ3dC5ncmFwaGljcy5HcmFwaGljczsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CiAKLQogcHVibGljIGVudW0gSW1hZ2VzIHsKLSAgRE9XTkxPQUQoImRvd25sb2FkLnBuZyIpLAotICBXRUJTVEFSVCgid2Vic3RhcnQucG5nIiksCi0gIElURU1fR1JPVVAoImdyb3VwMTYucG5nIiksCi0gIElURU1fRkVBVFVSRSgiZmVhdHVyZTE2LnBuZyIpLAotICBJQ09OX0NPTExBUFNFRCgiZXhwYW5kMC5wbmciKSwKLSAgSUNPTl9FWFBBTkRFRCgiZXhwYW5kMS5wbmciKSwKLSAgSUNPTl9HUk9VUCgiZ3JvdXA0OC5wbmciKSwKLSAgSUNPTl9HUk9VUF9GQUxMQkFDSygiZ3JvdXBfZmFsbGJhY2sucG5nIiksCi0gIENIRUNLQk9YX0NIRUNLRUQoImNiX3NlbGVjdGVkLnBuZyIpLAotICBDSEVDS0JPWF9VTkNIRUNLRUQoImNiX25vdHNlbGVjdGVkLnBuZyIpLAotICBDSEVDS0JPWF9HUkFZRUQoImNiX2dyYXllZC5wbmciKSwKLSAgTUFQX0NPTk5FQ1RJT04oIm1hcF9jb25uZWN0aW9uLnBuZyIpLAotICBNQVBfTEVGVCgibWFwX2xlZnQucG5nIiksCi0gIE1BUF9SSUdIVCgibWFwX3JpZ2h0LnBuZyIpLAotICBNQVBfQ0VOVEVSKCJtYXBfY2VudGVyLnBuZyIpLAotICBNQVBfTEVGVF9GT0NVUygibWFwX2xlZnQtZm9jdXMucG5nIiksCi0gIE1BUF9SSUdIVF9GT0NVUygibWFwX3JpZ2h0LWZvY3VzLnBuZyIpLAotICBNQVBfQ0VOVEVSX0ZPQ1VTKCJtYXBfY2VudGVyLWZvY3VzLnBuZyIpLAotICBNQVBfTkVYVCgibWFwX25leHQucG5nIiksCi0gIE1BUF9QUkVWKCJtYXBfcHJldi5wbmciKSwKLSAgTUFQX05FWFRfT0ZGKCJtYXBfbmV4dF9vZmYucG5nIiksCi0gIE1BUF9QUkVWX09GRigibWFwX3ByZXZfb2ZmLnBuZyIpLAotICBNQVBfU1BBQ0lORygibWFwX3NwYWNpbmcucG5nIiksICAKLSAgTVlfU0VMRUNUSU9OKCJteV9zZWxlY3Rpb24ucG5nIiksCi0gIDsKLSAgCisgIERPV05MT0FEKCJkb3dubG9hZC5wbmciKSwgV0VCU1RBUlQoIndlYnN0YXJ0LnBuZyIpLCBJVEVNX0dST1VQKCJncm91cDE2LnBuZyIpLCBJVEVNX0ZFQVRVUkUoCisgICAgICAiZmVhdHVyZTE2LnBuZyIpLCBJQ09OX0NPTExBUFNFRCgiZXhwYW5kMC5wbmciKSwgSUNPTl9FWFBBTkRFRCgKKyAgICAgICJleHBhbmQxLnBuZyIpLCBJQ09OX0dST1VQKCJncm91cDQ4LnBuZyIpLCBJQ09OX0dST1VQX0ZBTExCQUNLKAorICAgICAgImdyb3VwX2ZhbGxiYWNrLnBuZyIpLCBDSEVDS0JPWF9DSEVDS0VEKCJjYl9zZWxlY3RlZC5wbmciKSwgQ0hFQ0tCT1hfVU5DSEVDS0VEKAorICAgICAgImNiX25vdHNlbGVjdGVkLnBuZyIpLCBDSEVDS0JPWF9HUkFZRUQoImNiX2dyYXllZC5wbmciKSwgTUFQX0NPTk5FQ1RJT04oCisgICAgICAibWFwX2Nvbm5lY3Rpb24ucG5nIiksIE1BUF9MRUZUKCJtYXBfbGVmdC5wbmciKSwgTUFQX1JJR0hUKAorICAgICAgIm1hcF9yaWdodC5wbmciKSwgTUFQX0NFTlRFUigibWFwX2NlbnRlci5wbmciKSwgTUFQX0xFRlRfRk9DVVMoCisgICAgICAibWFwX2xlZnQtZm9jdXMucG5nIiksIE1BUF9SSUdIVF9GT0NVUygibWFwX3JpZ2h0LWZvY3VzLnBuZyIpLCBNQVBfQ0VOVEVSX0ZPQ1VTKAorICAgICAgIm1hcF9jZW50ZXItZm9jdXMucG5nIiksIE1BUF9ORVhUKCJtYXBfbmV4dC5wbmciKSwgTUFQX1BSRVYoCisgICAgICAibWFwX3ByZXYucG5nIiksIE1BUF9ORVhUX09GRigibWFwX25leHRfb2ZmLnBuZyIpLCBNQVBfUFJFVl9PRkYoCisgICAgICAibWFwX3ByZXZfb2ZmLnBuZyIpLCBNQVBfU1BBQ0lORygibWFwX3NwYWNpbmcucG5nIiksIE1ZX1NFTEVDVElPTigKKyAgICAgICJteV9zZWxlY3Rpb24ucG5nIiksIEhFQURFUl9MT0dPKCJlY2xpcHNlX2hvbWVfaGVhZGVyLmpwZyIpLCBIRUFERVJfQkFDS0dST1VORCgKKyAgICAgICJoZWFkZXJfYmcuanBnIiksIDsKKworICBzdGF0aWMgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoIEltYWdlcy5jbGFzcyApOwogICBwcml2YXRlIGZpbmFsIFN0cmluZyBsb2NhdGlvbjsKICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGltYWdlRm9sZGVyID0gImljb25zLyI7CiAKICAgcHJpdmF0ZSBJbWFnZXMoIFN0cmluZyBsb2NhdGlvbiApIHsKLSAgICB0aGlzLmxvY2F0aW9uID0gaW1hZ2VGb2xkZXIrbG9jYXRpb247CisgICAgdGhpcy5sb2NhdGlvbiA9IGltYWdlRm9sZGVyICsgbG9jYXRpb247CiAgIH0KLSAgCi0gIHB1YmxpYyBJbWFnZSBnZXQoKQotICB7Ci0gICAgSW1hZ2VEZXNjcmlwdG9yIGltZ0Rlc2NyCi0gICAgPSBBY3RpdmF0b3IuaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbiggQWN0aXZhdG9yLlBMVUdJTl9JRCwgbG9jYXRpb24gKTsKLSAgICByZXR1cm4gaW1nRGVzY3IuY3JlYXRlSW1hZ2UoKTsKKworICBwdWJsaWMgSW1hZ2UgZ2V0KCkgeworICAgIC8qCisgICAgICogSW1hZ2VEZXNjcmlwdG9yIGltZ0Rlc2NyID0gQWN0aXZhdG9yLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisgICAgICogQWN0aXZhdG9yLlBMVUdJTl9JRCwgbG9jYXRpb24gKTsgcmV0dXJuIGltZ0Rlc2NyLmNyZWF0ZUltYWdlKCk7CisgICAgICovCisgICAgcmV0dXJuIEdyYXBoaWNzLmdldEltYWdlKCBsb2NhdGlvbiwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpICk7CiAgIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSW1hZ2UgbG9hZChGaWxlIGZpbGUpCi0gIHsKKworICBwdWJsaWMgc3RhdGljIEltYWdlIGxvYWQoIEZpbGUgZmlsZSApIHsKICAgICBJbWFnZSBpbWFnZSA9IG51bGw7CisgICAgRmlsZUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKICAgICB0cnkgewotICAgICAgaW1hZ2UgPSAgR3JhcGhpY3MuZ2V0SW1hZ2UoIGZpbGUuZ2V0TmFtZSgpLCBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKTsKKyAgICAgIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbSggZmlsZSApOworICAgICAgaW1hZ2UgPSBHcmFwaGljcy5nZXRJbWFnZSggZmlsZS5nZXROYW1lKCksIGlucHV0U3RyZWFtICk7CiAgICAgfSBjYXRjaCggRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGV4YyApIHsKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSW1hZ2UgZmlsZSAnIitmaWxlLmdldEFic29sdXRlUGF0aCgpKyAiJyBub3QgZm91bmQuIik7Ci0gICAgfSAKKyAgICAgIGxvZ2dlci53YXJuKCAiSW1hZ2UgZmlsZSAnIiArIGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiJyBub3QgZm91bmQuIiApOworICAgIH0gZmluYWxseSB7CisgICAgICBpZiggaW5wdXRTdHJlYW0gIT0gbnVsbCApIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBpbnB1dFN0cmVhbS5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBlICkgeworICAgICAgICAgIGxvZ2dlci53YXJuKCAiQ291bGQgbm90IGNsb3NlIGZpbGUgJyIgKyBmaWxlLmdldEFic29sdXRlUGF0aCgpLCBlICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIGltYWdlOwogICB9CiB9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvUm9hZG1hcC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL1JvYWRtYXAuamF2YQppbmRleCA0MWI0YmE3Li4yNWYyZGEzIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvUm9hZG1hcC5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9Sb2FkbWFwLmphdmEKQEAgLTE1LDcgKzE1LDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5MaW5rVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5yd3QubGlmZWN5Y2xlLldpZGdldFV0aWw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0YWNrTGF5b3V0OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VBZGFwdGVyOwpAQCAtMzAsMTUgKzI5LDE0IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBSb2FkbWFwIGV4dGVuZHMgQ29tcG9zaXRlIHsKIAotICBwdWJsaWMgaW50ZXJmYWNlIElSb2FkbWFwTGlzdGVuZXIKLSAgewotICAgIHZvaWQgc2NyZWVuQWN0aXZhdGVkKCBmaW5hbCBJV2l6YXJkU2NyZWVuIGFjdGl2ZVNjcmVlbiApOyAKKyAgcHVibGljIGludGVyZmFjZSBJUm9hZG1hcExpc3RlbmVyIHsKKworICAgIHZvaWQgc2NyZWVuQWN0aXZhdGVkKCBmaW5hbCBJV2l6YXJkU2NyZWVuIGFjdGl2ZVNjcmVlbiApOwogICB9CiAgIHByaXZhdGUgZmluYWwgSVdpemFyZFNjcmVlbltdIHNjcmVlbnM7CiAgIHByaXZhdGUgZmluYWwgU3RhY2tMYXlvdXQgc3RhY2tMYXlvdXQ7CiAgIHByaXZhdGUgSVdpemFyZFNjcmVlbiBhY3RpdmVTY3JlZW47Ci0gIE1hcDxJV2l6YXJkU2NyZWVuLCBSb2FkbWFwSXRlbT4gaXRlbXMKLSAgICA9IG5ldyBIYXNoTWFwPElXaXphcmRTY3JlZW4sIFJvYWRtYXBJdGVtPigpOworICBNYXA8SVdpemFyZFNjcmVlbiwgUm9hZG1hcEl0ZW0+IGl0ZW1zID0gbmV3IEhhc2hNYXA8SVdpemFyZFNjcmVlbiwgUm9hZG1hcEl0ZW0+KCk7CiAgIHByb3RlY3RlZCBIYXNoU2V0PElSb2FkbWFwTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBIYXNoU2V0PElSb2FkbWFwTGlzdGVuZXI+KCk7CiAgIHByaXZhdGUgTGFiZWwgbmF2UHJldjsKICAgcHJpdmF0ZSBMYWJlbCBuYXZOZXh0OwpAQCAtNTMsMTUgKzUxLDE0IEBACiAgICAgY3JlYXRlQ29udGVudHMoKTsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKGZpbmFsIElSb2FkbWFwTGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKKyAgcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoIGZpbmFsIElSb2FkbWFwTGlzdGVuZXIgbGlzdGVuZXIgKSB7CiAgICAgbGlzdGVuZXJzLmFkZCggbGlzdGVuZXIgKTsKICAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoZmluYWwgSVJvYWRtYXBMaXN0ZW5lciBsaXN0ZW5lcikKLSAgeworCisgIHB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKCBmaW5hbCBJUm9hZG1hcExpc3RlbmVyIGxpc3RlbmVyICkgewogICAgIGxpc3RlbmVycy5yZW1vdmUoIGxpc3RlbmVyICk7CiAgIH0KKwogICBwcml2YXRlIHZvaWQgY3JlYXRlQ29udGVudHMoKSB7CiAgICAgc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwogICAgIFJvd0xheW91dCBsYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7CkBAIC04MiwxMCArNzksMTAgQEAKICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZU5hdk5leHQoKSB7CiAgICAgbmV3IExhYmVsKCB0aGlzLCBTV1QuTk9ORSApLnNldEltYWdlKCBJbWFnZXMuTUFQX1NQQUNJTkcuZ2V0KCkgKTsKICAgICBuYXZOZXh0ID0gbmV3IExhYmVsKCB0aGlzLCBTV1QuTk9ORSApOwotICAgIExpbmtVdGlsLnNldEhhbmRDdXJzb3IobmF2TmV4dCk7CisgICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvciggbmF2TmV4dCApOwogICAgIG5hdk5leHQuc2V0SW1hZ2UoIEltYWdlcy5NQVBfTkVYVC5nZXQoKSApOwotCiAgICAgTW91c2VBZGFwdGVyIG1vdXNlTGlzdGVuZXIgPSBuZXcgTW91c2VBZGFwdGVyKCkgeworCiAgICAgICBAT3ZlcnJpZGUKICAgICAgIHB1YmxpYyB2b2lkIG1vdXNlRG93biggZmluYWwgTW91c2VFdmVudCBlICkgewogICAgICAgICBJV2l6YXJkU2NyZWVuIG5leHRTY3JlZW4gPSBnZXROZXh0U2NyZWVuKCk7CkBAIC0xMDAsMTAgKzk3LDEwIEBACiAgIHByaXZhdGUgdm9pZCBjcmVhdGVOYXZQcmV2KCkgewogICAgIG5hdlByZXYgPSBuZXcgTGFiZWwoIHRoaXMsIFNXVC5OT05FICk7CiAgICAgbmF2UHJldi5zZXRJbWFnZSggSW1hZ2VzLk1BUF9QUkVWX09GRi5nZXQoKSApOwotICAgIExpbmtVdGlsLnNldEhhbmRDdXJzb3IobmF2UHJldik7CisgICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvciggbmF2UHJldiApOwogICAgIG5ldyBMYWJlbCggdGhpcywgU1dULk5PTkUgKS5zZXRJbWFnZSggSW1hZ2VzLk1BUF9TUEFDSU5HLmdldCgpICk7Ci0KICAgICBNb3VzZUFkYXB0ZXIgbW91c2VMaXN0ZW5lciA9IG5ldyBNb3VzZUFkYXB0ZXIoKSB7CisKICAgICAgIEBPdmVycmlkZQogICAgICAgcHVibGljIHZvaWQgbW91c2VEb3duKCBmaW5hbCBNb3VzZUV2ZW50IGUgKSB7CiAgICAgICAgIElXaXphcmRTY3JlZW4gcHJldlNjcmVlbiA9IGdldFByZXZTY3JlZW4oKTsKQEAgLTEyMiwzNCArMTE5LDMzIEBACiAgICAgZm9yKCBJV2l6YXJkU2NyZWVuIHNjcmVlbiA6IHRoaXMuc2NyZWVucyApIHsKICAgICAgIGJvb2xlYW4gaXNBY3RpdmUgPSAoIHNjcmVlbi5lcXVhbHMoIGFjdGl2ZVNjcmVlbiApICk7CiAgICAgICBpdGVtcy5nZXQoIHNjcmVlbiApLnNldEFjdGl2ZSggaXNBY3RpdmUgKTsKLSAgICAgIGlmKCBpc0FjdGl2ZSkgeworICAgICAgaWYoIGlzQWN0aXZlICkgewogICAgICAgICB1cGRhdGVOYXYoKTsKICAgICAgIH0KICAgICB9Ci0gICAgZm9yKElSb2FkbWFwTGlzdGVuZXIgbGlzdGVuZXI6IGxpc3RlbmVycykKLSAgICB7CisgICAgZm9yKCBJUm9hZG1hcExpc3RlbmVyIGxpc3RlbmVyIDogbGlzdGVuZXJzICkgewogICAgICAgbGlzdGVuZXIuc2NyZWVuQWN0aXZhdGVkKCBhY3RpdmVTY3JlZW4gKTsKICAgICB9Ci0gICAgCisgICAgYWN0aXZlU2NyZWVuLnVwZGF0ZSgpOwogICB9CiAKICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZU5hdigpIHsKICAgICBpZiggZ2V0UHJldlNjcmVlbigpID09IG51bGwgKSB7CiAgICAgICBuYXZQcmV2LnNldEltYWdlKCBJbWFnZXMuTUFQX1BSRVZfT0ZGLmdldCgpICk7Ci0gICAgICBMaW5rVXRpbC5yZXNldEN1cnNvcihuYXZQcmV2KTsKKyAgICAgIExpbmtVdGlsLnJlc2V0Q3Vyc29yKCBuYXZQcmV2ICk7CiAgICAgfSBlbHNlIHsKICAgICAgIG5hdlByZXYuc2V0SW1hZ2UoIEltYWdlcy5NQVBfUFJFVi5nZXQoKSApOwotICAgICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvcihuYXZQcmV2KTsKKyAgICAgIExpbmtVdGlsLnNldEhhbmRDdXJzb3IoIG5hdlByZXYgKTsKICAgICB9CiAgICAgaWYoIGdldE5leHRTY3JlZW4oKSAhPSBudWxsICkgewogICAgICAgbmF2TmV4dC5zZXRJbWFnZSggSW1hZ2VzLk1BUF9ORVhULmdldCgpICk7Ci0gICAgICBMaW5rVXRpbC5zZXRIYW5kQ3Vyc29yKG5hdk5leHQpOworICAgICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvciggbmF2TmV4dCApOwogICAgIH0gZWxzZSB7CiAgICAgICBuYXZOZXh0LnNldEltYWdlKCBJbWFnZXMuTUFQX05FWFRfT0ZGLmdldCgpICk7Ci0gICAgICBMaW5rVXRpbC5yZXNldEN1cnNvcihuYXZOZXh0KTsKKyAgICAgIExpbmtVdGlsLnJlc2V0Q3Vyc29yKCBuYXZOZXh0ICk7CiAgICAgfQogICB9Ci0gIAorCiAgIHByaXZhdGUgSVdpemFyZFNjcmVlbiBnZXROZXh0U2NyZWVuKCkgewogICAgIElXaXphcmRTY3JlZW4gcmVzdWx0ID0gbnVsbDsKICAgICBmb3IoIGludCBpID0gMDsgcmVzdWx0ID09IG51bGwgJiYgaSA8IHNjcmVlbnMubGVuZ3RoOyBpKysgKSB7CkBAIC0xNzksMTEgKzE3NSwxMSBAQAogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogICB9Ci0gIAorCiAgIHByaXZhdGUgYm9vbGVhbiBoYXNOZXh0KCBmaW5hbCBpbnQgaSwgZmluYWwgT2JqZWN0W10gYXJyYXkgKSB7CiAgICAgcmV0dXJuIGkgKyAxIDwgYXJyYXkubGVuZ3RoOwogICB9Ci0gIAorCiAgIHByaXZhdGUgSVdpemFyZFNjcmVlbiBnZXRBY3RpdmVTY3JlZW4oKSB7CiAgICAgcmV0dXJuIGFjdGl2ZVNjcmVlbjsKICAgfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL1JvYWRtYXBJdGVtLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvUm9hZG1hcEl0ZW0uamF2YQppbmRleCA3MTcxZmY3Li5hNWYzYjA2IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvUm9hZG1hcEl0ZW0uamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvUm9hZG1hcEl0ZW0uamF2YQpAQCAtMTEsNyArMTEsNiBAQAogcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLnVpOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5MaW5rVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5yd3QubGlmZWN5Y2xlLldpZGdldFV0aWw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlQWRhcHRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7CkBAIC0yMSw3ICsyMCw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwogCi0KIHB1YmxpYyBjbGFzcyBSb2FkbWFwSXRlbSB7CiAKICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZTsKQEAgLTU5LDcgKzU3LDcgQEAKICAgICBsYWJlbC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIFNXVC5DRU5URVIsIFNXVC5DRU5URVIsIHRydWUsIHRydWUgKSApOwogICAgIGxhYmVsLnNldFRleHQoIHNjcmVlbi5nZXRMYWJlbCgpICk7CiAgICAgbGFiZWwuc2V0Rm9yZWdyb3VuZCggQ29sb3JzLldISVRFLmdldCgpICk7Ci0gICAgbGFiZWwuc2V0Rm9udChGb250cy5CVVRUT04uZ2V0KCkpOworICAgIGxhYmVsLnNldEZvbnQoIEZvbnRzLkJVVFRPTi5nZXQoKSApOwogICAgIHJpZ2h0ID0gbmV3IExhYmVsKCByb2FkbWFwLCBTV1QuTk9ORSApOwogICAgIHJpZ2h0LnNldEltYWdlKCBJbWFnZXMuTUFQX1JJR0hULmdldCgpICk7CiAgICAgcmlnaHQuc2V0VG9vbFRpcFRleHQoIHNjcmVlbi5nZXRMYWJlbCgpICk7CkBAIC03MCwxMSArNjgsMTEgQEAKICAgICB9IGVsc2UgewogICAgICAgbmV4dENvbm5lY3Rpb24uc2V0SW1hZ2UoIEltYWdlcy5NQVBfU1BBQ0lORy5nZXQoKSApOwogICAgIH0KLSAgICBMaW5rVXRpbC5zZXRIYW5kQ3Vyc29yKGxlZnQpOwotICAgIExpbmtVdGlsLnNldEhhbmRDdXJzb3IocmlnaHQpOwotICAgIExpbmtVdGlsLnNldEhhbmRDdXJzb3IobGFiZWwpOwotCisgICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvciggbGVmdCApOworICAgIExpbmtVdGlsLnNldEhhbmRDdXJzb3IoIHJpZ2h0ICk7CisgICAgTGlua1V0aWwuc2V0SGFuZEN1cnNvciggbGFiZWwgKTsKICAgICBNb3VzZUFkYXB0ZXIgbW91c2VMaXN0ZW5lciA9IG5ldyBNb3VzZUFkYXB0ZXIoKSB7CisKICAgICAgIEBPdmVycmlkZQogICAgICAgcHVibGljIHZvaWQgbW91c2VEb3duKCBmaW5hbCBNb3VzZUV2ZW50IGUgKSB7CiAgICAgICAgIHJvYWRtYXAuc2V0QWN0aXZlU2NyZWVuKCBzY3JlZW4gKTsKQEAgLTg1LDE1ICs4MywxNCBAQAogICAgIHJpZ2h0LmFkZE1vdXNlTGlzdGVuZXIoIG1vdXNlTGlzdGVuZXIgKTsKICAgICBsYWJlbC5hZGRNb3VzZUxpc3RlbmVyKCBtb3VzZUxpc3RlbmVyICk7CiAgIH0KLSAgCisKICAgcHVibGljIHZvaWQgc2V0QWN0aXZlKCBmaW5hbCBib29sZWFuIGFjdGl2ZSApIHsKICAgICB0aGlzLmFjdGl2ZSA9IGFjdGl2ZTsKICAgICB1cGRhdGVJbWFnZXMoKTsKICAgfQotICAKLSAgLy8gaGVscGluZyBtZXRob2RzCi0gIC8vLy8vLy8vLy8vLy8vLy8vLwogCisgIC8vIGhlbHBpbmcgbWV0aG9kcworICAvLyAvLy8vLy8vLy8vLy8vLy8vCiAgIHByaXZhdGUgdm9pZCB1cGRhdGVJbWFnZXMoKSB7CiAgICAgaWYoIGFjdGl2ZSApIHsKICAgICAgIHByZXZDb25uZWN0aW9uLnNldFZpc2libGUoIGZhbHNlICk7CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvV2lzaGxpc3RDb21wb3NpdGUuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9XaXNobGlzdENvbXBvc2l0ZS5qYXZhCmluZGV4IDFmMzJhYTkuLjkzM2JjMWUgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9XaXNobGlzdENvbXBvc2l0ZS5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9XaXNobGlzdENvbXBvc2l0ZS5qYXZhCkBAIC00OCwxNyArNDgsMTYgQEAKICAgICB0aXRsZUxhYmVsLnNldFRleHQoICJNeSBTZWxlY3Rpb24iICk7CiAgICAgdGl0bGVMYWJlbC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApICk7CiAgICAgdGl0bGVMYWJlbC5zZXRGb250KCBGb250cy5USVRMRS5nZXQoKSApOwotICAgIHRpdGxlTGFiZWwuc2V0Rm9yZWdyb3VuZCggQ29sb3JzLkVDTElQU0VfQkxVRS5nZXQoKSApOyAKLSAgICBMYWJlbCBsYWJlbFNlcGFyYXRvciA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOworICAgIHRpdGxlTGFiZWwuc2V0Rm9yZWdyb3VuZCggQ29sb3JzLkVDTElQU0VfQkxVRS5nZXQoKSApOworICAgIExhYmVsIGxhYmVsU2VwYXJhdG9yID0gbmV3IExhYmVsKCB0aGlzLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwgKTsKICAgICBHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICk7CiAgICAgZ3JpZERhdGEuaG9yaXpvbnRhbFNwYW4gPSAyOwogICAgIGxhYmVsU2VwYXJhdG9yLnNldExheW91dERhdGEoIGdyaWREYXRhICk7Ci0gICAgCiAgICAgc2Nyb2xsZWRDb21wb3NpdGUgPSBuZXcgU2Nyb2xsZWRDb21wb3NpdGUoIHRoaXMsIFNXVC5IX1NDUk9MTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNXVC5WX1NDUk9MTCApOwogICAgIEdyaWREYXRhIGdyaWREYXRhU2Nyb2xsZWQgPSBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfQk9USCApOwogICAgIGdyaWREYXRhU2Nyb2xsZWQuaG9yaXpvbnRhbFNwYW4gPSAyOwotICAgIHNjcm9sbGVkQ29tcG9zaXRlLnNldExheW91dERhdGEoIGdyaWREYXRhU2Nyb2xsZWQpIDsKKyAgICBzY3JvbGxlZENvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKCBncmlkRGF0YVNjcm9sbGVkICk7CiAgICAgbGlzdENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoIHNjcm9sbGVkQ29tcG9zaXRlLCBTV1QuTk9ORSApOwogICAgIGxpc3RDb21wb3NpdGUuc2V0TGF5b3V0KCBuZXcgR3JpZExheW91dCggMiwgZmFsc2UgKSApOwogICAgIC8vIGxpc3RDb21wb3NpdGUuc2V0U2l6ZSggNDAwLCA0MDAgKTsKQEAgLTEwNCw3ICsxMDMsNiBAQAogICAgIGxhYmVsLnNldFRleHQoIHN0cmluZyApOwogICAgIGxhYmVsLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKICAgICBsYWJlbC5zZXRGb250KCBGb250cy5XSVNITElTVF9JVEVNLmdldCgpICk7Ci0KICAgICByZXR1cm4gbGFiZWw7CiAgIH0KIApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL1dpemFyZC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL1dpemFyZC5qYXZhCmluZGV4IDNlMmMxMTUuLmZjM2QwYzMgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9XaXphcmQuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvV2l6YXJkLmphdmEKQEAgLTEwLDI0ICsxMCwyNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC51aTsKIAotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5BY3RpdmF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5Db25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWwuRXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWwuT3NVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWwuUGxhdGZvcm07CiBpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5XaXNobGlzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLnVpLlJvYWRtYXAuSVJvYWRtYXBMaXN0ZW5lcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsLkVQUE1vZGVsOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwuU2NyZWVuOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwuU3RydWN0dXJlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmxheW91dC5HcmlkRGF0YUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UubGF5b3V0LkdyaWRMYXlvdXRGYWN0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLnJ3dC5SV1Q7CiBpbXBvcnQgb3JnLmVjbGlwc2Uucnd0LmxpZmVjeWNsZS5JRW50cnlQb2ludDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5icm93c2VyLkJyb3dzZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TYXNoRm9ybTsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0YWNrTGF5b3V0OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CkBAIC0zOSwxMyArNDEsMTMgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5qZG9tLkpET01FeGNlcHRpb247CiAKIC8qKgogICogQGF1dGhvciBKb3JkaSBCb2VobWUgTG9wZXogPGpib2VobWVAaW5ub29wcmFjdC5jb20+CiAgKi8KIHB1YmxpYyBjbGFzcyBXaXphcmQgaW1wbGVtZW50cyBJRW50cnlQb2ludCwgSVJvYWRtYXBMaXN0ZW5lciB7CiAKKyAgc3RhdGljIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCBXaXphcmQuY2xhc3MgKTsKICAgcHJpdmF0ZSBMaXN0PElXaXphcmRTY3JlZW4+IHNjcmVlbnMgPSBuZXcgQXJyYXlMaXN0PElXaXphcmRTY3JlZW4+KCk7CiAgIHByaXZhdGUgU3RhY2tMYXlvdXQgc3RhY2tMYXlvdXQgPSBuZXcgU3RhY2tMYXlvdXQoKTsKICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCkBAIC02MSwzMyArNjMsNDIgQEAKIAogICBwdWJsaWMgaW50IGNyZWF0ZVVJKCkgewogICAgIHRyeSB7Ci0gICAgICBsb2FkTW9kZWwoKTsgICAgICAKKyAgICAgIGlmKCBsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSApIHsKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCAiQ3JlYXRpbmcgbmV3IHNlc3Npb24iICk7CisgICAgICB9CisgICAgICBsb2FkTW9kZWwoKTsKKyAgICAgIFdpc2hsaXN0IHdpc2hsaXN0ID0gV2lzaGxpc3QuZ2V0RGVmYXVsdCgpOworICAgICAgd2lzaGxpc3Quc2V0TW9kZWwoIG1vZGVsICk7CisgICAgICBTdHJpbmcgdXNlckFnZW50ID0gUldULmdldFJlcXVlc3QoKS5nZXRIZWFkZXIoICJ1c2VyLWFnZW50IiApOworICAgICAgLy8gUldULmdldFJlcXVlc3QoKS5nZXRTZXNzaW9uKCkuZ2V0U2VydmxldENvbnRleHQoKS5nZXRJbmkKKyAgICAgIFBsYXRmb3JtIGRlZmF1bHRPcyA9IE9zVXRpbC5nZXREZWZhdWx0T3MoIHVzZXJBZ2VudCApOworICAgICAgd2lzaGxpc3Quc2V0UGxhdGZvcm0oIGRlZmF1bHRPcyApOworICAgICAgc2V0SW5wdXRGZWF0dXJlSWRzKCB3aXNobGlzdCApOwogICAgICAgRGlzcGxheSBkaXNwbGF5ID0gbmV3IERpc3BsYXkoKTsKICAgICAgIGZpbmFsIFNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKCBkaXNwbGF5LCBTV1QuTk9fVFJJTSApOwogICAgICAgc2hlbGwuc2V0TWF4aW1pemVkKCB0cnVlICk7CiAgICAgICBzaGVsbC5zZXRUZXh0KCAiRVBQIERvd25sb2FkIFdpemFyZCIgKTsKLSAgICAgIHNoZWxsLnNldExheW91dCggbmV3IEZpbGxMYXlvdXQoKSApOworICAgICAgRmlsbExheW91dCBsYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworICAgICAgbGF5b3V0Lm1hcmdpbkhlaWdodCA9IC01OworICAgICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gLTU7CisgICAgICBzaGVsbC5zZXRMYXlvdXQoIGxheW91dCApOwogICAgICAgQ29tcG9zaXRlIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoIHNoZWxsLCBTV1QuTk9ORSApOwotICAgICAgcGFyZW50LnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQotICAgICAgICAgICAgCisgICAgICBwYXJlbnQuc2V0TGF5b3V0KCBuZXcgR3JpZExheW91dCgpICk7CisgICAgICBjcmVhdGVIZWFkZXIoIHBhcmVudCApOwogICAgICAgU2FzaEZvcm0gc2FzaEZvcm0gPSBuZXcgU2FzaEZvcm0oIHBhcmVudCwgU1dULkhPUklaT05UQUwgKTsKICAgICAgIHNhc2hGb3JtLnNldEJhY2tncm91bmQoIENvbG9ycy5TQVNILmdldCgpICk7Ci0gICAgICBzYXNoRm9ybS5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfQk9USCApICk7CisgICAgICBHcmlkRGF0YSBsYXlvdXREYXRhID0gbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0JPVEggKTsKKyAgICAgIHNhc2hGb3JtLnNldExheW91dERhdGEoIGxheW91dERhdGEgKTsKKyAgICAgIGxheW91dERhdGEuaG9yaXpvbnRhbEluZGVudCA9IDIwOworICAgICAgbGF5b3V0RGF0YS52ZXJ0aWNhbEluZGVudCA9IDIwOwogICAgICAgQ29tcG9zaXRlIHNjcmVlbkFyZWEgPSBjcmVhdGVTY3JlZW5BcmVhKCBzYXNoRm9ybSApOwotICAgICAgCi0gICAgICAKLSAgICAgIFdpc2hsaXN0IHdpc2hsaXN0ID0gV2lzaGxpc3QuZ2V0RGVmYXVsdCgpOwotICAgICAgd2lzaGxpc3Quc2V0TW9kZWwoIG1vZGVsICk7Ci0gICAgICB3aXNobGlzdENvbXBvc2l0ZSA9IG5ldyBXaXNobGlzdENvbXBvc2l0ZSggc2FzaEZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpc2hsaXN0KTsKKyAgICAgIHdpc2hsaXN0Q29tcG9zaXRlID0gbmV3IFdpc2hsaXN0Q29tcG9zaXRlKCBzYXNoRm9ybSwgd2lzaGxpc3QgKTsKICAgICAgIHNhc2hGb3JtLnNldFdlaWdodHMoIG5ldyBpbnRbXXsKICAgICAgICAgMiwgMQogICAgICAgfSApOwotICAgICAgRXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uIGV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbigpOwotCi0KLSAgICAgIAorICAgICAgRXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uIGV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKyAgICAgICAgLmdldENvbmZpZ3VyYXRpb24oKQorICAgICAgICAuZ2V0RXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uKCk7CiAgICAgICBpZiggbW9kZWwgIT0gbnVsbCApIHsKICAgICAgICAgU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1vZGVsLmdldFN0cnVjdHVyZSgpOwogICAgICAgICBTY3JlZW5bXSBzdHJ1Y3RTY3JlZW5zID0gc3RydWN0dXJlLmdldFNjcmVlbnMoKTsKQEAgLTk3LDE2ICsxMDgsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuQXJlYSApOwogICAgICAgICAgIGFkZFdpemFyZFNjcmVlbiggd2l6YXJkU2NyZWVuICk7CiAgICAgICAgIH0KLSAgICAgICAgZG93bmxvYWRTY3JlZW4gPSBuZXcgV2l6YXJkRG93bmxvYWRTY3JlZW4oCi0JCQkJCQlzY3JlZW5BcmVhLCBleHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24pOwotCQkJCWFkZFdpemFyZFNjcmVlbihkb3dubG9hZFNjcmVlbik7CisgICAgICAgIGRvd25sb2FkU2NyZWVuID0gbmV3IFdpemFyZERvd25sb2FkU2NyZWVuKCBzY3JlZW5BcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uICk7CisgICAgICAgIGFkZFdpemFyZFNjcmVlbiggZG93bmxvYWRTY3JlZW4gKTsKICAgICAgICAgc2NyZWVuQXJlYS5sYXlvdXQoKTsKICAgICAgICAgUm9hZG1hcCByb2FkbWFwID0gY3JlYXRlUm9hZG1hcCggcGFyZW50ICk7CiAgICAgICAgIHJvYWRtYXAuYWRkTGlzdGVuZXIoIHRoaXMgKTsKICAgICAgICAgcm9hZG1hcC5zZXRBY3RpdmVTY3JlZW4oIHRoaXMuc2NyZWVucy5nZXQoIDAgKSApOwogICAgICAgfQogICAgICAgc2V0SW5wdXRGZWF0dXJlSWRzKCB3aXNobGlzdCApOwotICAgICAgCiAgICAgICBzaGVsbC5sYXlvdXQoKTsKICAgICAgIHNoZWxsLmFkZENvbnRyb2xMaXN0ZW5lciggbmV3IENvbnRyb2xBZGFwdGVyKCkgewogCkBAIC0xMjIsMzQgKzEzMiw0OSBAQAogICAgICAgfQogICAgICAgcmV0dXJuIDA7CiAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4YyApIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIGxvZ2dlci5lcnJvciggIkVycm9yIGluIGNyZWF0ZVVJIiwgZXhjICk7CiAgICAgICByZXR1cm4gMDsKICAgICB9CiAgIH0KIAotICBwcml2YXRlIHZvaWQgbG9hZE1vZGVsKCkgewotICAgIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0Q29uZmlndXJhdGlvbigpOwotCQlGaWxlIG1vZGVsRGlyZWN0b3J5ID0gY29uZmlndXJhdGlvbi5nZXRNb2RlbERpcmVjdG9yeSgpOwotICAgIEZpbGUgbW9kZWxYTUwgPSBuZXcgRmlsZShtb2RlbERpcmVjdG9yeSwgImVwcG1vZGVsLnhtbCIpOwotICAgIG1vZGVsID0gbnVsbDsKLSAgICB0cnkgewotICAgICAgbW9kZWwgPSBFUFBNb2RlbC5yZWFkKG1vZGVsWE1MLnRvVVJJKCkudG9VUkwoKSwgbmV3IFVSTCgKLQkJCQkJY29uZmlndXJhdGlvbi5nZXRFcHBNZXRhZGF0YVJlcG9zaXRvcnkoKSkpOwotICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGV4YyApIHsKLQkJCS8vIEFjdGl2YXRvci5sb2coIGV4YyApOwotICAgIH0gY2F0Y2goIEpET01FeGNlcHRpb24gZXhjICkgewotCQkJLy8gQWN0aXZhdG9yLmxvZyggZXhjICk7Ci0gICAgfQorICBwcml2YXRlIHZvaWQgY3JlYXRlSGVhZGVyKCBDb21wb3NpdGUgcGFyZW50ICkgeworICAgIENvbXBvc2l0ZSBoZWFkZXIgPSBuZXcgQ29tcG9zaXRlKCBwYXJlbnQsIFNXVC5OT05FICk7CisgICAgR3JpZERhdGFGYWN0b3J5LmZpbGxEZWZhdWx0cygpLmdyYWIoIHRydWUsIGZhbHNlICkuYXBwbHlUbyggaGVhZGVyICk7CisgICAgR3JpZExheW91dEZhY3RvcnkuZmlsbERlZmF1bHRzKCkubnVtQ29sdW1ucyggNCApLmFwcGx5VG8oIGhlYWRlciApOworICAgIExhYmVsIGhlYWRlckxhYmVsID0gbmV3IExhYmVsKCBoZWFkZXIsIFNXVC5OT05FICk7CisgICAgaGVhZGVyTGFiZWwuc2V0SW1hZ2UoIEltYWdlcy5IRUFERVJfTE9HTy5nZXQoKSApOworICAgIExhYmVsIHRpdGxlTGFiZWwgPSBuZXcgTGFiZWwoIGhlYWRlciwgU1dULk5PTkUgKTsKKyAgICBoZWFkZXIuc2V0QmFja2dyb3VuZE1vZGUoIFNXVC5JTkhFUklUX0RFRkFVTFQgKTsKKyAgICBHcmlkRGF0YUZhY3Rvcnkuc3d0RGVmYXVsdHMoKS5pbmRlbnQoIDMwLCAwICkuYXBwbHlUbyggdGl0bGVMYWJlbCApOworICAgIHRpdGxlTGFiZWwuc2V0VGV4dCggIkVjbGlwc2UgRHluYW1pYyBEb3dubG9hZCIgKTsKKyAgICB0aXRsZUxhYmVsLnNldEZvbnQoIEZvbnRzLkhFQURFUi5nZXQoKSApOworICAgIHRpdGxlTGFiZWwuc2V0Rm9yZWdyb3VuZCggQ29sb3JzLldISVRFLmdldCgpICk7CisgICAgaGVhZGVyLnNldEJhY2tncm91bmRJbWFnZSggSW1hZ2VzLkhFQURFUl9CQUNLR1JPVU5ELmdldCgpICk7CisgICAgTGFiZWwgYmV0YUxhYmVsID0gbmV3IExhYmVsKCBoZWFkZXIsIFNXVC5Ob25lICk7CisgICAgYmV0YUxhYmVsLnNldFRleHQoICJiZXRhIiApOworICAgIGJldGFMYWJlbC5zZXRGb250KCBGb250cy5CRVRBLmdldCgpICk7CisgICAgYmV0YUxhYmVsLnNldEZvcmVncm91bmQoIENvbG9ycy5XSElURS5nZXQoKSApOworICAgIEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKQorICAgICAgLmFsaWduKCBTV1QuUklHSFQsIFNXVC5DRU5URVIgKQorICAgICAgLmdyYWIoIHRydWUsIGZhbHNlICkKKyAgICAgIC5hcHBseVRvKCBiZXRhTGFiZWwgKTsKKyAgICBMYWJlbCBkdW1teUxhYmVsID0gbmV3IExhYmVsKCBoZWFkZXIsIFNXVC5Ob25lICk7CisgICAgR3JpZERhdGFGYWN0b3J5LmZpbGxEZWZhdWx0cygpCisgICAgICAuYWxpZ24oIFNXVC5SSUdIVCwgU1dULkNFTlRFUiApCisgICAgICAuaGludCggMTAsIFNXVC5ERUZBVUxUICkKKyAgICAgIC5hcHBseVRvKCBkdW1teUxhYmVsICk7CisgIH0KKworICBwcml2YXRlIHZvaWQgbG9hZE1vZGVsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbW9kZWwgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldE1vZGVsKCk7CiAgIH0KIAogICBwcml2YXRlIHZvaWQgc2V0SW5wdXRGZWF0dXJlSWRzKCBXaXNobGlzdCB3aXNobGlzdCApIHsKLSAgICBTdHJpbmcgZmVhdHVyZUlkU3RyaW5nID0gUldULmdldFJlcXVlc3QoKS5nZXRQYXJhbWV0ZXIoCi0JCQkJQ29uZmlndXJhdGlvbi5QMl9ST09UUyk7Ci0gICAgaWYoZmVhdHVyZUlkU3RyaW5nICE9IG51bGwpCi0gICAgeworICAgIFN0cmluZyBmZWF0dXJlSWRTdHJpbmcgPSBSV1QuZ2V0UmVxdWVzdCgpCisgICAgICAuZ2V0UGFyYW1ldGVyKCBDb25maWd1cmF0aW9uLlAyX1JPT1RTICk7CisgICAgaWYoIGZlYXR1cmVJZFN0cmluZyAhPSBudWxsICkgewogICAgICAgU3RyaW5nW10gZmVhdHVyZUlkcyA9IGZlYXR1cmVJZFN0cmluZy5zcGxpdCggIiwiICk7Ci0gICAgICB3aXNobGlzdC5hZGRJVVJlZnMoZmVhdHVyZUlkcyk7Ci0gICAgICAKKyAgICAgIHdpc2hsaXN0LmFkZElVUmVmcyggZmVhdHVyZUlkcyApOwogICAgIH0KICAgfQogCkBAIC0xNTksMTQgKzE4NCwxNiBAQAogICBwcml2YXRlIENvbXBvc2l0ZSBjcmVhdGVTY3JlZW5BcmVhKCBmaW5hbCBDb21wb3NpdGUgcGFyZW50ICkgewogICAgIENvbXBvc2l0ZSBsZWZ0U2lkZSA9IG5ldyBDb21wb3NpdGUoIHBhcmVudCwgU1dULk5PTkUgKTsKICAgICBsZWZ0U2lkZS5zZXRMYXlvdXQoIG5ldyBHcmlkTGF5b3V0KCkgKTsKLSAgICBzY3JlZW5UaXRsZSA9IG5ldyBMYWJlbChsZWZ0U2lkZSwgU1dULk5PTkUpOworICAgIHNjcmVlblRpdGxlID0gbmV3IExhYmVsKCBsZWZ0U2lkZSwgU1dULk5PTkUgKTsKICAgICBzY3JlZW5UaXRsZS5zZXRUZXh0KCAiVGl0bGUiICk7CiAgICAgc2NyZWVuVGl0bGUuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwogICAgIHNjcmVlblRpdGxlLnNldEZvbnQoIEZvbnRzLlRJVExFLmdldCgpICk7Ci0gICAgc2NyZWVuVGl0bGUuc2V0Rm9yZWdyb3VuZCggQ29sb3JzLkVDTElQU0VfQkxVRS5nZXQoKSApOyAKLSAgICBMYWJlbCBsYWJlbFNlcGFyYXRvciA9IG5ldyBMYWJlbChsZWZ0U2lkZSwgU1dULk5vbmUgLypTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwqLyk7CisgICAgc2NyZWVuVGl0bGUuc2V0Rm9yZWdyb3VuZCggQ29sb3JzLkVDTElQU0VfQkxVRS5nZXQoKSApOworICAgIExhYmVsIGxhYmVsU2VwYXJhdG9yID0gbmV3IExhYmVsKCBsZWZ0U2lkZSwgU1dULk5vbmUgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNXVC5TRVBBUkFUT1IgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogU1dULkhPUklaT05UQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyk7CiAgICAgbGFiZWxTZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotCiAgICAgQ29tcG9zaXRlIHJlc3VsdCA9IG5ldyBDb21wb3NpdGUoIGxlZnRTaWRlLCBTV1QuTk9ORSApOwogICAgIHJlc3VsdC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfQk9USCApICk7CiAgICAgcmVzdWx0LnNldExheW91dCggdGhpcy5zdGFja0xheW91dCApOwpAQCAtMTc1LDIxICsyMDIsNDkgQEAKIAogICBwcml2YXRlIFJvYWRtYXAgY3JlYXRlUm9hZG1hcCggZmluYWwgQ29tcG9zaXRlIHBhcmVudCApIHsKICAgICBJV2l6YXJkU2NyZWVuW10gc2NyZWVuc0FycmF5ID0gc2NyZWVucy50b0FycmF5KCBuZXcgSVdpemFyZFNjcmVlblsgc2NyZWVucy5zaXplKCkgXSApOwotICAgIAotICAgIENvbXBvc2l0ZSBib3R0b20gPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5vbmUpOwotICAgIEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKS5ncmFiKHRydWUsIGZhbHNlKS5hcHBseVRvKGJvdHRvbSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgyLCBmYWxzZSk7CisgICAgQ29tcG9zaXRlIGJvdHRvbSA9IG5ldyBDb21wb3NpdGUoIHBhcmVudCwgU1dULk5vbmUgKTsKKyAgICBHcmlkRGF0YUZhY3RvcnkuZmlsbERlZmF1bHRzKCkuZ3JhYiggdHJ1ZSwgZmFsc2UgKS5hcHBseVRvKCBib3R0b20gKTsKKyAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCAyLCBmYWxzZSApOwogICAgIGxheW91dC5tYXJnaW5SaWdodCA9IDEwOwotCWJvdHRvbS5zZXRMYXlvdXQobGF5b3V0KTsKKyAgICBib3R0b20uc2V0TGF5b3V0KCBsYXlvdXQgKTsKICAgICBSb2FkbWFwIHJvYWRtYXAgPSBuZXcgUm9hZG1hcCggYm90dG9tLCBzY3JlZW5zQXJyYXksIHN0YWNrTGF5b3V0ICk7Ci0gICAgR3JpZERhdGFGYWN0b3J5LmZpbGxEZWZhdWx0cygpLmdyYWIodHJ1ZSwgZmFsc2UpLmFsaWduKFNXVC5DRU5URVIsCi0JCQkJU1dULkNFTlRFUikuYXBwbHlUbyhyb2FkbWFwKTsKLSAgICBMYWJlbCBiZXRhTGFiZWwgPSBuZXcgTGFiZWwoYm90dG9tLCBTV1QuTm9uZSk7Ci0gICAgYmV0YUxhYmVsLnNldFRleHQoImJldGEiKTsKLSAgICBiZXRhTGFiZWwuc2V0Rm9udChGb250cy5CRVRBLmdldCgpKTsKLSAgICBiZXRhTGFiZWwuc2V0Rm9yZWdyb3VuZChDb2xvcnMuU0FTSC5nZXQoKSk7Ci0gICAgR3JpZERhdGFGYWN0b3J5LmZpbGxEZWZhdWx0cygpLmFsaWduKFNXVC5SSUdIVCwgU1dULkNFTlRFUikuYXBwbHlUbygKLQkJCQliZXRhTGFiZWwpOworICAgIEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKQorICAgICAgLmdyYWIoIHRydWUsIGZhbHNlICkKKyAgICAgIC5hbGlnbiggU1dULkNFTlRFUiwgU1dULkNFTlRFUiApCisgICAgICAuc3BhbiggMiwgMSApCisgICAgICAuYXBwbHlUbyggcm9hZG1hcCApOworICAgIENvbXBvc2l0ZSB0b3VCb3ggPSBuZXcgQ29tcG9zaXRlKCBib3R0b20sIFNXVC5Ob25lICk7CisgICAgdG91Qm94LnNldExheW91dCggbmV3IEdyaWRMYXlvdXQoKSApOworICAgIEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKQorICAgICAgLmFsaWduKCBTV1QuTEVGVCwgU1dULkNFTlRFUiApCisgICAgICAuYXBwbHlUbyggdG91Qm94ICk7CisgICAgQnJvd3NlciB0b3VCcm93c2VyID0gbmV3IEJyb3dzZXIoIHRvdUJveCwgU1dULk5vbmUgKTsKKyAgICB0b3VCcm93c2VyLnNldFRleHQoICI8Ym9keSBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojZjhmOGZmOyc+PGRpdiBzdHlsZT0nZm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDt0ZXh0LWFsaWduOmxlZnQ7Jz48YSBocmVmPSciCisgICAgICAgICAgICAgICAgICAgICAgICArIEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldENvbmZpZ3VyYXRpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0UHJpdmFjeVVSTCgpCisgICAgICAgICAgICAgICAgICAgICAgICArICInIHRhcmdldD0nX2JsYW5rJz5Qcml2YWN5IFBvbGljeTwvYT4gfCA8YSBocmVmPSciCisgICAgICAgICAgICAgICAgICAgICAgICArIEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldENvbmZpZ3VyYXRpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0VGVybXNPZlVzZVVSTCgpCisgICAgICAgICAgICAgICAgICAgICAgICArICInIHRhcmdldD0nX2JsYW5rJz5UZXJtcyBvZiBVc2U8L2E+PC9kaXY+PC9ib2R5PiIgKTsKKyAgICBHcmlkRGF0YUZhY3RvcnkuZmlsbERlZmF1bHRzKCkKKyAgICAgIC5hbGlnbiggU1dULkxFRlQsIFNXVC5DRU5URVIgKQorICAgICAgLmdyYWIoIHRydWUsIGZhbHNlICkKKyAgICAgIC5oaW50KCAyNTAsIDI1ICkKKyAgICAgIC5hcHBseVRvKCB0b3VCcm93c2VyICk7CisgICAgQ29tcG9zaXRlIGluZm9Cb3ggPSBuZXcgQ29tcG9zaXRlKCBib3R0b20sIFNXVC5Ob25lICk7CisgICAgaW5mb0JveC5zZXRMYXlvdXQoIG5ldyBHcmlkTGF5b3V0KCkgKTsKKyAgICBHcmlkRGF0YUZhY3RvcnkuZmlsbERlZmF1bHRzKCkKKyAgICAgIC5hbGlnbiggU1dULlJJR0hULCBTV1QuQ0VOVEVSICkKKyAgICAgIC5hcHBseVRvKCBpbmZvQm94ICk7CisgICAgQnJvd3NlciBicm93c2VyID0gbmV3IEJyb3dzZXIoIGluZm9Cb3gsIFNXVC5Ob25lICk7CisgICAgYnJvd3Nlci5zZXRUZXh0KCAiPGJvZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6I2Y4ZjhmZjsnPjxkaXYgc3R5bGU9J2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7dGV4dC1hbGlnbjpyaWdodDsnPnBvd2VyZWQgYnkgPGEgaHJlZj0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9yYXAvJyB0YXJnZXQ9J19ibGFuayc+RWNsaXBzZSBSQVA8L2E+IGFuZCA8YSBocmVmPSdodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9FcXVpbm94X3AyJyB0YXJnZXQ9J19ibGFuayc+RXF1aW5veCBQMjwvYT48L2Rpdj48L2JvZHk+IiApOworICAgIEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKQorICAgICAgLmFsaWduKCBTV1QuUklHSFQsIFNXVC5DRU5URVIgKQorICAgICAgLmdyYWIoIHRydWUsIGZhbHNlICkKKyAgICAgIC5oaW50KCA0MDAsIDI1ICkKKyAgICAgIC5hcHBseVRvKCBicm93c2VyICk7CiAgICAgcmV0dXJuIHJvYWRtYXA7CiAgIH0KIApAQCAtMTk4LDggKzI1Myw2IEBACiAgIH0KIAogICBwdWJsaWMgdm9pZCBzY3JlZW5BY3RpdmF0ZWQoIElXaXphcmRTY3JlZW4gYWN0aXZlU2NyZWVuICkgewotCQlzY3JlZW5UaXRsZS5zZXRUZXh0KGFjdGl2ZVNjcmVlbi5nZXRMYWJlbCgpKTsKLSAgICAKKyAgICBzY3JlZW5UaXRsZS5zZXRUZXh0KCBhY3RpdmVTY3JlZW4uZ2V0TGFiZWwoKSApOwogICB9Ci0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvV2l6YXJkRG93bmxvYWRTY3JlZW4uamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9XaXphcmREb3dubG9hZFNjcmVlbi5qYXZhCmluZGV4IDE0MDdhZGUuLjg1YjY1MzcgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9XaXphcmREb3dubG9hZFNjcmVlbi5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9XaXphcmREb3dubG9hZFNjcmVlbi5qYXZhCkBAIC0xMCwxNSArMTAsMjAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWwudWk7CiAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwogCitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5BY3RpdmF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5Db25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWwuRXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWwuSVdpc2hsaXN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5MaW5rVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLk9zVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQuaW50ZXJuYWwuU3RhdHNMb2dnZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5XaXNobGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLkV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbi5FbnRyeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UubGF5b3V0LkdyaWREYXRhRmFjdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5yd3QuUldUOwpAQCAtMzEsNyArMzYsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CkBAIC00MSwyOTUgKzQ2LDQzNiBAQAogICovCiBwdWJsaWMgY2xhc3MgV2l6YXJkRG93bmxvYWRTY3JlZW4gZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cyBJV2l6YXJkU2NyZWVuIHsKIAotCXByaXZhdGUgQnJvd3NlciBicm93c2VyOwotCXByaXZhdGUgV2lzaGxpc3Qgd2lzaGxpc3Q7Ci0JcHJpdmF0ZSBFeHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24gZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uOwotCXByaXZhdGUgTGFiZWwgbm90aWZpY2F0aW9uTGFiZWw7Ci0JcHJpdmF0ZSBTdHJpbmcgbm9JdGVtc1RleHQ7Ci0JcHJpdmF0ZSBTdHJpbmcgZ290SXRlbXNUZXh0OworICBwcm90ZWN0ZWQgY2xhc3MgTGlua0luZm8gewogCi0JcHVibGljIFdpemFyZERvd25sb2FkU2NyZWVuKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCi0JCQlFeHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24gZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uCi0JCQkpIHsKLQkJc3VwZXIocGFyZW50LCBTV1QuTk9ORSk7Ci0JCXRoaXMuZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uID0gZXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb25maWd1cmF0aW9uOwotCQljcmVhdGVDb250ZW50KHRoaXMpOwotCX0KKyAgICBCcm93c2VyIGJyb3dzZXI7CisgICAgZmluYWwgU3RyaW5nIHRpdGxlOworICAgIGZpbmFsIFN0cmluZyB1cmw7CiAKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250ZW50KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJd2lzaGxpc3QgPSBXaXNobGlzdC5nZXREZWZhdWx0KCk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMSwgZmFsc2UpOwotCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTsKLQkJbGF5b3V0Lmhvcml6b250YWxTcGFjaW5nID0gMTsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDE7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDE7Ci0JCXBhcmVudC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJY3JlYXRlSGlkZGVuQnJvd3NlcihwYXJlbnQpOwotCQljcmVhdGVOb3RpZmljYXRpb24ocGFyZW50KTsKLQkJQ29tcG9zaXRlIGRvd25sb2FkQXJlYSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisgICAgcHJpdmF0ZSBMaW5rSW5mbyggU3RyaW5nIHRpdGxlLCBTdHJpbmcgdXJsICkgeworICAgICAgc3VwZXIoKTsKKyAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKKyAgICAgIHRoaXMudXJsID0gdXJsOworICAgIH0KIAotCQlkb3dubG9hZEFyZWEuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDEsIGZhbHNlKSk7Ci0JCWNyZWF0ZURvd25sb2FkQnV0dG9uKGRvd25sb2FkQXJlYSk7Ci0JCWNyZWF0ZVdlYnN0YXJ0QnV0dG9uKGRvd25sb2FkQXJlYSk7Ci0JCWNyZWF0ZVNwYWNpbmcocGFyZW50KTsKLQkJY3JlYXRlRXh0ZXJuYWxTZXJ2aWNlUHJvdmlkZXJDb21wb3NpdGUocGFyZW50KTsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKKyAgICAgIHJldHVybiB0aXRsZTsKKyAgICB9CiAKLQlwcml2YXRlIHZvaWQgY3JlYXRlU3BhY2luZyhDb21wb3NpdGUgcGFyZW50KSB7Ci0JCW5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKTsKKyAgICBwdWJsaWMgU3RyaW5nIGdldFVybCgpIHsKKyAgICAgIHJldHVybiB1cmw7CisgICAgfQogCi0JfQorICAgIHB1YmxpYyBCcm93c2VyIGdldEJyb3dzZXIoKSB7CisgICAgICByZXR1cm4gYnJvd3NlcjsKKyAgICB9CiAKLQlwcml2YXRlIHZvaWQgY3JlYXRlSGlkZGVuQnJvd3NlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7Ci0JCWJyb3dzZXIgPSBuZXcgQnJvd3NlcihwYXJlbnQsIFNXVC5OT05FKTsKLQkJYnJvd3Nlci5zZXRTaXplKDEsIDEpOwotCQlicm93c2VyLnNldFZpc2libGUoZmFsc2UpOwotCQkvLyBkb24ndCBzaG93Ci0JCWJyb3dzZXIuc2V0TGF5b3V0RGF0YShHcmlkRGF0YUZhY3RvcnkuZmlsbERlZmF1bHRzKCkuZXhjbHVkZSh0cnVlKQotCQkJCS5jcmVhdGUoKSk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHNldEJyb3dzZXIoIEJyb3dzZXIgYnJvd3NlciApIHsKKyAgICAgIHRoaXMuYnJvd3NlciA9IGJyb3dzZXI7CisgICAgfQorICB9CisgIHByaXZhdGUgTGlzdDxMaW5rSW5mbz4gbGlua3MgPSBuZXcgQXJyYXlMaXN0PExpbmtJbmZvPigpOworICBzdGF0aWMgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoIFdpemFyZERvd25sb2FkU2NyZWVuLmNsYXNzICk7CisgIHByaXZhdGUgQnJvd3NlciBicm93c2VyOworICBwcml2YXRlIFdpc2hsaXN0IHdpc2hsaXN0OworICBwcml2YXRlIEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbiBleHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb247CisgIHByaXZhdGUgTGFiZWwgbm90aWZpY2F0aW9uTGFiZWw7CisgIHByaXZhdGUgU3RyaW5nIG5vSXRlbXNUZXh0OworICBwcml2YXRlIFN0cmluZyBnb3RJdGVtc1RleHQ7CisgIHByaXZhdGUgQnJvd3NlciBkb3dubG9hZEJ1dHRvbkJyb3dzZXI7CisgIHByaXZhdGUgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwogCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZUV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJZmluYWwgU2Nyb2xsZWRDb21wb3NpdGUgc2Nyb2xsZWRDb21wb3NpdGUgPSBuZXcgU2Nyb2xsZWRDb21wb3NpdGUoCi0JCQkJcGFyZW50LCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOwotCQlzY3JvbGxlZENvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKS5ncmFiKAotCQkJCXRydWUsIHRydWUpLmluZGVudCgyMCwgNDApLmNyZWF0ZSgpKTsKLQkJc2Nyb2xsZWRDb21wb3NpdGUuc2V0RXhwYW5kVmVydGljYWwodHJ1ZSk7Ci0JCXNjcm9sbGVkQ29tcG9zaXRlLnNldEV4cGFuZEhvcml6b250YWwodHJ1ZSk7Ci0JCWZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNjcm9sbGVkQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0JCXNjcm9sbGVkQ29tcG9zaXRlCi0JCQkJLmFkZENvbnRyb2xMaXN0ZW5lcihuZXcgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcigpIHsKKyAgcHVibGljIFdpemFyZERvd25sb2FkU2NyZWVuKCBmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbiBleHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24gKQorICB7CisgICAgc3VwZXIoIHBhcmVudCwgU1dULk5PTkUgKTsKKyAgICB0aGlzLmV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbiA9IGV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbjsKKyAgICBjb25maWd1cmF0aW9uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRDb25maWd1cmF0aW9uKCk7CisgICAgY3JlYXRlQ29udGVudCggdGhpcyApOworICB9CiAKLQkJCQkJQE92ZXJyaWRlCi0JCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBlKSB7Ci0JCQkJCQlzdXBlci5jb250cm9sUmVzaXplZChlKTsKLQkJCQkJCXNjcm9sbGVkQ29tcG9zaXRlLnNldE1pblNpemUoY29tcG9zaXRlLmNvbXB1dGVTaXplKAotCQkJCQkJCQlTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKLQkJCQkJfQotCQkJCX0pOworICBwdWJsaWMgdm9pZCBjcmVhdGVDb250ZW50KCBmaW5hbCBDb21wb3NpdGUgcGFyZW50ICkgeworICAgIHdpc2hsaXN0ID0gV2lzaGxpc3QuZ2V0RGVmYXVsdCgpOworICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoIDEsIGZhbHNlICk7CisgICAgbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDE7CisgICAgbGF5b3V0Lmhvcml6b250YWxTcGFjaW5nID0gMTsKKyAgICBsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMTsKKyAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAxOworICAgIHBhcmVudC5zZXRMYXlvdXQoIGxheW91dCApOworICAgIGNyZWF0ZUhpZGRlbkJyb3dzZXIoIHBhcmVudCApOworICAgIGNyZWF0ZU5vdGlmaWNhdGlvbiggcGFyZW50ICk7CisgICAgQ29tcG9zaXRlIGRvd25sb2FkQXJlYSA9IG5ldyBDb21wb3NpdGUoIHBhcmVudCwgU1dULk5PTkUgKTsKKyAgICBHcmlkTGF5b3V0IGxheW91dDIgPSBuZXcgR3JpZExheW91dCggMiwgZmFsc2UgKTsKKyAgICBsYXlvdXQyLmhvcml6b250YWxTcGFjaW5nID0gMDsKKyAgICBsYXlvdXQyLnZlcnRpY2FsU3BhY2luZyA9IDA7CisgICAgZG93bmxvYWRBcmVhLnNldExheW91dCggbGF5b3V0MiApOworICAgIGNyZWF0ZU9zU2VsZWN0aW9uKCBkb3dubG9hZEFyZWEgKTsKKyAgICBjcmVhdGVEb3dubG9hZEJ1dHRvbiggZG93bmxvYWRBcmVhICk7CisgICAgY3JlYXRlV2Vic3RhcnRCdXR0b24oIGRvd25sb2FkQXJlYSApOworICAgIGNyZWF0ZVNwYWNpbmcoIHBhcmVudCApOworICAgIGNyZWF0ZUV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29tcG9zaXRlKCBwYXJlbnQgKTsKKyAgfQogCi0JCXNjcm9sbGVkQ29tcG9zaXRlLnNldENvbnRlbnQoY29tcG9zaXRlKTsKLQkJY29tcG9zaXRlLnNldExheW91dChuZXcgR3JpZExheW91dCgyLCBmYWxzZSkpOwotCQlMYWJlbCB0aXRsZSA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OT05FKTsKLQkJdGl0bGUuc2V0VGV4dCgiQWRkIGFkZGl0aW9uYWwgc29mdHdhcmUgdG8geW91ciBjdXJyZW50IHNlbGVjdGlvbiIpOwotCQl0aXRsZS5zZXRGb250KEZvbnRzLlRJVExFLmdldCgpKTsKLQkJdGl0bGUuc2V0Rm9yZWdyb3VuZChDb2xvcnMuRUNMSVBTRV9CTFVFLmdldCgpKTsKLQkJdGl0bGUuc2V0TGF5b3V0RGF0YShHcmlkRGF0YUZhY3RvcnkuZmlsbERlZmF1bHRzKCkuc3BhbigyLCAxKS5ncmFiKAotCQkJCXRydWUsIGZhbHNlKS5jcmVhdGUoKSk7Ci0JCUxhYmVsIHNlcGFyYXRvciA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCk7Ci0JCXNlcGFyYXRvci5zZXRMYXlvdXREYXRhKEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKS5zcGFuKDIsIDEpCi0JCQkJLm1pblNpemUoMTAsIDEwKS5jcmVhdGUoKSk7Ci0JCXNlcGFyYXRvci5zZXRGb3JlZ3JvdW5kKENvbG9ycy5FQ0xJUFNFX0JMVUUuZ2V0KCkpOwotCQlmb3IgKGZpbmFsIEV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbi5FbnRyeSBlbnRyeSA6IGV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbgotCQkJCS5nZXRFbnRyaWVzKCkpIHsKLQkJCUxhYmVsIGljb24gPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0JCQlpY29uLnNldEltYWdlKEltYWdlcy5sb2FkKGVudHJ5LmdldEljb24oKSkpOwotCQkJaWNvbi5zZXRMYXlvdXREYXRhKEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKS5zcGFuKDEsIDIpCi0JCQkJCS5jcmVhdGUoKSk7Ci0JCQlMYWJlbCBsaW5rID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQkJbGluay5zZXRGb250KEZvbnRzLkgyLmdldCgpKTsKLQkJCXRpdGxlLnNldEZvcmVncm91bmQoQ29sb3JzLkVDTElQU0VfVklPTEVULmdldCgpKTsKLQkJCWxpbmsuc2V0VGV4dChlbnRyeS5nZXRMYWJlbCgpKTsKLQkJCUxpbmtVdGlsLnNldEhhbmRDdXJzb3IobGluayk7Ci0JCQlMaW5rVXRpbC5zZXRIYW5kQ3Vyc29yKGljb24pOwotCQkJbGluay5hZGRNb3VzZUxpc3RlbmVyKG5ldyBNb3VzZUFkYXB0ZXIoKSB7CisgIHByaXZhdGUgdm9pZCBjcmVhdGVPc1NlbGVjdGlvbiggQ29tcG9zaXRlIGRvd25sb2FkQXJlYSApIHsKKyAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSggZG93bmxvYWRBcmVhLCBTV1QuTk9ORSApOworICAgIEdyaWREYXRhRmFjdG9yeS5zd3REZWZhdWx0cygpLnNwYW4oIDIsIDEgKS5hcHBseVRvKCBjb21wb3NpdGUgKTsKKyAgICBjb21wb3NpdGUuc2V0TGF5b3V0KCBuZXcgR3JpZExheW91dCggMiwgZmFsc2UgKSApOworICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKCBjb21wb3NpdGUsIFNXVC5OT05FICk7CisgICAgbGFiZWwuc2V0VGV4dCggIk9wZXJhdGluZyBTeXN0ZW06ICAgIiApOworICAgIGZpbmFsIENvbWJvIGNvbWJvID0gbmV3IENvbWJvKCBjb21wb3NpdGUsIFNXVC5OT05FICk7CisgICAgZm9yKCBQbGF0Zm9ybSBwbGF0Zm9ybSA6IFBsYXRmb3JtLnZhbHVlcygpICkgeworICAgICAgY29tYm8uYWRkKCBwbGF0Zm9ybS5nZXRMYWJlbCgpLCBwbGF0Zm9ybS5vcmRpbmFsKCkgKTsKKyAgICB9CisgICAgY29tYm8uc2VsZWN0KCB3aXNobGlzdC5nZXRQbGF0Zm9ybSgpLm9yZGluYWwoKSApOworICAgIGNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKIAotCQkJCUBPdmVycmlkZQotCQkJCXB1YmxpYyB2b2lkIG1vdXNlRG93bihNb3VzZUV2ZW50IGUpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCWJvb2xlYW4gc2hvdWxkT3BlbiA9IHRydWU7Ci0JCQkJCQlpZiAod2lzaGxpc3QuaXNFbXB0eSgpKSB7Ci0JCQkJCQkJTWVzc2FnZURpYWxvZyBtZXNzYWdlRGlhbG9nID0gbmV3IE1lc3NhZ2VEaWFsb2coCi0JCQkJCQkJCQlnZXRTaGVsbCgpLAotCQkJCQkJCQkJIkV4dGVybmFsIFNlcnZpY2UgUHJvdmlkZXIiLAotCQkJCQkJCQkJbnVsbCwKLQkJCQkJCQkJCSJObyBjb21wb25lbnRzIGhhdmUgYmVlbiBzZWxlY3RlZC4gRG8geW91IHdpc2ggdG8gY29udGludWUgYW55d2F5PyIsCi0JCQkJCQkJCQkwLCBuZXcgU3RyaW5nW10geyAiWWVzIiwgIk5vIiB9LCAxKTsKLQkJCQkJCQlpbnQgcmVzdWx0ID0gbWVzc2FnZURpYWxvZy5vcGVuKCk7Ci0JCQkJCQkJaWYgKHJlc3VsdCA9PSAxKSB7Ci0JCQkJCQkJCXNob3VsZE9wZW4gPSBmYWxzZTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoc2hvdWxkT3BlbikgewotCQkJCQkJCW9wZW5VUkwoZW50cnkuZ2V0VXJsVGVtcGxhdGUoKSwgdHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0gY2F0Y2ggKFRocm93YWJsZSBlMikgewotCQkJCQkJZTIucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCUxhYmVsIGRlc2NyaXB0aW9uID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQkJZGVzY3JpcHRpb24uc2V0Rm9udChGb250cy5URVhULmdldCgpKTsKLQkJCWRlc2NyaXB0aW9uLnNldFRleHQoZW50cnkuZ2V0RGVzY3JpcHRpb24oKSk7Ci0JCX0KLQkJY29tcG9zaXRlLnBhY2soKTsKLQl9CisgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZSApIHsKKyAgICAgICAgd2lzaGxpc3Quc2V0UGxhdGZvcm0oIFBsYXRmb3JtLnZhbHVlcygpWyBjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpIF0gKTsKKyAgICAgIH0KKyAgICB9ICk7CisgIH0KIAotCXByaXZhdGUgdm9pZCBjcmVhdGVOb3RpZmljYXRpb24oZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgewotCQlub3RpZmljYXRpb25MYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5XUkFQKTsKLQkJbm9JdGVtc1RleHQgPSAiSWYgdGhlIGRvd25sb2FkIGJ1dHRvbiBpcyBkaXNhYmxlZCwgcGxlYXNlIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2VzIGFuZCBzZWxlY3QgeW91ciBkZXNpcmVkIGl0ZW1zLCB0aGVuIHJldHVybiB0byB0aGlzIHBhZ2UgdG8gY29tcGxldGUgeW91ciBpbnN0YWxsYXRpb24uIjsKLQkJZ290SXRlbXNUZXh0ID0gIllvdXIgY29uZmlndXJhdGlvbiBpcyBub3cgcmVhZHkgdG8gYmUgZG93bmxvYWRlZCI7Ci0JCW5vdGlmaWNhdGlvbkxhYmVsLnNldFRleHQod2lzaGxpc3QuaXNFbXB0eSgpID8gbm9JdGVtc1RleHQKLQkJCQk6IGdvdEl0ZW1zVGV4dCk7Ci0JCW5vdGlmaWNhdGlvbkxhYmVsLnNldEZvbnQoRm9udHMuVEVYVC5nZXQoKSk7Ci0JCW5vdGlmaWNhdGlvbkxhYmVsLnNldExheW91dERhdGEoR3JpZERhdGFGYWN0b3J5LnN3dERlZmF1bHRzKCkuZ3JhYigKLQkJCQl0cnVlLCBmYWxzZSkuaGludCg2MDAsIFNXVC5ERUZBVUxUKS5jcmVhdGUoKSk7Ci0JCXdpc2hsaXN0LmFkZExpc3RlbmVyKG5ldyBJV2lzaGxpc3RMaXN0ZW5lcigpIHsKKyAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVNwYWNpbmcoIENvbXBvc2l0ZSBwYXJlbnQgKSB7CisgICAgbmV3IExhYmVsKCBwYXJlbnQsIFNXVC5OT05FICk7CisgIH0KIAotCQkJcHVibGljIHZvaWQgd2lzaGxpc3RDaGFuZ2VkKCkgewotCQkJCXVwZGF0ZU5vdGlmaWNhdGlvbigpOwotCQkJfQotCQl9KTsKLQl9CisgIHByaXZhdGUgdm9pZCBjcmVhdGVIaWRkZW5Ccm93c2VyKCBmaW5hbCBDb21wb3NpdGUgcGFyZW50ICkgeworICAgIGJyb3dzZXIgPSBuZXcgQnJvd3NlciggcGFyZW50LCBTV1QuTk9ORSApOworICAgIGJyb3dzZXIuc2V0U2l6ZSggMSwgMSApOworICAgIGJyb3dzZXIuc2V0VmlzaWJsZSggZmFsc2UgKTsKKyAgICAvLyBkb24ndCBzaG93CisgICAgYnJvd3Nlci5zZXRMYXlvdXREYXRhKCBHcmlkRGF0YUZhY3RvcnkuZmlsbERlZmF1bHRzKCkKKyAgICAgIC5leGNsdWRlKCB0cnVlICkKKyAgICAgIC5jcmVhdGUoKSApOworICB9CiAKLQlwcml2YXRlIHZvaWQgY3JlYXRlRG93bmxvYWRCdXR0b24oZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgewotCQlmaW5hbCBCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5OT05FKTsKLQkJYnV0dG9uLnNldFRleHQoIiAgRG93bmxvYWQgRWNsaXBzZSBQMiBJbnN0YWxsZXIiKTsKLQkJYnV0dG9uLnNldEltYWdlKEltYWdlcy5ET1dOTE9BRC5nZXQoKSk7Ci0JCWJ1dHRvbi5zZXRGb250KEZvbnRzLkJVVFRPTi5nZXQoKSk7Ci0JCWJ1dHRvbi5zZXRMYXlvdXREYXRhKEdyaWREYXRhRmFjdG9yeS5zd3REZWZhdWx0cygpLmFsaWduKFNXVC5GSUxMLAotCQkJCVNXVC5DRU5URVIpLmNyZWF0ZSgpKTsKKyAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29tcG9zaXRlKCBmaW5hbCBDb21wb3NpdGUgcGFyZW50ICkKKyAgeworICAgIGZpbmFsIFNjcm9sbGVkQ29tcG9zaXRlIHNjcm9sbGVkQ29tcG9zaXRlID0gbmV3IFNjcm9sbGVkQ29tcG9zaXRlKCBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXVC5IX1NDUk9MTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTV1QuVl9TQ1JPTEwgKTsKKyAgICBzY3JvbGxlZENvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKCBHcmlkRGF0YUZhY3RvcnkuZmlsbERlZmF1bHRzKCkKKyAgICAgIC5ncmFiKCB0cnVlLCB0cnVlICkKKyAgICAgIC5pbmRlbnQoIDAsIDIwICkKKyAgICAgIC5jcmVhdGUoKSApOworICAgIHNjcm9sbGVkQ29tcG9zaXRlLnNldEV4cGFuZFZlcnRpY2FsKCB0cnVlICk7CisgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0RXhwYW5kSG9yaXpvbnRhbCggdHJ1ZSApOworICAgIGZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKCBzY3JvbGxlZENvbXBvc2l0ZSwgU1dULk5PTkUgKTsKKyAgICBzY3JvbGxlZENvbXBvc2l0ZS5hZGRDb250cm9sTGlzdGVuZXIoIG5ldyBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyKCkKKyAgICB7CiAKLQkJYnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZCggQ29udHJvbEV2ZW50IGUgKSB7CisgICAgICAgIHN1cGVyLmNvbnRyb2xSZXNpemVkKCBlICk7CisgICAgICAgIHNjcm9sbGVkQ29tcG9zaXRlLnNldE1pblNpemUoIGNvbXBvc2l0ZS5jb21wdXRlU2l6ZSggU1dULkRFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULkRFRkFVTFQgKSApOworICAgICAgfQorICAgIH0gKTsKKyAgICBzY3JvbGxlZENvbXBvc2l0ZS5zZXRDb250ZW50KCBjb21wb3NpdGUgKTsKKyAgICBjb21wb3NpdGUuc2V0TGF5b3V0KCBuZXcgR3JpZExheW91dCggMiwgZmFsc2UgKSApOworICAgIExhYmVsIHRpdGxlID0gbmV3IExhYmVsKCBjb21wb3NpdGUsIFNXVC5OT05FICk7CisgICAgdGl0bGUuc2V0VGV4dCggIkFkZCBhZGRpdGlvbmFsIHNvZnR3YXJlIHRvIHlvdXIgY3VycmVudCBzZWxlY3Rpb24iICk7CisgICAgdGl0bGUuc2V0Rm9udCggRm9udHMuVElUTEUuZ2V0KCkgKTsKKyAgICB0aXRsZS5zZXRGb3JlZ3JvdW5kKCBDb2xvcnMuRUNMSVBTRV9CTFVFLmdldCgpICk7CisgICAgdGl0bGUuc2V0TGF5b3V0RGF0YSggR3JpZERhdGFGYWN0b3J5LmZpbGxEZWZhdWx0cygpCisgICAgICAuc3BhbiggMiwgMSApCisgICAgICAuZ3JhYiggdHJ1ZSwgZmFsc2UgKQorICAgICAgLmNyZWF0ZSgpICk7CisgICAgTGFiZWwgc2VwYXJhdG9yID0gbmV3IExhYmVsKCBjb21wb3NpdGUsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCApOworICAgIHNlcGFyYXRvci5zZXRMYXlvdXREYXRhKCBHcmlkRGF0YUZhY3RvcnkuZmlsbERlZmF1bHRzKCkKKyAgICAgIC5zcGFuKCAyLCAxICkKKyAgICAgIC5taW5TaXplKCAxMCwgMTAgKQorICAgICAgLmNyZWF0ZSgpICk7CisgICAgc2VwYXJhdG9yLnNldEZvcmVncm91bmQoIENvbG9ycy5FQ0xJUFNFX0JMVUUuZ2V0KCkgKTsKKyAgICBMaXN0PEVudHJ5PiBlbnRyaWVzID0gbmV3IEFycmF5TGlzdDxFbnRyeT4oIGV4dGVybmFsU2VydmljZVByb3ZpZGVyQ29uZmlndXJhdGlvbi5nZXRFbnRyaWVzKCkgKTsKKyAgICBDb2xsZWN0aW9ucy5zaHVmZmxlKCBlbnRyaWVzICk7CisgICAgZm9yKCBmaW5hbCBFeHRlcm5hbFNlcnZpY2VQcm92aWRlckNvbmZpZ3VyYXRpb24uRW50cnkgZW50cnkgOiBlbnRyaWVzICkgeworICAgICAgTGFiZWwgaWNvbiA9IG5ldyBMYWJlbCggY29tcG9zaXRlLCBTV1QuTk9ORSApOworICAgICAgaWNvbi5zZXRJbWFnZSggSW1hZ2VzLmxvYWQoIGVudHJ5LmdldEljb24oKSApICk7CisgICAgICBpY29uLnNldExheW91dERhdGEoIEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKQorICAgICAgICAuc3BhbiggMSwgMiApCisgICAgICAgIC5pbmRlbnQoIDEwLCAwICkKKyAgICAgICAgLmNyZWF0ZSgpICk7CisgICAgICAvKgorICAgICAgICogTGFiZWwgbGluayA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OT05FKTsKKyAgICAgICAqIGxpbmsuc2V0Rm9udChGb250cy5IMi5nZXQoKSk7IGxpbmsuc2V0VGV4dChlbnRyeS5nZXRMYWJlbCgpKTsKKyAgICAgICAqIExpbmtVdGlsLnNldEhhbmRDdXJzb3IobGluayk7CisgICAgICAgKi8KKyAgICAgIEJyb3dzZXIgbGluayA9IGNyZWF0ZUxpbmsoIGNvbXBvc2l0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaW5rSW5mbyggZW50cnkuZ2V0TGFiZWwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZ2V0VXJsVGVtcGxhdGUoKSApICk7CisgICAgICBHcmlkRGF0YUZhY3Rvcnkuc3d0RGVmYXVsdHMoKS5oaW50KCA2MDAsIDQwICkuYXBwbHlUbyggbGluayApOworICAgICAgY29tcG9zaXRlLnNldEJhY2tncm91bmRNb2RlKCBTV1QuSU5IRVJJVF9ERUZBVUxUICk7CisgICAgICAvLyBMaW5rVXRpbC5zZXRIYW5kQ3Vyc29yKGljb24pOworICAgICAgbGluay5hZGRNb3VzZUxpc3RlbmVyKCBuZXcgTW91c2VBZGFwdGVyKCkgewogCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IHNlKSB7Ci0JCQkJQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQotCQkJCQkJLmdldENvbmZpZ3VyYXRpb24oKTsKLQkJCQlvcGVuVVJMKGNvbmZpZ3VyYXRpb24uZ2V0SW5zdGFsbGVyVVJMKCksIGZhbHNlKTsKLQkJCX0KLQkJfSk7Ci0JCWFkZEJ1dHRvbkVuYWJsZXIoYnV0dG9uKTsKLQl9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBtb3VzZURvd24oIE1vdXNlRXZlbnQgZSApIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgYm9vbGVhbiBzaG91bGRPcGVuID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmKCB3aXNobGlzdC5pc0VtcHR5KCkgKSB7CisgICAgICAgICAgICAgIE1lc3NhZ2VEaWFsb2cgbWVzc2FnZURpYWxvZyA9IG5ldyBNZXNzYWdlRGlhbG9nKCBnZXRTaGVsbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4dGVybmFsIFNlcnZpY2UgUHJvdmlkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBjb21wb25lbnRzIGhhdmUgYmVlbiBzZWxlY3RlZC4gRG8geW91IHdpc2ggdG8gY29udGludWUgYW55d2F5PyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWVzIiwgIk5vIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgKTsKKyAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IG1lc3NhZ2VEaWFsb2cub3BlbigpOworICAgICAgICAgICAgICBpZiggcmVzdWx0ID09IDEgKSB7CisgICAgICAgICAgICAgICAgc2hvdWxkT3BlbiA9IGZhbHNlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiggc2hvdWxkT3BlbiApIHsKKyAgICAgICAgICAgICAgb3BlblVSTCggZW50cnkuZ2V0VXJsVGVtcGxhdGUoKSwgdHJ1ZSApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSBlMiApIHsKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvciggIkVycm9yIG9wZW5pbmcgbGluayIsIGUyICk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9ICk7CisgICAgICBMYWJlbCBkZXNjcmlwdGlvbiA9IG5ldyBMYWJlbCggY29tcG9zaXRlLCBTV1QuTk9ORSApOworICAgICAgZGVzY3JpcHRpb24uc2V0Rm9udCggRm9udHMuVEVYVC5nZXQoKSApOworICAgICAgZGVzY3JpcHRpb24uc2V0VGV4dCggZW50cnkuZ2V0RGVzY3JpcHRpb24oKSApOworICAgIH0KKyAgICBjb21wb3NpdGUucGFjaygpOworICB9CiAKLQlwcml2YXRlIHZvaWQgYWRkQnV0dG9uRW5hYmxlcihmaW5hbCBCdXR0b24gYnV0dG9uKSB7Ci0JCWJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLQkJd2lzaGxpc3QuYWRkTGlzdGVuZXIobmV3IElXaXNobGlzdExpc3RlbmVyKCkgeworICBwcml2YXRlIHZvaWQgY3JlYXRlTm90aWZpY2F0aW9uKCBmaW5hbCBDb21wb3NpdGUgcGFyZW50ICkgeworICAgIG5vdGlmaWNhdGlvbkxhYmVsID0gbmV3IExhYmVsKCBwYXJlbnQsIFNXVC5XUkFQICk7CisgICAgbm9JdGVtc1RleHQgPSAiSWYgdGhlIGRvd25sb2FkIGJ1dHRvbiBpcyBkaXNhYmxlZCwgcGxlYXNlIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2VzIGFuZCBzZWxlY3QgeW91ciBkZXNpcmVkIGl0ZW1zLCB0aGVuIHJldHVybiB0byB0aGlzIHBhZ2UgdG8gY29tcGxldGUgeW91ciBpbnN0YWxsYXRpb24uIjsKKyAgICBnb3RJdGVtc1RleHQgPSAiWW91ciBjb25maWd1cmF0aW9uIGlzIG5vdyByZWFkeSB0byBiZSBkb3dubG9hZGVkIjsKKyAgICBub3RpZmljYXRpb25MYWJlbC5zZXRUZXh0KCB3aXNobGlzdC5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5vSXRlbXNUZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnb3RJdGVtc1RleHQgKTsKKyAgICBub3RpZmljYXRpb25MYWJlbC5zZXRGb250KCBGb250cy5URVhULmdldCgpICk7CisgICAgbm90aWZpY2F0aW9uTGFiZWwuc2V0TGF5b3V0RGF0YSggR3JpZERhdGFGYWN0b3J5LnN3dERlZmF1bHRzKCkKKyAgICAgIC5ncmFiKCB0cnVlLCBmYWxzZSApCisgICAgICAuY3JlYXRlKCkgKTsKKyAgICB3aXNobGlzdC5hZGRMaXN0ZW5lciggbmV3IElXaXNobGlzdExpc3RlbmVyKCkgewogCi0JCQlwdWJsaWMgdm9pZCB3aXNobGlzdENoYW5nZWQoKSB7Ci0JCQkJYnV0dG9uLnNldEVuYWJsZWQoIXdpc2hsaXN0LmlzRW1wdHkoKSk7Ci0JCQkJaWYod2lzaGxpc3QuaXNFbXB0eSgpKQotCQkJCXsKLQkJCQkJTGlua1V0aWwucmVzZXRDdXJzb3IoYnV0dG9uKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJTGlua1V0aWwuc2V0SGFuZEN1cnNvcihidXR0b24pOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JfQorICAgICAgcHVibGljIHZvaWQgd2lzaGxpc3RDaGFuZ2VkKCkgeworICAgICAgICB1cGRhdGVOb3RpZmljYXRpb24oKTsKKyAgICAgIH0KKyAgICB9ICk7CisgIH0KIAotCXByaXZhdGUgdm9pZCBjcmVhdGVXZWJzdGFydEJ1dHRvbihmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5PTkUpOwotCQlidXR0b24uc2V0VGV4dCgiICBTdGFydCBFY2xpcHNlIFAyIEluc3RhbGxlciIpOwotCQlidXR0b24uc2V0Rm9udChGb250cy5CVVRUT04uZ2V0KCkpOwotCQlidXR0b24uc2V0SW1hZ2UoSW1hZ2VzLldFQlNUQVJULmdldCgpKTsKLQkJYnV0dG9uLnNldExheW91dERhdGEoR3JpZERhdGFGYWN0b3J5LnN3dERlZmF1bHRzKCkuYWxpZ24oU1dULkZJTEwsCi0JCQkJU1dULkNFTlRFUikuY3JlYXRlKCkpOworICBwcml2YXRlIHZvaWQgY3JlYXRlRG93bmxvYWRCdXR0b24oIGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQgKSB7CisgICAgTGFiZWwgaWNvbiA9IG5ldyBMYWJlbCggcGFyZW50LCBTV1QuTk9ORSApOworICAgIGljb24uc2V0SW1hZ2UoIEltYWdlcy5ET1dOTE9BRC5nZXQoKSApOworICAgIFN0cmluZyB1cmwgPSBjb25maWd1cmF0aW9uLmdldEluc3RhbGxlclVSTCgpOworICAgIGRvd25sb2FkQnV0dG9uQnJvd3NlciA9IGNyZWF0ZUxpbmsoIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGlua0luZm8oICJEb3dubG9hZCBFY2xpcHNlIFAyIEluc3RhbGxlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKSApOworICAgIEdyaWREYXRhRmFjdG9yeS5zd3REZWZhdWx0cygpCisgICAgICAuaGludCggMzUwLCBTV1QuREVGQVVMVCApCisgICAgICAuaW5kZW50KCAwLCAxMCApCisgICAgICAuYXBwbHlUbyggZG93bmxvYWRCdXR0b25Ccm93c2VyICk7CisgICAgdXBkYXRlRG93bmxvYWRCdXR0b24oKTsKKyAgICBwYXJlbnQuc2V0QmFja2dyb3VuZE1vZGUoIFNXVC5JTkhFUklUX0RFRkFVTFQgKTsKKyAgICAvKgorICAgICAqIGZpbmFsIEJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5PTkUpOworICAgICAqIGJ1dHRvbi5zZXRUZXh0KCJEb3dubG9hZCBFY2xpcHNlIFAyIEluc3RhbGxlciIpOworICAgICAqIGJ1dHRvbi5zZXRJbWFnZShJbWFnZXMuRE9XTkxPQUQuZ2V0KCkpOworICAgICAqIGJ1dHRvbi5zZXRGb250KEZvbnRzLkJVVFRPTi5nZXQoKSk7CisgICAgICogYnV0dG9uLnNldExheW91dERhdGEoR3JpZERhdGFGYWN0b3J5LnN3dERlZmF1bHRzKCkuYWxpZ24oU1dULkZJTEwsCisgICAgICogU1dULkNFTlRFUikuY3JlYXRlKCkpOyBidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQorICAgICAqIHsKKyAgICAgKiBAT3ZlcnJpZGUgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgc2UpIHsKKyAgICAgKiBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpIC5nZXRDb25maWd1cmF0aW9uKCk7CisgICAgICogb3BlblVSTChjb25maWd1cmF0aW9uLmdldEluc3RhbGxlclVSTCgpLCBmYWxzZSk7IH0gfSk7CisgICAgICogYWRkQnV0dG9uRW5hYmxlcihidXR0b24pOworICAgICAqLworICB9CiAKLQkJLy8gYWRkQnV0dG9uRW5hYmxlcihidXR0b24pOwotCQlidXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5PTkUpOwotCQlsYWJlbAotCQkJCS5zZXRUZXh0KCJOb3RlOiBXZWJzdGFydCBzdXBwb3J0IGlzIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBkdWUgdG8gRWNsaXBzZSBCdWcgMjQwNTAwLiIpOwotCQlsYWJlbC5zZXRMYXlvdXREYXRhKEdyaWREYXRhRmFjdG9yeS5zd3REZWZhdWx0cygpLmFsaWduKFNXVC5GSUxMLAotCQkJCVNXVC5DRU5URVIpLmNyZWF0ZSgpKTsKLQkJYnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworICBwcml2YXRlIEJyb3dzZXIgY3JlYXRlTGluayggQ29tcG9zaXRlIHBhcmVudCwgTGlua0luZm8gbGlua0luZm8gKSB7CisgICAgQnJvd3NlciBicm93c2VyID0gbmV3IEJyb3dzZXIoIHBhcmVudCwgU1dULk5PTkUgKTsKKyAgICBsaW5rSW5mby5zZXRCcm93c2VyKCBicm93c2VyICk7CisgICAgbGlua3MuYWRkKCBsaW5rSW5mbyApOworICAgIGJyb3dzZXIuc2V0QmFja2dyb3VuZE1vZGUoIFNXVC5JTkhFUklUX0RFRkFVTFQgKTsKKyAgICB1cGRhdGVMaW5rKCBsaW5rSW5mbyApOworICAgIHJldHVybiBicm93c2VyOworICB9CiAKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgc2UpIHsKLQkJCQkvKgotCQkJCSAqIFN0cmluZ1tdIGlkcyA9IFdpc2hsaXN0LmdldERlZmF1bHQoKS5nZXRJbnN0YWxsZXJJRHMoKTsKLQkJCQkgKiBTdHJpbmcgZmlsZU5hbWUgPSBDdXN0b21KbmxwLmdldEZpbGVOYW1lKGlkcyk7IHRyeSB7IC8KLQkJCQkgKiBDdXN0b21KbmxwLmV4ZWN1dGUoImh0dHA6Ly9sb2NhbGhvc3Q6ODAwOC9kb3dubG9hZCIsCi0JCQkJICogU3RyaW5nVXRpbC50b0NvbW1hTGlzdChpZHMsIGZhbHNlKSwgZmlsZU5hbWUpOwotCQkJCSAqIGJyb3dzZXIuc2V0VGV4dCgiPGh0bWw+PC9odG1sPiIpOwotCQkJCSAqIGJyb3dzZXIuc2V0VXJsKCIuLi9kb3dubG9hZC8iICsgZmlsZU5hbWUpOwotCQkJCSAqIAotCQkJCSAqIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4YykgeyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgbG9nCi0JCQkJICogYW55d2F5IGV4Yy5wcmludFN0YWNrVHJhY2UoKTsgfQotCQkJCSAqLwotCQkJfQotCQl9KTsKLQl9CisgIHByaXZhdGUgdm9pZCB1cGRhdGVMaW5rKCBMaW5rSW5mbyBsaW5rSW5mbyApIHsKKyAgICBTdHJpbmcgY21kID0gd2lzaGxpc3QuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gImFsZXJ0KFwiTm8gY29tcG9uZW50cyBoYXZlIGJlZW4gc2VsZWN0ZWQuXFxuXFxuUGxlYXNlIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2VzIGFuZCBzZWxlY3QgeW91ciBkZXNpcmVkIGl0ZW1zLCB0aGVuIHJldHVybiB0byB0aGlzIHBhZ2UgdG8gY29tcGxldGUgeW91ciBpbnN0YWxsYXRpb24uXCIpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJkb2N1bWVudC5teWZvcm0uc3VibWl0KCkiOworICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgIFN0cmluZyB1cmwgPSBsaW5rSW5mby5nZXRVcmwoKTsKKyAgICBTdHJpbmcgaXVzID0gY29uZmlndXJhdGlvbi5nZXRCYXNlSVVzKCkgKyAiLCIgKyB3aXNobGlzdC5nZXRTZWxlY3RlZEl1SWRzKCk7CisgICAgc2IuYXBwZW5kKCAiPGJvZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Oyc+PGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MjAlOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBmb250LWZhbWlseTpzYW5zLXNlcmlmOycgaHJlZj0namF2YXNjcmlwdDoiCisgICAgICAgICAgICAgICArIGNtZAorICAgICAgICAgICAgICAgKyAiJz4iCisgICAgICAgICAgICAgICArIGxpbmtJbmZvLmdldFRpdGxlKCkKKyAgICAgICAgICAgICAgICsgIjwvYT48Zm9ybSBuYW1lPSdteWZvcm0nIG1ldGhvZD0ncG9zdCcgdGFyZ2V0PSdfdG9wJyBhY3Rpb249JyIKKyAgICAgICAgICAgICAgICsgdXJsCisgICAgICAgICAgICAgICArICInICIKKyAgICAgICAgICAgICAgICsgIiBzdHlsZT0nZGlzcGxheTogbm9uZTsnPiIgKTsKKyAgICBhZGRQYXJhbWV0ZXIoIHNiLCAib3MiLCB3aXNobGlzdC5nZXRQbGF0Zm9ybSgpLmdldElkKCkgKTsKKyAgICBhZGRQYXJhbWV0ZXIoIHNiLCBDb25maWd1cmF0aW9uLlAyX1JPT1RTLCBpdXMgKTsKKyAgICBhZGRQYXJhbWV0ZXIoIHNiLAorICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbi5QMl9NRVRBREFUQV9SRVBPU0lUT1JJRVMsCisgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLmdldE1ldGFkYXRhUmVwb3NpdG9yaWVzKCkgKTsKKyAgICBhZGRQYXJhbWV0ZXIoIHNiLAorICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbi5QMl9BUlRJRkFDVF9SRVBPU0lUT1JJRVMsCisgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLmdldEFydGlmYWN0UmVwb3NpdG9yaWVzKCkgKTsKKyAgICAvLyBzYi5hcHBlbmQoCisgICAgLy8gIjxidXR0b24gdHlwZT0nc3VibWl0JyB2YWx1ZT0nRG93bmxvYWQgRWNsaXBzZSBQMiBJbnN0YWxsZXInPjxpbWcgc3JjPScnPjxiPkRvd25sb2FkIEVjbGlwc2UgUDIgSW5zdGFsbGVyPC9iPjwvQnV0dG9uPiIKKyAgICAvLyApOworICAgIHNiLmFwcGVuZCggIjwvZm9ybT4gPC9ib2R5PiIgKTsKKyAgICBsaW5rSW5mby5nZXRCcm93c2VyKCkuc2V0VGV4dCggc2IudG9TdHJpbmcoKSApOworICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkgewotCQlyZXR1cm4gIkZpbmlzaCI7Ci0JfQorICBwcml2YXRlIHZvaWQgdXBkYXRlRG93bmxvYWRCdXR0b24oKSB7CisgICAgLyoKKyAgICAgKiBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0KKyAgICAgKiBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldENvbmZpZ3VyYXRpb24oKTsgU3RyaW5nIHVybCA9CisgICAgICogY29uZmlndXJhdGlvbi5nZXRJbnN0YWxsZXJVUkwoKTsgU3RyaW5nIGl1cyA9CisgICAgICogY29uZmlndXJhdGlvbi5nZXRCYXNlSVVzKCkrIiwiKyB3aXNobGlzdC5nZXRTZWxlY3RlZEl1SWRzKCk7c2IuYXBwZW5kKAorICAgICAqICI8Ym9keSBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsnPjxmb3JtIG5hbWU9J215Zm9ybScgbWV0aG9kPSdwb3N0JyBhY3Rpb249JyIKKyAgICAgKiArIHVybCArICInICIgKyAiPiIpOyBhZGRQYXJhbWV0ZXIoc2IsICJvcyIsCisgICAgICogd2lzaGxpc3QuZ2V0UGxhdGZvcm0oKS5nZXRJZCgpKTsgYWRkUGFyYW1ldGVyKHNiLCBDb25maWd1cmF0aW9uLlAyX1JPT1RTLAorICAgICAqIGl1cyk7IGFkZFBhcmFtZXRlcihzYiwgQ29uZmlndXJhdGlvbi5QMl9NRVRBREFUQV9SRVBPU0lUT1JJRVMsCisgICAgICogY29uZmlndXJhdGlvbiAuZ2V0TWV0YWRhdGFSZXBvc2l0b3JpZXMoKSk7IGFkZFBhcmFtZXRlcihzYiwKKyAgICAgKiBDb25maWd1cmF0aW9uLlAyX0FSVElGQUNUX1JFUE9TSVRPUklFUywgY29uZmlndXJhdGlvbgorICAgICAqIC5nZXRBcnRpZmFjdFJlcG9zaXRvcmllcygpKTtzYi5hcHBlbmQoCisgICAgICogIjxidXR0b24gdHlwZT0nc3VibWl0JyB2YWx1ZT0nRG93bmxvYWQgRWNsaXBzZSBQMiBJbnN0YWxsZXInPjxpbWcgc3JjPScnPjxiPkRvd25sb2FkIEVjbGlwc2UgUDIgSW5zdGFsbGVyPC9iPjwvQnV0dG9uPiIKKyAgICAgKiApO3NiLmFwcGVuZCgKKyAgICAgKiAiPC9mb3JtPjxhIGhyZWY9J2phdmFzY3JpcHQ6ZG9jdW1lbnQubXlmb3JtLnN1Ym1pdCgpJz5GcmVlIFN1cHBvcnQ8L2E+IDwvYm9keT4iCisgICAgICogKTsgZG93bmxvYWRCdXR0b25Ccm93c2VyLnNldFRleHQoc2IudG9TdHJpbmcoKSk7CisgICAgICovCisgIH0KIAotCXB1YmxpYyBDb250cm9sIGdldENvbnRyb2woKSB7Ci0JCXJldHVybiB0aGlzOwotCX0KKyAgLyoKKyAgICogcHJpdmF0ZSB2b2lkIGFkZEJ1dHRvbkVuYWJsZXIoZmluYWwgQnV0dG9uIGJ1dHRvbikgeworICAgKiBidXR0b24uc2V0RW5hYmxlZChmYWxzZSk7IHdpc2hsaXN0LmFkZExpc3RlbmVyKG5ldyBJV2lzaGxpc3RMaXN0ZW5lcigpIHsKKyAgICogcHVibGljIHZvaWQgd2lzaGxpc3RDaGFuZ2VkKCkgeyBidXR0b24uc2V0RW5hYmxlZCghd2lzaGxpc3QuaXNFbXB0eSgpKTsKKyAgICogaWYod2lzaGxpc3QuaXNFbXB0eSgpKSB7IExpbmtVdGlsLnJlc2V0Q3Vyc29yKGJ1dHRvbik7IH0gZWxzZSB7CisgICAqIExpbmtVdGlsLnNldEhhbmRDdXJzb3IoYnV0dG9uKTsgfSB9IH0pOyB9CisgICAqLworICBwcml2YXRlIHZvaWQgY3JlYXRlV2Vic3RhcnRCdXR0b24oIGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQgKSB7CisgICAgTGFiZWwgaWNvbiA9IG5ldyBMYWJlbCggcGFyZW50LCBTV1QuTk9ORSApOworICAgIGljb24uc2V0SW1hZ2UoIEltYWdlcy5XRUJTVEFSVC5nZXQoKSApOworICAgIFN0cmluZyB1cmwgPSBjb25maWd1cmF0aW9uLmdldEluc3RhbGxlclVSTCgpOworICAgIGRvd25sb2FkQnV0dG9uQnJvd3NlciA9IGNyZWF0ZUxpbmsoIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGlua0luZm8oICJTdGFydCBFY2xpcHNlIFAyIEluc3RhbGxlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKSApOworICAgIEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKQorICAgICAgLmhpbnQoIDM1MCwgU1dULkRFRkFVTFQgKQorICAgICAgLmFwcGx5VG8oIGRvd25sb2FkQnV0dG9uQnJvd3NlciApOworICAgIHVwZGF0ZURvd25sb2FkQnV0dG9uKCk7CisgICAgcGFyZW50LnNldEJhY2tncm91bmRNb2RlKCBTV1QuSU5IRVJJVF9ERUZBVUxUICk7CisgICAgTGFiZWwgZHVtbXlMYWJlbCA9IG5ldyBMYWJlbCggcGFyZW50LCBTV1QuTk9ORSApOworICAgIEdyaWREYXRhRmFjdG9yeS5zd3REZWZhdWx0cygpLnNwYW4oIDEsIDEgKS5hcHBseVRvKCBkdW1teUxhYmVsICk7CisgICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoIHBhcmVudCwgU1dULldSQVAgKTsKKyAgICBsYWJlbC5zZXRUZXh0KCAiTm90ZTogV2Vic3RhcnQgc3VwcG9ydCBpcyBjdXJyZW50bHlcbnVuYXZhaWxhYmxlIGR1ZSB0byBFY2xpcHNlIEJ1ZyAyNDA1MDAuIiApOworICAgIGxhYmVsLnNldExheW91dERhdGEoIEdyaWREYXRhRmFjdG9yeS5zd3REZWZhdWx0cygpCisgICAgICAuYWxpZ24oIFNXVC5MRUZULCBTV1QuQ0VOVEVSICkKKyAgICAgIC5jcmVhdGUoKSApOworICAgIC8qCisgICAgICogQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuTk9ORSk7CisgICAgICogYnV0dG9uLnNldFRleHQoIlN0YXJ0IEVjbGlwc2UgUDIgSW5zdGFsbGVyIik7CisgICAgICogYnV0dG9uLnNldEZvbnQoRm9udHMuQlVUVE9OLmdldCgpKTsKKyAgICAgKiBidXR0b24uc2V0SW1hZ2UoSW1hZ2VzLldFQlNUQVJULmdldCgpKTsKKyAgICAgKiBidXR0b24uc2V0TGF5b3V0RGF0YShHcmlkRGF0YUZhY3Rvcnkuc3d0RGVmYXVsdHMoKS5hbGlnbihTV1QuRklMTCwKKyAgICAgKiBTV1QuQ0VOVEVSKS5jcmVhdGUoKSk7IC8vIGFkZEJ1dHRvbkVuYWJsZXIoYnV0dG9uKTsKKyAgICAgKiBidXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICogQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIExhYmVsIGR1bW15TGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LAorICAgICAqIFNXVC5OT05FKTsgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuV1JBUCk7IGxhYmVsLnNldFRleHQoCisgICAgICogIk5vdGU6IFdlYnN0YXJ0IHN1cHBvcnQgaXMgY3VycmVudGx5XG51bmF2YWlsYWJsZSBkdWUgdG8gRWNsaXBzZSBCdWcgMjQwNTAwLiIKKyAgICAgKiApOyBsYWJlbC5zZXRMYXlvdXREYXRhKEdyaWREYXRhRmFjdG9yeS5zd3REZWZhdWx0cygpLmFsaWduKFNXVC5MRUZULAorICAgICAqIFNXVC5DRU5URVIpLmNyZWF0ZSgpKTsgYnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKKyAgICAgKiB7CisgICAgICogQE92ZXJyaWRlIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IHNlKSB7IC8KKyAgICAgKiBTdHJpbmdbXSBpZHMgPSBXaXNobGlzdC5nZXREZWZhdWx0KCkuZ2V0SW5zdGFsbGVySURzKCk7IFN0cmluZyBmaWxlTmFtZSA9CisgICAgICogQ3VzdG9tSm5scC5nZXRGaWxlTmFtZShpZHMpOyB0cnkgeyAvCisgICAgICogQ3VzdG9tSm5scC5leGVjdXRlKCJodHRwOi8vbG9jYWxob3N0OjgwMDgvZG93bmxvYWQiLAorICAgICAqIFN0cmluZ1V0aWwudG9Db21tYUxpc3QoaWRzLCBmYWxzZSksIGZpbGVOYW1lKTsKKyAgICAgKiBicm93c2VyLnNldFRleHQoIjxodG1sPjwvaHRtbD4iKTsgYnJvd3Nlci5zZXRVcmwoIi4uL2Rvd25sb2FkLyIgKworICAgICAqIGZpbGVOYW1lKTsgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjKSB7IC8vIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBsb2cKKyAgICAgKiBhbnl3YXkgZXhjLnByaW50U3RhY2tUcmFjZSgpOyB9IC8gfSB9KTsKKyAgICAgKi8KKyAgfQogCi0JLy8gLy8vLy8vLy8vLy8vLy8vCi0JLy8gaGVscGluZyBtZXRob2RzCi0JLy8gLy8vLy8vLy8vLy8vLy8vCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdE9zKCkgewotCQlTdHJpbmcgaGVhZGVyID0gUldULmdldFJlcXVlc3QoKS5nZXRIZWFkZXIoIlVzZXItQWdlbnQiKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmdbXSBwbGF0Zm9ybU5hbWVzID0gT3NVdGlsLmdldFBsYXRmb3JtcygpOwotCQlpbnQgcGxhdGZvcm0gPSAwOwotCQkvLyBDaGVjayBpZiB3ZSBjYW4gYXV0b2RldGVjdCB0aGUgcGxhdGZvcm0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwbGF0Zm9ybU5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgcGxhdGZvcm1IZWFkZXIgPSBwbGF0Zm9ybU5hbWVzW2ldLnN1YnN0cmluZygwLCAzKTsKLQkJCWlmIChoZWFkZXIuaW5kZXhPZihwbGF0Zm9ybUhlYWRlcikgPiAtMQotCQkJCQl8fCBoZWFkZXIuaW5kZXhPZihwbGF0Zm9ybUhlYWRlci50b1VwcGVyQ2FzZSgpKSA+IC0xCi0JCQkJCXx8IGhlYWRlci5pbmRleE9mKHBsYXRmb3JtSGVhZGVyLnN1YnN0cmluZygwLCAxKQotCQkJCQkJCS50b1VwcGVyQ2FzZSgpCi0JCQkJCQkJKyBwbGF0Zm9ybUhlYWRlci5zdWJzdHJpbmcoMSwgcGxhdGZvcm1IZWFkZXIKLQkJCQkJCQkJCS5sZW5ndGgoKSkpID4gLTEpIHsKLQkJCQlwbGF0Zm9ybSA9IGk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHBsYXRmb3JtTmFtZXNbcGxhdGZvcm1dOwotCX0KKyAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKKyAgICByZXR1cm4gIkZpbmlzaCI7CisgIH0KIAotCS8qKgotCSAqIE9wZW4gYSBVUkwsIGJ5IHVzaW5nIHRoZSBSQVAgYnJvd3NlciB3aWRnZXQsIHBhc3NpbmcgdGhlIHAyIG1ldGFkYXRhCi0JICogaW5mb3JtYXRpb24gYXMgUE9TVCBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIHVybAotCSAqICAgICAgICAgICAgVVJMIG9mIHRoZSBsb2NhdGlvbiB0byBvcGVuCi0JICogQHBhcmFtIHRvcAotCSAqICAgICAgICAgICAgdHJ1ZSAtPiBjb21wbGV0ZSBwYWdlIHJlZGlyZWN0LCBmYWxzZSAtPiBpbnNpZGUgd2lkZ2V0LCB1c2VmdWwKLQkgKiAgICAgICAgICAgIGZvciBkb3dubG9hZHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgb3BlblVSTChTdHJpbmcgdXJsLCBib29sZWFuIHRvcCkgewotCQlDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldENvbmZpZ3VyYXRpb24oKTsKLQkJU3RyaW5nIGl1cyA9IGNvbmZpZ3VyYXRpb24uZ2V0QmFzZUlVcygpKyIsIisgd2lzaGxpc3QuZ2V0U2VsZWN0ZWRJdUlkcygpOwotCQlicm93c2VyLnNldFRleHQoIjxodG1sPjwvaHRtbD4iKTsKLQkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCXNiLmFwcGVuZCgiPGZvcm0gbmFtZT0nbXlmb3JtJyBtZXRob2Q9J3Bvc3QnIGFjdGlvbj0nIiArIHVybCArICInICIKLQkJCQkrICh0b3AgPyAidGFyZ2V0PSdfdG9wJyIgOiAiIikgKyAiPiIpOwotCQlhZGRQYXJhbWV0ZXIoc2IsICJvcyIsIGdldERlZmF1bHRPcygpKTsJCQotCQlhZGRQYXJhbWV0ZXIoc2IsIENvbmZpZ3VyYXRpb24uUDJfUk9PVFMsIGl1cyk7Ci0JCWFkZFBhcmFtZXRlcihzYiwgQ29uZmlndXJhdGlvbi5QMl9NRVRBREFUQV9SRVBPU0lUT1JJRVMsIGNvbmZpZ3VyYXRpb24KLQkJCQkuZ2V0TWV0YWRhdGFSZXBvc2l0b3JpZXMoKSk7Ci0JCWFkZFBhcmFtZXRlcihzYiwgQ29uZmlndXJhdGlvbi5QMl9BUlRJRkFDVF9SRVBPU0lUT1JJRVMsIGNvbmZpZ3VyYXRpb24KLQkJCQkuZ2V0QXJ0aWZhY3RSZXBvc2l0b3JpZXMoKSk7Ci0JCXNiLmFwcGVuZCgiPC9mb3JtPiIpOworICBwdWJsaWMgQ29udHJvbCBnZXRDb250cm9sKCkgeworICAgIHJldHVybiB0aGlzOworICB9CiAKLQkJLy8gVGhpcyBiaXQgaXMgbmVlZGVkIHRvIHByZXZlbnQgc29tZSBjYWNoaW5nIGJlaGF2aW9yIGluIHRoZSBicm93c2VyCi0JCS8vIGNvbXBvbmVudDsgY3J1ZGUgYnV0IHdvcmtzCi0JCXNiLmFwcGVuZChuZXcgUmFuZG9tKCkubmV4dExvbmcoKSk7CisgIC8qKgorICAgKiBPcGVuIGEgVVJMLCBieSB1c2luZyB0aGUgUkFQIGJyb3dzZXIgd2lkZ2V0LCBwYXNzaW5nIHRoZSBwMiBtZXRhZGF0YQorICAgKiBpbmZvcm1hdGlvbiBhcyBQT1NUIHBhcmFtZXRlcnMKKyAgICogCisgICAqIEBwYXJhbSB1cmwgVVJMIG9mIHRoZSBsb2NhdGlvbiB0byBvcGVuCisgICAqIEBwYXJhbSB0b3AgdHJ1ZSAtPiBjb21wbGV0ZSBwYWdlIHJlZGlyZWN0LCBmYWxzZSAtPiBpbnNpZGUgd2lkZ2V0LCB1c2VmdWwKKyAgICogICAgICAgICAgZm9yIGRvd25sb2FkcworICAgKi8KKyAgcHJpdmF0ZSB2b2lkIG9wZW5VUkwoIFN0cmluZyB1cmwsIGJvb2xlYW4gdG9wICkgeworICAgIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0Q29uZmlndXJhdGlvbigpOworICAgIFN0cmluZyBpdXMgPSBjb25maWd1cmF0aW9uLmdldEJhc2VJVXMoKSArICIsIiArIHdpc2hsaXN0LmdldFNlbGVjdGVkSXVJZHMoKTsKKyAgICBicm93c2VyLnNldFRleHQoICI8aHRtbD48L2h0bWw+IiApOworICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgIFN0cmluZyB0YXJnZXQgPSAiIjsKKyAgICBpZiggdG9wICkgeworICAgICAgdGFyZ2V0ID0gInRhcmdldD0nX3RvcCciOworICAgIH0KKyAgICAvLyBJRSA3IGhhcyBzb21lIHdlaXJkIGlzc3VlcyB3aXRoIFJBUCBhbmQgdGhlIGlmcmFtZS1hdXRvZm9ybS1kb3dubG9hZCwgYW5kCisgICAgLy8gSUUgc2VjdXJpdHkgImZlYXR1cmVzIiwKKyAgICAvLyBtYWtpbmcgdGhpcyB1Z2x5IHdvcmthcm91bmQgbmVjZXNzYXJ5CisgICAgaWYoIFJXVC5nZXRSZXF1ZXN0KCkuZ2V0SGVhZGVyKCAidXNlci1hZ2VudCIgKS5jb250YWlucyggIiBNU0lFIDcuIiApICkgeworICAgICAgdGFyZ2V0ID0gInRhcmdldD0nX2JsYW5rJyI7CisgICAgfQorICAgIHNiLmFwcGVuZCggIjxmb3JtIG5hbWU9J215Zm9ybScgbWV0aG9kPSdwb3N0JyBhY3Rpb249JyIKKyAgICAgICAgICAgICAgICsgdXJsCisgICAgICAgICAgICAgICArICInICIKKyAgICAgICAgICAgICAgICsgdGFyZ2V0CisgICAgICAgICAgICAgICArICI+IiApOworICAgIGFkZFBhcmFtZXRlciggc2IsICJvcyIsIHdpc2hsaXN0LmdldFBsYXRmb3JtKCkuZ2V0SWQoKSApOworICAgIGFkZFBhcmFtZXRlciggc2IsIENvbmZpZ3VyYXRpb24uUDJfUk9PVFMsIGl1cyApOworICAgIGFkZFBhcmFtZXRlciggc2IsCisgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLlAyX01FVEFEQVRBX1JFUE9TSVRPUklFUywKKyAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0TWV0YWRhdGFSZXBvc2l0b3JpZXMoKSApOworICAgIGFkZFBhcmFtZXRlciggc2IsCisgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLlAyX0FSVElGQUNUX1JFUE9TSVRPUklFUywKKyAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0QXJ0aWZhY3RSZXBvc2l0b3JpZXMoKSApOworICAgIHNiLmFwcGVuZCggIjwvZm9ybT4iICk7CisgICAgLy8gVGhpcyBiaXQgaXMgbmVlZGVkIHRvIHByZXZlbnQgc29tZSBjYWNoaW5nIGJlaGF2aW9yIGluIHRoZSBicm93c2VyCisgICAgLy8gY29tcG9uZW50OyBjcnVkZSBidXQgd29ya3MKKyAgICBzYi5hcHBlbmQoIG5ldyBSYW5kb20oKS5uZXh0TG9uZygpICk7CisgICAgLy8gVGltZW91dCBpcyByZXF1aXJlZCB0byB3b3JrIGFyb3VuZCBwcm9ibGVtcyB3aXRoIHRoZSBjb25uZWN0aW9uIHRvCisgICAgLy8gdGhlIFJBUCBzZXJ2ZXIgYmVpbmcgZm9yY2VmdWxseSBkaXNjb25uZWN0ZWQKKyAgICBzYi5hcHBlbmQoICI8U0NSSVBUIGxhbmd1YWdlPSdKYXZhU2NyaXB0Jz4iICk7CisgICAgc2IuYXBwZW5kKCAiIHNldFRpbWVvdXQoJ2RvY3VtZW50Lm15Zm9ybS5zdWJtaXQoKTsnLDEwMDApIiApOworICAgIHNiLmFwcGVuZCggIjwvU0NSSVBUPiAiICk7CisgICAgLy8gYnJvd3Nlci5zZXRUZXh0KHNiLnRvU3RyaW5nKCkpOworICAgIGJyb3dzZXIuc2V0VXJsKCAiaHR0cDovL3dtd29lbGtlci94LnppcCIgKTsKKyAgICBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisgICAgICAuZ2V0U3RhdHNMb2dnZXIoKQorICAgICAgLmxvZyggbmV3IFN0YXRzTG9nZ2VyLlN0YXRpc3RpYyggdXJsLCBSV1QuZ2V0UmVxdWVzdCgpCisgICAgICAgIC5nZXRIZWFkZXIoICJ1c2VyLWFnZW50IiApLCBpdXMgKSApOworICB9CiAKLQkJLy8gVGltZW91dCBpcyByZXF1aXJlZCB0byB3b3JrIGFyb3VuZCBwcm9ibGVtcyB3aXRoIHRoZSBjb25uZWN0aW9uIHRvCi0JCS8vIHRoZSBSQVAgc2VydmVyIGJlaW5nIGZvcmNlZnVsbHkgZGlzY29ubmVjdGVkCi0JCXNiLmFwcGVuZCgiPFNDUklQVCBsYW5ndWFnZT0nSmF2YVNjcmlwdCc+Iik7Ci0JCXNiLmFwcGVuZCgiIHNldFRpbWVvdXQoJ2RvY3VtZW50Lm15Zm9ybS5zdWJtaXQoKTsnLDEwMDApIik7Ci0JCXNiLmFwcGVuZCgiPC9TQ1JJUFQ+ICIpOwotCQlicm93c2VyLnNldFRleHQoc2IudG9TdHJpbmcoKSk7Ci0JfQorICBwcml2YXRlIHZvaWQgYWRkUGFyYW1ldGVyKCBTdHJpbmdCdWlsZGVyIHNiLCBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUgKSB7CisgICAgc2IuYXBwZW5kKCAiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nIiArIGtleSArICInIHZhbHVlPSciICsgdmFsdWUgKyAiJz4iICk7CisgIH0KIAotCXByaXZhdGUgdm9pZCBhZGRQYXJhbWV0ZXIoU3RyaW5nQnVpbGRlciBzYiwgU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7Ci0JCXNiLmFwcGVuZCgiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nIiArIGtleSArICInIHZhbHVlPSciICsgdmFsdWUKLQkJCQkrICInPiIpOwotCX0KKyAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlTm90aWZpY2F0aW9uKCkgeworICAgIG5vdGlmaWNhdGlvbkxhYmVsLnNldFRleHQoIHdpc2hsaXN0LmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbm9JdGVtc1RleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdvdEl0ZW1zVGV4dCApOworICAgIG5vdGlmaWNhdGlvbkxhYmVsLnNldFZpc2libGUoIHdpc2hsaXN0LmlzRW1wdHkoKSApOworICAgIG5vdGlmaWNhdGlvbkxhYmVsLmdldFBhcmVudCgpLmxheW91dCgpOworICB9CiAKLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVOb3RpZmljYXRpb24oKSB7Ci0JCW5vdGlmaWNhdGlvbkxhYmVsLnNldFRleHQod2lzaGxpc3QuaXNFbXB0eSgpID8gbm9JdGVtc1RleHQKLQkJCQk6IGdvdEl0ZW1zVGV4dCk7Ci0JCW5vdGlmaWNhdGlvbkxhYmVsLmdldFBhcmVudCgpLmxheW91dCgpOwotCX0KLQorICBwdWJsaWMgdm9pZCB1cGRhdGUoKSB7CisgICAgZm9yKCBMaW5rSW5mbyBsaW5rSW5mbyA6IGxpbmtzICkgeworICAgICAgdXBkYXRlTGluayggbGlua0luZm8gKTsKKyAgICB9CisgIH0KIH0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9XaXphcmRTZWxlY3Rpb25TY3JlZW4uamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXBwLndpemFyZC9zcmMvb3JnL2VjbGlwc2UvZXBwL3dpemFyZC9pbnRlcm5hbC91aS9XaXphcmRTZWxlY3Rpb25TY3JlZW4uamF2YQppbmRleCBlYmJkZDRhLi40YjY3NTk5IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmVwcC53aXphcmQvc3JjL29yZy9lY2xpcHNlL2VwcC93aXphcmQvaW50ZXJuYWwvdWkvV2l6YXJkU2VsZWN0aW9uU2NyZWVuLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcHAud2l6YXJkL3NyYy9vcmcvZWNsaXBzZS9lcHAvd2l6YXJkL2ludGVybmFsL3VpL1dpemFyZFNlbGVjdGlvblNjcmVlbi5qYXZhCkBAIC0xMCw2ICsxMCw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLnVpOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuZXBwLndpemFyZC5pbnRlcm5hbC5XaXNobGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLmludGVybmFsLldpc2hsaXN0LkluY2x1c2lvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5lcHAud2l6YXJkLm1vZGVsLkdyb3VwOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVwcC53aXphcmQubW9kZWwuU2NyZWVuOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CkBAIC03OCwxMCArODAsMTMgQEAKICAgfQogCiAgIHByaXZhdGUgdm9pZCBjcmVhdGVTZWxlY3Rpb25BcmVhKCBmaW5hbCBDb21wb3NpdGUgcGFyZW50ICkgeworICAgIFdpc2hsaXN0IHdpc2hsaXN0ID0gV2lzaGxpc3QuZ2V0RGVmYXVsdCgpOwogICAgIEdyb3VwW10gZ3JvdXBzID0gZ2V0U2NyZWVuKCkuZ2V0R3JvdXBzKCk7CiAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKysgKSB7CiAgICAgICBmaW5hbCBHcm91cCBncm91cCA9IGdyb3Vwc1sgaSBdOwotICAgICAgbmV3IEdyb3VwU2VsZWN0aW9uKHBhcmVudCwgZ3JvdXApOworICAgICAgR3JvdXBTZWxlY3Rpb24gZ3JvdXBTZWxlY3Rpb24gPSBuZXcgR3JvdXBTZWxlY3Rpb24oIHBhcmVudCwgZ3JvdXAgKTsKKyAgICAgIGdyb3VwU2VsZWN0aW9uLnNldEV4cGFuZGVkKCB3aXNobGlzdC5pc0luY2x1ZGVkKCBncm91cCApICE9IEluY2x1c2lvbi5OT05FICk7CisgICAgICAvLyBncm91cFNlbGVjdGlvbi5zZXRFeHBhbmRlZCh0cnVlKTsKICAgICB9CiAgIH0KIApAQCAtOTksNCArMTA0LDggQEAKICAgcHJpdmF0ZSBTY3JlZW4gZ2V0U2NyZWVuKCkgewogICAgIHJldHVybiBzY3JlZW47CiAgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGUoKSB7CisgICAgLy8gTm90aGluZyB0byBkbyBoZXJlCisgIH0KIH0K