ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAwN2JhMmZhLi4zODU1ZDUyIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwNi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMzA1LnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW4uV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzCmluZGV4IDg0NTg1Y2EuLjVhYWFhMDIgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19idWphdmEucHJvcGVydGllcworKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfYnVqYXZhLnByb3BlcnRpZXMKQEAgLTI0LDEzICsyNCwxMyBAQAogIS0tICBTZXJ2aWNlLlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCiBTZXJ2aWNlLlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCiAhLS0gU2VydmljZS5TZXJ2ZXJJZCAtICBJRCBvZiB0YXJnZXQgc2VydmVyIAotU2VydmljZS5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC42MAorU2VydmljZS5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MAogIS0tIFNlcnZpY2UuVHlwZUlkIC0gSmF2YSBCZWFuIGlzIGRlZmF1bHQgZm9yIGJvdGggVG9wIERvd24gYW5kIEJvdHRvbSBVcAogIS0tIFNlcnZpY2UuVHlwZUlkPUphdmEgQmVhbgogCiAhLS0gU2VydmljZVByb2plY3ROYW1lIC0gIS0tdHlwZTpTdHJpbmcgLSBuYW1lIG9mIFNlcnZpY2UgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZyAgICAKICEtLVNlcnZpY2VQcm9qZWN0TmFtZT1zZXJ2aWNlUHJvamVjdE5hbWUKLSEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBFQVIgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBhIGRpZmZlcmVudCBuYW1lIHRoYW4gdGhlIEVBUiBwcm9qZWN0IGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlIHByb2plY3QuICB0eXBlOiBTdHJpbmcKKyEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZwogIS0tU2VydmljZUVhclByb2plY3ROYW1lPXNlcnZpY2VFYXJQcm9qZWN0TmFtZQogCiAhLS0gTWFwcGluZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19jbGllbnQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19jbGllbnQucHJvcGVydGllcwppbmRleCA1MmU1ZGUwLi45MDk1ZjZjIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfY2xpZW50LnByb3BlcnRpZXMKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2NsaWVudC5wcm9wZXJ0aWVzCkBAIC0yNSw3ICsyNSw3IEBACiAhLS1DbGllbnQuUnVudGltZUlkIC0gSUQgb2Ygd2ViIHNlcnZpY2UgcnVudGltZSAKIENsaWVudC5SdW50aW1lSWQ9b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVAogIS0tQ2xpZW50LlNlcnZlcklkIC0gSUQgb2YgdGFyZ2V0IHNlcnZlciAKLUNsaWVudC5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC42MAorQ2xpZW50LlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwCiAKICEtLUNsaWVudFByb2plY3ROYW1lIC0gbmFtZSBvZiBDbGllbnQgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgY2xpZW50IHByb2plY3QgYSAKICEtLSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMKaW5kZXggN2NiZDMwOC4uYTYxMGQxMCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX3RkamF2YS5wcm9wZXJ0aWVzCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc190ZGphdmEucHJvcGVydGllcwpAQCAtMjQsMTMgKzI0LDEzIEBACiAhLS0gIFNlcnZpY2UuUnVudGltZUlkIC0gSUQgb2Ygd2ViIHNlcnZpY2UgcnVudGltZSAKIFNlcnZpY2UuUnVudGltZUlkPW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQKICEtLSBTZXJ2aWNlLlNlcnZlcklkIC0gIElEIG9mIHRhcmdldCBzZXJ2ZXIgCi1TZXJ2aWNlLlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjYwCitTZXJ2aWNlLlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwCiAhLS0gU2VydmljZS5UeXBlSWQgLSBKYXZhIEJlYW4gaXMgZGVmYXVsdCBmb3IgYm90aCBUb3AgRG93biBhbmQgQm90dG9tIFVwCiAhLS0gU2VydmljZS5UeXBlSWQ9SmF2YSBCZWFuCiAKICEtLSBTZXJ2aWNlUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIHByb2plY3QgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uLiAgdHlwZTogU3RyaW5nICAgIAogIS0tU2VydmljZVByb2plY3ROYW1lPXNlcnZpY2VQcm9qZWN0TmFtZQotIS0tIFNlcnZpY2VFYXJQcm9qZWN0TmFtZSAtICEtLXR5cGU6U3RyaW5nIC0gbmFtZSBvZiBTZXJ2aWNlIEVBUiBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgRUFSIHByb2plY3QgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlcnZpY2UgcHJvamVjdC4gIHR5cGU6IFN0cmluZworIS0tIFNlcnZpY2VFYXJQcm9qZWN0TmFtZSAtICEtLXR5cGU6U3RyaW5nIC0gbmFtZSBvZiBTZXJ2aWNlIHByb2plY3QgLSB0aGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGdpdmUgdGhlIHNlcnZpY2UgRUFSIHByb2plY3QgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uLiAgdHlwZTogU3RyaW5nCiAhLS1TZXJ2aWNlRWFyUHJvamVjdE5hbWU9c2VydmljZUVhclByb2plY3ROYW1lCiAKICEtLSBNYXBwaW5ncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZjMwODA0Yy4uZWY5ZWQzZSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDUucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjMwNC5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzTWFwcGluZ3NXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc01hcHBpbmdzV2lkZ2V0LmphdmEKaW5kZXggYmFkMTFlZi4uMjVjZGQzMSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzTWFwcGluZ3NXaWRnZXQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc1dpZGdldC5qYXZhCkBAIC0xMCw3ICsxMCw2IEBACiAgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDgwNjE2ICAgMjM1NjQ4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFcnJvcnMgaW4gY2xpZW50IHByb3h5IGlmIHVzaW5nIGRlZmF1bHQgbmFtZXNwYWNlIHRvIHBhY2thZ2UgbWFwcGluZwotICogMjAwODA5MTcgICAyNDc1NjEgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBFcnJvciBpZiB3aGl0ZXNwYWNlIGVudGVyZWQgaW4gbWFwcGluZyBwYWdlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0czsKIApAQCAtMTA5LDcgKzEwOCw3IEBACiAgIAkgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKICAgCSAgZm9yIChpbnQgaT0wOyBpPHBhaXJzLmxlbmd0aDsgaSsrKQogICAJICB7Ci0gIAkJbWFwLnB1dChwYWlyc1tpXS5nZXRUZXh0KDApLnRyaW0oKSxwYWlyc1tpXS5nZXRUZXh0KDEpLnRyaW0oKSk7CisgIAkJbWFwLnB1dChwYWlyc1tpXS5nZXRUZXh0KDApLHBhaXJzW2ldLmdldFRleHQoMSkpOwogICAJICB9CiAgIAkgIGphdmFQYXJhbWV0ZXJfLnNldE1hcHBpbmdzKG1hcCk7CiAgIAkgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZDljZjM4NS4uODYwOTY4ZCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDYucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjMwNS5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZS5qYXZhCmluZGV4IDY4ODE3MzUuLjgzNTYzNjYgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2UuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKICAqIDIwMDYwODEwICAgMTM1Mzk1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFbmFibGUgV1RQIFdlYiBzZXJ2aWNlIGZyYW1ld29yayBvcGVuaW5nIEphdmEgZWRpdG9yCiAgKiAyMDA2MTAwNCAgIDE1OTM1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgR2V0IGNvcnJlY3QgbW9kdWxlIHJvb3QgVVJMIGJhc2VkIG9uIHNlcnZlciBjaG9zZW4KICAqIDIwMDgwMjI3ICAgMTE5OTY0IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKiAyMDA4MTExMSAgIDI1MjA2MiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIERvbid0IGRlcGVuZCBvbiBBdXRvQnVpbGQgdG8gY29tcGlsZSBiZWFuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0OwpAQCAtNDksOSArNDgsOSBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b24uQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5Ta2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZEJlYW5Db21tYW5kOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZFByb2plY3RDb21tYW5kOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLldhaXRGb3JBdXRvQnVpbGRDb21tYW5kOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7CkBAIC0xMDUsOCArMTA0LDcgQEAKIAkJCS8vIGNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoICJBeGlzU2VydmljZUJlYW5NYXBwaW5nIiApKTsKIAkJCWNvbW1hbmRzLmFkZChuZXcgQlVDb25maWdDb21tYW5kKCkpOwogCQkJY29tbWFuZHMuYWRkKG5ldyBWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kKCkpOwotCQkJLy9jb21tYW5kcy5hZGQobmV3IFdhaXRGb3JBdXRvQnVpbGRDb21tYW5kKCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBCdWlsZEJlYW5Db21tYW5kKCkpOworCQkJY29tbWFuZHMuYWRkKG5ldyBXYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZCgpKTsKIAkJCWNvbW1hbmRzLmFkZChuZXcgQlVDb2RlR2VuT3BlcmF0aW9uKCkpOwogLy8JCQljb21tYW5kcy5hZGQobmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpKTsKIAkJCWNvbW1hbmRzLmFkZChuZXcgQnVpbGRQcm9qZWN0Q29tbWFuZCgpKTsKQEAgLTIxMiw5ICsyMTAsNiBAQAogCSAgICAvL1VwZGF0ZVdFQlhNTENvbW1hbmQKIAkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQlVDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiU2VydmljZVByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwogCSAgICAKLQkgICAgLy9CdWlsZEJlYW5Db21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIEJ1aWxkQmVhbkNvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCiAJICAgIC8vQnVpbGRQcm9qZWN0Q29tbWFuZAogCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7CiAJICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJGb3JjZUJ1aWxkIiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZQppbmRleCAyOWMwNzljLi5kNmY0NTQ3IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uY3ZzaWdub3JlCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5jdnNpZ25vcmUKQEAgLTUsNCArNSwzIEBACiBAZG90CiBzcmMuemlwCiBqYXZhQ29tcGlsZXIuLi5hcmdzCi1vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWlfKi5qYXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggMzg3YWZkZC4uY2I3MDBkMyAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS40LnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMS4xLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9EZWZhdWx0aW5nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0RlZmF1bHRpbmdVdGlscy5qYXZhCmluZGV4IGEyODY2N2YuLmJiYTMyYWYgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0RlZmF1bHRpbmdVdGlscy5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0RlZmF1bHRpbmdVdGlscy5qYXZhCkBAIC02Niw4ICs2Niw4IEBACiAJCQkgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGFsbEVhckNvbXBzLmxlbmd0aDsgaSsrKQogCQkJICAgICAgICB7CiAJCQkgICAgICAgICAgSVByb2plY3QgZWFyUHJvamVjdCA9IGFsbEVhckNvbXBzW2ldLmdldFByb2plY3QoKTsKLQkJCSAgICAgICAgICBib29sZWFuIGNhbkFzc29jaWF0ZSA9IEoyRUVVdGlscy5jYW5Bc3NvY2lhdGVQcm9qZWN0VG9FQVJXaXRob3V0V2FybmluZyhwcm9qLCBlYXJQcm9qZWN0KTsKLQkJCSAgICAgICAgICBpZiAoY2FuQXNzb2NpYXRlKQorCQkJICAgICAgICAgIElTdGF0dXMgYXNzb2NpYXRpb25TdGF0dXMgPSBKMkVFVXRpbHMuY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSKHByb2osIGVhclByb2plY3QpOworCQkJICAgICAgICAgIGlmIChhc3NvY2lhdGlvblN0YXR1cy5nZXRTZXZlcml0eSgpPT1JU3RhdHVzLk9LKQogCQkJICAgICAgICAgIHsKIAkJCSAgICAgICAgICAgIHJldHVybiBhbGxFYXJDb21wc1tpXS5nZXROYW1lKCk7IAogCQkJICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1ZhbGlkYXRpb25VdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vVmFsaWRhdGlvblV0aWxzLmphdmEKaW5kZXggZWFiYjAwOS4uZDlmZWE2OCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vVmFsaWRhdGlvblV0aWxzLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vVmFsaWRhdGlvblV0aWxzLmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKICAqIDIwMDgwNDE2ICAgMjE1MDg0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKICAqIDIwMDgwNDE3ICAgMjI3NTk5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCiAgKiAyMDA4MDcxNyAgIDI0MTI4MyBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBDbGFzcyB2ZXJzaW9uIGVycm9yIHdoZW4gaW52b2tpbmcgc2FtcGxlIEpTUCBvbiBUb21jYXQgNS41IHdoZW4gSmF2YSBwcm9qZWN0IGlzIEphdmEgNgotICogMjAwODEwMDEgICAyNDM4NjkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV2ViIFNlcnZpY2UgdG9vbHMgYWxsb3dpbmcgbWl4ZWQgSjJFRSBsZXZlbHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwogCkBAIC01Myw3ICs1Miw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guV29ya2JlbmNoUmVzb3VyY2VIZWxwZXJCYXNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnByb2plY3QuSjJFRVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuaW50ZXJuYWwudmFsaWRhdGlvbi5FQVJWYWxpZGF0aW9uTWVzc2FnZVJlc291cmNlSGFuZGxlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLmludGVybmFsLldlYlNlcnZpY2VDb25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldTRExQb3J0OwpAQCAtNDQzLDEzICs0NDEsMjAgQEAKIAkJCQogCQkJCWlmIChwcm9qZWN0LmV4aXN0cygpICYmIGVwLmV4aXN0cygpKSB7CiAJCQkJCWlmICghSjJFRVV0aWxzLmlzQ29tcG9uZW50QXNzb2NpYXRlZChlcCwgcHJvamVjdCkpIHsKLQkJCQkJCWJvb2xlYW4gYXNzb2NpYXRlU3RhdHVzID0gSjJFRVV0aWxzLmNhbkFzc29jaWF0ZVByb2plY3RUb0VBUldpdGhvdXRXYXJuaW5nKHByb2plY3QsIGVwKTsKLQkJCQkJCQotCQkJCQkJaWYgKCFhc3NvY2lhdGVTdGF0dXMpIHsKLQkJCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCQkJRUFSVmFsaWRhdGlvbk1lc3NhZ2VSZXNvdXJjZUhhbmRsZXIuTUVTU0FHRV9JTkNPTVBBVElCTEVfU1BFQ19XQVJOSU5HXywKKwkJCQkJCUlTdGF0dXMgYXNzb2NpYXRlU3RhdHVzID0gSjJFRVV0aWxzLmNhbkFzc29jaWF0ZVByb2plY3RUb0VBUihwcm9qZWN0LCBlcCk7CisJCQkJCQlpZiAoYXNzb2NpYXRlU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgeworCQkJCQkJCWlmIChpc0NsaWVudCkgeworCQkJCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCisJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfQ0FOTk9UX0FTU09DSUFURSwKIAkJCQkJCQkJCQluZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSwgZXAuZ2V0TmFtZSgpLAotCQkJCQkJCQkJCQkJfSkpOworCQkJCQkJCQkJCQkJYXNzb2NpYXRlU3RhdHVzLmdldE1lc3NhZ2UoKSB9KSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAorCQkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9DQU5OT1RfQVNTT0NJQVRFLAorCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lLCBlcC5nZXROYW1lKCksCisJCQkJCQkJCQkJCQlhc3NvY2lhdGVTdGF0dXMuZ2V0TWVzc2FnZSgpIH0pKTsKKwkJCQkJCQl9CisKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERldmVsb3BDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnREZXZlbG9wQ29tbWFuZC5qYXZhCmluZGV4IGRiMmNjMGMuLjFlN2FjOWQgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERldmVsb3BDb21tYW5kLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogICogMjAwNzA0MDMgICAxNzM2NTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KICAqIDIwMDgwMzI2ICAgMjIxMzY0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCiAgKiAyMDA4MDcyNCAgIDI0MTI3NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBWYWxpZGF0ZSBXU0RMIGJlZm9yZSBkb2luZyBtYWpvciBXZWIgc2VydmljZSBwcm9jZXNzaW5nLgotICogMjAwODEwMDEgICAyNDM4NjkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV2ViIFNlcnZpY2UgdG9vbHMgYWxsb3dpbmcgbWl4ZWQgSjJFRSBsZXZlbHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247CkBAIC0xNTYsNyArMTU1LDYgQEAKIAkJCQkgIGNvbW1hbmQuc2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKHJmdik7CiAJCQkJICBjb21tYW5kLnNldFNlcnZlckZhY3RvcnlJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0U2VydmVySWQoKSk7CiAJCQkJICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCQkJICBjb21tYW5kLnNldEVhclByb2plY3ROYW1lKGVhclByb2plY3RfKTsKIAkJCQkgIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgYWRhcHRhYmxlICk7CiAJCQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQogCQkJCSAgewpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0LmphdmEKaW5kZXggOWU2ZWFhOC4uZTA4ZjE5NyAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dC5qYXZhCkBAIC0xMCw3ICsxMCw2IEBACiAgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDgwNDE1ICAgMjI3MTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBOZWVkIGEgd2F5IHRvIHNwZWNpZnkgYSBiYWNrdXAgV2ViIHNlcnZpY2UgcnVudGltZQotICogMjAwODA5MTggICAyNDc1MzcgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBVcGRhdGUgZGVmYXVsdCBzZXJ2ZXIgcnVudGltZSB0byBUb21jYXQgNgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzOwpAQCAtMjksNyArMjgsNyBAQAogCXByaXZhdGUgU3RyaW5nIEZBTExCQUNLX1JVTlRJTUUgPSAiRkFMTEJBQ0tfUlVOVElNRSI7ICAvLyBXZWIgc2VydmljZSBydW50aW1lIHRvIGZhbGxiYWNrIHRvIGlmIHByZWZlcnJlZCBydW50aW1lIGlzIG5vdCBzdWl0YWJsZQogCS8vcHJpdmF0ZSBTdHJpbmcgUFJFRkVSRU5DRV9KMkVFX1ZFUlNJT04gPSAiUFJFRkVSRU5DRV9KMkVFX1ZFUlNJT04iOwogCQotCXByaXZhdGUgU3RyaW5nIFNFUlZFUl9GQUNUT1JZX0lEX0RFRkFVTFQgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNjAiOworCXByaXZhdGUgU3RyaW5nIFNFUlZFUl9GQUNUT1JZX0lEX0RFRkFVTFQgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiOwogCXByaXZhdGUgU3RyaW5nIFJVTlRJTUVfSURfREVGQVVMVCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIjsKIAkKIAlwdWJsaWMgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0KCkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXQuamF2YQppbmRleCA2NDhmNmI0Li42ODM2Njk2IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50V2l6YXJkV2lkZ2V0LmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldC5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiAgKiAyMDA2MTIxMiAgIDE1OTkxMSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgY2hhbmdpbmcgc2VydmljZSBkZWZpbml0aW9uIHJlc2V0cyBzb21lIGNvbmZpZ3VyYXRpb24gZmllbGRzCiAgKiAyMDA2MDEyNSAgIDE1OTkxMSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgUmVtb3ZlIHVudXNlZCBtZXRob2QgYW5kIGltcG9ydHMKICAqIDIwMDgwNjEzICAgMjM2NTIzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBPdmVyd3JpdGUgc2V0dGluZyBvbiBXZWIgc2VydmljZSB3aXphcmQgaXMgY291cGxlZCB3aXRoIHByZWZlcmVuY2UKLSAqIDIwMDkwOTI2ICAgMjQ4NDQ4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgU2hvdWxkIG5vdCByZXNpemUgV1MgV2l6YXJkIGZvciBsb25nIFdTREwgZmlsZSBuYW1lcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwogCkBAIC01MCw3ICs0OSw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKQEAgLTEyOSwxMSArMTI3LDYgQEAKIAkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fVEVYVF9JTVBMLAogCQkJSU5GT1BPUF9XU1dTQ0VOX1RFWFRfU0VSVklDRV9JTVBMLCBTV1QuTEVGVCB8IFNXVC5CT1JERVIgKTsKIAkKLQlPYmplY3QgbGF5b3V0RGF0YSA9IHNlcnZpY2VJbXBsXy5nZXRMYXlvdXREYXRhKCk7Ci0JaWYgKGxheW91dERhdGEgaW5zdGFuY2VvZiBHcmlkRGF0YSkgewotCQkoKEdyaWREYXRhKWxheW91dERhdGEpLndpZHRoSGludCA9IDIyNTsKLQl9Ci0JCiAJb2JqZWN0TW9kaWZ5TGlzdGVuZXJfID0gbmV3IE1vZGlmeUxpc3RlbmVyKCl7CiAJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewogCQkJaWYgKHNlcnZpY2VJbXBsXy5nZXRUZXh0KCkuaW5kZXhPZignOicpID4gMCkgewpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmluZGV4IGE4YTMyMDguLmQxZGFjMGYgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKQEAgLTE1LDcgKzE1LDYgQEAKICAqIDIwMDcwNDEwICAgMTgxODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCiAgKiAyMDA4MDIyMCAgIDIxOTUzNyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawogICogMjAwODA1MDEgICAyMjk3MjggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHVwcGVyY2FzZSAuV1NETCBjYW5ub3QgYmUgZm91bmQgYnkgdGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQKLSAqIDIwMDgxMjA4ICAgMjU3NjE4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgQWRkIE1lY2hhbmlzbSBmb3IgQWRvcHRlcnMgdG8gbWFwIFNlcnZpY2VzIHRvIFdTREwgVVJMcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwogCkBAIC0yOCw3ICsyNyw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWY7CkBAIC0zOCw3ICszNiw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLlVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV1NETFVSTFN0cmluZ1dyYXBwZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7CiAKQEAgLTY1LDEzICs2Miw3IEBACiAgIAkgICAgewogICAJICAgICAgdXJpXyA9IGlmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKICAgCSAgICB9Ci0gIAkgIH0gCi0gIAkgIGVsc2UgaWYgKFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuaGFzQWRhcHRlcihmaXJzdFNlbCwgV1NETFVSTFN0cmluZ1dyYXBwZXIuY2xhc3MuZ2V0TmFtZSgpKSkgewotCQlPYmplY3QgYWRhcHRlZE9iamVjdCA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkubG9hZEFkYXB0ZXIoZmlyc3RTZWwsIFdTRExVUkxTdHJpbmdXcmFwcGVyLmNsYXNzLmdldE5hbWUoKSk7Ci0gIAkJV1NETFVSTFN0cmluZ1dyYXBwZXIgd3JhcHBlciA9IChXU0RMVVJMU3RyaW5nV3JhcHBlcilhZGFwdGVkT2JqZWN0OwotICAJCXVyaV8gPSB3cmFwcGVyLmdldFdTRExVUkxTdHJpbmcoKTsgIAkJCi0gIAkgIH0KLSAgCSAgZWxzZSBpZiAoZmlyc3RTZWwgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbCkKKyAgCSAgfSBlbHNlIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsKQogICAgICAgewogICAgICAgICBTZXJ2aWNlSW1wbCBzZXJ2aWNlSW1wbCA9IChTZXJ2aWNlSW1wbClmaXJzdFNlbDsKICAgICAgICAgdXJpXyA9IEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKHNlcnZpY2VJbXBsKTsKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmluZGV4IDUzYmJmZDYuLjIwNWI3YjIgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogICogMjAwODAzMjYgICAxNzE3MDUgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIGltcHJvdmUgQW50VGFzayBlcnJvcnMgcmVwb3J0CiAgKiAyMDA4MDQwOSAgIDIxOTEyMSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQogICogMjAwODA3MjkgICAyNDEyNzUgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgTm8gVmFsaWRhdGlvbiBlcnJvciBnZW5lcmF0aW5nIFdlYiBTZXJ2aWNlIGNsaWVudCBpZiBkaWFsb2cgaGlkZGVuCi0gKiAyMDA4MTAyOCAgIDI0ODYyNSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBFeGNlcHRpb25zIHJ1bm5pbmcgQU5UIHRhc2tzIHVzaW5nIGluYXBwcm9wcmlhdGUgcHJvamVjdHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zOwogCkBAIC00MjUsMjQgKzQyNCwxNiBAQAogICAgICAgfQogICAgICAgLy9JZiB0aGUgcHJvamVjdCBleGlzdHMsIGVuc3VyZSBpdCBzdXBwb3J0cyB0aGUgV2ViIHNlcnZpY2UgdHlwZSwgV2ViIHNlcnZpY2UgcnVudGltZSwgYW5kIHNlcnZlci4KICAgICAgIGlmIChnZXRJbml0aWFsUHJvamVjdCgpICE9IG51bGwgJiYgZ2V0SW5pdGlhbFByb2plY3QoKS5nZXROYW1lKCkgIT0gbnVsbCAmJiBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZ2V0SW5pdGlhbFByb2plY3QoKS5nZXROYW1lKCkpLmV4aXN0cygpKSB7Ci0gICAgCVZhbGlkYXRpb25VdGlscyB2YWxVdGlscyA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLSAgICAJCiAJCWlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQodHlwZUlkKSA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVAgJiYKIAkgICAgCQlGYWNldFV0aWxzLmlzSmF2YVByb2plY3QoZ2V0SW5pdGlhbFByb2plY3QoKSkpeworCSAgICAJCVZhbGlkYXRpb25VdGlscyB2YWxVdGlscyA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKIAkgICAgCQlpZighdmFsVXRpbHMuZG9lc1NlcnZlclN1cHBvcnRQcm9qZWN0KHNlcnZlcklkLGdldEluaXRpYWxQcm9qZWN0KCkuZ2V0TmFtZSgpKSl7CiAJICAgIAkgICAgCXN0YXR1cyAgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKIAkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfSkFWQVBST0pFQ1QsCiAJCQkJCQkJbmV3IFN0cmluZ1tdIHsgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKHNlcnZlcklkKSwgZ2V0SW5pdGlhbFByb2plY3QoKS5nZXROYW1lKCkgfSkpOwogCSAgICAJICAgIAllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7CiAJICAJCSAgICB9Ci0JCX0gCi0JCWlmICghdmFsVXRpbHMuZG9lc1NlcnZlclN1cHBvcnRQcm9qZWN0KHNlcnZlcklkLCBzZXJ2aWNlUHJvamVjdE5hbWVfKSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNULAotCQkJCQluZXcgU3RyaW5nW10geyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpLAotCQkJCQkJCXNlcnZpY2VQcm9qZWN0TmFtZV8gfSkpOwotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQl9CisJICAgIAkJfQogCSAgfQogICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgdHlwZSBoYXMgb25seSBzdHViIHJ1bnRpbWVzIGFzc29jaWF0ZWQKICAgICAgIC8vIHdpdGggaXQgYW5kIGlmIGEgc2VydmVyIGluc3RhbmNlIGlzIG5vdCBzZWxlY3RlZC4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmluZGV4IDRmY2MwNmYuLmVmZjE2MTcgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC0xMiw3ICsxMiw2IEBACiAgKiAyMDA3MDExNiAgIDE1OTYxOCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUHJvamVjdCBhbmQgRUFSIG5vdCBkZWZhdWx0ZWQgcHJvcGVybHkgd2hlbiB3aXphcmQgbGF1bmNoZWQgZnJvbSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggaW4gSjJFRSBQcm9qZWN0IEV4cGxvcmVyCiAgKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICogMjAwNzA3MTMgICAxOTEzNTcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgxMjA4ICAgMjU3NjE4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgQWRkIE1lY2hhbmlzbSBmb3IgQWRvcHRlcnMgdG8gbWFwIFNlcnZpY2VzIHRvIFdTREwgVVJMcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKIApAQCAtMjEsNyArMjAsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwpAQCAtMzQsNyArMzIsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV1NETFVSTFN0cmluZ1dyYXBwZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7CiAKQEAgLTU4LDExICs1NSw2IEBACiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgfQotICAgICAgZWxzZSBpZiAoUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5oYXNBZGFwdGVyKHNlbCwgV1NETFVSTFN0cmluZ1dyYXBwZXIuY2xhc3MuZ2V0TmFtZSgpKSkgewotICAgIAlPYmplY3QgYWRhcHRlZE9iamVjdCA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkubG9hZEFkYXB0ZXIoc2VsLCBXU0RMVVJMU3RyaW5nV3JhcHBlci5jbGFzcy5nZXROYW1lKCkpOwotICAgIAlXU0RMVVJMU3RyaW5nV3JhcHBlciB3cmFwcGVyID0gKFdTRExVUkxTdHJpbmdXcmFwcGVyKWFkYXB0ZWRPYmplY3Q7Ci0gICAgCXJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih3cmFwcGVyLmdldFdTRExVUkxTdHJpbmcoKSk7ICAJCQotICAgICAgfQogICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgU2VydmljZUltcGwpCiAgICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSSgoU2VydmljZUltcGwpc2VsKSk7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL0NsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmluZGV4IGU5ZmU5ZDYuLmI2ZTM3ZTMgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL0NsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL0NsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCkBAIC0xNDE2LDggKzE0MTYsOCBAQAogICAgICAgSVByb2plY3QgZWFyUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlYXJQcm9qZWN0TmFtZSk7CiAgICAgICBpZiAoIWNsaWVudFByb2plY3QuZXhpc3RzKCkgJiYgc2VydmljZVByb2plY3QuZXhpc3RzKCkpCiAgICAgICB7Ci0gICAgICAgIGJvb2xlYW4gY2FuQXNzb2NpYXRlID0gSjJFRVV0aWxzLmNhbkFzc29jaWF0ZVByb2plY3RUb0VBUldpdGhvdXRXYXJuaW5nKHNlcnZpY2VQcm9qZWN0LCBlYXJQcm9qZWN0KTsKLSAgICAgICAgZ29vZEoyRUVMZXZlbCA9IChjYW5Bc3NvY2lhdGUpOworICAgICAgICBJU3RhdHVzIGFzc29jaWF0aW9uU3RhdHVzID0gSjJFRVV0aWxzLmNhbkFzc29jaWF0ZVByb2plY3RUb0VBUihzZXJ2aWNlUHJvamVjdCwgZWFyUHJvamVjdCk7CisgICAgICAgIGdvb2RKMkVFTGV2ZWwgPSAoYXNzb2NpYXRpb25TdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLk9LKTsKICAgICAgIH0KICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKaW5kZXggMDA1MzkxMC4uMWZmZjc2OCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvUHJvamVjdFNlbGVjdGlvbldpZGdldC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL1Byb2plY3RTZWxlY3Rpb25XaWRnZXQuamF2YQpAQCAtMjEsNyArMjEsNiBAQAogICogMjAwNjA4MjkgICAxODA4MzMgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgIE5ldyBXZWIgU2VydmljZSB3aXphcmQgc2VydmljZSBzZXR0aW5ncyBkaWFsb2cgaGFzIHVubGFiZWxsZWQgZW5hYmxlZCB0ZXh0IGZpZWxkcwogICogMjAwODA0MDkgICAyMjYwNDcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KICAqIDIwMDgwNDI4ICAgMjI0NzI2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgxMDAxICAgMjQzODY5IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFdlYiBTZXJ2aWNlIHRvb2xzIGFsbG93aW5nIG1peGVkIEoyRUUgbGV2ZWxzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZTsKIApAQCAtMjksNyArMjgsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLm1vZGVsLmludGVybmFsLnZhbGlkYXRpb24uRUFSVmFsaWRhdGlvbk1lc3NhZ2VSZXNvdXJjZUhhbmRsZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7CkBAIC01OTksMTEgKzU5NywxNyBAQAogICAgICAgewogICAgICAgICBpZiAoIUoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQoZXAscCkpCiAgICAgICAgIHsKLSAgICAgICAgICBib29sZWFuIGFzc29jaWF0ZVN0YXR1cyA9IEoyRUVVdGlscy5jYW5Bc3NvY2lhdGVQcm9qZWN0VG9FQVJXaXRob3V0V2FybmluZyhwLCBlcCk7Ci0gICAgICAgICAgaWYgKCFhc3NvY2lhdGVTdGF0dXMpCisgICAgICAgICAgSVN0YXR1cyBhc3NvY2lhdGVTdGF0dXMgPSBKMkVFVXRpbHMuY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSKHAsIGVwKTsKKyAgICAgICAgICBpZiAoYXNzb2NpYXRlU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBOTFMuYmluZChFQVJWYWxpZGF0aW9uTWVzc2FnZVJlc291cmNlSGFuZGxlci5NRVNTQUdFX0lOQ09NUEFUSUJMRV9TUEVDX1dBUk5JTkdfLCBuZXcgU3RyaW5nW117cC5nZXROYW1lKCksIGVwLmdldE5hbWUoKSwgfSApICk7Ci0gICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0NsaWVudF8pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfQ0FOTk9UX0FTU09DSUFURSwgbmV3IFN0cmluZ1tde3AuZ2V0TmFtZSgpLCBlcC5nZXROYW1lKCksIGFzc29jaWF0ZVN0YXR1cy5nZXRNZXNzYWdlKCl9ICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfQ0FOTk9UX0FTU09DSUFURSwgbmV3IFN0cmluZ1tde3AuZ2V0TmFtZSgpLCBlcC5nZXROYW1lKCksIGFzc29jaWF0ZVN0YXR1cy5nZXRNZXNzYWdlKCl9ICkgKTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RXaWRnZXQuamF2YQppbmRleCAwMDk4NDU3Li5mZDlmOTM2IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0V2lkZ2V0LmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ2xpZW50VGVzdFdpZGdldC5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiAgKiAyMDA4MDYxNiAgIDIzNzI5OCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCiAgKiAyMDA4MDYxOSAgIDIzNzc5NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCiAgKiAyMDA4MDcyMyAgIDI0MTMwMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDgwOCAgIDI0MzYwMiBya2tsYWlAY2EuaWJtLmNvbSAgIC0gUmF5bW9uZCBMYWksIGZpeCBOUEUgd2hlbiBjaGFuZ2luZyBydW50aW1lICh0aGUgc2VydmVyIGNvbWJvKQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7CiAKQEAgLTQxNSw3ICs0MTQsNyBAQAogCSAgZm9yKGludCBqID0wOyBqPHNlcnZlcnMubGVuZ3RoO2orKyl7CiAJCQlTdHJpbmcgaWQgPSBydW50aW1lc18uZ2V0SWQoc2VsZWN0aW9uKTsKIAkJCWlmKGlkLmVxdWFscyhzZXJ2ZXJzW2pdLmdldFJ1bnRpbWUoKS5nZXRJZCgpKSl7Ci0JCQkJc2VydmVySW5zdGFuY2VzXy5hZGQoc2VydmVyc1tqXS5nZXRJZCgpLCBzZXJ2ZXJzW2pdLmdldE5hbWUoKSk7CisJCQkJc2VydmVySW5zdGFuY2VzXy5hZGQoc2VydmVyc1tqXS5nZXRSdW50aW1lKCkuZ2V0SWQoKSwgc2VydmVyc1tqXS5nZXROYW1lKCkpOwogCQkJCXNlcnZlckluc3RhbmNlVHlwZUNvbWJvXy5hZGQoc2VydmVyc1tqXS5nZXROYW1lKCkpOwogCQkJfQogCSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZC5qYXZhCmluZGV4IGM2MDRiZjguLjUyOTc5NzUgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0FkZE1vZHVsZURlcGVuZGVuY2llc0NvbW1hbmQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9BZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKICAqIDIwMDgwMjExICAgMTE3OTI0IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCiAgKiAyMDA4MDMyNSAgIDE4NDc2MSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCiAgKiAyMDA4MDUyNyAgIDIzNDE2OSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MTAwMSAgIDI0Mzg2OSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBXZWIgU2VydmljZSB0b29scyBhbGxvd2luZyBtaXhlZCBKMkVFIGxldmVscwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7CiAKQEAgLTczLDE2ICs3Miw2IEBACiAJICAvLzEuIENyZWF0ZSBhIFdlYiBwcm9qZWN0IGZvciB0aGUgc2FtcGxlIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogCSAgc2FtcGxlSVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7CiAJICBib29sZWFuIGNyZWF0ZWRTYW1wbGVQcm9qZWN0ID0gZmFsc2U7Ci0gICAgICBWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0gICAgICBib29sZWFuIHNlcnZlck5lZWRzRUFSID0gdnUuc2VydmVyTmVlZHNFQVIodGVzdEluZm8uZ2V0Q2xpZW50U2VydmVyVHlwZUlEKCkpOwotICAgICAgaWYgKHNlcnZlck5lZWRzRUFSKSB7Ci0JCWlmICh0ZXN0SW5mby5nZXRDbGllbnRFQVJQcm9qZWN0KCkgPT0gbnVsbAotCQkJCXx8IHRlc3RJbmZvLmdldENsaWVudEVBUlByb2plY3QoKS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQlzYW1wbGVFQVJQcm9qZWN0ID0gdGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSArIERFRkFVTFRfU0FNUExFX0VBUl9QUk9KRUNUX0VYVDsKLQkJfSBlbHNlIHsKLQkJCXNhbXBsZUVBUlByb2plY3QgPSB0ZXN0SW5mby5nZXRDbGllbnRFQVJQcm9qZWN0KCk7Ci0JCX0KLSAgICAgIH0KICAgICAgIGlmICghc2FtcGxlSVByb2plY3QuZXhpc3RzKCkpCiAgICAgICB7ICAgIAkKICAgICAgICAgICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY29tbWFuZCA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKQEAgLTkzLDcgKzgyLDYgQEAKICAgICAgICAgICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhuZXcgUmVxdWlyZWRGYWNldFZlcnNpb25bMF0pOyAgICAgICAgICAgCiAgICAgICAgICAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQodGVzdEluZm8uZ2V0Q2xpZW50U2VydmVyVHlwZUlEKCkpOwogICAgICAgICAgIGNvbW1hbmQuc2V0U2VydmVySW5zdGFuY2VJZCh0ZXN0SW5mby5nZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpLmdldElkKCkpOwotICAgICAgICAgIGNvbW1hbmQuc2V0RWFyUHJvamVjdE5hbWUoc2FtcGxlRUFSUHJvamVjdCk7CiAgICAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIGFkYXB0YWJsZSApOwogICAgICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCiAgICAgICAgICAgewpAQCAtMTA1LDcgKzkzLDE1IEBACiAJICAKIAkgIC8vMi4gSWYgdGhlIHNlbGVjdGVkIHNlcnZlciByZXF1aXJlcyBhbiBFQVIgYW5kIG5vIEVBUiBuYW1lCiAJICAvL2hhcyBiZWVuIHByb3ZpZGVkLCBjaG9vc2UgYW4gRUFSIG5hbWUgYW5kIGNyZWF0ZSBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICAgICAgVmFsaWRhdGlvblV0aWxzIHZ1ID0gbmV3IFZhbGlkYXRpb25VdGlscygpOworICAgICAgYm9vbGVhbiBzZXJ2ZXJOZWVkc0VBUiA9IHZ1LnNlcnZlck5lZWRzRUFSKHRlc3RJbmZvLmdldENsaWVudFNlcnZlclR5cGVJRCgpKTsKICAgICAgIGlmIChzZXJ2ZXJOZWVkc0VBUikgeworCQkJaWYgKHRlc3RJbmZvLmdldENsaWVudEVBUlByb2plY3QoKSA9PSBudWxsCisJCQkJCXx8IHRlc3RJbmZvLmdldENsaWVudEVBUlByb2plY3QoKS5sZW5ndGgoKSA9PSAwKSB7CisJCQkJc2FtcGxlRUFSUHJvamVjdCA9IHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkgKyBERUZBVUxUX1NBTVBMRV9FQVJfUFJPSkVDVF9FWFQ7CisJCQl9IGVsc2UgeworCQkJCXNhbXBsZUVBUlByb2plY3QgPSB0ZXN0SW5mby5nZXRDbGllbnRFQVJQcm9qZWN0KCk7CisJCQl9CiAJCQlzYW1wbGVFQVJJUHJvamVjdCAgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2FtcGxlRUFSUHJvamVjdCk7CiAJCQlpZiAoc2FtcGxlRUFSSVByb2plY3QgPT0gbnVsbCB8fCAhc2FtcGxlRUFSSVByb2plY3QuZXhpc3RzKCkpCiAJCQl7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvRmFjZXRNYXRjaENhY2hlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvRmFjZXRNYXRjaENhY2hlLmphdmEKaW5kZXggMzI0MzEwMS4uMjkzZDlmNCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0ZhY2V0TWF0Y2hDYWNoZS5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9GYWNldE1hdGNoQ2FjaGUuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC05LDEwICs5LDkgQEAKICAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KICAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAgIDEyMTA3MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgKGluaXRpYWwgY3JlYXRpb24pCisgKiAyMDA2MDEzMSAxMjEwNzEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgKGluaXRpYWwgY3JlYXRpb24pCiAgKiAyMDA2MDQyNiAgIDEzODA1MSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICogMjAwNjA0MjcgICAxMjY3ODAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA4MDkyMyAgIDI0NzUyNSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIGNhY2hlIG5vdCB1cGRhdGVkIHByb3Blcmx5IHdoZW4gcHJvamVjdCBmYWNldCB2ZXJzaW9ucyBjaGFuZ2VkCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7CiAKQEAgLTQzLDcgKzQyLDcgQEAKICAqIGFuZCBjbGllbnRSdW50aW1lcy4KICAqIAogICogPGJyLz48YnIvPgotICogVGVybWlub2xvZ3kgdXNlZCBpbiB0aGUgamF2YWRvYyBpbiB0aGlzIGNsYXNzOgorICogVGVtaW5vbG9neSB1c2VkIGluIHRoZSBqYXZhZG9jIGluIHRoaXMgY2xhc3M6CiAgKiA8dWw+CiAgKiA8bGk+PGI+c2VydmljZVJ1bnRpbWU8L2I+OiBleHRlbnNpb24gdG8gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnNlcnZpY2VSdW50aW1lcy4KICAqIFRoZSBKYXZhIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgaXMgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yPC9saT4KQEAgLTMwMiw3ICszMDEsNyBAQAogICAgICAgcmZ2cyA9IGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7CiAgICAgfQogICAgIAotICAgIFNldCBmYWNldFZlcnNpb25zID0gbmV3IEhhc2hTZXQoRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3ROYW1lKSk7CisgICAgU2V0IGZhY2V0VmVyc2lvbnMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdE5hbWUpOwogICAgIGlmIChmYWNldFZlcnNpb25zID09IG51bGwpCiAgICAgewogICAgICAgZm0gPSBuZXcgRmFjZXRNYXRjaGVyKCk7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5qYXZhCmluZGV4IGQ2MzRlZjUuLjYxNzA4MGIgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiAgKiAyMDA4MDMyNiAgIDIyMTM2NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICogMjAwODA0MDIgICAyMjUzNzggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENsaWVudCB3aXphcmQgcnVudGltZS9zZXJ2ZXIgZGVmYXVsdGluZyBpcyBub3QgcmVzcGVjdGluZyB0aGUgcHJlZmVyZW5jZQogICogMjAwODA1MzAgICAyMzQ4NzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdvcmtiZW5jaCBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQgZXJyb3IgaW4gY21kbGluZSBBbnQKLSAqIDIwMDgwODA4ICAgMjQzNjIzIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgSW1wcm92ZSBzZXJ2ZXIgZGVmYXVsdGluZyBwZXJmb3JtYW5jZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7CkBAIC04ODMsMzkgKzg4MiwyOSBAQAogICAvKioKICAgICogUmV0dXJucyB0aGUgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgdHlwZS4KICAgICogUmV0dXJucyB0aGUgc2VydmVyIHR5cGUgSUQgZnJvbSB0aGUgcHJlZmVyZW5jZSBpZiBpdCBzdXBwb3J0cyB0aGUgdHlwZUlkLgotICAgKiAgIAorICAgKiAgCiAgICAqIEBwYXJhbSB0eXBlSWQgVGhlIGNsaWVudCB0eXBlIElELgogICAgKiAKICAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBpZCBvZiBhIHNlcnZlciB0eXBlIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIGNsaWVudCB0eXBlLiAKICAgICogUmV0dXJucyBudWxsIGlmIHN1Y2ggYSBzZXJ2ZXIgdHlwZSBjYW5ub3QgYmUgZm91bmQuCiAgICAqLyAgICAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0Q2xpZW50U2VydmVyVmFsdWVGb3IoU3RyaW5nIHR5cGVJZCkJewkJCi0JCVBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotCQlTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkJU3RyaW5nIGZpcnN0ID0gbnVsbDsvL3RoZSBmaXJzdCBzZXJ2ZXIgZm91bmQJICAKLQkgICAgU3RyaW5nW10gY3J0cyA9IGdldENsaWVudFJ1bnRpbWVzQnlUeXBlKHR5cGVJZCk7Ci0KLQkgICAgaWYgKGNydHMgIT0gbnVsbCkKLQkgICAgewotCSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3J0cy5sZW5ndGg7IGkrKykKLQkgICAgICB7Ci0JICAgICAgICAvL0dldCB0aGUgcnVudGltZXMgdGhhdCB3b3JrIGZvciB0aGUgZmFjZXRzIHJlcXVpcmVkIGZvciB0aGlzIHNlcnZpY2VSdW50aW1lICAgICAgICAKLQkgICAgCVN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRSdW50aW1lKGNydHNbaV0pOwotCSAgICAgICAgZm9yIChpbnQgaj0wOyBqPGZJZHMubGVuZ3RoOyBqKyspCi0JICAgICAgICB7Ci0JICAgICAgICAgIGlmIChmaXJzdCA9PSBudWxsKSB7Ci0JICAgICAgICAJICBmaXJzdCA9IGZJZHNbal07Ci0JICAgICAgICAgIH0KLQkgICAgICAgICAgaWYgKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZC5lcXVhbHMoZklkc1tqXSkpIHsKLQkgICAgICAgIAkgIHJldHVybiBmSWRzW2pdOy8vZm91bmQgdGhlIHByZWZlcnJlZCBvbmUsIHN0b3Agc2VhcmNoaW5nIGFuZCByZXR1cm4gaXQKLQkgICAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgIH0gICAgCi0JICAgIH0KLQkgICAgcmV0dXJuIGZpcnN0OworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0Q2xpZW50U2VydmVyVmFsdWVGb3IoU3RyaW5nIHR5cGVJZCkKKyAgeworICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRUeXBlKHR5cGVJZCk7CisgICAgaWYgKGZJZHM9PW51bGwgfHwgZklkcy5sZW5ndGg9PTApCisgICAgICByZXR1cm4gbnVsbDsKKyAgICAKKyAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKKyAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZJZHMubGVuZ3RoOyBpKyspIHsKKwkJU3RyaW5nIHNlcnZlclR5cGVJZCA9IGZJZHNbaV07CisJCWlmIChzZXJ2ZXJUeXBlSWQuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpIHsKKwkJCXJldHVybiBzZXJ2ZXJUeXBlSWQ7CisJCX0KKwl9CisgICAgcmV0dXJuIGZJZHNbMF07CiAgIH0gICAgCiAgIAotCiAgIC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBjb21iaW5hdGlvbiBvZiBzZXJ2ZXIgdHlwZSwgV2ViIHNlcnZpY2UgcnVudGltZSwgYW5kIFdlYiBzZXJ2aWNlIHR5cGUgaXMKICAgICogc3VwcG9ydGVkLiBVc2VkIGZvciB2YWxpZGF0aW9uLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBlOTU0YzhiLi43MmVjMzZmIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwNy5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMzA1LnF1YWxpZmllcgogQnVuZGxlLUNsYXNzUGF0aDogd3NjLmphciwKICB3ZWJzZXJ2aWNldXRpbHMuamFyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbgpAQCAtNjAsNCArNjAsMyBAQAogIG9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIgogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDViYjliZGEuLmZjNjBlOTggMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMjEsNyArMjEsNCBAQAogICAgICAgICAgICAgICAgd2Vic2VydmljZXV0aWxzLmphcixcCiAgICAgICAgICAgICAgICBNRVRBLUlORi8sXAogICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotIyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjU2MDMzICAgICAgICAgICAgICAKLSMgamFycy5leHRyYS5jbGFzc3BhdGggPSAuLi9qYXZheC54bWwuc29hcC9saWIvc2Fhai5qYXIKLWV4dHJhLmphdmF4LnhtbC5zb2FwPXBsYXRmb3JtOi9wbHVnaW5zL2phdmF4LnhtbC5zb2FwL2xpYi9zYWFqLmphcgotCitqYXJzLmV4dHJhLmNsYXNzcGF0aCA9IC4uL2phdmF4LnhtbC5zb2FwL2xpYi9zYWFqLmphcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9CdWlsZEJlYW5Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0J1aWxkQmVhbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA0ZjExOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0J1aWxkQmVhbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MTExMSAgIDI1MjA2MiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIERvbid0IGRlcGVuZCBvbiBBdXRvQnVpbGQgdG8gY29tcGlsZSBiZWFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgQnVpbGRCZWFuQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdF87Ci0JCi0JLyoKLQkgKiBUaGlzIENvbW1hbmQgYnVpbGRzIHRoZSBzZXJ2aWNlIHByb2plY3QsIGFuZCBhbGwgcHJvamVjdHMgaXQgcmVmZXJlbmNlcy4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKLQkgKiBCdWlsZFByb2plY3RDb21tYW5kIHdoaWNoIG9ubHkgYnVpbGRzIHRoZSBzZXJ2aWNlIHByb2plY3QKLQkgKi8KLQlwdWJsaWMgQnVpbGRCZWFuQ29tbWFuZCgpIHsKLQkJLy9kZWZhdWx0IGNvbnN0cnVjdG9yCi0JfQotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQlJUHJvamVjdFtdIHJlZmVyZW5jZWRQcm9qZWN0czsKLQkJCi0JCXRyeSB7Ci0JCQlyZWZlcmVuY2VkUHJvamVjdHMgPSBwcm9qZWN0Xy5nZXRSZWZlcmVuY2VkUHJvamVjdHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVmZXJlbmNlZFByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJcmVmZXJlbmNlZFByb2plY3RzW2ldLmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQsIG1vbml0b3IpOwotCQkJfQotCQkJcHJvamVjdF8uYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5JTkNSRU1FTlRBTF9CVUlMRCwgbW9uaXRvcik7Ci0JCQkKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlKTsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JCi0JICAvKioKLQkgICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBzZXJ2aWNlIHByb2plY3QgdG8gYmUgYnVpbHQuCi0JICAgKi8KLQkgIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCSAgICB0aGlzLnByb2plY3RfID0gcHJvamVjdDsKLQkgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kLmphdmEKaW5kZXggZTY4OGU2My4uZjBmZjgwMiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZC5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiAgKiAyMDA4MDMwNSAgIDIyMDM3MSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICogMjAwODAzMDUgICAyMjAzNzEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4gLSByZXZlcnRpbmcgcHJldmlvdXMgY2hhbmdlIHRvIDIyMDM3MQogICogMjAwODAzMjYgICAyMjAzNzEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4gLSByZS1hcHBseWluZyAyMjAzNzEKLSAqIDIwMDgxMDAxICAgMjQzODY5IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFdlYiBTZXJ2aWNlIHRvb2xzIGFsbG93aW5nIG1peGVkIEoyRUUgbGV2ZWxzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247CkBAIC0zNyw3ICszNiw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyOwpAQCAtNDYsMTEgKzQ0LDggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC51dGlsLklNb2R1bGVDb25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7CkBAIC02NCw5ICs1OSw2IEBACiAgIC8vbmFtZSBvZiB0aGUgcHJvamVjdCB0byBiZSBjcmVhdGVkCiAgIHByaXZhdGUgU3RyaW5nICAgcHJvamVjdE5hbWU7IAogCi0gIC8vbmFtZSBvZiB0aGUgRUFSIHByb2plY3QgYXNzb2NpYXRlZCB3aXRoIHByb2plY3ROYW1lCi0gIHByaXZhdGUgU3RyaW5nICAgZWFyUHJvamVjdE5hbWU7IAotCiAgIC8vaWQgb2YgdGhlIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoaXMgcHJvamVjdC4KICAgcHJpdmF0ZSBTdHJpbmcgICB0ZW1wbGF0ZUlkOwogICAKQEAgLTIwNyw4ICsxOTksOCBAQAogICAKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIHNldCBvZiBmYWNldHMgdG8gaW5zdGFsbCBvbiB0aGUgbmV3IHByb2plY3QuIFRoZSBzZXQgd2lsbCBjb25zaXN0Ci0gICAqIG9mIHRoZSBoaWdoZXN0IHZlcnNpb24gb2YgZWFjaCBvZiB0aGUgdGVtcGxhdGUncyBmaXhlZCBmYWNldHMgdGhhdCBzYXRpc2ZpZXMKLSAgICogdGhlIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLCB0aGUgZmFjZXQgcnVudGltZSwgYW5kIHRoZSBFQVIgcHJvamVjdCBKMkVFIGxldmVsLgorICAgKiBvZiB0aGUgaGlnaGVzdCB2ZXJzaW9uIG9mIGVhY2ggb2YgdGhlIHRlbXBsYXRlJ3MgZml4ZWQgZmFjZXRzIHRoYXQgc2F0aWZpZXMKKyAgICogYm90aCB0aGUgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMgYW5kIHRoZSBmYWNldCBydW50aW1lLgogICAgKiBAcmV0dXJuIFNldCBhIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUgSVByb2plY3RGYWNldFZlcnNpb24uCiAgICAqLwogICBwcml2YXRlIFNldCBnZXRGYWNldHNUb0FkZCgpCkBAIC0yMjUsMTQgKzIxNywxNCBAQAogICAgICAgLy9XYWxrIHRoZSBmYWNldCB2ZXJzaW9uIGNvbWJpbmF0aW9ucyBpbiBvcmRlciBvZiBkZXNjZW5kaW5nIHZlcnNpb24gbnVtYmVycy4KICAgICAgIGZvciAoaW50IGk9bi0xOyBpPj0wOyBpLS0pCiAgICAgICB7Ci0gICAgICAgIC8vQ2hlY2sgdGhpcyB0ZW1wbGF0ZSBjb21iaW5hdGlvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSAKLSAgICAgICAgLy9yZXF1aXJlZCBmYWNldCB2ZXJzaW9ucywgdGhlIHNlcnZlciBydW50aW1lLCBhbmQgdGhlIEVBUi4gSWYgaXQgaXMsIGNob29zZSBpdC4KKyAgICAgICAgLy9DaGVjayB0aGlzIHRlbXBsYXRlIGNvbWJpbmF0aW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggYm90aCB0aGUgCisgICAgICAgIC8vcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMgYW5kIHRoZSBzZXJ2ZXIgcnVudGltZS4gSWYgaXQgaXMsIGNob29zZSBpdC4KICAgICAgICAgU2V0IGNvbWJpbmF0aW9uID0gYWxsQ29tYmluYXRpb25zW2ldOwogICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHJlcXVpcmVkRmFjZXRWZXJzaW9ucywgY29tYmluYXRpb24pOwogICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQogICAgICAgICB7Ci0gICAgICAgICAgLy9DaGVjayBhZ2FpbnN0IFJ1bnRpbWUgJiBFQVIKLSAgICAgICAgICBpZiAoRmFjZXRVdGlscy5kb2VzUnVudGltZVN1cHBvcnRGYWNldHMoZmFjZXRSdW50aW1lLCBjb21iaW5hdGlvbikgICYmIGRvZXNFQVJTdXBwb3J0RmFjZXRzKGNvbWJpbmF0aW9uKSApCisgICAgICAgICAgLy9DaGVjayBhZ2FpbnN0IFJ1bnRpbWUKKyAgICAgICAgICBpZiAoRmFjZXRVdGlscy5kb2VzUnVudGltZVN1cHBvcnRGYWNldHMoZmFjZXRSdW50aW1lLCBjb21iaW5hdGlvbikpCiAgICAgICAgICAgewogICAgICAgICAgICAgLy9XZSBoYXZlIGEgbWF0Y2guIFVzZSB0aGlzIGNvbWJpbmF0aW9uIG9mIGZhY2V0IHZlcnNpb25zIGZvciBwcm9qZWN0IGNyZWF0aW9uLgogICAgICAgICAgICAgZmFjZXRzID0gY29tYmluYXRpb247CkBAIC0yNjAsMTAgKzI1MiwxMCBAQAogICAgIH0KICAgIAogICAgIC8vVW5saWtlbHkgdG8gZ2V0IHRvIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUsIGJ1dCBpZiB3ZSBkbywgY2hvb3NlIHRoZSBoaWdoZXN0IHZlcnNpb24KLSAgICAvL29mIGVhY2ggZml4ZWQgZmFjZXQgaW4gdGhlIHRlbXBsYXRlIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgcnVudGltZQorICAgIC8vb2YgZWFjaCBmaXhlZCBmYWNldCBpbiB0aGUgdGVtcGxhdGUuCiAgICAgaWYgKGZhY2V0cyA9PSBudWxsKQogICAgIHsKLSAgICAgIGZhY2V0cyA9IGdldEhpZ2hlc3RGYWNldFZlcnNpb25zRnJvbVRlbXBsYXRlQW5kU2VydmVyKCk7CisgICAgICBmYWNldHMgPSBGYWNldFV0aWxzLmdldEluaXRpYWxGYWNldFZlcnNpb25zRnJvbVRlbXBsYXRlKHRlbXBsYXRlSWQpOwogICAgIH0KICAgICAgCiAgICAgcmV0dXJuIGZhY2V0czsKQEAgLTMzNiwxMDEgKzMyOCw4IEBACiAgIHsKICAgICB0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJbnN0YW5jZUlkOwogICB9Ci0gIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3ROYW1lKFN0cmluZyBlYXJQcm9qZWN0KSB7Ci0JICB0aGlzLmVhclByb2plY3ROYW1lID0gZWFyUHJvamVjdDsKLSAgfQorCiAgIAotCXByaXZhdGUgUmVxdWlyZWRGYWNldFZlcnNpb25bXSBnZXRSZXF1aXJlZFdlYkZhY2V0cygpIHsKLQkJcmV0dXJuIG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHsgZ2V0UmVxdWlyZWRGYWNldFZlcnNpb24oCi0JCQkJSU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSwKLQkJCQlKMkVFVXRpbHMuZ2V0V2ViSjJFRVZlcnNpb25Gcm9tRUFSSjJFRVZlcnNpb24oUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhclByb2plY3ROYW1lKSkpIH07Ci0JfQorICAKIAotCXByaXZhdGUgUmVxdWlyZWRGYWNldFZlcnNpb25bXSBnZXRSZXF1aXJlZEFwcENsaWVudEZhY2V0cygpIHsKLQkJcmV0dXJuIG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHsgZ2V0UmVxdWlyZWRGYWNldFZlcnNpb24oCi0JCQkJSU1vZHVsZUNvbnN0YW50cy5KU1RfQVBQQ0xJRU5UX01PRFVMRSwKLQkJCQlKMkVFVXRpbHMuZ2V0QXBwQ2xpZW50SjJFRVZlcnNpb25Gcm9tRUFSSjJFRVZlcnNpb24oUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhclByb2plY3ROYW1lKSkpIH07Ci0JfQotCi0JcHJpdmF0ZSBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIGdldFJlcXVpcmVkRUpCRmFjZXRzKCkgewotCQlyZXR1cm4gbmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uW10geyBnZXRSZXF1aXJlZEZhY2V0VmVyc2lvbigKLQkJCQlJTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFLAotCQkJCUoyRUVVdGlscy5nZXRFSkJKMkVFVmVyc2lvbkZyb21FQVJKMkVFVmVyc2lvbihQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWFyUHJvamVjdE5hbWUpKSkgfTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZG9lc0VBUlN1cHBvcnRGYWNldHMoU2V0IGNvbWJpbmF0aW9uKSB7Ci0JCXRyeSB7Ci0KLQkJCWlmIChlYXJQcm9qZWN0TmFtZSA9PSBudWxsIHx8IGVhclByb2plY3ROYW1lLmxlbmd0aCgpID09IDAKLQkJCQkJfHwgIVByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlYXJQcm9qZWN0TmFtZSkuZXhpc3RzKCkpCi0JCQkJLy8gdGhlIGVhciBkb2VzIG5vdCBleGlzdCBvciB0aGUgcHJvamVjdCB0eXBlIHRlbXBsYXRlIGlzCi0JCQkJLy8gdW5kZWZpbmVkCi0JCQkJcmV0dXJuIHRydWU7Ci0JCQllbHNlIHsKLQkJCQlpZiAoY29tYmluYXRpb25Db250YWluc0ZhY2V0KGNvbWJpbmF0aW9uLCBJTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFKSkKLQkJCQkJcmV0dXJuIEZhY2V0VXRpbHMKLQkJCQkJCQkubWF0Y2goZ2V0UmVxdWlyZWRXZWJGYWNldHMoKSwgY29tYmluYXRpb24pCi0JCQkJCQkJLmlzTWF0Y2goKTsKLQkJCQllbHNlIGlmIChjb21iaW5hdGlvbkNvbnRhaW5zRmFjZXQoY29tYmluYXRpb24sIElNb2R1bGVDb25zdGFudHMuSlNUX0VKQl9NT0RVTEUpKQotCQkJCQlyZXR1cm4gRmFjZXRVdGlscwotCQkJCQkJCS5tYXRjaChnZXRSZXF1aXJlZEVKQkZhY2V0cygpLCBjb21iaW5hdGlvbikKLQkJCQkJCQkuaXNNYXRjaCgpOwotCQkJCWVsc2UgaWYgKGNvbWJpbmF0aW9uQ29udGFpbnNGYWNldChjb21iaW5hdGlvbiwgSU1vZHVsZUNvbnN0YW50cy5KU1RfQVBQQ0xJRU5UX01PRFVMRSkpCi0JCQkJCXJldHVybiBGYWNldFV0aWxzLm1hdGNoKGdldFJlcXVpcmVkQXBwQ2xpZW50RmFjZXRzKCksCi0JCQkJCQkJY29tYmluYXRpb24pLmlzTWF0Y2goKTsKLQkJCQllbHNlCi0JCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gY29tYmluYXRpb25Db250YWluc0ZhY2V0KFNldCBjb21iaW5hdGlvbiwgU3RyaW5nIGZhY2V0TmFtZSkgewotCQlpZiAoY29tYmluYXRpb24gPT0gbnVsbCB8fCBmYWNldE5hbWUgPT0gbnVsbCB8fCBmYWNldE5hbWUubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBmYWxzZTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdGVyID0gY29tYmluYXRpb24uaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0gICAgICAgIAlJUHJvamVjdEZhY2V0VmVyc2lvbiBuZXh0RmFjZXRWZXJzaW9uID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKSBpdGVyLm5leHQoKTsKLSAgICAgICAgCWlmIChmYWNldE5hbWUuZXF1YWxzKG5leHRGYWNldFZlcnNpb24uZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKSkpCi0gICAgICAgIAkJCXJldHVybiB0cnVlOwotCQl9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIFJlcXVpcmVkRmFjZXRWZXJzaW9uIGdldFJlcXVpcmVkRmFjZXRWZXJzaW9uKFN0cmluZyBmYWNldE5hbWUsCi0JCQlTdHJpbmcgZmFjZXRWZXJzaW9uKSB7Ci0JCUlQcm9qZWN0RmFjZXQgcHJvamVjdEZhY2V0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIKLQkJCQkuZ2V0UHJvamVjdEZhY2V0KGZhY2V0TmFtZSk7Ci0JCUlQcm9qZWN0RmFjZXRWZXJzaW9uIHByb2pGYWNldFZlcnNpb24gPSBwcm9qZWN0RmFjZXQKLQkJCQkuZ2V0VmVyc2lvbihmYWNldFZlcnNpb24pOwotCQlSZXF1aXJlZEZhY2V0VmVyc2lvbiByZXFGYWNldFZlcnNpb24gPSBuZXcgUmVxdWlyZWRGYWNldFZlcnNpb24oKTsKLQkJcmVxRmFjZXRWZXJzaW9uLnNldEFsbG93TmV3ZXIoZmFsc2UpOwotCQlyZXFGYWNldFZlcnNpb24uc2V0UHJvamVjdEZhY2V0VmVyc2lvbihwcm9qRmFjZXRWZXJzaW9uKTsKLQkJcmV0dXJuIHJlcUZhY2V0VmVyc2lvbjsKLQl9Ci0KLQkgIHByaXZhdGUgU2V0IGdldEhpZ2hlc3RGYWNldFZlcnNpb25zRnJvbVRlbXBsYXRlQW5kU2VydmVyKCkKLQkgIHsKLQkgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLQkgICAgU2V0IGZpeGVkRmFjZXRzID0gdGVtcGxhdGUuZ2V0Rml4ZWRQcm9qZWN0RmFjZXRzKCk7IAotCSAgICBIYXNoU2V0IGluaXRpYWwgPSBuZXcgSGFzaFNldCgpOyAKLQkgICAgZm9yIChJdGVyYXRvciBpdHIgPSBmaXhlZEZhY2V0cy5pdGVyYXRvcigpOyBpdHIuaGFzTmV4dCgpOyApIAotCSAgICB7IAotCSAgICAgIElQcm9qZWN0RmFjZXQgZmFjZXQgPSAoSVByb2plY3RGYWNldCkgaXRyLm5leHQoKTsgCi0JICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gaGlnaGVzdEZhY2V0VmVyc2lvbiA9IG51bGw7Ci0JICAgICAgdHJ5IHsKLQkgICAgCSAgaGlnaGVzdEZhY2V0VmVyc2lvbiA9IGZhY2V0LmdldExhdGVzdFN1cHBvcnRlZFZlcnNpb24oZmFjZXRSdW50aW1lKTsKLQkgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkgICAgCSAgdHJ5IHsKLQkgICAgCQkgIGhpZ2hlc3RGYWNldFZlcnNpb24gPSBmYWNldC5nZXRMYXRlc3RWZXJzaW9uKCk7Ci0JICAgIAkgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZTIpIHsKLQkgICAgCQkgIC8vbm90IG11Y2ggd2UgY2FuIGRvIGhlcmUKLQkgICAgCSAgfQotCSAgICAJICAKLQkgICAgICB9Ci0JICAgICAgaW5pdGlhbC5hZGQoaGlnaGVzdEZhY2V0VmVyc2lvbik7IAotCSAgICB9ICAgICAgICAgICAgIAotCSAgICAKLQkgICAgcmV0dXJuIGluaXRpYWw7Ci0JICB9CiB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGI5MWY3YmUuLmE4NTc1MDkgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzA3LnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4zMDYucXVhbGlmaWVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvYW50L0FudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2FudC9BbnRTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudC5qYXZhCmluZGV4IDU4YWExMDUuLmE1Y2UyMTMgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvYW50L0FudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50LmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9hbnQvQW50U2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogICogMjAwNjEwMTEgICAxNTkyODMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHByb2plY3Qgbm90IGFzc29jaWF0ZWQgdG8gRUFSIHdoZW4gdXNpbmcgYW50IG9uIGNvbW1hbmQtbGluZQogICogMjAwNzA1MDEgICAxNzgxMjkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdvcmtzcGFjZSByZXBvcnRzICJjcmFzaCBkZXRlY3RlZCIgYWZ0ZXIgcnVubmluZyBXUyBhbnQgdGFzayAoY21kbGluZSkKICAqIDIwMDgwNzI5ICAgMjQxMjc1IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIE5vIFZhbGlkYXRpb24gZXJyb3IgZ2VuZXJhdGluZyBXZWIgU2VydmljZSBjbGllbnQgaWYgZGlhbG9nIGhpZGRlbgotICogMjAwODA5MjUgICAyNDIzMTIgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgQ2Fubm90IGNyZWF0ZSBCVUpCIFdTIGZyb20gQmVhbiBpbiBKYXZhIHByb2plY3QgdXNpbmcgQU5UIHRhc2tzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmFudDsKIApAQCAtMTI2LDcgKzEyNSw2IEBACiAgICAgCiAgICAgLy8gTWFwIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kCiAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxQcm9qZWN0IiwgbnVsbCk7CiAgICAgCSAgCiAJLy8gU2V0dXAgdGhlIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC4JCiAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwpAQCAtMTM2LDcgKzEzNCw2IEBACiAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlVHlwZSIsIG51bGwpOwogCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7CiAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVJ1bnRpbWVJZCIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsUHJvamVjdCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyApOwogCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyApOwogCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlSjJFRVZlcnNpb24iLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURldmVsb3BDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuamF2YQppbmRleCAxYzZkZDM0Li5hODgyMTcxIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogICogMjAwNzEyMjAgICAyMTM2NDAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KICAqIDIwMDgwMzI2ICAgMjIxMzY0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCiAgKiAyMDA4MDcyNCAgIDI0MTI3NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBWYWxpZGF0ZSBXU0RMIGJlZm9yZSBkb2luZyBtYWpvciBXZWIgc2VydmljZSBwcm9jZXNzaW5nLgotICogMjAwODEwMDEgICAyNDM4NjkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV2ViIFNlcnZpY2UgdG9vbHMgYWxsb3dpbmcgbWl4ZWQgSjJFRSBsZXZlbHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247CkBAIC0xODcsNyArMTg2LDYgQEAKIAkJCQkgIGNvbW1hbmQuc2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKHJmdik7CiAJCQkJICBjb21tYW5kLnNldFNlcnZlckZhY3RvcnlJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0U2VydmVySWQoKSk7CiAJCQkJICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCQkJICBjb21tYW5kLnNldEVhclByb2plY3ROYW1lKGVhclByb2plY3RfKTsKIAkJCQkgIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgYWRhcHRhYmxlICk7CiAJCQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQogCQkJCSAgewpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldC5qYXZhCmluZGV4IGZjYzFkM2IuLjg1MmE4ZGUgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0LmphdmEKQEAgLTU4LDcgKzU4LDYgQEAKICAqIDIwMDgwNDE2ICAgMjE1MDg0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKICAqIDIwMDgwNDE3ICAgMjI3NTk5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCiAgKiAyMDA4MDYxMyAgIDIzNjUyMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgT3ZlcndyaXRlIHNldHRpbmcgb24gV2ViIHNlcnZpY2Ugd2l6YXJkIGlzIGNvdXBsZWQgd2l0aCBwcmVmZXJlbmNlCi0gKiAyMDA5MDkyNiAgIDI0ODQ0OCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIFNob3VsZCBub3QgcmVzaXplIFdTIFdpemFyZCBmb3IgbG9uZyBXU0RMIGZpbGUgbmFtZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czsKIApAQCAtMzk1LDggKzM5NCw3IEBACiAJCQlzZXJ2aWNlTGFiZWxfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fVEVYVF9JTVBMKTsKIAogCQkJc2VydmljZUltcGxfID0gbmV3IFRleHQodHlwZUNvbXBvc2l0ZSwgU1dULkxFRlQgfCBTV1QuQk9SREVSICk7Ci0JCQlHcmlkRGF0YSBncmlkZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotCQkJZ3JpZGRhdGEud2lkdGhIaW50ID0gMjI1OworCQkJR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsJCSAgICAKIAkJCXNlcnZpY2VJbXBsXy5zZXRMYXlvdXREYXRhKCBncmlkZGF0YSApOwogCQkJc2VydmljZUltcGxfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fVEVYVF9JTVBMKTsKIAkJCXV0aWxzXy5jcmVhdGVJbmZvUG9wKHNlcnZpY2VJbXBsXywgSU5GT1BPUF9XU1dTQ0VOX1RFWFRfU0VSVklDRV9JTVBMKTsKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL1NlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKaW5kZXggNWI2ZDU1NS4uZjljN2RiZSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKICAqIDIwMDgwNDAyICAgMjI1MDMyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCiAgKiAyMDA4MDUyNyAgIDIzNDIyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgogICogMjAwODA3MzAgICAyNDI2MTEgemhhbmdAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDkyNSAgIDI0MjMxMiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBDYW5ub3QgY3JlYXRlIEJVSkIgV1MgZnJvbSBCZWFuIGluIEphdmEgcHJvamVjdCB1c2luZyBBTlQgdGFza3MKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lOwogCkBAIC0xMTcsMjMgKzExNiwxMyBAQAogICAgICB7CiAgICAgICAgLy9TZXQgdGhlIHNlcnZpY2VSdW50aW1lIGJhc2VkIG9uIHRoZSBydW50aW1lIGFuZCBzZXJ2ZXIuCiAgICAgICAgLy9JZiB1c2VyIHNldCBhIHNlcnZpY2UgcHJvamVjdCB1c2UgdGhhdCBhcyBpbml0aWFsIHByb2plY3Qgb3RoZXJ3aXNlIGRlZmF1bHQgZnJvbSBpbml0aWFsIHNlbGVjdGlvbi4KLSAgICAgICAvLyhhYm92ZSBpcyB0cnVlIGZvciBhbGwgc2NlbmFyaW9zIGV4Y2VwdCBCVUogZnJvbSBKYXZhIFByb2plY3QtIGZvciBCVUogZnJvbSBKYXZhIFByb2plY3QgbmVlZCB0byBjcmVhdGUgYSBkZXBlbmRhbmN5IGluIGRvd25zdHJlYW0gY29tbWFuZHMKLSAgICAgICAvL2JldHdlZW4gdGhlIGluaXRpYWwgcHJvamVjdCBhbmQgdGhlIHNlcnZpY2UgcHJvamVjdCBzbyBkb24ndCB1c2UgYXMgdGhlIGluaXRpYWwgc2VsZWN0aW9uICAgICAgICAKICAgICAJIGlmIChzZXJ2aWNlUHJvamVjdE5hbWVfICE9IG51bGwpIAogICAgIAkgewotICAgIAkgCSBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfKTsKLSAgICAJIAkgLy91c2UgdGhlIHVzZXIgcHJvdmlkZWQgc2VydmljZSBwcm9qZWN0IHRvIGRlZmluZSB0aGUgcnVudGltZSB0cmlwbGV0IChpZiB1c2VyIHByb3ZpZGVkIHNlcnZpY2UgcHJvamVjdCBpcyBub3QgdmFsaWQgZm9yCi0gICAgCSAJIC8vdGhlIHdlYiBzZXJ2aWNlIHR5cGUsIHRoZSBydW50aW1lIHRyaXBsZXQgd2lsbCBjb250YWluIGEgc3VpdGFibGUgcHJvamVjdCBpZiBvbmUgZXhpc3RzKQotICAgIAkgCSBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gZ2V0RGVmYXVsdFJ1bnRpbWUoc2VydmljZVByb2plY3QsIHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpLCBmYWxzZSwgc2VydmljZUlkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgCQkgaWYgKCEoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpKSA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVAgJiYKLSAgICAJCSAgICAJCUZhY2V0VXRpbHMuaXNKYXZhUHJvamVjdChpbml0aWFsUHJvamVjdF8pKSl7Ci0gICAgCQkgICAgIC8vdXNlciBzZXQgYSBzZXJ2aWNlIHByb2plY3QsIHVzZSBhcyBpbml0aWFsIHByb2plY3QKLSAgICAJCQkgLy9pbml0aWFsUHJvamVjdF8gaXMgdGhlIHByb2plY3Qgd2hlcmUgdGhlIHNlbGVjdGVkIG9iamVjdCByZXNpZGVzLCBzZXQgdG8gYmUgdGhlIHNlcnZpY2UgcHJvamVjdCBmb3Igbm93IGZvciBhbGwgc2NlbmFyaW9zIGV4Y2VwdCBCVUogZnJvbSBKYXZhIFByb2plY3QgKGZvciAKLSAgICAJCQkgLy9CVUogZnJvbSBKYXZhIFByb2plY3QgbmVlZCB0byBjcmVhdGUgYSBkZXBlbmRhbmN5IGluIGRvd25zdHJlYW0gY29tbWFuZHMgYmV0d2VlbiB0aGUgaW5pdGlhbCBwcm9qZWN0IGFuZCB0aGUgc2VydmljZSBwcm9qZWN0KQotICAgIAkJCSBpbml0aWFsUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLSAgICAJCSB9Ci0gICAgCQkgc2VydmljZUZhY2V0TWF0Y2hlcl8gPSBkcnQuZ2V0RmFjZXRNYXRjaGVyKCk7Ci0gICAJCQkgc2VydmljZVByb2plY3ROYW1lXyA9IGRydC5nZXRQcm9qZWN0TmFtZSgpOyAvL2Egc3VpdGFibGUgc2VydmljZSBwcm9qZWN0IGZvciB0aGUgd2ViIHNlcnZpY2UgdHlwZSwgb3IgbnVsbCBpZiBhIHN1aXRhYmxlIHByb2plY3QgZG9lcyBub3QgZXhpc3QKKyAgICAJCSBpbml0aWFsUHJvamVjdF8gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3Qoc2VydmljZVByb2plY3ROYW1lXyk7CisgICAgCQkgCisgICAgCQkgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IGdldERlZmF1bHRSdW50aW1lKGluaXRpYWxQcm9qZWN0Xywgc2VydmljZUlkc18uZ2V0VHlwZUlkKCksIGZhbHNlLCBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJZCgpKTsKKyAgICAgICAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKKyAgICAJICAgICBzZXJ2aWNlUHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7CiAgICAgCSAgICAgc2VydmljZVJ1bnRpbWVJZF8gPSBkcnQuZ2V0UnVudGltZUlkKCk7ICAgICAgIAogCiAgICAgCSAgICAgICBpZiAoc2VydmljZVJ1bnRpbWVJZF8gIT0gbnVsbCkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY2xhc3NwYXRoCmluZGV4IDMwNGU4NjEuLmNlNzM5MzMgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jbGFzc3BhdGgKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLmNsYXNzcGF0aApAQCAtMSw3ICsxLDcgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8Y2xhc3NwYXRoPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+CiA8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwppbmRleCA0MTY1MTU5Li5hYzUyODRmIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0xLDIxICsxLDIxIEBACi0jV2VkIE9jdCAwMSAwNzoyMDowMiBFRFQgMjAwOAorI01vbiBKYW4gMzAgMTA6MzU6MjYgRVNUIDIwMDYKIGVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgogb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40CiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQogb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQogb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKQEAgLTU0LDQgKzU0LDQgQEAKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAogb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA0NmMzMjRmLi5mZjA5OTNkIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cwotQnVuZGxlLVZlcnNpb246IDEuMC4zMDcucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjMwNS5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbgogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCkBAIC00NCw0ICs0NCw0IEBACiAgY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIgogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KMkVFVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVVdGlscy5qYXZhCmluZGV4IGI1ZGJmY2QuLjc2MzE3YzAgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVVdGlscy5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVVdGlscy5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTE5LDggKzE5LDYgQEAKICAqIDIwMDcwMTIzICAgMjE2MzQ1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKICAqIDIwMDgwMjEyICAgMjA4Nzk1IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIFdTIHdpemFyZCBmcmFtZXdvcmsgc2hvdWxkIHN1cHBvcnQgRUpCIDMuMAogICogMjAwODAyMjkgICAyMTg2OTYgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgQVBJcyB1c2luZyBFSkJBcnRpZmFjdEVkaXQgbm90IGFibGUgdG8gZGVhbCB3aXRoIHNvbWUgRUpCIDMuMCBiZWFucyBwcm9wZXJseQotICogMjAwODEwMDEgICAyNDM4NjkgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV2ViIFNlcnZpY2UgdG9vbHMgYWxsb3dpbmcgbWl4ZWQgSjJFRSBsZXZlbHMKLSAqIDIwMDkwMTE0ICAgMjYxMDg3IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIE5vIHdheSB0byBnZXQgbWV0YS1pbmYgcGF0aCBmb3IgYSBwcm9qZWN0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwpAQCAtNjcsNyArNjUsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnByb2plY3QuSjJFRVByb2plY3RVdGlsaXRpZXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuSU1vZGVsUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuTW9kZWxQcm92aWRlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5FYXJVdGlsaXRpZXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5mYWNldC5JSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuZmFjZXQuSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm92aWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5FbnRlcnByaXNlQmVhbnM7CkBAIC0xMDI4LDkyICsxMDI1LDggQEAKIAkJfQogICAgICAgICAgICAgCiAJfQotCSAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcHJvamVjdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGVhclByb2plY3Qgc2FmZWx5LgotICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHByb2plY3QgaXMgYSBXZWIgcHJvamVjdCwgRUpCIHByb2plY3QsIG9yIEFwcENsaWVudAotICAgICAqIHByb2plY3QgdGhhdCBjYW4gc2FmZWx5IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSIHByb2plY3QuIAotICAgICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHByb2plY3QgaXMgYSBXZWIgcHJvamVjdCwgCi0gICAgICogRUpCIHByb2plY3QsIG9yIEFwcENsaWVudCBwcm9qZWN0IHRoYXQgY2Fubm90IGJlIGFzc29jaWF0ZWQgc2FmZWx5IHdpdGggdGhlIEVBUiBwcm9qZWN0LCBhbmQKLSAgICAgKiB0cnVlIGlmIHByb2plY3QgaXMgbm90IHJlY29nbml6ZWQgYXMgYSBXZWIsIEVKQiwgb3IKLSAgICAgKiBBcHBDbGllbnQgcHJvamVjdCwgYW5kIHR1cmUgaWYgZWFyUHJvamVjdCBpcyBub3QgcmVjb2duaXplZCBhcyBhbiBFQVIgcHJvamVjdC4KLSAgICAgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSV2l0aG91dFdhcm5pbmcoSVByb2plY3QgcHJvamVjdCwgSVByb2plY3QgZWFyUHJvamVjdCkgewotCQkgIGJvb2xlYW4gdG9SZXR1cm4gPSB0cnVlOwotCSAgICAgIGJvb2xlYW4gaXNXZWIgPSBpc1dlYkNvbXBvbmVudChwcm9qZWN0KTsKLQkgICAgICBib29sZWFuIGlzRUpCID0gaXNFSkJDb21wb25lbnQocHJvamVjdCk7Ci0JICAgICAgYm9vbGVhbiBpc0FwcENsaWVudCA9IGlzQXBwQ2xpZW50Q29tcG9uZW50KHByb2plY3QpOwotCSAgICAgIGJvb2xlYW4gaXNFQVIgPSBpc0VBUkNvbXBvbmVudChlYXJQcm9qZWN0KTsKLQkgICAgICBpZiAoKGlzV2ViIHx8IGlzRUpCIHx8IGlzQXBwQ2xpZW50KSAmJiBpc0VBUikKLQkgICAgICB7ICAgICAgICAKLQkgICAgICAgIHRyeQotCSAgICAgICAgewotCSAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0JICAgICAgICAgIElGYWNldGVkUHJvamVjdCBmRWFyUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShlYXJQcm9qZWN0KTsKLQkgICAgICAgICAgCi0JICAgICAgICAgIElQcm9qZWN0RmFjZXQgZWFyUGYgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEUpOwotCSAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBlYXJQZnYgPSBmRWFyUHJvamVjdC5nZXRJbnN0YWxsZWRWZXJzaW9uKGVhclBmKTsKLQkgICAgICAgICAgU3RyaW5nIGNvbXBhcmVWZXJzaW9uOwotCSAgICAgICAgICBMaXN0PElQcm9qZWN0RmFjZXRWZXJzaW9uPiBzdXBwb3J0ZWRGYWNldFZlcnNpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxJUHJvamVjdEZhY2V0VmVyc2lvbj4oKTsKLQkgICAgICAgICAgaWYgKGlzV2ViKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldCB3ZWJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSk7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gd2ViUGZ2ID0gZlByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbih3ZWJQZik7Ci0JICAgICAgICAgICAgc3VwcG9ydGVkRmFjZXRWZXJzaW9uTGlzdCA9IEVhclV0aWxpdGllcy5nZXRTdXBwb3J0ZWRGYWNldHMoZWFyUGZ2LCB3ZWJQZik7Ci0JICAgICAgICAgICAgdG9SZXR1cm4gPSBmYWxzZTsKLQkgICAgICAgICAgICBmb3IgKElQcm9qZWN0RmFjZXRWZXJzaW9uIHN1cHBvcnRlZEZhY2V0VmVyc2lvbiA6IHN1cHBvcnRlZEZhY2V0VmVyc2lvbkxpc3QgKSB7Ci0JICAgICAgICAgICAgCUlQcm9qZWN0RmFjZXRWZXJzaW9uIG5leHQgPSBzdXBwb3J0ZWRGYWNldFZlcnNpb247Ci0JICAgICAgICAgICAgCWNvbXBhcmVWZXJzaW9uID0gd2ViUGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLQkgICAgICAgICAgICAJaWYgKG5leHQhPSBudWxsICYmIGNvbXBhcmVWZXJzaW9uIT1udWxsICYmIGNvbXBhcmVWZXJzaW9uLmNvbXBhcmVUbyhuZXh0LmdldFZlcnNpb25TdHJpbmcoKSkgPT0gMCkgeyAKLQkgICAgICAgICAgICAJCXRvUmV0dXJuID0gdHJ1ZTsKLQkgICAgICAgICAgICAJCWJyZWFrOwotCSAgICAgICAgICAgIAl9Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICAgIAotCSAgICAgICAgICB9Ci0JICAgICAgICAgIGVsc2UgaWYgKGlzRUpCKSAgICAgICAgICAgIAotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldCBlamJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUpCX01PRFVMRSk7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gZWpiUGZ2ID0gZlByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbihlamJQZik7Ci0JICAgICAgICAgICAgc3VwcG9ydGVkRmFjZXRWZXJzaW9uTGlzdCA9IEVhclV0aWxpdGllcy5nZXRTdXBwb3J0ZWRGYWNldHMoZWFyUGZ2LCBlamJQZik7Ci0JICAgICAgICAgICAgdG9SZXR1cm4gPSBmYWxzZTsKLQkgICAgICAgICAgICBmb3IgKElQcm9qZWN0RmFjZXRWZXJzaW9uIHN1cHBvcnRlZEZhY2V0VmVyc2lvbiA6IHN1cHBvcnRlZEZhY2V0VmVyc2lvbkxpc3QgKSB7Ci0JICAgICAgICAgICAgCUlQcm9qZWN0RmFjZXRWZXJzaW9uIG5leHQgPSBzdXBwb3J0ZWRGYWNldFZlcnNpb247Ci0JICAgICAgICAgICAgCWNvbXBhcmVWZXJzaW9uID0gZWpiUGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLQkgICAgICAgICAgICAJaWYgKG5leHQhPSBudWxsICYmIGNvbXBhcmVWZXJzaW9uIT1udWxsICYmIGNvbXBhcmVWZXJzaW9uLmNvbXBhcmVUbyhuZXh0LmdldFZlcnNpb25TdHJpbmcoKSkgPT0gMCkgeyAKLQkgICAgICAgICAgICAJCXRvUmV0dXJuID0gdHJ1ZTsKLQkgICAgICAgICAgICAJCWJyZWFrOwotCSAgICAgICAgICAgIAl9Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICAgIAotCSAgICAgICAgICB9Ci0JICAgICAgICAgIGVsc2UgaWYgKGlzQXBwQ2xpZW50KQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgSVByb2plY3RGYWNldCBhY1BmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9BUFBDTElFTlRfTU9EVUxFKTsKLQkgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBhY1BmdiA9IGZQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oYWNQZik7Ci0JICAgICAgICAgICAgc3VwcG9ydGVkRmFjZXRWZXJzaW9uTGlzdCA9IEVhclV0aWxpdGllcy5nZXRTdXBwb3J0ZWRGYWNldHMoZWFyUGZ2LCBhY1BmKTsKLQkgICAgICAgICAgICB0b1JldHVybiA9IGZhbHNlOwotCSAgICAgICAgICAgIGZvciAoSVByb2plY3RGYWNldFZlcnNpb24gc3VwcG9ydGVkRmFjZXRWZXJzaW9uIDogc3VwcG9ydGVkRmFjZXRWZXJzaW9uTGlzdCApIHsKLQkgICAgICAgICAgICAJSVByb2plY3RGYWNldFZlcnNpb24gbmV4dCA9IHN1cHBvcnRlZEZhY2V0VmVyc2lvbjsKLQkgICAgICAgICAgICAJY29tcGFyZVZlcnNpb24gPSBhY1Bmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0JICAgICAgICAgICAgCWlmIChuZXh0IT0gbnVsbCAmJiBjb21wYXJlVmVyc2lvbiE9bnVsbCAmJiBjb21wYXJlVmVyc2lvbi5jb21wYXJlVG8obmV4dC5nZXRWZXJzaW9uU3RyaW5nKCkpID09IDApIHsgCi0JICAgICAgICAgICAgCQl0b1JldHVybiA9IHRydWU7Ci0JICAgICAgICAgICAgCQlicmVhazsKLQkgICAgICAgICAgICAJfQotCSAgICAgICAgICAgIH0KLQotCSAgICAgICAgICB9IAotCSAgICAgICAgICAKLQkgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgICAgICAgewotCSAgICAgICAgICAvL25vdCBtdWNoIHdlIGNhbiBkbyBoZXJlLCByZXR1cm4gd2hhdCB3ZSd2ZSBjYWxjdWxhdGVkIHRodXMgZmFyCi0JICAgICAgICB9ICAgICAgICAgCi0JICAgICAgfQotCi0JCQotCQlyZXR1cm4gdG9SZXR1cm47Ci0JCQotCX0KLSAgICAvKioKKyAgICAKKyAgICAvKgogICAgICAqIERldGVybWluZXMgd2hldGhlciBwcm9qZWN0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggZWFyUHJvamVjdC4KICAgICAgKiBAcmV0dXJucyBJU3RhdHVzIG9mIE9LIGlmIHRoZSBwcm9qZWN0IGlzIGEgV2ViIHByb2plY3QsIEVKQiBwcm9qZWN0LCBvciBBcHBDbGllbnQKICAgICAgKiBwcm9qZWN0IHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSIHByb2plY3QuIApAQCAtMTEyMyw3ICsxMDM2LDYgQEAKICAgICAgKiBsb3dlc3QgSjJFRSBsZXZlbCB0aGF0IHRoaXMgcHJvamVjdCByZXF1aXJlcyBvbiBhbiBFQVIuCiAgICAgICogUmV0dXJucyBhbiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgT0sgaWYgcHJvamVjdCBpcyBub3QgcmVjb2duaXplZCBhcyBhIFdlYiwgRUpCLCBvcgogICAgICAqIEFwcENsaWVudCBwcm9qZWN0IG9yIGlmIGVhclByb2plY3QgaXMgbm90IHJlY29nbml6ZWQgYXMgYW4gRUFSIHByb2plY3QuCi0gICAgICogQGRlcHJlY2F0ZWQgdXNlIGNhbkFzc29jaWF0ZVByb2plY3RUb0VBUldpdGhvdXRXYXJuaW5nKElQcm9qZWN0IHByb2plY3QsIElQcm9qZWN0IGVhclByb2plY3QpCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGNhbkFzc29jaWF0ZVByb2plY3RUb0VBUihJUHJvamVjdCBwcm9qZWN0LCBJUHJvamVjdCBlYXJQcm9qZWN0KQogICAgIHsKQEAgLTEyNzYsMzEgKzExODgsNyBAQAogCQl9CQkKIAkJcmV0dXJuIG1vZHVsZVBhdGg7CiAJfQotCi0JLyoqCi0JICAgKiBAcGFyYW0gcHJvamVjdAotCSAgICogQHJldHVybgotCSAgICovCi0JCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0TWV0YUluZlBhdGgoSVByb2plY3QgcHJvamVjdCl7Ci0JCQkKLQkJCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCi0JCQkvL3Nob3VsZCBNRVRBLUlORiBsb2NhdGlvbiBiZSBwdWxsZWQgaW4gZnJvbSB0aGUgLmNvbXBvbmVudCBmaWxlIHJhdGhlciB0aGFuIGhhcmRjb2RlZCBoZXJlPwotCQkJSVZpcnR1YWxGb2xkZXIgbWV0YUluZkRpciA9IGNvbXBvbmVudC5nZXRSb290Rm9sZGVyKCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKCIvTUVUQS1JTkYiKSk7Ci0JCQlJUGF0aCBtb2R1bGVQYXRoID0gbWV0YUluZkRpci5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKTsKLQkJCQotCQkJaWYgKCFtZXRhSW5mRGlyLmV4aXN0cygpKQotCQkJewkKLQkJCQl0cnkgCi0JCQkJewkKLQkJCQkJbWV0YUluZkRpci5jcmVhdGUoMCxudWxsKTsJCQkJCi0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCQkJe30KLQkJCX0JCQotCQkJcmV0dXJuIG1vZHVsZVBhdGg7Ci0JCX0KLQorCQogCQogCS8qKgogCSAqIApAQCAtMTY0Nyw2NyArMTUzNSw1IEBACiAJCQkgIGptLmpvaW4oSjJFRUNvbXBvbmVudENsYXNzcGF0aFVwZGF0ZXIuTU9EVUxFX1VQREFURV9KT0JfTkFNRSwgbnVsbCk7CiAJCSAgfWNhdGNoKEV4Y2VwdGlvbiBleGMpe30KIAkgIH0KLQkgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB0aGUgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUgZmFjZXQgdmVyc2lvbiB0aGF0Ci0gICAgICogbWF0Y2hlcyB0aGUgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEUgZmFjZXQgdmVyc2lvbgotICAgICAqIEByZXR1cm5zIHRoZSB2ZXJzaW9uIFN0cmluZyBmb3IgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUgZmFjZXQsIGlmIHRoZXJlIGlzIHByb2JsZW0KLSAgICAgKiB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uLCBlaXRoZXIgdGhlIGRlZmF1bHQgdmVyc2lvbiBvciB0aGUgbGF0ZXN0IHN1cHBvcnRlZCB2ZXJzaW9uCi0gICAgICogd2lsbCBiZSByZXR1cm5lZAotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYkoyRUVWZXJzaW9uRnJvbUVBUkoyRUVWZXJzaW9uKElQcm9qZWN0IGVhclByb2plY3QpIHsKLQkJU3RyaW5nIHJldHVyblZlcnNpb24gPSBFYXJVdGlsaXRpZXMuRFlOQU1JQ19XRUJfRkFDRVQuZ2V0RGVmYXVsdFZlcnNpb24oKS5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0JCXRyeSB7Ci0JCXJldHVyblZlcnNpb24gPSBFYXJVdGlsaXRpZXMuRFlOQU1JQ19XRUJfRkFDRVQuZ2V0TGF0ZXN0VmVyc2lvbigpLmdldFZlcnNpb25TdHJpbmcoKTsKLQkgICAgSUZhY2V0ZWRQcm9qZWN0IGZFYXJQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKGVhclByb2plY3QpOwotCSAgICBJUHJvamVjdEZhY2V0IGVhclBmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FQVJfTU9EVUxFKTsKLQkgICAgSVByb2plY3RGYWNldFZlcnNpb24gZWFyUGZ2ID0gZkVhclByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbihlYXJQZik7Ci0JICAgIElQcm9qZWN0RmFjZXQgd2ViUGYgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUpOwotCSAgICByZXR1cm5WZXJzaW9uPSBFYXJVdGlsaXRpZXMuZ2V0U3VwcG9ydGVkRmFjZXRzKGVhclBmdiwgd2ViUGYpLmdldCgwKS5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvL25vdGhpbmcgd2UgY2FuIGRvIGhlcmUsIHJldHVybiB3aGF0IHdlIGhhdmUgY2FsY3VsYXRlZCB0aHVzIGZhcgotCQl9Ci0JICAgIHJldHVybiByZXR1cm5WZXJzaW9uOwotCX0KLQkgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB0aGUgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0FQUENMSUVOVF9NT0RVTEUgZmFjZXQgdmVyc2lvbiB0aGF0Ci0gICAgICogbWF0Y2hlcyB0aGUgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEUgZmFjZXQgdmVyc2lvbgotICAgICAqIEByZXR1cm5zIHRoZSB2ZXJzaW9uIFN0cmluZyBmb3IgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0FQUENMSUVOVF9NT0RVTEUgZmFjZXQsIGlmIHRoZXJlIGlzIHByb2JsZW0KLSAgICAgKiB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uLCBlaXRoZXIgdGhlIGRlZmF1bHQgdmVyc2lvbiBvciB0aGUgbGF0ZXN0IHN1cHBvcnRlZCB2ZXJzaW9uCi0gICAgICogd2lsbCBiZSByZXR1cm5lZAotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFwcENsaWVudEoyRUVWZXJzaW9uRnJvbUVBUkoyRUVWZXJzaW9uKElQcm9qZWN0IGVhclByb2plY3QpIHsKLQkJU3RyaW5nIHJldHVyblZlcnNpb24gPSBFYXJVdGlsaXRpZXMuQVBQTElDQVRJT05fQ0xJRU5UX0ZBQ0VULmdldERlZmF1bHRWZXJzaW9uKCkuZ2V0VmVyc2lvblN0cmluZygpOwotCQl0cnkgewotCQlyZXR1cm5WZXJzaW9uID0gRWFyVXRpbGl0aWVzLkFQUExJQ0FUSU9OX0NMSUVOVF9GQUNFVC5nZXRMYXRlc3RWZXJzaW9uKCkuZ2V0VmVyc2lvblN0cmluZygpOwotCSAgICBJRmFjZXRlZFByb2plY3QgZkVhclByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUoZWFyUHJvamVjdCk7Ci0JICAgIElQcm9qZWN0RmFjZXQgZWFyUGYgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEUpOwotCSAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBlYXJQZnYgPSBmRWFyUHJvamVjdC5nZXRJbnN0YWxsZWRWZXJzaW9uKGVhclBmKTsKLQkgICAgSVByb2plY3RGYWNldCBhY1BmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9BUFBDTElFTlRfTU9EVUxFKTsKLQkgICAgcmV0dXJuVmVyc2lvbj0gRWFyVXRpbGl0aWVzLmdldFN1cHBvcnRlZEZhY2V0cyhlYXJQZnYsIGFjUGYpLmdldCgwKS5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvL25vdGhpbmcgd2UgY2FuIGRvIGhlcmUsIHJldHVybiB3aGF0IHdlIGhhdmUgY2FsY3VsYXRlZCB0aHVzIGZhcgotCQl9Ci0JICAgIHJldHVybiByZXR1cm5WZXJzaW9uOwotCX0KLQkgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB0aGUgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VKQl9NT0RVTEUgZmFjZXQgdmVyc2lvbiB0aGF0Ci0gICAgICogbWF0Y2hlcyB0aGUgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEUgZmFjZXQgdmVyc2lvbgotICAgICAqIEByZXR1cm5zIHRoZSB2ZXJzaW9uIFN0cmluZyBmb3IgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VKQl9NT0RVTEUgZmFjZXQsIGlmIHRoZXJlIGlzIHByb2JsZW0KLSAgICAgKiB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uLCBlaXRoZXIgdGhlIGRlZmF1bHQgdmVyc2lvbiBvciB0aGUgbGF0ZXN0IHN1cHBvcnRlZCB2ZXJzaW9uCi0gICAgICogd2lsbCBiZSByZXR1cm5lZAotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEVKQkoyRUVWZXJzaW9uRnJvbUVBUkoyRUVWZXJzaW9uKElQcm9qZWN0IGVhclByb2plY3QpIHsKLQkJU3RyaW5nIHJldHVyblZlcnNpb24gPSBFYXJVdGlsaXRpZXMuRUpCX0ZBQ0VULmdldERlZmF1bHRWZXJzaW9uKCkuZ2V0VmVyc2lvblN0cmluZygpOwotCQl0cnkgewotCQlyZXR1cm5WZXJzaW9uID0gRWFyVXRpbGl0aWVzLkVKQl9GQUNFVC5nZXRMYXRlc3RWZXJzaW9uKCkuZ2V0VmVyc2lvblN0cmluZygpOwotCSAgICBJRmFjZXRlZFByb2plY3QgZkVhclByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUoZWFyUHJvamVjdCk7Ci0JICAgIElQcm9qZWN0RmFjZXQgZWFyUGYgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEUpOwotCSAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBlYXJQZnYgPSBmRWFyUHJvamVjdC5nZXRJbnN0YWxsZWRWZXJzaW9uKGVhclBmKTsKLQkgICAgSVByb2plY3RGYWNldCBlamJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUpCX01PRFVMRSk7Ci0JICAgIHJldHVyblZlcnNpb249IEVhclV0aWxpdGllcy5nZXRTdXBwb3J0ZWRGYWNldHMoZWFyUGZ2LCBlamJQZikuZ2V0KDApLmdldFZlcnNpb25TdHJpbmcoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8vbm90aGluZyB3ZSBjYW4gZG8gaGVyZSwgcmV0dXJuIHdoYXQgd2UgaGF2ZSBjYWxjdWxhdGVkIHRodXMgZmFyCi0JCX0KLQkgICAgcmV0dXJuIHJldHVyblZlcnNpb247Ci0JfQorCiB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDZlMzEwOWEuLmFlNzAzZjEgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5wbHVnaW4uRW52VUlQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RmlsZUltcG9ydFdpemFyZFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmRQYWdlLmphdmEKaW5kZXggYWYwMWNkMS4uMGIwNTg2YiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RmlsZUltcG9ydFdpemFyZFBhZ2UuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkUGFnZS5qYXZhCkBAIC0xMyw3ICsxMyw2IEBACiAgKiAyMDA4MDUxMiAgIDIyMjA5NCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRXJyb3IgaGFuZGxpbmcgd2hlbiBBbnQgdGVtcGxhdGUgY2Fubm90IGJlIGZvdW5kCiAgKiAyMDA4MDYxOCAgIDIzNzY3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgTGFiZWwgb24gQW50IGZpbGVzIHdpemFyZCBpcyB0cnVuY2F0ZWQKICAqIDIwMDgwNzE2ICAgMjM4MDU5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBOZXcgYW50IGZpbGVzIHdpemFyZCBub3Qgd29ya2luZwotICogMjAwODEwMjMgICAyNTE5MTEgZXJpY2RwQGNhLmlibS5jb20gICAtIEVyaWMgRC4gUGV0ZXJzLCBOUEUgaW4gLmxvZyB3aGVuIGNob29zaW5nIGFudCBmaWxlcyB0byBpbXBvcnQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwogCkBAIC01MSw2ICs1MCw3IEBACiAJcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxzQW5kSWRzU2NlbmFyaW9fOwogCXByaXZhdGUgTGFiZWxzQW5kSWRzIGxhYmVsc0FuZElkc1J1bnRpbWVfOwogLy8JcHJpdmF0ZSBpbnQgcnVudGltZUlkeF87CisJcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcl87CiAJCiAJcHVibGljIEFudEZpbGVJbXBvcnRXaXphcmRQYWdlKFN0cmluZyBwYWdlTmFtZSwKIAkgICAgICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKQEAgLTEwOSw2ICsxMDksNyBAQAogCQkJCiAJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CiAJCQkJaGFuZGxlUnVudGltZVNlbGVjdGVkKCk7CQkJCQkKKwkJCQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7CQkJICAgCiAJCQl9CiAJCX0pOwogCQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jbGFzc3BhdGgKaW5kZXggMGU2NjUzNC4uZGNlNjJiNiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmNsYXNzcGF0aAorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY2xhc3NwYXRoCkBAIC0yLDcgKzIsNyBAQAogPGNsYXNzcGF0aD4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJhbnQtc3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KIDwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA4ZDFmMmIwLi43YWE2MTNhIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwOC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMzA2LnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbi5FbnZQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L2F4aXNjbGllbnQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzY2xpZW50LnByb3BlcnRpZXMKaW5kZXggNjVlNjU5ZS4uMzVkZGJiMCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L2F4aXNjbGllbnQucHJvcGVydGllcworKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc2NsaWVudC5wcm9wZXJ0aWVzCkBAIC0yNSw3ICsyNSw3IEBACiAhLS1DbGllbnQuUnVudGltZUlkIC0gSUQgb2Ygd2ViIHNlcnZpY2UgcnVudGltZSAKIENsaWVudC5SdW50aW1lSWQ9b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVAogIS0tQ2xpZW50LlNlcnZlcklkIC0gSUQgb2YgdGFyZ2V0IHNlcnZlciAKLUNsaWVudC5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC42MAorQ2xpZW50LlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwCiAKICEtLUNsaWVudFByb2plY3ROYW1lIC0gbmFtZSBvZiBDbGllbnQgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgY2xpZW50IHByb2plY3QgYSAKICEtLSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc3NlcnZpY2UucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzc2VydmljZS5wcm9wZXJ0aWVzCmluZGV4IGRmMTYyMjQuLjEyNmVmZTYgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzc2VydmljZS5wcm9wZXJ0aWVzCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzc2VydmljZS5wcm9wZXJ0aWVzCkBAIC0yNCwxMyArMjQsMTMgQEAKICEtLSAgU2VydmljZS5SdW50aW1lSWQgLSBJRCBvZiB3ZWIgc2VydmljZSBydW50aW1lIAogU2VydmljZS5SdW50aW1lSWQ9b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVAogIS0tIFNlcnZpY2UuU2VydmVySWQgLSAgSUQgb2YgdGFyZ2V0IHNlcnZlciAKLVNlcnZpY2UuU2VydmVySWQ9b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNjAKK1NlcnZpY2UuU2VydmVySWQ9b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAKICEtLSBTZXJ2aWNlLlR5cGVJZCAtIEphdmEgQmVhbiBpcyBkZWZhdWx0IGZvciBib3RoIFRvcCBEb3duIGFuZCBCb3R0b20gVXAKICEtLSBTZXJ2aWNlLlR5cGVJZD1KYXZhIEJlYW4KIAogIS0tIFNlcnZpY2VQcm9qZWN0TmFtZSAtICEtLXR5cGU6U3RyaW5nIC0gbmFtZSBvZiBTZXJ2aWNlIHByb2plY3QgLSB0aGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGdpdmUgdGhlIHNlcnZpY2UgcHJvamVjdCBhIGRpZmZlcmVudCBuYW1lIHRoYW4gdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgaW5pdGlhbCBzZWxlY3Rpb24uICB0eXBlOiBTdHJpbmcgICAgCiAhLS1TZXJ2aWNlUHJvamVjdE5hbWU9c2VydmljZVByb2plY3ROYW1lCi0hLS0gU2VydmljZUVhclByb2plY3ROYW1lIC0gIS0tdHlwZTpTdHJpbmcgLSBuYW1lIG9mIFNlcnZpY2UgRUFSIHByb2plY3QtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBhIGRpZmZlcmVudCBuYW1lIHRoYW4gdGhlIEVBUiBwcm9qZWN0IGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlIHByb2plY3QuICB0eXBlOiBTdHJpbmcKKyEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZwogIS0tU2VydmljZUVhclByb2plY3ROYW1lPXNlcnZpY2VFYXJQcm9qZWN0TmFtZQogCiAhLS0gTWFwcGluZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL1dhaXRGb3JBdXRvQnVpbGRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9XYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZC5qYXZhCmluZGV4IDc1ZDVlNTYuLmQzZDUxZWYgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL1dhaXRGb3JBdXRvQnVpbGRDb21tYW5kLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vV2FpdEZvckF1dG9CdWlsZENvbW1hbmQuamF2YQpAQCAtMTgsMTMgKzE4LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247CiAKLS8qKgotICogQGRlcHJlY2F0ZWQgV2Ugc2hvdWxkIG5vdCBkZXBlbmQgb24gdGhlIGF1dG8gYnVpbGQgdG8gYnVpbGQgcHJvamVjdHMsIHNpbmNlIGF1dG8gYnVpbGQgbWlnaHQgYmUgb2ZmLgotICogVHJ5IHVzaW5nIEJ1aWxkQmVhbkNvbW1hbmQgb3IgQnVpbGRQcm9qZWN0Q29tbWFuZCB0byBidWlsZCB0aGUgcHJvamVjdCBpbnN0ZWFkLiBBbHNvLCB0aGUgam9pbigpIGNhbGwgCi0gKiBjYW4gbGVhZCB0byBkZWFkbG9jayBpbiBzb21lIHNpdHVhdGlvbnMuCi0gKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZEJlYW5Db21tYW5kCi0gKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZFByb2plY3RDb21tYW5kCi0qLyAKKwogcHVibGljIGNsYXNzIFdhaXRGb3JBdXRvQnVpbGRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KIHsKICAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb250aXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYzE4MzVlZi4uNTVhNWU1MiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXI7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDkucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjMwNi5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpAQCAtMzYsOCArMzYsNyBAQAogIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCiAgb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLmpldHR5LAogIG9yZy5lY2xpcHNlLmVxdWlub3guanNwLmphc3Blci5yZWdpc3RyeSwKLSBvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnksCi0gamF2YXgueG1sLnJwYztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIKKyBvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnkKIEVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKIEltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0O3ZlcnNpb249IjIuNC4wIiwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9VUkxVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1VSTFV0aWxzLmphdmEKaW5kZXggZDM1YzY0OS4uYjcwNzBiMyAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1VSTFV0aWxzLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1VSTFV0aWxzLmphdmEKQEAgLTEsMjAgKzEsMTYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKKyAqIAogICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgxMTE5ICAgMjU1Mzc0IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwogCiBpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKIGltcG9ydCBqYXZhLm5ldC5VUkxEZWNvZGVyOwogaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXI7CiAKQEAgLTEwMiwxOSArOTgsNCBAQAogCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIiVNU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTgiLGUpOwogCQl9CiAJfQotCQotCS8qKgotCSAqIEVuY29kZXMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gYSBVUkwgc3RyaW5nLgotCSAqIEBwYXJhbSB1cmxTdHJpbmcgVGhlIFVSTCBzdHJpbmcgdG8gZW5jb2RlIAotCSAqIEByZXR1cm4gVGhlIFVSTCBhcyBhbiBlbmNvZGVkIHN0cmluZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZVVSTFN0cmluZyhTdHJpbmcgdXJsU3RyaW5nKSB7Ci0JCXRyeSB7IAotCQkJVVJJIHVyaSA9IG5ldyBVUkkodXJsU3RyaW5nKTsKLQkJCXJldHVybiB1cmkudG9BU0NJSVN0cmluZygpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy9kbyBub3RoaW5nLCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdHJpbmcKLQkJfQotCQlyZXR1cm4gdXJsU3RyaW5nOwotCX0KIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEVsZW1lbnQuamF2YQppbmRleCBlNDM1NjEyLi5hMjdlYTgwIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExFbGVtZW50LmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMRWxlbWVudC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTEyLDcgKzEyLDYgQEAKICAqIDIwMDYwNzE3ICAgMTQ2NzA3IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgogICogMjAwNzAxMjQgICAxNjc0ODcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwogICogMjAwODAxMTUgICAyMTQ5NTUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODExMTkgICAyNTUzNzQgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uLCBXU0UgZG9lcyBub3QgaGFuZGxlIHV0Zi04IGNoYXJhY3RlcnMgaW4gVVJMcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKIApAQCAtNDQsNyArNDMsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uSFRUUFV0aWxpdHk7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKQEAgLTExMSw3ICsxMDksNyBAQAogCiAgIHB1YmxpYyB2b2lkIHNldFdzZGxVcmwoU3RyaW5nIHdzZGxVcmwpIHsKIAkgIEhUVFBVdGlsaXR5IGh0dHAgPSBuZXcgSFRUUFV0aWxpdHkoKTsKLQkgIHdzZGxVcmxfID0gaHR0cC5oYW5kbGVSZWRpcmVjdChVUkxVdGlscy5lbmNvZGVVUkxTdHJpbmcod3NkbFVybCkpOworCSAgd3NkbFVybF8gPSBodHRwLmhhbmRsZVJlZGlyZWN0KHdzZGxVcmwpOwogICB9CiAKICAgcHVibGljIFN0cmluZyBnZXRXc2RsVXJsKCkgewpAQCAtMjY2LDE4ICsyNjQsMTUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLmFwcGVuZCh4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbik7Ci0KLSAgICAgICAgICAvL2VuY29kZSB0aGUgVVJMIHNvIHRoYXQgU2NoZW1hcyB3aXRoIG5vbi1BU0NJSSBmaWxlbmFtZXMgY2FuIGJlIHJlc29sdmVkCi0gICAgICAgICAgU3RyaW5nIHhzZFNjaGVtYURpcmVjdGl2ZVVSTFN0cmluZyA9IFVSTFV0aWxzLmVuY29kZVVSTFN0cmluZyh4c2RTY2hlbWFEaXJlY3RpdmVVUkwudG9TdHJpbmcoKSk7ICAgICAgCiAgICAgICAgICAgLy8gcmVzb2x2ZSBzY2hlbWEgZGlyZWN0aXZlCiAgICAgICAgICAgWFNEU2NoZW1hIHJlc29sdmVkU2NoZW1hID0geHNkU2NoZW1hRGlyZWN0aXZlLmdldFJlc29sdmVkU2NoZW1hKCk7Ci0gICAgICAgICAgaWYgKHJlc29sdmVkU2NoZW1hID09IG51bGwgJiYgeHNkU2NoZW1hRGlyZWN0aXZlVVJMU3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIHJlc29sdmVkU2NoZW1hID0gZ2V0U2NoZW1hKHhzZFNjaGVtYURpcmVjdGl2ZVVSTFN0cmluZyk7CisgICAgICAgICAgaWYgKHJlc29sdmVkU2NoZW1hID09IG51bGwgJiYgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLmxlbmd0aCgpID4gMCkKKyAgICAgICAgICAgIHJlc29sdmVkU2NoZW1hID0gZ2V0U2NoZW1hKHhzZFNjaGVtYURpcmVjdGl2ZVVSTC50b1N0cmluZygpKTsKICAgICAgICAgICBpZiAocmVzb2x2ZWRTY2hlbWEgIT0gbnVsbCkKICAgICAgICAgICB7Ci0JCQlpZighY2hlY2tTY2hlbWFVUkkoeHNkU2NoZW1hRGlyZWN0aXZlVVJMU3RyaW5nKSl7CisJCQlpZighY2hlY2tTY2hlbWFVUkkoeHNkU2NoZW1hRGlyZWN0aXZlVVJMLnRvU3RyaW5nKCkpKXsKIAkJCQlzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KHJlc29sdmVkU2NoZW1hKTsKLQkJCQlnYXRoZXJTY2hlbWFEaXJlY3RpdmUocmVzb2x2ZWRTY2hlbWEsIHhzZFNjaGVtYURpcmVjdGl2ZVVSTFN0cmluZyk7CisJCQkJZ2F0aGVyU2NoZW1hRGlyZWN0aXZlKHJlc29sdmVkU2NoZW1hLCB4c2RTY2hlbWFEaXJlY3RpdmVVUkwudG9TdHJpbmcoKSk7CiAgICAgICAJCX0KICAgICAgIAkgIH0KICAgICAgICAgfQpAQCAtMzcyLDcgKzM2Nyw2IEBACiAKICAgcHJpdmF0ZSBmaW5hbCBYU0RTY2hlbWEgZ2V0U2NoZW1hKFN0cmluZyBsb2NVUkkpCiAgIHsKLSAgICBsb2NVUkkgPSBVUkxVdGlscy5lbmNvZGVVUkxTdHJpbmcobG9jVVJJKTsKICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEobG9jVVJJKTsKICAgICBpZiAoeHNkU2NoZW1hID09IG51bGwpCiAgICAgewpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMT3BlcmF0aW9uRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMT3BlcmF0aW9uRWxlbWVudC5qYXZhCmluZGV4IDg2NjUxOTAuLjE0NzMzNGQgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETE9wZXJhdGlvbkVsZW1lbnQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExPcGVyYXRpb25FbGVtZW50LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTIsOCArMTIsNiBAQAogICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKICAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCiAgKiAyMDA3MTAyNCAgIDIwNjU1NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDkwNSAgIDI0NjI2NSBtYWh1dGNoQGNhLmlibS5jb20gIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA4MDkxMSAgIDI0NzA5NiBrYXRoeUBjYS5pYm0uY29tICAtIEthdGh5IENoYW4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWw7CiAKQEAgLTM0LDcgKzMyLDYgQEAKIGltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKIGltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKIGltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnk7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkJpbmRpbmdUeXBlczsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7CkBAIC00Niw3ICs0Myw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuTWVzc2FnZUNvbnRleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7CiAKIHB1YmxpYyBjbGFzcyBXU0RMT3BlcmF0aW9uRWxlbWVudCBleHRlbmRzIFdTRExDb21tb25FbGVtZW50CkBAIC0zMzksMjIgKzMzNSw2IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgIGNvbmZpZy5zZXRQYXJ0RW5jb2RpbmcoRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfVVJMKTsKLQotICAgIC8vYnVnIDI0NjI2NTogZm9yIHVzYWJpbGl0eSwgaWYgdGhlIHR5cGUgaXMgYSBzb2FwIGVuY29kZWQgc3RyaW5nIHRoZW4gd2UgZG8gbm90IHdhbnQgdG8gZGlzcGxheSBvciBzZW5kIHRoZSBvcHRpb25hbCAiaWQiIG9yICJocmVmIiBhdHRyaWJ1dGVzCi0gICAgUU5hbWUgdHlwZU5hbWUgPSBwYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgaWYgKHR5cGVOYW1lICE9IG51bGwpIHsKLSAgICAJU3RyaW5nIGxvY2FsUGFydCA9IHR5cGVOYW1lLmdldExvY2FsUGFydCgpOwotICAgIAlTdHJpbmcgbmFtZXNwYWNlVVJJID0gdHlwZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAJaWYgKCJzdHJpbmciLmVxdWFscyhsb2NhbFBhcnQpICYmICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIuZXF1YWxzKG5hbWVzcGFjZVVSSSkgKSB7Ci0gICAgCQlpZiAoY29uZmlnLmdldFhTRENvbXBvbmVudCgpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0gICAgCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHhzZCA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIAkJCXhzZC5nZXRBdHRyaWJ1dGVVc2VzKCkuY2xlYXIoKTsKLSAgICAJCQl4c2QuZ2V0QXR0cmlidXRlQ29udGVudHMoKS5jbGVhcigpOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotICAKICAgICBJWFNERnJhZ21lbnQgZnJhZ21lbnQgPSBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQudG9TdHJpbmcoKSwgcGFydC5nZXROYW1lKCkpOwogICAgICAKICAgICAvLyBsZXQncyBzZWUgaWYgdGhlcmUncyBhIGNvcnJlc3BvbmRpbmcgd3JhcHBlciBmb3IgdGhpcyBmcmFnbWVudApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudC5qYXZhCmluZGV4IDFkMGVhNWQuLmNhOTJjOTcgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTEsNyArMTEsNiBAQAogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCiAgKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICogMjAwODExMTQgICAyNTQ2NzIgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwpAQCAtMjI4LDEzICsyMjcsMTIgQEAKIAkJU3RyaW5nIHByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJX1NPQVBfRU5WLCBuYW1lc3BhY2VUYWJsZSkgKyBGcmFnbWVudENvbnN0YW50cy5DT0xPTjsKIAkJIAogCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CQkJIAkJCSAJCQkJIAorCQkJCisJCQlpZiAobXVzdFVuZGVyc3RhbmQpCisJCQkJZWxlbWVudHNbaV0uc2V0QXR0cmlidXRlKHByZWZpeCArIE1VU1RfVU5ERVJTVEFORCwgIjEiKTsKIAotCQkJaWYgKG11c3RVbmRlcnN0YW5kKXsKLQkJCQllbGVtZW50c1tpXS5zZXRBdHRyaWJ1dGVOUyhGcmFnbWVudENvbnN0YW50cy5OU19VUklfU09BUF9FTlYsIHByZWZpeCArIE1VU1RfVU5ERVJTVEFORCwgIjEiKTsKLQkJCX0KLQkJCWlmIChhY3Rvci5sZW5ndGgoKSA+IDApewotCQkJCWVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZU5TKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV9TT0FQX0VOVixwcmVmaXggKyBBQ1RPUiwgYWN0b3IpOwotCQkJfQorCQkJaWYgKGFjdG9yLmxlbmd0aCgpID4gMCkKKwkJCQllbGVtZW50c1tpXS5zZXRBdHRyaWJ1dGUocHJlZml4ICsgQUNUT1IsIGFjdG9yKTsKIAkJfQogCQkgCiAJCXJldHVybiBlbGVtZW50czsKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUE1lc3NhZ2VQcm9jZXNzb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUE1lc3NhZ2VQcm9jZXNzb3IuamF2YQppbmRleCAwNTMyMTEyLi5kZGVmMzE4IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBNZXNzYWdlUHJvY2Vzc29yLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQTWVzc2FnZVByb2Nlc3Nvci5qYXZhCkBAIC0xMCw3ICsxMCw2IEBACiAgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA4MTAyMCAgIDI1MTI2OSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIFdTRSBTZW5kcyBXcm9uZyBOYW1lc3BhY2UgZm9yIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBTT0FQIGJvZHkKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQ7CiAKQEAgLTc3LDkgKzc2LDggQEAKIAkvKgogCSAqIFJldHJpZXZlcyB0aGUgZW5jb2RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYmluZGluZyBmb3IgdGhlIHNlbGVjdGVkIG9wZXJhdGlvbi4KIAkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25seSBmb3IgUlBDIHN0eWxlIGJpbmRpbmdzLiAgVHdvIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhcmUgcmV0dXJuZWQ6ICAKLQkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBlbmNvZGluZyBuYW1lc3BhY2UgaW4gZWxlbWVudCBbMF0gCi0JICogSWYgdGhlIHVzZSBpcyBlbmNvZGVkIHRoZW4gdGhlIGVuY29kaW5nIHN0eWxlKHMpIGlzIHJldHVybmVkIGluIGVsZW1lbnQgWzFdLiAgSWYgdGhlIHVzZSBpcyBsaXRlcmFsLCAKLQkgKiB0aGVuIGVsZW1lbnRbMV0gaXMgcmV0dXJuZWQgbnVsbC4KKwkgKiBJZiB0aGUgdXNlIGlzIGVuY29kZWQsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVuY29kaW5nIG5hbWVzcGFjZSBpbiBlbGVtZW50IFswXSBhbmQgdGhlIAorCSAqIGVuY29kaW5nIHN0eWxlKHMpIGluIGVsZW1lbnQgWzFdLiAgSWYgdGhlIHVzZSBpcyBsaXRlcmFsLCB0aGVuIGJvdGggdmFsdWVzIHdpbGwgYmUgbnVsbC4KIAkgKi8KIAlwcml2YXRlIFN0cmluZ1tdIGdldEVuY29kaW5nSW5mbyhNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAJCQpAQCAtOTYsOSArOTQsOSBAQAogCQkJCiAJCQlTT0FQQm9keSBzb2FwQm9keSA9IChTT0FQQm9keSkgZTsKIAkJCQotCQkJaW5mb1swXSA9IHNvYXBCb2R5LmdldE5hbWVzcGFjZVVSSSgpOwogCQkJLy8gdXNlPSJlbmNvZGVkIgogCQkJaWYgKCFMSVRFUkFMLmVxdWFscyhzb2FwQm9keS5nZXRVc2UoKSkpIHsKKwkJCQlpbmZvWzBdID0gc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk7CiAJCQkJaW5mb1sxXSA9IGpvaW5FbmNvZGluZ1N0eWxlcyhzb2FwQm9keS5nZXRFbmNvZGluZ1N0eWxlcygpKTsKIAkJCX0KIAkJCQkJCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdXRpbC9Tb2FwSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdXRpbC9Tb2FwSGVscGVyLmphdmEKaW5kZXggZmRkODY3MS4uOGZjODM0NiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3V0aWwvU29hcEhlbHBlci5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NvYXBIZWxwZXIuamF2YQpAQCAtMSwxNyArMSwxNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgorICogCiAgKiBDb250cmlidXRvcnM6CiAgKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCiAgKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKICAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA5MDExOSAgIDI2MTM5NyBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWw7CkBAIC01OCw3ICs1Nyw3IEBACiAgIAogICBwdWJsaWMgc3RhdGljIGZpbmFsIEVsZW1lbnQgY3JlYXRlU29hcEVudmVsb3BlRWxlbWVudChEb2N1bWVudCBkb2MsSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlKQogICB7Ci0JRWxlbWVudCBzb2FwRW52ZWxvcGVFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuVVJJX1NPQVAxMV9FTlYsIENvbnN0YW50cy5OU19QUkVGSVhfU09BUF9FTlYgKyAiOkVudmVsb3BlIik7CisgICAgRWxlbWVudCBzb2FwRW52ZWxvcGVFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNvYXBlbnY6RW52ZWxvcGUiKTsKICAgICBFbnVtZXJhdGlvbiBlID0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUua2V5cygpOwogICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQogICAgIHsKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbi5qYXZhCmluZGV4IDUwNWJkMWUuLjFlM2ZlNGIgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb24uamF2YQpAQCAtMSwxNSArMSwxMiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAgKgogICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgxMTE5ICAgMjU1Mzc0IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgV1NFIGRvZXMgbm90IGhhbmRsZSB1dGYtOCBjaGFyYWN0ZXJzIGluIFVSTHMKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7CkBAIC0zMCw3ICsyNyw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsQWN0aW9uSW5wdXRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwpAQCAtNjgsNyArNjQsNiBAQAogICBwdWJsaWMgYm9vbGVhbiBydW4oKQogICB7CiAgICAgU3RyaW5nIHdzaWxVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMKTsKLSAgICB3c2lsVVJMID0gVVJMVXRpbHMuZW5jb2RlVVJMU3RyaW5nKHdzaWxVUkwpOyAgICAKICAgICBpbnQgaW5zcGVjdGlvblR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9JTlNQRUNUSU9OX1RZUEUpKTsKICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7CiAgICAgTWVzc2FnZVF1ZXVlIG1zZ1F1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kRm9ybS5qc3AKaW5kZXggMGQ1Y2I1YS4uNzFjMzViYyAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRGb3JtLmpzcAorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEZvcm0uanNwCkBAIC0xMSw4ICsxMSw2IEBACiAgKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKiAyMDA4MTEwNiAgIDI1NDUxNiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24sIGZpeCBjb21waWxhdGlvbiBlcnJvciwgcmVtb3ZlIGR1cGxpY2F0ZSB2YXJpYWJsZSBkZWNsYXJhdGlvbgotICogMjAwODEyMTcgICAyNTkxNDAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICU+CiA8JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCkBAIC02NDMsOCArNjQxLDYgQEAKIDwlCiAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvZmluZF9oaWdobGlnaHRlZC5naWYiOwogICAgU3RyaW5nIHRpdGxlOwotICAgLy9UaGUgSlNQIHZhbGlkYXRvciBjbGFpbXMgdGhpcyBzdWJRdWVyeUtleSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpcwotICAgLy9pbnZhbGlkLCBidXQgcmVtb3ZpbmcgaXQgY2F1c2VzIHRoZSBKU1Agbm90IHRvIGNvbXBpbGUgb24gSmV0dHkuCiAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCk7CiAgICBpZiAoc3ViUXVlcnlLZXkgIT0gbnVsbCAmJiBzdWJRdWVyeUtleS5sZW5ndGgoKSA+IDApCiAgICB7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGJkNTUwNjIuLjVjNjIyNmUgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSQogQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zY2hlbWEvc2VydmljZVBvbGljeXVpLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zY2hlbWEvc2VydmljZVBvbGljeXVpLmV4c2QKaW5kZXggNGExMDRjOS4uNTg2YzU1YSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc2NoZW1hL3NlcnZpY2VQb2xpY3l1aS5leHNkCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NjaGVtYS9zZXJ2aWNlUG9saWN5dWkuZXhzZApAQCAtMSwxMCArMSwxMCBAQAogPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KIDwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LnVpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS51aSI+CiA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LnVpIiBpZD0ic2VydmljZXBvbGljeXVpIiBuYW1lPSJTZXJ2aWNlIHBvbGljeSBVSSIvPgotICAgICAgPC9hcHBpbmZvPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kudWkiIGlkPSJzZXJ2aWNlUG9saWN5VUkiIG5hbWU9IlNlcnZpY2UgcG9saWN5IFVJIi8+CisgICAgICA8L2FwcEluZm8+CiAgICAgICA8ZG9jdW1lbnRhdGlvbj4KICAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBleHRlbmRlcnMgdG8gYWRkIHNlcnZpY2UgcG9saWN5IFVJIG9wZXJhdGlvbnMgZm9yIHRoZQogICAgICAgICAgc2VydmljZSBwb2xpY2llcyB0aGF0IHRoZXkgaGF2ZSBhZGRlZC4KQEAgLTEyLDExICsxMiw2IEBACiAgICA8L2Fubm90YXRpb24+CiAKICAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgPG1ldGEuZWxlbWVudCAvPgotICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgPGNvbXBsZXhUeXBlPgogICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzZXJ2aWNlUG9saWN5VUkiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KQEAgLTQwLDkgKzM1LDkgQEAKICAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgIDxhcHBJbmZvPgogICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgogICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICAgPC9hdHRyaWJ1dGU+CiAgICAgICA8L2NvbXBsZXhUeXBlPgpAQCAtMTkyLDEzICsxODcsNiBAQAogICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgogICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlZmF1bHRJdGVtIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGRlZmF1bHQgZm9yIHRoaXMgYm9vbGVhbiBzZWxlY3Rpb24gdGhlIHZhbHVlcyBjYW4gYmUgZWl0aGVyIG9yZy5lY2xpcHNlLndzdC50cnVlIG9yIG9yZy5lY2xpcHNlLndzdC5mYWxzZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgogICAgICAgPC9jb21wbGV4VHlwZT4KICAgIDwvZWxlbWVudD4KIApAQCAtMjkxLDQwICsyNzksNDggQEAKICAgIDwvZWxlbWVudD4KIAogICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KKyAgICAgIDxhcHBJbmZvPgogICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBpbmZvPgorICAgICAgPC9hcHBJbmZvPgogICAgICAgPGRvY3VtZW50YXRpb24+CiAgICAgICAgICAxLjAKICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KICAgIDwvYW5ub3RhdGlvbj4KIAogICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KKyAgICAgIDxhcHBJbmZvPgogICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBpbmZvPgorICAgICAgPC9hcHBJbmZvPgogICAgICAgPGRvY3VtZW50YXRpb24+CiAgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCiAgICAgICA8L2RvY3VtZW50YXRpb24+CiAgICA8L2Fubm90YXRpb24+CiAKICAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+CisgICAgICA8YXBwSW5mbz4KICAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBpbmZvPgorICAgICAgPC9hcHBJbmZvPgogICAgICAgPGRvY3VtZW50YXRpb24+CiAgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQogICAgICAgPC9kb2N1bWVudGF0aW9uPgogICAgPC9hbm5vdGF0aW9uPgogCiAgICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgorICAgICAgPGFwcEluZm8+CiAgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcGluZm8+CisgICAgICA8L2FwcEluZm8+CiAgICAgICA8ZG9jdW1lbnRhdGlvbj4KICAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCiAgICAgICA8L2RvY3VtZW50YXRpb24+CiAgICA8L2Fubm90YXRpb24+CiAKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KIAogPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lSZWdpc3RyeVVJLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lSZWdpc3RyeVVJLmphdmEKaW5kZXggYjQ4MThhNC4uMjk0MDQ5YSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UmVnaXN0cnlVSS5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVJlZ2lzdHJ5VUkuamF2YQpAQCAtMTEsNyArMTEsNiBAQAogICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKICAqIDIwMDgwNDI4ICAgMjI3NTAxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEZpeGVkIHRvTG93ZXJDYXNlIExvY2FsZSBwcm9ibGVtLgotICogMjAwODA4MjkgICAyNDU3NTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQWRkZWQgZGVmYXVsdGluZyBmb3Igc2VsZWN0aW9uIG9wZXJhdGlvbnMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwogCkBAIC0yMyw3ICsyMiw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGVFbnVtOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb25JbmZvOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzLlJlZ2lzdHJ5VXRpbHM7CkBAIC0zMSw3ICsyOSwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lSZWdpc3RyeVVJCiB7CiAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZJQ0VfUE9MSUNZX0lEID0gU2VydmljZVBvbGljeUFjdGl2YXRvclVJLlBMVUdJTl9JRCArICIuc2VydmljZXBvbGljeXVpIjsgLy8kTk9OLU5MUy0xJAotICAgIAorICAKKyAgcHVibGljIFNlcnZpY2VQb2xpY3lSZWdpc3RyeVVJKCkKKyAgeworICB9CisgIAogICBwdWJsaWMgdm9pZCBsb2FkKCBNYXA8U3RyaW5nLCBCYXNlT3BlcmF0aW9uSW1wbD4gb3BlcmF0aW9uTWFwLCBNYXA8U3RyaW5nLCBMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+PiBxdWlja0ZpeGVzICkKICAgewogICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoU0VSVklDRV9QT0xJQ1lfSUQpOwpAQCAtMTIyLDE4ICsxMjQsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgaWNvbiA9IHRydWU7CiAgICAgICAgICAgdXNlRGVmYXVsdERhdGEgPSB0cnVlOwotICAgICAgICB9ICAgCi0gICAgICAgIAotICAgICAgICBkZWZhdWx0SXRlbSA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgImRlZmF1bHRpdGVtIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgZGVmYXVsdEl0ZW0KLSAgICAgICAgaWYoIGRlZmF1bHRJdGVtICE9IG51bGwgJiYgCi0gICAgICAgIAkhZGVmYXVsdEl0ZW0uZXF1YWxzKCBJUG9saWN5U3RhdGVFbnVtLkZBTFNFX0VOVU0pICYmIAotICAgICAgICAJIWRlZmF1bHRJdGVtLmVxdWFscyggSVBvbGljeVN0YXRlRW51bS5UUlVFX0VOVU0gKSApCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvciggIlRoZSBkZWZhdWx0SXRlbSBhdHRyaWJ1dGUgb2YgYSBzZWxlY3Rpb24gZWxlbWVudCBtdXN0IGJlOiAiICsgSVBvbGljeVN0YXRlRW51bS5UUlVFX0VOVU0gKyAiIG9yICIgKyBJUG9saWN5U3RhdGVFbnVtLkZBTFNFX0VOVU0gKyAiLiIgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgfSAgICAgICAgCiAgICAgICB9CiAgICAgICBlbHNlIGlmKCBuYW1lLmVxdWFscyggImNvbXBsZXgiICkgKSAvLyROT04tTkxTLTEkCiAgICAgICB7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDY0MWQwMTEuLjhkMzBiZjMgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5O3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4xLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IKIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc2NoZW1hL3NlcnZpY2VQb2xpY3kuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NjaGVtYS9zZXJ2aWNlUG9saWN5LmV4c2QKaW5kZXggZmQ2ZDViNS4uY2RlODE4ZCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc2NoZW1hL3NlcnZpY2VQb2xpY3kuZXhzZAorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zY2hlbWEvc2VydmljZVBvbGljeS5leHNkCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWNvblBhdGgiIHR5cGU9InN0cmluZyI+CiAgICAgICAgICAgICA8YW5ub3RhdGlvbj4KICAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBwbHVnaW4gcmVsYXRpdmUgcGF0aCB0byBzb21lIGljb24gZmlsZSBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeSwgb3IgYWx0ZXJuYXRpdmVseSwgYSBjb21wbGV0ZSBwbHVnaW4gcGF0aCB0byB0aGUgaWNvbiBmaWxlLCBpbiBmb3JtYXQgcGx1Z2luOi8vcGx1Z2luTmFtZS9wbHVnaW5SZWxhdGl2ZVBhdGggKGV4YW1wbGUgcGx1Z2luOi8vY29tLm15Y29tcGFueS5teXBsdWdpbi9pY29ucy9pY29uLmdpZikKKyAgICAgICAgICAgICAgICAgIEEgcGx1Z2luIHJlbGF0aXZlIHBhdGggdG8gc29tZSBpY29uIGZpbGUgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCiAgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CiAgICAgICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgICA8L2F0dHJpYnV0ZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmphdmEKaW5kZXggMWZlYzgzMC4uYTcyMTRjZCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmphdmEKQEAgLTEzLDcgKzEzLDYgQEAKICAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKICAqIDIwMDgwNDI4ICAgMjI3NTAxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEZpeGVkIHRvTG93ZXJDYXNlIExvY2FsZSBwcm9ibGVtLgogICogMjAwODA1MTYgICAyMzI2MDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQ2xlYW4gdXAgamF2YSBkb2MKLSAqIDIwMDgwOTA1ICAgMjQ2NDI4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEFkZGVkIGljb25CdW5kbGVJZCBwYXJzaW5nLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlsczsKIApAQCAtNjUsMjAgKzY0LDkgQEAKICAgICBkZXNjcmlwdG9yLnNldENvbnRleHRIZWxwSWQoIGNvbnRleHRIZWxwICk7CiAgICAgCiAgICAgaWYoIGljb25QYXRoICE9IG51bGwgKQotICAgIHsgIAkKLSAgICAgIFN0cmluZyBpY29uQnVuZGxlSWQgPSBlbGVtZW50LmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpOwotICAgICAgU3RyaW5nIHBsdWdpblByZWZpeCA9ICJwbHVnaW46Ly8iOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIGlmKCBpY29uUGF0aC5zdGFydHNXaXRoKCBwbHVnaW5QcmVmaXggKSAmJiBpY29uUGF0aC5sZW5ndGgoKSA+IHBsdWdpblByZWZpeC5sZW5ndGgoKSApIAotICAgICAgewotICAgIAkgaW50IHBsdWdpblNsYXNoID0gaWNvblBhdGguaW5kZXhPZiggJy8nLCBwbHVnaW5QcmVmaXgubGVuZ3RoKCkgKTsKLSAgICAJIAotICAgIAkgaWNvbkJ1bmRsZUlkID0gaWNvblBhdGguc3Vic3RyaW5nKCBwbHVnaW5QcmVmaXgubGVuZ3RoKCksIHBsdWdpblNsYXNoICk7Ci0gICAgCSBpY29uUGF0aCAgICAgPSBpY29uUGF0aC5zdWJzdHJpbmcoIHBsdWdpblNsYXNoICsgMSApOyAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGRlc2NyaXB0b3Iuc2V0SWNvblBhdGgoIGljb25QYXRoICk7ICAgICAgCi0gICAgICBkZXNjcmlwdG9yLnNldEljb25CdW5kbGVJZCggaWNvbkJ1bmRsZUlkICk7CisgICAgeworICAgICAgZGVzY3JpcHRvci5zZXRJY29uUGF0aCggaWNvblBhdGggKTsKKyAgICAgIGRlc2NyaXB0b3Iuc2V0SWNvbkJ1bmRsZUlkKCBlbGVtZW50LmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpICk7CiAgICAgfQogICAgIAogICAgIGRlc2NyaXB0b3IucmVzZXRIYXNDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDBiMzQzNjguLjgwNzM4OTYgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMy5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NJQ29tcGxpYW5jZVV0aWxzLmphdmEKaW5kZXggZDQ4ODQwNC4uNGE3MTM4MyAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlVXRpbHMuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTSUNvbXBsaWFuY2VVdGlscy5qYXZhCkBAIC0xLDE1ICsxLDEyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCisgKiAKICAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDgyNyAgIDI0NTQzOSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBVc2FiaWxpdHkgaXNzdWUgd2l0aCB0aGUgY29tcGxpYW5jZSB3YXJuaW5nIGRpYWxvZworICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwpAQCAtNjgsMTEgKzY1LDggQEAKICAgCQkJQ2hvaWNlIGNhbmNlbENob2ljZSA9IG5ldyBDaG9pY2UoJ0MnLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLkNBTkNFTF9MQUJFTCwgV3N0V1NQbHVnaW5NZXNzYWdlcy5DQU5DRUxfREVTQ1JJUFRJT04pOwogICAJCQlDaG9pY2UgcmVzdWx0ID0gbW9uaXRvci5yZXBvcnQoc3RhdHVzXywgbmV3IENob2ljZVtde2lnbm9yZUNob2ljZSwgaWdub3JlQWxsQ2hvaWNlLCBjYW5jZWxDaG9pY2V9KTsKICAgCQkJCi0gIAkJCS8vIGlmIHRoZSB1c2VyIHNlbGVjdHMgdG8gY2FuY2VsLCBvciBjbG9zZXMvZXNjYXBlcyB0aGUgbWVzc2FnZSBib3gsIGRvIG5vdCBjb250aW51ZSB3aXRoIHRoZSBjb21tYW5kCi0gICAgICAgIAlpZiAocmVzdWx0ID09IG51bGwgfHwgcmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKGNhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLQkJCQkJcmV0dXJuIGZhbHNlOwotICAJCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIGlnbm9yZSwgY29udGludWUKLSAgCQkJZWxzZSBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKGlnbm9yZUNob2ljZS5nZXRMYWJlbCgpKSkKKyAgCQkJLy8gaWYgdGhlIHVzZXIgY2xvc2VzIHRoZSBtZXNzYWdlIGJveCBvciBzZWxlY3RzIGlnbm9yZSBjb250aW51ZQorICAJCQlpZiAocmVzdWx0ID09IG51bGwgfHwgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhpZ25vcmVDaG9pY2UuZ2V0TGFiZWwoKSkpKQogICAgICAgICAJCQlyZXR1cm4gdHJ1ZTsKICAgCQkJLy8gaWYgdGhlIHVzZXIgc2VsZWN0cyBpZ25vcmUgYWxsLCBjaGFuZ2UgdGhlIHByZWZlcmVuY2UKIAkgICAgICAgIGVsc2UgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoaWdub3JlQWxsQ2hvaWNlLmdldExhYmVsKCkpKQpAQCAtODAsNyArNzQsOSBAQAogCSAgICAgICAgCQljb250ZXh0LnVwZGF0ZVByb2plY3RXU0lDb21wbGlhbmNlcyhwcm9qZWN0LCBQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7CiAJICAgICAgICAJCXJldHVybiB0cnVlOwogCSAgICAgICAgCX0KLQkJCQorCQkJLy8gaWYgdGhlIHVzZXIgc2VsZWN0cyB0byBjYW5jZWwgLCBkbyBub3QgY29udGludWUgd2l0aCB0aGUgY29tbWFuZAorICAgICAgICAJZWxzZSBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKGNhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKKwkJCQkJCXJldHVybiBmYWxzZTsKICAgCQl9CiAgIHJldHVybiB0cnVlOwogICB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dTRExVUkxTdHJpbmdXcmFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dTRExVUkxTdHJpbmdXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YWJhODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XU0RMVVJMU3RyaW5nV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgxMjA4ICAgMjU3NjE4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiwgQWRkIE1lY2hhbmlzbSBmb3IgQWRvcHRlcnMgdG8gbWFwIFNlcnZpY2VzIHRvIFdTREwgVVJMcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotcHVibGljIGNsYXNzIFdTRExVUkxTdHJpbmdXcmFwcGVyIHsKLQotCXB1YmxpYyBTdHJpbmcgd3NkbFVSTDsKLQkKLQlwdWJsaWMgV1NETFVSTFN0cmluZ1dyYXBwZXIoU3RyaW5nIHdzZGxVUkwpIHsKLQkJdGhpcy53c2RsVVJMID0gd3NkbFVSTDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRXU0RMVVJMU3RyaW5nKCkgewotCQlyZXR1cm4gd3NkbFVSTDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBlZTQ5ZjRmLi41MjNjODYzIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJV9VSV9QTFVHSU5fTkFNRQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMi4xMDQucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4yLjEwMS5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKaW5kZXggYjdlZWRhMC4uNzljYTQyMSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0xMzUsOSArMTM1LDYgQEAKICAgICB7CiAgICAgICB6b29tQ29tYm9Db250cmlidXRpb25JdGVtLnNldFZpc2libGUoIWlzU291cmNlKTsKICAgICAgIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0udXBkYXRlKCk7Ci0gICAgICAvLyBCdWcgMjU0NzcyIC0gcGFyZW50IGNvbnRyaWJ1dGlvbiBtYW5hZ2VyIHNob3VsZCBub3QgYmUgbnVsbC4gIFdlIGFkZGVkIHRoaXMgaXRlbSBhbHJlYWR5LgotICAgICAgLy8gRm9yY2UgdGhlIFRvb2xCYXJNYW5hZ2VyIHRvIHVwZGF0ZS9yZWRyYXcgdGhlIGl0ZW1zCi0gICAgICB6b29tQ29tYm9Db250cmlidXRpb25JdGVtLmdldFBhcmVudCgpLnVwZGF0ZSh0cnVlKTsKICAgICB9CiAgIH0KIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL1NtYXJ0UmVuYW1lQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvU21hcnRSZW5hbWVBY3Rpb24uamF2YQppbmRleCBlM2ExNDg5Li4wYjFlYWFiIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvU21hcnRSZW5hbWVBY3Rpb24uamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvU21hcnRSZW5hbWVBY3Rpb24uamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCQkJQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGl0ZXJhdG9yLm5leHQoKTsKIAkJCQkJCiAJCQkJCS8vIEZpbmQgb25seSBCaW5kaW5ncyB3aGljaCByZWZlcmVuY2UgdGhlIG1vZGlmaWVkIFBvcnRUeXBlLS0+T3BlcmF0aW9uCi0JCQkJCWlmIChwb3J0VHlwZS5lcXVhbHMoYmluZGluZy5nZXRQb3J0VHlwZSgpKSkgeworCQkJCQlpZiAoYmluZGluZy5nZXRQb3J0VHlwZSgpLmVxdWFscyhwb3J0VHlwZSkpIHsKIAkJCQkJCVN0cmluZyBvcGVyYXRpb25JbnB1dE5hbWUgPSBudWxsOwogCQkJCQkJU3RyaW5nIG9wZXJhdGlvbk91dHB1dE5hbWUgPSBudWxsOwogCQkJCQkJaWYob3BlcmF0aW9uLmdldElucHV0KCkgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24uamF2YQppbmRleCBjZjMyOGRmLi4zYjA4YjM4IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24uamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24uamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC00MCw3ICs0MCw2IEBACiAJcHJvdGVjdGVkIENMYWJlbCBjb21ib0xhYmVsOyAKIAlwcm90ZWN0ZWQgQ0NvbWJvIGNvbWJvOwogCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyOwotCXByaXZhdGUgYm9vbGVhbiBpc1RyYXZlcnNpbmcgPSBmYWxzZTsKIAogCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCiAJewpAQCAtNTQsOSArNTMsOCBAQAogCQkKIAkJY29tYm8gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0NvbWJvKGNvbXBvc2l0ZSk7CiAJCWNvbWJvLnNldEJhY2tncm91bmQoY29tcG9zaXRlLmdldEJhY2tncm91bmQoKSk7Ci0gICAgICAgIGNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotICAgICAgICBjb21iby5hZGRMaXN0ZW5lcihTV1QuRGVmYXVsdFNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgICAgIGNvbWJvLmFkZExpc3RlbmVyKFNXVC5UcmF2ZXJzZSwgdGhpcyk7CisJCWNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOworCQljb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKIAkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfTUVTU0FHRV9SRUZfTUVTU0FHRV9DT01CTyk7CiAJCQogCQljb21ib0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9NRVNTQUdFICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCkBAIC0xMjEsNiArMTE5LDcgQEAKIAkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihjb21ibyk7CiAJCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKIAorCiAvLwkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgZ2V0TW9kZWwoKSkuZ2V0VGFyZ2V0KCk7CiAvLwkJSXRlcmF0b3IgaXQgPSBtZXNzYWdlUmVmLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOwogLy8JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKQEAgLTE0OCwxNiArMTQ3LDExIEBACiAJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCiAJewogCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7Ci0JCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSB7Ci0JCQkJaWYgKGV2ZW50LnR5cGUgPT0gU1dULlRyYXZlcnNlKSB7Ci0JCQkJCWlmIChldmVudC5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX0FSUk9XX05FWFQgfHwgZXZlbnQuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUykKLQkJCQkJCWlzVHJhdmVyc2luZyA9IHRydWU7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCQlzdGFydERlbGF5ZWRFdmVudChldmVudCk7Ci0JCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQkJCX0KKwkJCWlmIChpc0xpc3RlbmVyRW5hYmxlZCgpICYmICFpc0luRG9IYW5kbGUpIAorCQkJeworCQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7CisJCQkJc3RhcnREZWxheWVkRXZlbnQoZXZlbnQpOworCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwogCQkJfQogCQl9CiAJCWVsc2UgewpAQCAtMTY4LDM5ICsxNjIsNDAgQEAKIAlwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQogCXsKIAkJc3VwZXIuZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8pIHsJCSAgCisJCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8pIHsKIAkJCVN0cmluZyB2YWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCiAJCQlpZiAoY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSAhPSAtMSkgewogCQkJCXZhbHVlID0gY29tYm8uZ2V0SXRlbShjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKIAkJCX0KLQkJCWlmIChzaG91bGRQZXJmb3JtQ29tYm9TZWxlY3Rpb24oZXZlbnQsIHZhbHVlKSkgewotICAgIAkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG51bGw7Ci0gICAgCQkJaW50IGNvbnRpbnVlQXBwbHkgPSBXaW5kb3cuT0s7Ci0gICAgCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgdGhpcy5nZXRNb2RlbCgpOwotICAgIAkJCQotICAgIAkJCWlmICh2YWx1ZS5lcXVhbHMoTkVXX1NUUklORykpIHsKLSAgICAJCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotICAgIAkJCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IGVkaXRNYW5hZ2VyLmdldE5ld0RpYWxvZygpOwotICAgIAkJCQljb250aW51ZUFwcGx5ID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLSAgICAJCQkJc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotICAgIAkJCX0KLSAgICAJCQllbHNlIGlmICh2YWx1ZS5lcXVhbHMoQlJPV1NFX1NUUklORykpIHsKLSAgICAJCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotICAgIAkJCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IGVkaXRNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotICAgIAkJCQljb250aW51ZUFwcGx5ID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLSAgICAJCQkJc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwkJCQkKLSAgICAJCQl9Ci0gICAgCQkJZWxzZSB7Ci0gICAgCQkJCXNwZWMgPSBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoKFN0cmluZyl2YWx1ZSk7Ci0gICAgCQkJfQotICAgIAkJCQotICAgIAkJCWlmIChjb250aW51ZUFwcGx5ID09IFdpbmRvdy5PSykgewotICAgIAkJCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0gICAgCQkJCWlmIChzcGVjICE9IG51bGwpIHsKLSAgICAJCQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmLCBzcGVjKTsKLSAgICAJCQkJfQotICAgIAkJCX0KLQkgICAgICAgIH0KKwkJCQorCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbnVsbDsKKwkJCWludCBjb250aW51ZUFwcGx5ID0gV2luZG93Lk9LOworCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgdGhpcy5nZXRNb2RlbCgpOworCQkJCisJCQlpZiAodmFsdWUuZXF1YWxzKE5FV19TVFJJTkcpKSB7CisJCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOworCQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gZWRpdE1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7CisJCQkJY29udGludWVBcHBseSA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7CisJCQkJc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOworCQkJfQorCQkJZWxzZSBpZiAodmFsdWUuZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7CisJCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOworCQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gZWRpdE1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7CisJCQkJY29udGludWVBcHBseSA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7CisJCQkJc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwkJCQkKKwkJCX0KKwkJCWVsc2UgeworCQkJCXNwZWMgPSBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoKFN0cmluZyl2YWx1ZSk7CisJCQl9CisJCQkKKwkJCWlmIChjb250aW51ZUFwcGx5ID09IFdpbmRvdy5PSykgeworCQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKKwkJCQlpZiAoc3BlYyAhPSBudWxsKSB7CisJCQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmLCBzcGVjKTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCQogCQl9CiAJfQogCQpAQCAtMjM2LDQzICsyMzEsNCBAQAogCQl9CiAJCXJldHVybiBudWxsOwogCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gc2hvdWxkUGVyZm9ybUNvbWJvU2VsZWN0aW9uKEV2ZW50IGV2ZW50LCBPYmplY3Qgc2VsZWN0ZWRJdGVtKQotCXsKLQkJLy8gaWYgdHJhdmVyc2luZyB0aHJvdWdoIGNvbWJvYm94LCBkb24ndCBhdXRvbWF0aWNhbGx5IHBvcCB1cAotCQkvLyB0aGUgYnJvd3NlIGFuZCBuZXcgZGlhbG9nIGJveGVzCi0JCWJvb2xlYW4gd2FzVHJhdmVyc2luZyA9IGlzVHJhdmVyc2luZzsKLQkJaWYgKGlzVHJhdmVyc2luZykKLQkJewotCQkJaXNUcmF2ZXJzaW5nID0gZmFsc2U7Ci0JCX0KLQkJCi0JCS8vIHdlIG9ubHkgY2FyZSBhYm91dCBkZWZhdWx0IHNlbGVjdGluZyAoaGl0dGluZyBlbnRlciBpbiBjb21ib2JveCkKLQkJLy8gZm9yIGJyb3dzZS4uIGFuZCBuZXcuLgotCQlpZiAoZXZlbnQudHlwZSA9PSBTV1QuRGVmYXVsdFNlbGVjdGlvbikKLQkJewotCQkJaWYgKCEoc2VsZWN0ZWRJdGVtIGluc3RhbmNlb2YgU3RyaW5nKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQlpZiAoIShCUk9XU0VfU1RSSU5HLmVxdWFscyhzZWxlY3RlZEl0ZW0pIHx8IE5FV19TVFJJTkcuZXF1YWxzKHNlbGVjdGVkSXRlbSkpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJaWYgKHdhc1RyYXZlcnNpbmcgJiYgc2VsZWN0ZWRJdGVtIGluc3RhbmNlb2YgU3RyaW5nKQotCQl7Ci0JCQlpZiAoQlJPV1NFX1NUUklORy5lcXVhbHMoc2VsZWN0ZWRJdGVtKSB8fCBORVdfU1RSSU5HLmVxdWFscyhzZWxlY3RlZEl0ZW0pKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCQlpZiAoY29tYm8gIT0gbnVsbCAmJiAhY29tYm8uaXNEaXNwb3NlZCgpKQotCQl7Ci0JCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJCWNvbWJvLnJlbW92ZUxpc3RlbmVyKFNXVC5EZWZhdWx0U2VsZWN0aW9uLCB0aGlzKTsKLQkJCWNvbWJvLnJlbW92ZUxpc3RlbmVyKFNXVC5UcmF2ZXJzZSwgdGhpcyk7Ci0JCX0KLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExUGFyYW1ldGVyU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMVBhcmFtZXRlclNlY3Rpb24uamF2YQppbmRleCBmZmUzNjgyLi4yYjI2MmQ0IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExUGFyYW1ldGVyU2VjdGlvbi5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTksNiArMTksNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwogaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKQEAgLTg2LDMzICs4NywzNCBAQAogCQl9CiAJfQogCQotCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNvbWJvU2VsZWN0aW9uKCkKLQl7Ci0JCWlmIChlbGVtZW50UmFkaW8uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCS8vIEhhbmRsZSBFbGVtZW50IHNlbGVjdGlvbgotCQkJU3RyaW5nIHZhbHVlID0gY29tYm8uZ2V0SXRlbShjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLQotCQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbWV0ZXIgPSAoVzExUGFyYW1ldGVyRm9yUGFydCkgdGhpcy5nZXRNb2RlbCgpOwotCi0JCQlpZiAodmFsdWUuZXF1YWxzKE5FV19TVFJJTkcpKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gcGFyYW1ldGVyLmdldFNldEVsZW1lbnRDb21tYW5kKElQYXJhbWV0ZXIuU0VUX05FV19BQ1RJT05fSUQpOwotCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCQkJfQotCQkJZWxzZSBpZiAodmFsdWUuZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gcGFyYW1ldGVyLmdldFNldEVsZW1lbnRDb21tYW5kKElQYXJhbWV0ZXIuU0VMRUNUX0VYSVNUSU5HX0FDVElPTl9JRCk7Ci0JCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldEVsZW1lbnRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGdldENvbXBvbmVudFNwZWNpZmljYXRpb25Gb3JWYWx1ZSgoU3RyaW5nKXZhbHVlKTsKLQkJCQlpZiAoc3BlYyAhPSBudWxsKSB7Ci0JCQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShwYXJhbWV0ZXIsIHNwZWMpOworCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKKwkJaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibykgeworCQkJaWYgKGVsZW1lbnRSYWRpby5nZXRTZWxlY3Rpb24oKSkgeworCQkJCS8vIEhhbmRsZSBFbGVtZW50IHNlbGVjdGlvbgorCQkJCVN0cmluZyB2YWx1ZSA9IGNvbWJvLmdldEl0ZW0oY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7CisJCQkJCisJCQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbWV0ZXIgPSAoVzExUGFyYW1ldGVyRm9yUGFydCkgdGhpcy5nZXRNb2RlbCgpOworCQkJCQorCQkJCWlmICh2YWx1ZS5lcXVhbHMoTkVXX1NUUklORykpIHsKKwkJCQkJQ29tbWFuZCBjb21tYW5kID0gcGFyYW1ldGVyLmdldFNldEVsZW1lbnRDb21tYW5kKElQYXJhbWV0ZXIuU0VUX05FV19BQ1RJT05fSUQpOworCQkJCQljb21tYW5kLmV4ZWN1dGUoKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAodmFsdWUuZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7CisJCQkJCUNvbW1hbmQgY29tbWFuZCA9IHBhcmFtZXRlci5nZXRTZXRFbGVtZW50Q29tbWFuZChJUGFyYW1ldGVyLlNFTEVDVF9FWElTVElOR19BQ1RJT05fSUQpOworCQkJCQljb21tYW5kLmV4ZWN1dGUoKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0RWxlbWVudENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7CisJCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGdldENvbXBvbmVudFNwZWNpZmljYXRpb25Gb3JWYWx1ZSgoU3RyaW5nKXZhbHVlKTsKKwkJCQkJaWYgKHNwZWMgIT0gbnVsbCkgeworCQkJCQkJZWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmFtZXRlciwgc3BlYyk7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0KLQkJZWxzZSBpZiAoaGFuZGxlVHlwZVNjZW5hcmlvKSB7Ci0JCQlzdXBlci5oYW5kbGVDb21ib1NlbGVjdGlvbigpOwotCQl9CisJCQorCQlzdXBlci5kb0hhbmRsZUV2ZW50KGV2ZW50KTsKKwkJcmVmcmVzaCgpOwogCX0KIAkKIAlwcm90ZWN0ZWQgdm9pZCByZWZyZXNoRWxlbWVudENvbWJvKCkgewpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1hTRFR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1hTRFR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhCmluZGV4IGUyMDBhYWMuLmJmOTEzYzkgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9YU0RUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTEsOCArMTEsNiBAQAogcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CkBAIC0yNywxMCArMjUsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYUNvbnRlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RJbXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFNjaGVtYUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEQ29uc3RhbnRzOwogCiBwdWJsaWMgY2xhc3MgWFNEVHlwZVN5c3RlbVByb3ZpZGVyIGltcGxlbWVudHMgSVR5cGVTeXN0ZW1Qcm92aWRlcgogewpAQCAtMTU5LDQyICsxNTQsMjUgQEAKICAgICAgICAgcmV0dXJuIGtlZXBUeXBlczsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBQcm92aWRlcyBhIGxpc3Qgd2l0aCBYTUwgc2NoZW1hIGJ1aWx0IGluIHR5cGUgbmFtZXMuIFRoZSBuYW1lcyBhcmUKLSAgICAgKiBwcmVmaXhlZCBpZiB0aGUgdGhlIGRlZmluaXRpb24gcHJvdmlkZXMgYSBwcmVmaXggZm9yIHRoZSBYTUwgc2NoZW1hCi0gICAgICogbmFtZXNwYWNlLgotICAgICAqIAotICAgICAqIEBwYXJhbSBkZWZpbml0aW9uCi0gICAgICogICAgICAgICAgYSBXU0RMIHtAbGluayBEZWZpbml0aW9ufS4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHtAbGluayBTdHJpbmd9IHJlcHJlc2VudGluZyB0aGUgWE1MIFNjaGVtYSBidWlsdCBpbiB0eXBlIG5hbWVzLAotICAgICAqICAgICAgICAgb3IgYW4gZW1wdHkgbGlzdCBpZiB0aGUgZGVmaW5pdGlvbiBpcyBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBMaXN0IGdldEJ1aWx0SW5UeXBlTmFtZXNMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKKyAgICBwdWJsaWMgamF2YS51dGlsLkxpc3QgZ2V0QnVpbHRJblR5cGVOYW1lc0xpc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQogICAgIHsKLSAgICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotICAgICAgfQotICAgICAgCi0gICAgICBMaXN0IGJ1aWx0SW5UeXBlTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgIFhTRFNjaGVtYSBzY2hlbWFGb3JTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotICAgICAgTWFwIHNpbXBsZVR5cGVJZE1hcCA9IHNjaGVtYUZvclNjaGVtYS5nZXRTaW1wbGVUeXBlSWRNYXAoKTsKLSAgICAgIENvbGxlY3Rpb24gYnVpbHRJblR5cGVzID0gc2ltcGxlVHlwZUlkTWFwLnZhbHVlcygpOwotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBidWlsdEluVHlwZXMuaXRlcmF0b3IoKTsKLSAgICAgIFN0cmluZyB4c2RQcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotCi0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmaW5pdGlvbiA9IChYU0RUeXBlRGVmaW5pdGlvbikgaXRlcmF0b3IubmV4dCgpOyAgCi0gICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSB0eXBlRGVmaW5pdGlvbi5nZXROYW1lKCk7Ci0gICAgICAgIFN0cmluZyBwcmVmaXhlZE5hbWUgPSAoeHNkUHJlZml4ICE9IG51bGwgJiYgeHNkUHJlZml4Lmxlbmd0aCgpID4gMCkgPyB4c2RQcmVmaXggKyAiOiIgKyBsb2NhbE5hbWUgOiBsb2NhbE5hbWU7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgYnVpbHRJblR5cGVOYW1lcy5hZGQocHJlZml4ZWROYW1lKTsgICAgICAgIAotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gYnVpbHRJblR5cGVOYW1lczsKKyAgICAgICAgTGlzdCBpdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKKy8vICAgICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQorLy8gICAgICAgIHsKKy8vICAgICAgICAgICAgTGlzdCBwcmVmaXhlcyA9IGdldFByZWZpeGVzKGRlZmluaXRpb24sIFdTRExDb25zdGFudHMuWFNEX05BTUVTUEFDRV9VUkkpOworLy8gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwcmVmaXhlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCisvLyAgICAgICAgICAgIHsKKy8vICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKKy8vICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgWFNERE9NSGVscGVyLmRhdGFUeXBlLmxlbmd0aDsgaisrKQorLy8gICAgICAgICAgICAgICAgeworLy8gICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSBYU0RET01IZWxwZXIuZGF0YVR5cGVbal1bMF07CisvLyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4Lmxlbmd0aCgpID4gMCkgPyBwcmVmaXggKyAiOiIgKyBsb2NhbE5hbWUgOiBsb2NhbE5hbWU7CisvLyAgICAgICAgICAgICAgICAgICAgaXRlbXMuYWRkKG5hbWUpOworLy8gICAgICAgICAgICAgICAgfQorLy8gICAgICAgICAgICB9CisvLyAgICAgICAgfQorICAgICAgICByZXR1cm4gaXRlbXM7CiAgICAgfQotICAgIAogICAgIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZUVsZW1lbnROYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCiAgICAgewogICAgICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0FTRENDb21iby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDQ29tYm8uamF2YQppbmRleCAyM2FmNWU1Li42YzliMzU3IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0FTRENDb21iby5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ0NvbWJvLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtNDA4LDcgKzQwOCw3IEBACiB9CiB2b2lkIGRyb3BEb3duIChib29sZWFuIGRyb3ApIHsKIAlpZiAoZHJvcCA9PSBpc0Ryb3BwZWQgKCkpIHJldHVybjsKLQlpZiAoIWRyb3AgJiYgIWlzRGlzcG9zZWQoKSkgeworCWlmICghZHJvcCkgewogCQlwb3B1cC5zZXRWaXNpYmxlIChmYWxzZSk7CiAJCXRleHQuc2VsZWN0QWxsKCk7CiAJCWlmICghaXNEaXNwb3NlZCAoKSYmIGFycm93LmlzRm9jdXNDb250cm9sKCkpIHsKQEAgLTkxNyw3ICs5MTcsOSBAQAogCQkJZS50aW1lID0gZXZlbnQudGltZTsKIAkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwogCQkJZS5kb2l0ID0gZXZlbnQuZG9pdDsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULlNlbGVjdGlvbiwgZSk7CisJCQlpZiAoIWlzRHJvcHBlZCgpKSB7CisJCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuU2VsZWN0aW9uLCBlKTsKKwkJCX0KIAkJCWV2ZW50LmRvaXQgPSBlLmRvaXQ7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDb21ib0JveENlbGxFZGl0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ29tYm9Cb3hDZWxsRWRpdG9yLmphdmEKaW5kZXggZDY3NGVlMC4uNmVjZjVhZCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDb21ib0JveENlbGxFZGl0b3IuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0FTRENvbWJvQm94Q2VsbEVkaXRvci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTU1LDkgKzU1LDYgQEAKICAgICBwcml2YXRlIE9iamVjdCBzZWxlY3RlZFZhbHVlOwogICAgIHByaXZhdGUgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7CiAgICAgcHJpdmF0ZSBpbnQgdGV4dEluZGVudCA9IDU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlzVHJhdmVyc2luZyA9IGZhbHNlOwotICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGNlbGwgZWRpdG9yIGZyb20gYmVpbmcgZGVhY3RpdmF0ZWQgd2hpbGUgaGFuZGxpbmcgdGhlIE5ldyBvciBCcm93c2Ugc2VsZWN0aW9uLgotICAgIHByaXZhdGUgYm9vbGVhbiBpc0hhbmRsaW5nU2VsZWN0aW9uID0gZmFsc2U7CiAKICAgICAvKioKICAgICAgKiBEZWZhdWx0IENvbWJvQm94Q2VsbEVkaXRvciBzdHlsZQpAQCAtMTM2LDEwICsxMzMsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1JFVFVSTikgewogICAgICAgICAgICAgICAgICAgICBlLmRvaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUIHx8IGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpc1RyYXZlcnNpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKQEAgLTI2MSw3ICsyNTQsNyBAQAogICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yI2ZvY3VzTG9zdCgpCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgZm9jdXNMb3N0KCkgewotICAgICAgICBpZiAoaXNBY3RpdmF0ZWQoKSAmJiAhaXNIYW5kbGluZ1NlbGVjdGlvbikgeworICAgICAgICBpZiAoaXNBY3RpdmF0ZWQoKSkgewogICAgICAgICAgICAgYXBwbHlFZGl0b3JWYWx1ZUFuZERlYWN0aXZhdGUoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4NCwyOCArMjc3LDE3IEBACiAgICAgCiAgICAgCiAgICAgcHVibGljIHZvaWQgc2VsZWN0aW9uTWFkZSgpIHsKLSAgICAgICAgaXNIYW5kbGluZ1NlbGVjdGlvbiA9IHRydWU7CiAgICAgCU9iamVjdCBuZXdWYWx1ZSA9IG51bGw7Ci0gICAgCXRyeSB7Ci0JICAgIAlzZWxlY3Rpb24gPSBjb21ib0JveC5nZXRTZWxlY3Rpb25JbmRleCgpOwotCSAgICAgICAgaWYgKGlzVHJhdmVyc2luZykKLQkgICAgICAgIHsKLQkgICAgICAgICAgaXNUcmF2ZXJzaW5nID0gZmFsc2U7Ci0JICAgICAgICAgIHJldHVybjsKLQkgICAgICAgIH0KLQkgICAgCVN0cmluZyBzdHJpbmdTZWxlY3Rpb24gPSBpdGVtc1tzZWxlY3Rpb25dOwotCSAgICAJCi0JICAgIAlpZiAoc3RyaW5nU2VsZWN0aW9uLmVxdWFscyhNZXNzYWdlcy5fVUlfQlVUVE9OX0JST1dTRSkpIHsgLy8kTk9OLU5MUy0xJAotCSAgICAJCW5ld1ZhbHVlID0gaW52b2tlRGlhbG9nKGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpKTsKLQkgICAgCX0KLQkgICAgCWVsc2UgaWYgKHN0cmluZ1NlbGVjdGlvbi5lcXVhbHMoTWVzc2FnZXMuX1VJX0JVVFRPTl9ORVcpKSB7IC8vJE5PTi1OTFMtMSQKLQkgICAgCQluZXdWYWx1ZSA9IGludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXROZXdEaWFsb2coKSk7Ci0JICAgIAl9CisgICAgCXNlbGVjdGlvbiA9IGNvbWJvQm94LmdldFNlbGVjdGlvbkluZGV4KCk7CisgICAgCVN0cmluZyBzdHJpbmdTZWxlY3Rpb24gPSBpdGVtc1tzZWxlY3Rpb25dOworICAgIAkKKyAgICAJaWYgKHN0cmluZ1NlbGVjdGlvbi5lcXVhbHMoTWVzc2FnZXMuX1VJX0JVVFRPTl9CUk9XU0UpKSB7IC8vJE5PTi1OTFMtMSQKKyAgICAJCW5ld1ZhbHVlID0gaW52b2tlRGlhbG9nKGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpKTsKICAgICAJfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICBpc0hhbmRsaW5nU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAJZWxzZSBpZiAoc3RyaW5nU2VsZWN0aW9uLmVxdWFscyhNZXNzYWdlcy5fVUlfQlVUVE9OX05FVykpIHsgLy8kTk9OLU5MUy0xJAorICAgIAkJbmV3VmFsdWUgPSBpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0TmV3RGlhbG9nKCkpOworICAgIAl9CisKICAgICAJaWYgKG5ld1ZhbHVlID09IG51bGwpIHsKICAgICAJCWludCBpbmRleCA9IGNvbWJvQm94LmdldFNlbGVjdGlvbkluZGV4KCk7ICAgICAgICAgICAgICAKICAgICAJCWlmIChpbmRleCAhPSAtMSkgewpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdFZGl0UGFydC5qYXZhCmluZGV4IDg4MGVjY2QuLjBhYzMxZjkgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nRWRpdFBhcnQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0VkaXRQYXJ0LmphdmEKQEAgLTExLDYgKzExLDcgQEAKIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7CiAKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwpAQCAtNDEsNyArNDIsNiBAQAogcHVibGljIGNsYXNzIEJpbmRpbmdFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydAogewogICBwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBjb25uZWN0aW9uRmlndXJlOwotICBwcml2YXRlIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24gY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlOwogICBwcm90ZWN0ZWQgQm94Q29tcG9uZW50RmlndXJlIGZpZ3VyZTsKICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNFeHBhbmRlZCA9IGZhbHNlOwogICBwcml2YXRlIExhYmVsIGhvdmVySGVscExhYmVsID0gbmV3IExhYmVsKCIiKTsgLy8kTk9OLU5MUy0xJApAQCAtOTEsMTEgKzkxLDEwIEBACiAvLyAgICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmRhcmtCbHVlKTsKICAgICBmaWd1cmUuc2V0U2VsZWN0ZWQodHJ1ZSk7CiAgICAgZmlndXJlLnJlcGFpbnQoKTsKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsICYmIGNvbm5lY3Rpb25GaWd1cmUuaXNWaXNpYmxlKCkpCisgICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKICAgICB7CiAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodCh0cnVlKTsKLSAgICAgIAotICAgICAgYWRkQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7CisgICAgICBnZXRMYXllcihMYXllckNvbnN0YW50cy5GRUVEQkFDS19MQVlFUikuYWRkKGNvbm5lY3Rpb25GaWd1cmUpOwogICAgIH0KICAgfQogCkBAIC0xMDcsMTIgKzEwNiwxMCBAQAogICAgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0Q29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwogICAgIGZpZ3VyZS5zZXRTZWxlY3RlZChmYWxzZSk7CiAgICAgZmlndXJlLnJlcGFpbnQoKTsKLSAgICAKLSAgICByZW1vdmVDb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUoKTsKLSAgICAKICAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQogICAgIHsKICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0SGlnaGxpZ2h0KGZhbHNlKTsKKyAgICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpLmFkZChjb25uZWN0aW9uRmlndXJlKTsKICAgICB9CiAgIH0KIApAQCAtMTM2LDkgKzEzMywzNCBAQAogICB7CiAgICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKICAgICB7Ci0gICAgICBnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKS5yZW1vdmUoY29ubmVjdGlvbkZpZ3VyZSk7CisgICAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKKyAgICAgIHJlbW92ZWQgPSByZW1vdmVDb25uZWN0aW9uRmlndXJlKGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpKTsKKyAgICAgIGlmICghcmVtb3ZlZCkKKyAgICAgIHsKKyAgICAgICAgcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShnZXRMYXllcihMYXllckNvbnN0YW50cy5GRUVEQkFDS19MQVlFUikpOworICAgICAgfQogICAgIH0KLSAgICByZW1vdmVDb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUoKTsKKyAgfQorICAKKworICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShJRmlndXJlIHBhcmVudCkKKyAgeworICAgIGJvb2xlYW4gY29udGFpbnMgPSBmYWxzZTsKKyAgICBJdGVyYXRvciBpdCA9IHBhcmVudC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7CisgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKKyAgICB7CisgICAgICBJRmlndXJlIGZpZyA9IChJRmlndXJlKSBpdC5uZXh0KCk7CisgICAgICBpZiAoZmlnLmVxdWFscyhjb25uZWN0aW9uRmlndXJlKSkKKyAgICAgIHsKKyAgICAgICAgY29udGFpbnMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGNvbnRhaW5zKQorICAgIHsKKyAgICAgIHBhcmVudC5yZW1vdmUoY29ubmVjdGlvbkZpZ3VyZSk7CisgICAgfQorICAgIHJldHVybiBjb250YWluczsKICAgfQogCiAgIHB1YmxpYyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uIGNyZWF0ZUNvbm5lY3Rpb25GaWd1cmUoKQpAQCAtMjI3LDExICsyNDksNiBAQAogICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFRhcmdldEFuY2hvcihuZXcgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKHJlZkZpZ3VyZSwgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLkhFQURFUl9MRUZULCAwLCAxMSkpOwogICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodChmYWxzZSk7CiAgICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VmlzaWJsZSh0cnVlKTsKLQotICAgICAgICBpZiAoY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBhZGRDb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUoKTsKLSAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewpAQCAtMjQxLDcgKzI1OCw2IEBACiAgICAgZWxzZSBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQogICAgIHsKICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICByZW1vdmVDb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUoKTsKICAgICB9CiAgIH0KIApAQCAtMjg5LDI1ICszMDUsNCBAQAogICAgIH0gICAgICAKICAgICByZXR1cm4gc3VwZXIuZ2V0UmVsYXRpdmVFZGl0UGFydChkaXJlY3Rpb24pOwogICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYWRkQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCkKLSAgewotICAgIC8vIHJlbW92ZSBhbnkgcHJlZXhpc3RpbmcgY29ubmVjdGlvbiBmZWVkYmFjayBmaWd1cmVzIGZpcnN0Ci0gICAgcmVtb3ZlQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7Ci0KLSAgICBjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbigpOwotICAgIGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZS5zZXRTb3VyY2VBbmNob3IoY29ubmVjdGlvbkZpZ3VyZS5nZXRTb3VyY2VBbmNob3IoKSk7Ci0gICAgY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlLnNldFRhcmdldEFuY2hvcihjb25uZWN0aW9uRmlndXJlLmdldFRhcmdldEFuY2hvcigpKTsKLSAgICBjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUuc2V0SGlnaGxpZ2h0KHRydWUpOwotICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkZFRURCQUNLX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZUNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZSgpIHsKLSAgICBpZiAoY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlICE9IG51bGwpCi0gICAgewotICAgICAgY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlLnNldEhpZ2hsaWdodChmYWxzZSk7Ci0gICAgICBnZXRMYXllcihMYXllckNvbnN0YW50cy5GRUVEQkFDS19MQVlFUikucmVtb3ZlKGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZSk7Ci0gICAgICBjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUgPSBudWxsOwotICAgIH0KLSAgfQogfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VuZFBvaW50RWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9FbmRQb2ludEVkaXRQYXJ0LmphdmEKaW5kZXggNjM3ZDVlOS4uMWUzYjI3MSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VuZFBvaW50RWRpdFBhcnQuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRW5kUG9pbnRFZGl0UGFydC5qYXZhCkBAIC0xMCw2ICsxMCw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7CiAKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKIGltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlQ2FudmFzOwpAQCAtNTMsNyArNTUsNiBAQAogICBwcml2YXRlIExhYmVsIGhvdmVySGVscExhYmVsID0gbmV3IExhYmVsKCIiKTsgLy8kTk9OLU5MUy0xJAogICBwcm90ZWN0ZWQgRmlndXJlIGFkZHJlc3NCb3hGaWd1cmU7CiAgIHByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uIGNvbm5lY3Rpb25GaWd1cmU7Ci0gIHByaXZhdGUgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmU7CiAgIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgaW50IE1BWF9BRERSRVNTX1dJRFRIID0gMTUwOwogCiAgIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCkBAIC0yMjcsMTAgKzIyOCwzMiBAQAogICBwcm90ZWN0ZWQgdm9pZCBkZWFjdGl2YXRlQ29ubmVjdGlvbigpCiAgIHsKICAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotCXsKLQkgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpLnJlbW92ZShjb25uZWN0aW9uRmlndXJlKTsKLQl9Ci0gICAgcmVtb3ZlQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7CisgICAgeworICAgICAgYm9vbGVhbiByZW1vdmVkID0gZmFsc2U7CisgICAgICByZW1vdmVkID0gcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKSk7CisgICAgICAKKyAgICAgIGlmICghcmVtb3ZlZCkgeworICAgIAkgIHJlbW92ZUNvbm5lY3Rpb25GaWd1cmUoZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuRkVFREJBQ0tfTEFZRVIpKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgCisgIHByaXZhdGUgYm9vbGVhbiByZW1vdmVDb25uZWN0aW9uRmlndXJlKElGaWd1cmUgcGFyZW50KSB7CisJICBib29sZWFuIGNvbnRhaW5zID0gZmFsc2U7CisJICBJdGVyYXRvciBpdCA9IHBhcmVudC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7CisJICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCSAgSUZpZ3VyZSBmaWcgPSAoSUZpZ3VyZSkgaXQubmV4dCgpOworCQkgIGlmIChmaWcuZXF1YWxzKGNvbm5lY3Rpb25GaWd1cmUpKSB7CisJCQkgIGNvbnRhaW5zID0gdHJ1ZTsKKwkJCSAgYnJlYWs7CisJCSAgfQorCSAgfQorCSAgCisJICBpZiAoY29udGFpbnMpIHsKKwkJICBwYXJlbnQucmVtb3ZlKGNvbm5lY3Rpb25GaWd1cmUpOworCSAgfQorCSAgCisJICByZXR1cm4gY29udGFpbnM7CiAgIH0KIAogICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGREcmF3Q29ubmVjdGlvbigpCkBAIC0yOTEsMTEgKzMxNCw2IEBACiAJICAgICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VGFyZ2V0QW5jaG9yKG5ldyBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IodGFyZ2V0RmlndXJlLCBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IuSEVBREVSX0xFRlQsIDAsIDEwKSk7CiAJICAgICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0SGlnaGxpZ2h0KGZhbHNlKTsKIAkgICAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRWaXNpYmxlKHRydWUpOwotCSAgICAgICAgICAKLQkgICAgICAgICAgaWYgKGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZSAhPSBudWxsKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgYWRkQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7Ci0JICAgICAgICAgIH0KIAkJICB9CiAJCSAgZWxzZSB7CiAJCQkgIGFjdGl2YXRlQ29ubmVjdGlvbigpOwpAQCAtMzAzLDcgKzMyMSw2IEBACiAJICB9CiAJICBlbHNlIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpewogCQkgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VmlzaWJsZShmYWxzZSk7Ci0JCSAgcmVtb3ZlQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7CiAJICB9CiAgIH0KIApAQCAtMzE3LDExICszMzQsOSBAQAogICAgIElGaWd1cmUgZmlndXJlID0gZ2V0RmlndXJlRm9yRmVlZGJhY2soKTsKICAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZUNlbGxTZWxlY3Rpb25Db2xvcik7CiAgICAgCi0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCAmJiBjb25uZWN0aW9uRmlndXJlLmlzVmlzaWJsZSgpKSAKLSAgICB7Ci0gICAgICBjb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodCh0cnVlKTsKLQotICAgICAgYWRkQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCk7CisgICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkgeworICAgIAljb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodCh0cnVlKTsKKyAgICAJZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuRkVFREJBQ0tfTEFZRVIpLmFkZChjb25uZWN0aW9uRmlndXJlKTsKICAgICB9CiAgIH0KIApAQCAtMzI5LDExICszNDQsMTEgQEAKICAgewogICAgIElGaWd1cmUgZmlndXJlID0gZ2V0RmlndXJlRm9yRmVlZGJhY2soKTsKICAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKGZpZ3VyZS5nZXRQYXJlbnQoKS5nZXRCYWNrZ3JvdW5kQ29sb3IoKSk7Ci0KLSAgICByZW1vdmVDb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUoKTsKICAgICAKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRIaWdobGlnaHQoZmFsc2UpOworICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpIHsKKyAgICAJY29ubmVjdGlvbkZpZ3VyZS5zZXRIaWdobGlnaHQoZmFsc2UpOworICAgIAlnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZpZ3VyZSk7CisgICAgfQogICB9CiAKICAgLy8gVE9ETzogcm1haDogVkVSWSBVR0xZIEhBQ0suLi4uIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciB3YXkgdG8gc29sdmUgdGhpcwpAQCAtMzc1LDI1ICszOTAsNCBAQAogCiAgICAgcmV0dXJuIHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKICAgfSAgCi0gIAotICBwcml2YXRlIHZvaWQgYWRkQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCkKLSAgewotICAgIHJlbW92ZUNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZSgpOwotICAgIAotICAgIGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZSA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uKCk7Ci0gICAgY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlLnNldFNvdXJjZUFuY2hvcihjb25uZWN0aW9uRmlndXJlLmdldFNvdXJjZUFuY2hvcigpKTsKLSAgICBjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUuc2V0VGFyZ2V0QW5jaG9yKGNvbm5lY3Rpb25GaWd1cmUuZ2V0VGFyZ2V0QW5jaG9yKCkpOwotICAgIGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZS5zZXRIaWdobGlnaHQodHJ1ZSk7Ci0gICAgZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuRkVFREJBQ0tfTEFZRVIpLmFkZChjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKCkKLSAgewotICAgIGlmIChjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb25uZWN0aW9uRmVlZGJhY2tGaWd1cmUuc2V0SGlnaGxpZ2h0KGZhbHNlKTsKLSAgICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkZFRURCQUNLX0xBWUVSKS5yZW1vdmUoY29ubmVjdGlvbkZlZWRiYWNrRmlndXJlKTsKLSAgICAgIGNvbm5lY3Rpb25GZWVkYmFja0ZpZ3VyZSA9IG51bGw7Ci0gICAgfQotICB9CiB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUGFyYW1ldGVyU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1BhcmFtZXRlclNlY3Rpb24uamF2YQppbmRleCBmYTAwYmQxLi5iZTg4ZDczIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUGFyYW1ldGVyU2VjdGlvbi5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9QYXJhbWV0ZXJTZWN0aW9uLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMzYsNyArMzYsNiBAQAogCXByb3RlY3RlZCBDQ29tYm8gY29tYm87CiAJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlVHlwZVNjZW5hcmlvID0gdHJ1ZTsKIAlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcGFyYW1ldGVyUmVmTWFuYWdlcjsKLQlwcml2YXRlIGJvb2xlYW4gaXNUcmF2ZXJzaW5nID0gZmFsc2U7CiAJCiAJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKIAl7CkBAIC01MSw4ICs1MCw3IEBACiAJCWNvbWJvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNDb21ibyhjb21wb3NpdGUpOwogCQljb21iby5zZXRCYWNrZ3JvdW5kKGNvbXBvc2l0ZS5nZXRCYWNrZ3JvdW5kKCkpOwogCQljb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJY29tYm8uYWRkTGlzdGVuZXIoU1dULkRlZmF1bHRTZWxlY3Rpb24sIHRoaXMpOwotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuVHJhdmVyc2UsIHRoaXMpOworCQljb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKIAkJCiAJCWNvbWJvTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX1RZUEUgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKIAkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwpAQCAtMTcwLDE2ICsxNjgsOSBAQAogCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7CiAJCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKIAkJCXsKLQkJCQlpZiAoZXZlbnQudHlwZSA9PSBTV1QuVHJhdmVyc2UpIHsKLQkJCQkJaWYgKGV2ZW50LmRldGFpbCA9PSBTV1QuVFJBVkVSU0VfQVJST1dfTkVYVCB8fCBldmVudC5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX0FSUk9XX1BSRVZJT1VTKSB7Ci0JCQkJCQlpc1RyYXZlcnNpbmcgPSB0cnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCQlzdGFydERlbGF5ZWRFdmVudChldmVudCk7Ci0JCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQkJCX0KKwkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOworCQkJCXN0YXJ0RGVsYXllZEV2ZW50KGV2ZW50KTsKKwkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKIAkJCX0KIAkJfQogCQllbHNlIHsKQEAgLTE5MCwxMyArMTgxLDkgQEAKIAlwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQogCXsKIAkJc3VwZXIuZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8gJiYgIWNvbWJvLmlzRGlzcG9zZWQoKSkgewotCQkJU3RyaW5nIHNlbGVjdGVkSXRlbSA9IGNvbWJvLmdldEl0ZW0oY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0JCQlpZiAoc2hvdWxkUGVyZm9ybUNvbWJvU2VsZWN0aW9uKGV2ZW50LCBzZWxlY3RlZEl0ZW0pKQotCQkJewotCQkJCWhhbmRsZUNvbWJvU2VsZWN0aW9uKCk7Ci0JCQkJcmVmcmVzaCgpOwotCQkJfQorCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvICYmIGhhbmRsZVR5cGVTY2VuYXJpbykgeworCQkJaGFuZGxlQ29tYm9TZWxlY3Rpb24oKTsKKwkJCXJlZnJlc2goKTsKIAkJfQogCX0KIAkKQEAgLTI3MSw0MSArMjU4LDQgQEAKIAkJfQogCQlyZXR1cm4gbnVsbDsKIAl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIHNob3VsZFBlcmZvcm1Db21ib1NlbGVjdGlvbihFdmVudCBldmVudCwgT2JqZWN0IHNlbGVjdGVkSXRlbSkKLQl7Ci0JCS8vIGlmIHRyYXZlcnNpbmcgdGhyb3VnaCBjb21ib2JveCwgZG9uJ3QgYXV0b21hdGljYWxseSBwb3AgdXAKLQkJLy8gdGhlIGJyb3dzZSBhbmQgbmV3IGRpYWxvZyBib3hlcwotCQlib29sZWFuIHdhc1RyYXZlcnNpbmcgPSBpc1RyYXZlcnNpbmc7Ci0JCWlmIChpc1RyYXZlcnNpbmcpCi0JCQlpc1RyYXZlcnNpbmcgPSBmYWxzZTsKLQkJCQotCQkvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgZGVmYXVsdCBzZWxlY3RpbmcgKGhpdHRpbmcgZW50ZXIgaW4gY29tYm9ib3gpCi0JCS8vIGZvciBicm93c2UuLiBhbmQgbmV3Li4KLQkJaWYgKGV2ZW50LnR5cGUgPT0gU1dULkRlZmF1bHRTZWxlY3Rpb24pCi0JCXsKLQkJCWlmICghKHNlbGVjdGVkSXRlbSBpbnN0YW5jZW9mIFN0cmluZykpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJaWYgKCEoQlJPV1NFX1NUUklORy5lcXVhbHMoc2VsZWN0ZWRJdGVtKSB8fCBORVdfU1RSSU5HLmVxdWFscyhzZWxlY3RlZEl0ZW0pKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCWlmICh3YXNUcmF2ZXJzaW5nICYmIHNlbGVjdGVkSXRlbSBpbnN0YW5jZW9mIFN0cmluZykKLQkJewotCQkJaWYgKEJST1dTRV9TVFJJTkcuZXF1YWxzKHNlbGVjdGVkSXRlbSkgfHwgTkVXX1NUUklORy5lcXVhbHMoc2VsZWN0ZWRJdGVtKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQkJaWYgKGNvbWJvICE9IG51bGwgJiYgIWNvbWJvLmlzRGlzcG9zZWQoKSkKLQkJewotCQkJY29tYm8ucmVtb3ZlTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0JCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuRGVmYXVsdFNlbGVjdGlvbiwgdGhpcyk7Ci0JCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuVHJhdmVyc2UsIHRoaXMpOwotCQl9Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9CiB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUmVmZXJlbmNlU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1JlZmVyZW5jZVNlY3Rpb24uamF2YQppbmRleCAwMTk3M2Y0Li4xNzIyZGRmIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUmVmZXJlbmNlU2VjdGlvbi5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9SZWZlcmVuY2VTZWN0aW9uLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMjksNyArMjksNiBAQAogCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19TVFJJTkcgPSBNZXNzYWdlcy5fVUlfQlVUVE9OX05FVzsgLy8kTk9OLU5MUy0xJAogCXByb3RlY3RlZCBDQ29tYm8gY29tYm87CiAJcHJvdGVjdGVkIENMYWJlbCBjb21ib0xhYmVsOwotCXByaXZhdGUgYm9vbGVhbiBpc1RyYXZlcnNpbmcgPSBmYWxzZTsKIAkKIAlwcm90ZWN0ZWQgTGlzdCBpdGVtc0luQ29tYm8gPSBuZXcgQXJyYXlMaXN0KCk7CiAKQEAgLTYwLDI0ICs1OSwxNyBAQAogCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChuYW1lVGV4dCwgK0lUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwogCQljb21iby5zZXRMYXlvdXREYXRhKGRhdGEpOwogCQkKLSAgICAgICAgY29tYm8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0gICAgICAgIGNvbWJvLmFkZExpc3RlbmVyKFNXVC5EZWZhdWx0U2VsZWN0aW9uLCB0aGlzKTsKLSAgICAgICAgY29tYm8uYWRkTGlzdGVuZXIoU1dULlRyYXZlcnNlLCB0aGlzKTsKKwkJY29tYm8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7CiAJfQogCQogCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQogCXsKIAkJaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibykgewotCQkJaWYgKGlzTGlzdGVuZXJFbmFibGVkKCkgJiYgIWlzSW5Eb0hhbmRsZSkgewotCQkJCWlmIChldmVudC50eXBlID09IFNXVC5UcmF2ZXJzZSkgewotCQkJCQlpZiAoZXZlbnQuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUIHx8IGV2ZW50LmRldGFpbCA9PSBTV1QuVFJBVkVSU0VfQVJST1dfUFJFVklPVVMpCi0JCQkJCQlpc1RyYXZlcnNpbmcgPSB0cnVlOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLQkJCQkJc3RhcnREZWxheWVkRXZlbnQoZXZlbnQpOwotCQkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJCQl9CisJCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKKwkJCXsKKwkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOworCQkJCXN0YXJ0RGVsYXllZEV2ZW50KGV2ZW50KTsKKwkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKIAkJCX0KIAkJfQogCQllbHNlIHsKQEAgLTkwLDggKzgyLDYgQEAKIAkgKi8KIAlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewogCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJY29tYm8ucmVtb3ZlTGlzdGVuZXIoU1dULkRlZmF1bHRTZWxlY3Rpb24sIHRoaXMpOwotCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuVHJhdmVyc2UsIHRoaXMpOwogCQkKIAkJc3VwZXIucmVmcmVzaCgpOwogCQkKQEAgLTEyNCw4ICsxMTQsNiBAQAogCQkKIAkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihjb21ibyk7CiAJCWNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuRGVmYXVsdFNlbGVjdGlvbiwgdGhpcyk7Ci0JCWNvbWJvLmFkZExpc3RlbmVyKFNXVC5UcmF2ZXJzZSwgdGhpcyk7CiAJfQogCQogCXByb3RlY3RlZCBhYnN0cmFjdCBMaXN0IGdldENvbWJvSXRlbXMoKTsKQEAgLTE0Myw1MCArMTMxLDggQEAKIAkgIHN1cGVyLmRvSGFuZGxlRXZlbnQoZXZlbnQpOwogCSAgaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibyAmJiAhY29tYm8uaXNEaXNwb3NlZCgpKSB7CiAJCSAgaW50IHNlbGVjdGlvbkluZGV4ID0gY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLQkJICBPYmplY3Qgc2VsZWN0ZWRJdGVtID0gaXRlbXNJbkNvbWJvLmdldChzZWxlY3Rpb25JbmRleCk7Ci0JCSAgCi0JCSAgaWYgKHNob3VsZFBlcmZvcm1Db21ib1NlbGVjdGlvbihldmVudCwgc2VsZWN0ZWRJdGVtKSkKLQkJICB7Ci0JCSAgICBwZXJmb3JtQ29tYm9TZWxlY3Rpb24oc2VsZWN0ZWRJdGVtKTsKLQkJICAgIHJlZnJlc2goKTsKLQkJICB9CisJCSAgcGVyZm9ybUNvbWJvU2VsZWN0aW9uKGl0ZW1zSW5Db21iby5nZXQoc2VsZWN0aW9uSW5kZXgpKTsKKwkJICByZWZyZXNoKCk7CiAJICB9CiAgIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBzaG91bGRQZXJmb3JtQ29tYm9TZWxlY3Rpb24oRXZlbnQgZXZlbnQsIE9iamVjdCBzZWxlY3RlZEl0ZW0pCi0gIHsKLSAgICAvLyBpZiB0cmF2ZXJzaW5nIHRocm91Z2ggY29tYm9ib3gsIGRvbid0IGF1dG9tYXRpY2FsbHkgcG9wIHVwCi0gICAgLy8gdGhlIGJyb3dzZSBhbmQgbmV3IGRpYWxvZyBib3hlcwotICAgIGJvb2xlYW4gd2FzVHJhdmVyc2luZyA9IGlzVHJhdmVyc2luZzsKLSAgICBpZiAoaXNUcmF2ZXJzaW5nKQotICAgICAgaXNUcmF2ZXJzaW5nID0gZmFsc2U7Ci0gICAgICAKLSAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgZGVmYXVsdCBzZWxlY3RpbmcgKGhpdHRpbmcgZW50ZXIgaW4gY29tYm9ib3gpCi0gICAgLy8gZm9yIGJyb3dzZS4uIGFuZCBuZXcuLgotICAgIGlmIChldmVudC50eXBlID09IFNXVC5EZWZhdWx0U2VsZWN0aW9uKQotICAgIHsKLSAgICAgIGlmICghKHNlbGVjdGVkSXRlbSBpbnN0YW5jZW9mIFN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghKEJST1dTRV9TVFJJTkcuZXF1YWxzKHNlbGVjdGVkSXRlbSkgfHwgTkVXX1NUUklORy5lcXVhbHMoc2VsZWN0ZWRJdGVtKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHdhc1RyYXZlcnNpbmcgJiYgc2VsZWN0ZWRJdGVtIGluc3RhbmNlb2YgU3RyaW5nKQotICAgIHsKLSAgICAgIGlmIChCUk9XU0VfU1RSSU5HLmVxdWFscyhzZWxlY3RlZEl0ZW0pIHx8IE5FV19TVFJJTkcuZXF1YWxzKHNlbGVjdGVkSXRlbSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICB7Ci0gIAlpZiAoY29tYm8gIT0gbnVsbCAmJiAhY29tYm8uaXNEaXNwb3NlZCgpKQotICAJewotCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJY29tYm8ucmVtb3ZlTGlzdGVuZXIoU1dULkRlZmF1bHRTZWxlY3Rpb24sIHRoaXMpOwotCQljb21iby5yZW1vdmVMaXN0ZW5lcihTV1QuVHJhdmVyc2UsIHRoaXMpOwotCX0KLQlzdXBlci5kaXNwb3NlKCk7Ci0gIH0KIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDQ1OWE0YWMuLjhhMGY2MjcgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGw7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4yMDIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4xLjIwMS5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW5JbXBsZW1lbnRhdGlvbgogQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRGVmaW5pdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9EZWZpbml0aW9uSW1wbC5qYXZhCmluZGV4IDJiMTRjOWEuLjdjMGVhMGQgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9EZWZpbml0aW9uSW1wbC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9EZWZpbml0aW9uSW1wbC5qYXZhCkBAIC0xMTUzLDEzICsxMTUzLDcgQEAKICAgICovCiAgIHB1YmxpYyBqYXZheC53c2RsLlNlcnZpY2UgcmVtb3ZlU2VydmljZShRTmFtZSBuYW1lKQogICB7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSByZXNvbHZlV1NETEVsZW1lbnQoV1NETENvbnN0YW50cy5TRVJWSUNFLCBuYW1lKTsKLSAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKLSAgICBpZiAod3NkbEVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlKQotICAgICAgcmVtb3ZlZCA9IGdldEVTZXJ2aWNlcygpLnJlbW92ZSh3c2RsRWxlbWVudCk7Ci0gICAgaWYgKCFyZW1vdmVkKQotICAgICAgd3NkbEVsZW1lbnQgPSBudWxsOwotICAgIHJldHVybiAoU2VydmljZSl3c2RsRWxlbWVudDsKKyAgICByZXR1cm4gKGphdmF4LndzZGwuU2VydmljZSlnZXRTZXJ2aWNlcygpLnJlbW92ZShuYW1lKTsKICAgfQogCiAgIC8qKgpAQCAtMTE2OSwxMyArMTE2Myw3IEBACiAgICAqLwogICBwdWJsaWMgamF2YXgud3NkbC5CaW5kaW5nIHJlbW92ZUJpbmRpbmcoUU5hbWUgbmFtZSkKICAgewotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gcmVzb2x2ZVdTRExFbGVtZW50KFdTRExDb25zdGFudHMuQklORElORywgbmFtZSk7Ci0gICAgYm9vbGVhbiByZW1vdmVkID0gZmFsc2U7Ci0gICAgaWYgKHdzZGxFbGVtZW50IGluc3RhbmNlb2YgQmluZGluZykKLSAgICAgIHJlbW92ZWQgPSBnZXRFQmluZGluZ3MoKS5yZW1vdmUod3NkbEVsZW1lbnQpOwotICAgIGlmICghcmVtb3ZlZCkKLSAgICAgIHdzZGxFbGVtZW50ID0gbnVsbDsKLSAgICByZXR1cm4gKEJpbmRpbmcpd3NkbEVsZW1lbnQ7CisgICAgcmV0dXJuIChqYXZheC53c2RsLkJpbmRpbmcpZ2V0QmluZGluZ3MoKS5yZW1vdmUobmFtZSk7CiAgIH0KIAogICAvKioKQEAgLTExODUsMTMgKzExNzMsNyBAQAogICAgKi8KICAgcHVibGljIGphdmF4LndzZGwuUG9ydFR5cGUgcmVtb3ZlUG9ydFR5cGUoUU5hbWUgbmFtZSkKICAgewotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gcmVzb2x2ZVdTRExFbGVtZW50KFdTRExDb25zdGFudHMuUE9SVF9UWVBFLCBuYW1lKTsKLSAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKLSAgICBpZiAod3NkbEVsZW1lbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLSAgICAgIHJlbW92ZWQgPSBnZXRFUG9ydFR5cGVzKCkucmVtb3ZlKHdzZGxFbGVtZW50KTsKLSAgICBpZiAoIXJlbW92ZWQpCi0gICAgICB3c2RsRWxlbWVudCA9IG51bGw7Ci0gICAgcmV0dXJuIChQb3J0VHlwZSl3c2RsRWxlbWVudDsKKyAgICByZXR1cm4gKGphdmF4LndzZGwuUG9ydFR5cGUpZ2V0UG9ydFR5cGVzKCkucmVtb3ZlKG5hbWUpOwogICB9CiAKICAgLyoqCkBAIC0xMjAxLDEzICsxMTgzLDcgQEAKICAgICovCiAgIHB1YmxpYyBqYXZheC53c2RsLk1lc3NhZ2UgcmVtb3ZlTWVzc2FnZShRTmFtZSBuYW1lKQogICB7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSByZXNvbHZlV1NETEVsZW1lbnQoV1NETENvbnN0YW50cy5NRVNTQUdFLCBuYW1lKTsKLSAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKLSAgICBpZiAod3NkbEVsZW1lbnQgaW5zdGFuY2VvZiBNZXNzYWdlKQotICAgICAgcmVtb3ZlZCA9IGdldEVNZXNzYWdlcygpLnJlbW92ZSh3c2RsRWxlbWVudCk7Ci0gICAgaWYgKCFyZW1vdmVkKQotICAgICAgd3NkbEVsZW1lbnQgPSBudWxsOwotICAgIHJldHVybiAoTWVzc2FnZSl3c2RsRWxlbWVudDsKKyAgICByZXR1cm4gKGphdmF4LndzZGwuTWVzc2FnZSlnZXRNZXNzYWdlcygpLnJlbW92ZShuYW1lKTsKICAgfQogCiAgIC8qKgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFV0aWwuamF2YQppbmRleCBjYWUwMGZlLi45MWZjYjNmIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFV0aWwuamF2YQorKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFV0aWwuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC02NSwxMyArNjUsMTAgQEAKICAgewogICAgIGludCByZXN1bHQgPSAtMTsKIAotICAgIGlmIChXU0RMQ29uc3RhbnRzLmlzV1NETE5hbWVzcGFjZShlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKKyAgICBJbnRlZ2VyIGludGVnZXIgPSAoSW50ZWdlcillbGVtZW50TmFtZVRvVHlwZU1hcC5nZXQoZWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7CisgICAgaWYgKGludGVnZXIgIT0gbnVsbCkKICAgICB7Ci0gICAgICBJbnRlZ2VyIGludGVnZXIgPSAoSW50ZWdlcikgZWxlbWVudE5hbWVUb1R5cGVNYXAuZ2V0KGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotICAgICAgaWYgKGludGVnZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gaW50ZWdlci5pbnRWYWx1ZSgpOwotICAgICAgfQorICAgICAgcmVzdWx0ID0gaW50ZWdlci5pbnRWYWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogICB9CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0NjY4Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXJfMS4wLjAuamFyCi1iYWsKLXRlbXAKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMzk1MGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9Eb2NCdWlsZC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZjBiNjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvRG9jQnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tIAotCi0JVGhpcyBzY3JpcHQgYnVpbGQgdGhlIEhlbHAgcGx1Zy1pbiBieSB0cmFuc2Zvcm1pbmcgdGhlIERJVEEgc291cmNlIGZpbGVzIGludG8gSFRNTC4KLQkKLQlUbyB1c2UgdGhpcyBzY3JpcHQsIHlvdSBtdXN0IGluc3RhbGwgRElUQS1PVCBvbiB5b3VyIG1hY2hpbmUgaW4gdGhlIGRpcmVjdG9yeQotCWRlZmluZWQgYnkgdGhlIGRpdGEub3QuZGlyIHByb3BlcnR5LgotCQotCVJ1biB0aGUgZGVmYXVsdCB0YXJnZXQgYWZ0ZXIgeW91IGVkaXQgdGhlIERJVEEgc291cmNlIGZpbGVzIHRvIHJlZ2VuZXJhdGUgdGhlIEhUTUwuCi0JCi0JVG8gY3VzdG9taXplIHRoaXMgc2NyaXB0IGZvciBvdGhlciBIZWxwIHBsdWctaW5zLCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBhcmdzLmlucHV0IHByb3BlcnR5Ci0JdG8gYmUgdGhlIERJVEEgbWFwIGZpbGUgZm9yIHRoZSBwbHVnLWluLgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBsaW5rcyB0byBzaWJsaW5nIEhlbHAgcGx1Zy1pbnMgaGF2ZSBzY29wZT0icGVlciIsIG90aGVyd2lzZSB0aGUKLQlvdXRwdXQgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aWxsIGJlIHNoaWZ0ZWQgaW5jb3JyZWN0bHkuCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IHlvdSBoYW5kIGNvZGUgeW91ciBwbHVnaW4ueG1sIGZpbGUgaW4gbXlwbHVnaW4ueG1sLiBUaGlzIGZpbGUKLQl3aWxsIGJlIGNvcGllZCBvdmVyIHRoZSBnZW5lcmF0ZWQgcGx1Z2luLnhtbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGJlaW5nIGdlbmVyYXRlZCBjb3JyZWN0bHkKLQlieSBESVRBLU9ULgotCQotCUNoYW5nZUxvZzoKLQkyMDA2LTA0LTA1IEFydGh1ciBSeW1hbiA8cnltYW5AY2EuaWJtLmNvbT4KLQktIENyZWF0ZWQuCi0JMjAwOC0wMS0wOSBLYXRlIFByaWNlIDxrYXRlcEBjYS5pYm0uY29tPgotCS0gbW9kaWZpZWQgZm9yIG5ldyBESVRBLU9UIHZlcnNpb24KLQkyMDA4LTA1LTA1IEthdGUgUHJpY2UgPGthdGVwQGNhLmlibS5jb20+Ci0JLSBtb2RpZmllZCB0byBhZGQgZ2VuZXJhdGlvbiBvZiBwcmUtYnVpbHQgaGVscCBpbmRleC4gCi0JLSBNdXN0IGRlbGV0ZSAvaW5kZXggZm9sZGVyIGJlZm9yZSBydW5uaW5nIGJ1aWxkCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImVjbGlwc2VoZWxwIiBkZWZhdWx0PSJhbGwiPgotCi0JPHByb3BlcnR5IG5hbWU9ImRpdGEub3QuZGlyIiBsb2NhdGlvbj0iQzovRElUQS1PVDEuMi4yIiAvPgotCi0JPHBhdGggaWQ9ImRvc3QuY2xhc3MucGF0aCI+Ci0JCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWxpYiR7ZmlsZS5zZXBhcmF0b3J9ZG9zdC5qYXIiIC8+Ci0JPC9wYXRoPgotCi0JPHRhc2tkZWYgbmFtZT0iaW50ZWdyYXRlIiBjbGFzc25hbWU9Im9yZy5kaXRhLmRvc3QucGxhdGZvcm0uSW50ZWdyYXRvclRhc2siPgotCQk8Y2xhc3NwYXRoIHJlZmlkPSJkb3N0LmNsYXNzLnBhdGgiIC8+Ci0JPC90YXNrZGVmPgotCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbnRlZ3JhdGUsIGVjbGlwc2VoZWxwIj4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImludGVncmF0ZSI+Ci0JCTxpbnRlZ3JhdGUgZGl0YWRpcj0iJHtkaXRhLm90LmRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIHJldmlzZSBiZWxvdyBoZXJlIC0tPgotCTx0YXJnZXQgbmFtZT0iZWNsaXBzZWhlbHAiPgotCQk8YW50IGFudGZpbGU9IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1jb25kdWN0b3IueG1sIiB0YXJnZXQ9ImluaXQiIGRpcj0iJHtkaXRhLm90LmRpcn0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY29weWNzcyIgdmFsdWU9Im5vIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY3NzcGF0aCIgdmFsdWU9Ii4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlciIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UucHJvdmlkZXIiIHZhbHVlPSJFY2xpcHNlLm9yZyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UudmVyc2lvbiIgdmFsdWU9IjMuMy4wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuaW5wdXQiIGxvY2F0aW9uPSJ3c2F4aXNhbnRfdG9jLmRpdGFtYXAiIC8+IAotCQkJPHByb3BlcnR5IG5hbWU9ImNsZWFuLnRlbXAiIHZhbHVlPSJ0cnVlIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEuZXh0bmFtZSIgdmFsdWU9Ii5kaXRhIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEudGVtcC5kaXIiIGxvY2F0aW9uPSJ0ZW1wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC5kaXIiIGxvY2F0aW9uPSIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJidWlsZC5pbmRleCIgZGVzY3JpcHRpb249IkJ1aWxkcyBzZWFyY2ggaW5kZXggZm9yIHRoZSBwbHVnLWluIiBpZj0iZWNsaXBzZS5ydW5uaW5nIj4KLQkgICAgIDxoZWxwLmJ1aWxkSGVscEluZGV4IG1hbmlmZXN0PSJwbHVnaW4ueG1sIiBkZXN0aW5hdGlvbj0iLiIvPgotCTwvdGFyZ2V0PgkKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZWM2NzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXI7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS41LjIwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNDI0ZDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd3NheGlzYW50X3RvYy54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB0b3BpY3MvKi5odG0qLFwKLSAgICAgICAgICAgICAgIGluZGV4LyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyaW5kZXgueG1sCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotICAgICAgICAgICAgICAgdG9waWNzLyouZGl0YSxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXJpbmRleC54bWwKLWJpbi5leGNsdWRlcyA9IERvY0J1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICBteVBsdWdpbioueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9fNi5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9fNi5jZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMzRlZDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvXzYuY2ZzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTNmNDcwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiNzEzYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDE0IDIwOjMxOjIyIEVEVCAyMDA4DQotb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyPW9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlclxuMS41LjIwMC5xdWFsaWZpZXINCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDA5NGVmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAxNCAyMDozMToyMiBFRFQgMjAwOA0KLWx1Y2VuZT0xLjkuMS52MjAwODAzMDYxODExDQotYW5hbHl6ZXI9b3JnLmVjbGlwc2UuaGVscC5iYXNlXCMzLjMuMTAwLnYyMDA4MDQyNT9sb2NhbGVcPWVuDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzRlNDkxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMjA6MzE6MjIgRURUIDIwMDgNCi0vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yd3NjbGllbnRhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50Lmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZTMyN2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMTA0ZDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDc4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgICAgIDx0b2MgZmlsZT0id3NheGlzYW50X3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotICAgPC9leHRlbnNpb24+Ci0gICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXJpbmRleC54bWwiLz4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLmx1Y2VuZVNlYXJjaFBhcnRpY2lwYW50cyI+Ci0gICAgICA8YmluZGluZyBwYXJ0aWNpcGFudElkPSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UueGh0bWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVmMjYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+DQotICA8bmF2Pg0KLSAgICA8bWFwIGZpbGU9IndzYXhpc2FudF90b2MuZGl0YW1hcCIvPg0KLSAgPC9uYXY+DQotICA8bGluaz4NCi0gICAgPG1hcCBmaWxlPSJ3c2F4aXNhbnRfdG9jLmRpdGFtYXAiLz4NCi0gIDwvbGluaz4NCi08L21hcGxpc3Q+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyaW5kZXgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWVjNDE0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlcmluZGV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIHdpdGggQW50IHRhc2tzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jd3NheGlzYW50Lmh0bWwjY3JlYXRpbmdhd2Vic2VydmljZWZyb21hamF2YWJlYW4iIHRpdGxlPSJDcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MiLz4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90d2J3c2EuaHRtbCN0dGR3c2EiIHRpdGxlPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNrZWxldG9uIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iQW50IHRhc2sgcmVmZXJlbmNlIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9ydGR3c2EuaHRtbCN0b3AtZG93bmF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIHRpdGxlPSJUb3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iamF2YSBiZWFuIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iQW50IHRhc2sgcmVmZXJlbmNlIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9yYnV3c2EuaHRtbCNib3R0b20tdXBheGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIiB0aXRsZT0iQm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMgY2xpZW50Ij4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyB3aXRoIEFudCB0YXNrcyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHdid3NjbGllbnRhLmh0bWwjdHdzY2xpZW50YSIgdGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrcyIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJBbnQgdGFzayByZWZlcmVuY2UiPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3J3c2NsaWVudGEuaHRtbCNheGlzd2Vic2VydmljZWNsaWVudGNvbW1hbmRsaW5lcmVmZXJlbmNlIiB0aXRsZT0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50Ij4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyB3aXRoIEFudCB0YXNrcyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvY3dzYXhpc2FudC5odG1sI2NyZWF0aW5nYXdlYnNlcnZpY2Vmcm9tYWphdmFiZWFuIiB0aXRsZT0iQ3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIgc2VydmljZXMgQW50IHRhc2tzIi8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHdid3NhLmh0bWwjdHRkd3NhIiB0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaCIvPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R3YndzY2xpZW50YS5odG1sI3R3c2NsaWVudGEiIHRpdGxlPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3MiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90d2J3c2EuaHRtbCN0dGR3c2EiIHRpdGxlPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoIi8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9IkFudCB0YXNrIHJlZmVyZW5jZSI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvcnRkd3NhLmh0bWwjdG9wLWRvd25heGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIiB0aXRsZT0iVG9wLWRvd24gQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlIi8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvcmJ1d3NhLmh0bWwjYm90dG9tLXVwYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSIgdGl0bGU9IkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiLz4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9yd3NjbGllbnRhLmh0bWwjYXhpc3dlYnNlcnZpY2VjbGllbnRjb21tYW5kbGluZXJlZmVyZW5jZSIgdGl0bGU9IkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0ic2tlbGV0b24gV2ViIHNlcnZpY2VzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9ydGR3c2EuaHRtbCN0b3AtZG93bmF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIHRpdGxlPSJUb3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iamF2YSBiZWFuIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvcmJ1d3NhLmh0bWwjYm90dG9tLXVwYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSIgdGl0bGU9IkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIGNsaWVudCI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHdid3NjbGllbnRhLmh0bWwjdHdzY2xpZW50YSIgdGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrcyIvPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3J3c2NsaWVudGEuaHRtbCNheGlzd2Vic2VydmljZWNsaWVudGNvbW1hbmRsaW5lcmVmZXJlbmNlIiB0aXRsZT0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWMyZGFjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSIAotIyBOTFNfRU5DT0RJTkc9VVRGLTggCi0KLXBsdWdpbk5hbWUgICAgID0gV2ViIHNlcnZpY2VzIEF4aXMgQW50IHRhc2sgZG9jdW1lbnRhdGlvbgotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMTA0ZDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLQotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3OCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLQotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgICAgICA8dG9jIGZpbGU9IndzYXhpc2FudF90b2MueG1sIiAvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyaW5kZXgueG1sIi8+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS5sdWNlbmVTZWFyY2hQYXJ0aWNpcGFudHMiPgotICAgICAgPGJpbmRpbmcgcGFydGljaXBhbnRJZD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLnhodG1sIi8+Ci0gICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL2N3c2F4aXNhbnQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTU0N2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL2N3c2F4aXNhbnQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiINCi0gImNvbmNlcHQuZHRkIj4NCi08Y29uY2VwdCBpZD0iY3JlYXRpbmdhd2Vic2VydmljZWZyb21hamF2YWJlYW4iIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgV2ViDQotc2VydmljZXMgQW50IHRhc2tzPC90aXRsZT4NCi08dGl0bGVhbHRzPg0KLTxzZWFyY2h0aXRsZT5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nDQotQW50IHRhc2tzPC9zZWFyY2h0aXRsZT4NCi08L3RpdGxlYWx0cz4NCi08c2hvcnRkZXNjPklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQNCi1maWxlcyB0byBjcmVhdGUgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQuDQotVGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MgY2FuIGJlIHJ1biBpbiB0d28gd2F5czogdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UNCi11c2luZyA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5SdW4gQXM8L3VpY29udHJvbD48dWljb250cm9sPkFudCBCdWlsZC4uLjwvdWljb250cm9sPg0KLTwvbWVudWNhc2NhZGU+LCBvciB0aGV5IGNhbiBiZSBydW4gaGVhZGxlc3MgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLiBPbmNlDQoteW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0DQotaXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+QXhpcyBydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nDQotd2l0aCBBbnQgdGFza3M8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcw0KLXJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPmNyZWF0aW5nIHdpdGggQW50IHRhc2tzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxjb25ib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5QcmVyZXF1aXNpdGVzPC90aXRsZT48cD5CZWZvcmUgeW91IGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIG9yDQotY2xpZW50IHVzaW5nIHRoZSBBbnQgdGFza3MsIHlvdSBuZWVkIHRvIGNvbXBsZXRlIGEgZmV3IHByZXJlcXVpc2l0ZXMuPC9wPjx1bD4NCi08bGk+SW5zdGFsbCBBcGFjaGUgVG9tY2F0LCBjcmVhdGUgYSBzZXJ2ZXIsIGFuZCBjcmVhdGUgYSBkeW5hbWljIFdlYiBwcm9qZWN0DQotYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmVyIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHRvbWNhdHNlcnYuZGl0YSINCi1zY29wZT0icGVlciI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC94cmVmPjwvbGk+DQotPGxpPkltcG9ydCB0aGUgcmVxdWlyZWQgQW50IGZpbGVzIGludG8geW91ciB3b3Jrc3BhY2U6PG9sPg0KLTxsaT5DcmVhdGUgYSBwcm9qZWN0LjwvbGk+DQotPGxpPkltcG9ydCB0aGUgcmVxdWlyZWQgQW50IGZpbGVzLiBTZWxlY3QgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+RmlsZTwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+TmV3PC91aWNvbnRyb2w+PHVpY29udHJvbD5PdGhlcjwvdWljb250cm9sPjx1aWNvbnRyb2w+V2ViIFNlcnZpY2VzPC91aWNvbnRyb2w+DQotPHVpY29udHJvbD5BbnQgRmlsZXM8L3VpY29udHJvbD48dWljb250cm9sPk5leHQ8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPi48L2xpPg0KLTxsaT5TZWxlY3QgdGhlIGZvbGxvd2luZzo8dWw+DQotPGxpPldlYiBzZXJ2aWNlIHJ1bnRpbWU8L2xpPg0KLTxsaT5XZWIgc2VydmljZSBvciBjbGllbnQgdHlwZTwvbGk+DQotPGxpPkxvY2F0aW9uIGludG8gd2hpY2ggdGhlIGFudCBmaWxlcyB3aWxsIGJlIGdlbmVyYXRlZDwvbGk+DQotPC91bD5DbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2xpPg0KLTwvb2w+RGVwZW5kaW5nIG9uIHRoZSBzZWxlY3Rpb25zIG1hZGUgb24gdGhlIHByZXZpb3VzIHBhbmVsLCBzZXZlcmFsIGZpbGVzDQotbWF5IGJlIGltcG9ydGVkIGludG8gdGhpcyBwcm9qZWN0Ojx1bD4NCi08bGk+PGk+cnVudGltZV9zZXJ2aWNldHlwZTwvaT4ueG1sIC0gdGhpcyBpcyB0aGUgQW50IGZpbGUuPC9saT4NCi08bGk+PGk+cnVudGltZV9zZXJ2aWNldHlwZTwvaT4ucHJvcGVydGllcyAtIHRoaXMgaXMgYSBzYW1wbGUgQW50IHByb3BlcnRpZXMNCi1maWxlIHJlZmVyZW5jZWQgYnkgdGhlIEFudCBmaWxlLiBZb3UgY2FuIG1vZGlmeSB0aGUgcHJvcGVydGllcyBpbiB0aGlzIGZpbGUNCi10byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlLjwvbGk+DQotPC91bD48L2xpPg0KLTxsaT5DcmVhdGUgYSBkeW5hbWljIFdlYiBwcm9qZWN0IGZvciB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50LjwvbGk+DQotPC91bD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2Ugb3IgY2xpZW50PC90aXRsZT48cD5PbmNlIHlvdSd2ZSBjb21wbGV0ZWQNCi10aGUgcHJlcmVxdWlzaXRlcyB5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6PC9wPjwvc2VjdGlvbj4NCi08L2NvbmJvZHk+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvY3dzYXhpc2FudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmRhZDU0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSWYgeW91IHByZWZlciBub3QgdG8gdXNlIHRoZSBXZWIgc2VydmljZSB3aXphcmQsIHlvdSBjYW4gdXNlIEFudCBmaWxlcyB0byBjcmVhdGUgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHVzaW5nIFJ1biBBcyAmZ3Q7IEFudCBCdWlsZC4uLiwgb3IgdGhleSBjYW4gYmUgcnVuIGhlYWRsZXNzIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZS4gT25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UsIHlvdSBjYW4gdGhlbiBkZXBsb3kgaXQgdG8gYSBzZXJ2ZXIsIHRlc3QgaXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQgZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0IGl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyB3aXRoIEFudCB0YXNrcywgQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBjcmVhdGluZyB3aXRoIEFudCB0YXNrcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyB3aXRoIEFudCB0YXNrcywgQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBjcmVhdGluZyB3aXRoIEFudCB0YXNrcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3R3YndzY2xpZW50YS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNyZWF0aW5nYXdlYnNlcnZpY2Vmcm9tYWphdmFiZWFuIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZwotQW50IHRhc2tzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjcmVhdGluZ2F3ZWJzZXJ2aWNlZnJvbWFqYXZhYmVhbiI+PGEgbmFtZT0iY3JlYXRpbmdhd2Vic2VydmljZWZyb21hamF2YWJlYW4iPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgV2ViCi1zZXJ2aWNlcyBBbnQgdGFza3M8L2gxPgotCi0KLQotCi08ZGl2PjxwPklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQKLWZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4KLVRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlCi11c2luZyA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJ1biBBczwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BbnQgQnVpbGQuLi48L3NwYW4+Ci08L3NwYW4+LCBvciB0aGV5IGNhbiBiZSBydW4gaGVhZGxlc3MgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLiBPbmNlCi15b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UsIHlvdSBjYW4gdGhlbiBkZXBsb3kgaXQgdG8gYSBzZXJ2ZXIsIHRlc3QKLWl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlByZXJlcXVpc2l0ZXM8L2g0PjxwPkJlZm9yZSB5b3UgY3JlYXRlIGEgV2ViIHNlcnZpY2Ugb3IKLWNsaWVudCB1c2luZyB0aGUgQW50IHRhc2tzLCB5b3UgbmVlZCB0byBjb21wbGV0ZSBhIGZldyBwcmVyZXF1aXNpdGVzLjwvcD4KLTx1bD4KLTxsaT5JbnN0YWxsIEFwYWNoZSBUb21jYXQsIGNyZWF0ZSBhIHNlcnZlciwgYW5kIGNyZWF0ZSBhIGR5bmFtaWMgV2ViIHByb2plY3QKLWFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZlciBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L2xpPgotCi08bGk+SW1wb3J0IHRoZSByZXF1aXJlZCBBbnQgZmlsZXMgaW50byB5b3VyIHdvcmtzcGFjZTo8b2w+Ci08bGk+Q3JlYXRlIGEgcHJvamVjdC48L2xpPgotCi08bGk+SW1wb3J0IHRoZSByZXF1aXJlZCBBbnQgZmlsZXMuIFNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGU8L3NwYW4+Ci0gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXc8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T3RoZXI8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2VzPC9zcGFuPgotICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QW50IEZpbGVzPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+PC9zcGFuPi48L2xpPgotCi08bGk+U2VsZWN0IHRoZSBmb2xsb3dpbmc6PHVsPgotPGxpPldlYiBzZXJ2aWNlIHJ1bnRpbWU8L2xpPgotCi08bGk+V2ViIHNlcnZpY2Ugb3IgY2xpZW50IHR5cGU8L2xpPgotCi08bGk+TG9jYXRpb24gaW50byB3aGljaCB0aGUgYW50IGZpbGVzIHdpbGwgYmUgZ2VuZXJhdGVkPC9saT4KLQotPC91bD4KLUNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9saT4KLQotPC9vbD4KLURlcGVuZGluZyBvbiB0aGUgc2VsZWN0aW9ucyBtYWRlIG9uIHRoZSBwcmV2aW91cyBwYW5lbCwgc2V2ZXJhbCBmaWxlcwotbWF5IGJlIGltcG9ydGVkIGludG8gdGhpcyBwcm9qZWN0Ojx1bD4KLTxsaT48ZW0+cnVudGltZV9zZXJ2aWNldHlwZTwvZW0+LnhtbCAtIHRoaXMgaXMgdGhlIEFudCBmaWxlLjwvbGk+Ci0KLTxsaT48ZW0+cnVudGltZV9zZXJ2aWNldHlwZTwvZW0+LnByb3BlcnRpZXMgLSB0aGlzIGlzIGEgc2FtcGxlIEFudCBwcm9wZXJ0aWVzCi1maWxlIHJlZmVyZW5jZWQgYnkgdGhlIEFudCBmaWxlLiBZb3UgY2FuIG1vZGlmeSB0aGUgcHJvcGVydGllcyBpbiB0aGlzIGZpbGUKLXRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT5DcmVhdGUgYSBkeW5hbWljIFdlYiBwcm9qZWN0IGZvciB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50LjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2Ugb3IgY2xpZW50PC9oND48cD5PbmNlIHlvdSd2ZSBjb21wbGV0ZWQKLXRoZSBwcmVyZXF1aXNpdGVzIHlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZzo8L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdHdid3NhLmh0bWwiPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2g8L2E+PC9zdHJvbmc+PGJyIC8+Ci1Zb3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4gQm90aCB0b3AtZG93biBhbmQgYm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpcyBzdXBwb3J0ZWQgd2l0aCB0aGUgQW50IHRhc2tzLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy90d2J3c2NsaWVudGEuaHRtbCI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzPC9hPjwvc3Ryb25nPjxiciAvPgotSWYgeW91IGhhdmUgYSBXU0RMIGZpbGUgeW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LjwvbGk+Ci08L3VsPgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcmJ1d3NhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcmJ1d3NhLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YTg1MmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3JidXdzYS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iDQotICJyZWZlcmVuY2UuZHRkIj4NCi08cmVmZXJlbmNlIGlkPSJib3R0b20tdXBheGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5Cb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC90aXRsZT4NCi08c2hvcnRkZXNjPlRoZSA8dXNlcmlucHV0PmF4aXNfYnVqYXZhLnByb3BlcnRpZXM8L3VzZXJpbnB1dD4gZmlsZSBpcyB1c2VkDQotdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZQ0KLS4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPmphdmEgYmVhbiBXZWIgc2VydmljZXM8aW5kZXh0ZXJtPkFudA0KLXRhc2sgcmVmZXJlbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkF4aXMNCi1ydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5qYXZhIGJlYW4gV2ViIHNlcnZpY2VzPGluZGV4dGVybT5BbnQgdGFzayByZWZlcmVuY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHJlZmJvZHk+DQotPHNlY3Rpb24+PHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPjxwYXJtbD48cGxlbnRyeT4NCi08cHQ+U2NlbmFyaW9UeXBlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnNlcnZpY2U8L2NvZGVwaD4gPC9zeW5waD48L3BkPg0KLTxwZD5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhDQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkluaXRpYWxTZWxlY3Rpb248L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4NCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwvdXNlcmlucHV0DQotPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0UnVudGltZXM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0U2VydmVyczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZS5SdW50aW1lSWQ8L3B0Pg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgV2ViIHNlcnZpY2UncyBydW50aW1lLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgbm90DQotYmUgbW9kaWZpZWQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlNlcnZpY2UuU2VydmVySWQ8L3B0Pg0KLTxwZD5PcHRpb25zOjxzbD4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+MzIsDQotNDAsIDQxLCA1MCw8L2NvZGVwaD4gb3IgPGNvZGVwaD41NTwvY29kZXBoPik8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+ODE8L2NvZGVwaD4gb3IgPGNvZGVwaD45MDwvY29kZXBoPikgPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qYm9zc3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyMzwvY29kZXBoPiBvciA8Y29kZXBoPjQ8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlcnMud2Vic3BoZXJlLjY8L2NvZGVwaD48L3NsaT4NCi08L3NsPjwvcGQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSB0YXJnZXQgc2VydmVyLiBEZWxldGUgb3IgY29tbWVudCBvdXQgdGhpcyBwYXJhbWV0ZXINCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncw0KLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TZXJ2aWNlUHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBzZXJ2aWNlIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBKYXZhDQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdA0KLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZUVhclByb2plY3ROYW1lPC9wdD4NCi08cGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlDQotb3IgSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQ0KLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWFwcGluZ3M8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy48L3BkPg0KLTxwZD5NYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZA0KLVdTREwuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2U9bmFtZXNwYWNlLg0KLVlvdSB3aWxsIG5lZWQgdG8gZXNjYXBlIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGVzLiANCi1Gb3IgZXhhbXBsZSA8Y29kZXBoPnNvbWVQYWNrYWdlPWh0dHA6Ly9zb21lTmFtZXNwYWNlPC9jb2RlcGg+IHNob3VsZCBiZSA8Y29kZXBoPnNvbWVQYWNrYWdlPWh0dHBcOi8vc29tZU5hbWVzcGFjZTwvY29kZXBoPi4NCi0gT3RoZXJ3aXNlLCB0aGUgY29sb24gKDopIHdvdWxkIGJlIHRyZWF0ZWQgYXMgZGVsaW1pdGVyIHJlc3VsdGluZyBpbiB0cnlpbmcNCi10byBtYXAgPGNvZGVwaD5zb21lUGFja2FnZTwvY29kZXBoPiB0byA8Y29kZXBoPmh0dHA8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkphdmFPdXRwdXQ8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhbiBleGlzdGluZyBKYXZhIHNvdXJjZSBmb2xkZXIgZm9yDQotdGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk1ldGhvZHM8L3B0Pg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gbGltaXQgd2hpY2ggbWV0aG9kcyBhcmUgZXhwb3NlZCBpbiB0aGUgc2VydmljZS4NCi1JdCBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcy4gRm9yDQotZXhhbXBsZSwgPHVzZXJpbnB1dD5tZXRob2QxKHBhcm1UeXBlMSkgbWV0aG9kMihwYXJtVHlwZTIpPC91c2VyaW5wdXQ+LiBJZg0KLW5vIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCBtZXRob2RzIGFyZSBleHBvc2VkLiA8L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U3R5bGU8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+RE9DVU1FTlQ8L2NvZGVwaD4gPGNvZGVwaD5SUEM8L2NvZGVwaD4gPGNvZGVwaD5XUkFQUEVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgdGhlIFNPQVAgbWVzc2FnZSBzdHlsZS4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5ET0NVTUVOVDwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+VXNlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPkxJVEVSQUw8L2NvZGVwaD4gPGNvZGVwaD5FTkNPREVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgaWYgdGhlIFNPQVAgbWVzc2FnZSB3aWxsIGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5MSVRFUkFMPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gb3ZlcndyaXRlIGFueSBmaWxlIHRoYXQgaXQNCi1jcmVhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q3JlYXRlRm9sZGVyc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY3JlYXRlIGFueSBuZWNjZXNzYXJ5IGZvbGRlcnMuDQotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNoZWNrb3V0RmlsZXNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQNCi1wcm9tcHRpbmcgeW91LiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48L3Bhcm1sPjwvc2VjdGlvbj4NCi08L3JlZmJvZHk+DQotPC9yZWZlcmVuY2U+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3JidXdzYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3JidXdzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmIwZDE3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIGF4aXNfYnVqYXZhLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgYXhpc19idWphdmEucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBqYXZhIGJlYW4gV2ViIHNlcnZpY2VzLCBBbnQgdGFzayByZWZlcmVuY2UsIFdlYiBzZXJ2aWNlcywgQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBBbnQgdGFzayByZWZlcmVuY2UiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGphdmEgYmVhbiBXZWIgc2VydmljZXMsIEFudCB0YXNrIHJlZmVyZW5jZSwgV2ViIHNlcnZpY2VzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIEFudCB0YXNrIHJlZmVyZW5jZSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJib3R0b20tdXBheGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Qm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iYm90dG9tLXVwYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSI+PGEgbmFtZT0iYm90dG9tLXVwYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Qm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmF4aXNfYnVqYXZhLnByb3BlcnRpZXM8L2tiZD4gZmlsZSBpcyB1c2VkCi10byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlCi0uIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+UGFyYW1ldGVyczwvaDQ+PGRsPgotPGR0IGNsYXNzPSJkbHRlcm0iPlNjZW5hcmlvVHlwZTwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj5zZXJ2aWNlPC9zYW1wPiA8L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VGhpcyBpcyBhIHJlcXVpcmVkIGVsZW1lbnQgdGhhdCB0ZWxscyB0aGUgQW50IHRhc2sgaWYgaXQgaXMgY3JlYXRpbmcgYQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+SW5pdGlhbFNlbGVjdGlvbjwvZHQ+Ci0KLTxkZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4KLXlvdXIgd29ya3NwYWNlLiBGb3IgZXhhbXBsZSA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPi9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC9teVNlcnZpY2Uud3NkbDwva2JkPiBvciA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPi9keW5hbWljV2ViUHJvamVjdE5hbWUvc3JjL215QmVhbi5qYXZhPC9rYmQ+PC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TGlzdFJ1bnRpbWVzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgcnVudGltZSBvcHRpb25zCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0U2VydmVyczwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+SWYgPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHNlcnZlciBvcHRpb25zCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlLlJ1bnRpbWVJZDwvZHQ+Ci0KLTxkZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgV2ViIHNlcnZpY2UncyBydW50aW1lLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgbm90Ci1iZSBtb2RpZmllZC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlLlNlcnZlcklkPC9kdD4KLQotPGRkPk9wdGlvbnM6PHVsIGNsYXNzPSJzaW1wbGUiPgotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0Lng8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj4zMiwKLTQwLCA0MSwgNTAsPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj41NTwvc2FtcD4pPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy53ZWJsb2dpY3g8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj44MTwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+OTA8L3NhbXA+KSA8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpib3NzeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyMzwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+NDwvc2FtcD4pPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5vcmFjbGUxMDEzPC9zYW1wPjwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVycy53ZWJzcGhlcmUuNjwvc2FtcD48L2xpPgotCi08L3VsPgotPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIHRhcmdldCBzZXJ2ZXIuIERlbGV0ZSBvciBjb21tZW50IG91dCB0aGlzIHBhcmFtZXRlcgotdG8gaGF2ZSB0aGUgQW50IHRhc2sgc2VsZWN0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBzZXJ2ZXIgc2V0dGluZ3MKLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2VQcm9qZWN0TmFtZTwvZHQ+Ci0KLTxkZD5CeSBkZWZhdWx0IHRoZSBzZXJ2aWNlIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBKYXZhCi1iZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZSBwcm9qZWN0Ci13aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZUVhclByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIHNlcnZpY2UgRUFSIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZQotb3IgSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQotRUFSIHByb2plY3Qgd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk1hcHBpbmdzPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGEgcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPk1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkCi1XU0RMLiBUaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCBwYWNrYWdlPW5hbWVzcGFjZS4KLVlvdSB3aWxsIG5lZWQgdG8gZXNjYXBlIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGVzLiAKLUZvciBleGFtcGxlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnNvbWVQYWNrYWdlPWh0dHA6Ly9zb21lTmFtZXNwYWNlPC9zYW1wPiBzaG91bGQgYmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+c29tZVBhY2thZ2U9aHR0cFw6Ly9zb21lTmFtZXNwYWNlPC9zYW1wPi4KLSBPdGhlcndpc2UsIHRoZSBjb2xvbiAoOikgd291bGQgYmUgdHJlYXRlZCBhcyBkZWxpbWl0ZXIgcmVzdWx0aW5nIGluIHRyeWluZwotdG8gbWFwIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnNvbWVQYWNrYWdlPC9zYW1wPiB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5KYXZhT3V0cHV0PC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGFuIGV4aXN0aW5nIEphdmEgc291cmNlIGZvbGRlciBmb3IKLXRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk1ldGhvZHM8L2R0PgotCi08ZGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHdoaWNoIG1ldGhvZHMgYXJlIGV4cG9zZWQgaW4gdGhlIHNlcnZpY2UuCi1JdCBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcy4gRm9yCi1leGFtcGxlLCA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPm1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMik8L2tiZD4uIElmCi1ubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4gPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U3R5bGU8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+RE9DVU1FTlQ8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPlJQQzwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+V1JBUFBFRDwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+U2VsZWN0IHRoZSBTT0FQIG1lc3NhZ2Ugc3R5bGUuIFRoZSBkZWZhdWx0IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPkRPQ1VNRU5UPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Vc2U8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+TElURVJBTDwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+RU5DT0RFRDwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+U2VsZWN0IGlmIHRoZSBTT0FQIG1lc3NhZ2Ugd2lsbCBiZSBsaXRlcmFsIG9yIGVuY29kZWQuIFRoZSBkZWZhdWx0IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPkxJVEVSQUw8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk92ZXJ3cml0ZUZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIG92ZXJ3cml0ZSBhbnkgZmlsZSB0aGF0IGl0Ci1jcmVhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNyZWF0ZUZvbGRlcnNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY3JlYXRlIGFueSBuZWNjZXNzYXJ5IGZvbGRlcnMuCi1CeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNoZWNrb3V0RmlsZXNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY2hlY2tvdXQgZmlsZXMgZnJvbSBDVlMgd2l0aG91dAotcHJvbXB0aW5nIHlvdS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCIgdGl0bGU9IllvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBCb3RoIHRvcC1kb3duIGFuZCBib3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9ydGR3c2EuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9ydGR3c2EuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhYjAwMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcnRkd3NhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSByZWZlcmVuY2UgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgUmVmZXJlbmNlLy9FTiINCi0gInJlZmVyZW5jZS5kdGQiPg0KLTxyZWZlcmVuY2UgaWQ9InRvcC1kb3duYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+VG9wLWRvd24gQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC90aXRsZT4NCi08c2hvcnRkZXNjPlRoZSA8dXNlcmlucHV0PmF4aXNfdGRqYXZhLnByb3BlcnRpZXM8L3VzZXJpbnB1dD4gZmlsZSBpcyB1c2VkDQotdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZQ0KLS4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPnNrZWxldG9uIFdlYiBzZXJ2aWNlczxpbmRleHRlcm0+QW50DQotdGFzayByZWZlcmVuY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcw0KLXJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPnNrZWxldG9uIFdlYiBzZXJ2aWNlczxpbmRleHRlcm0+QW50IHRhc2sgcmVmZXJlbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxyZWZib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5QYXJhbWV0ZXJzPC90aXRsZT48cGFybWw+PHBsZW50cnk+DQotPHB0PlNjZW5hcmlvVHlwZTwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD5zZXJ2aWNlPC9jb2RlcGg+IDwvc3lucGg+PC9wZD4NCi08cGQ+VGhpcyBpcyBhIHJlcXVpcmVkIGVsZW1lbnQgdGhhdCB0ZWxscyB0aGUgQW50IHRhc2sgaWYgaXQgaXMgY3JlYXRpbmcgYQ0KLVdlYiBzZXJ2aWNlIG9yIGEgV2ViIHNlcnZpY2UgY2xpZW50LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5Jbml0aWFsU2VsZWN0aW9uPC9wdD4NCi08cGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gdGhlIFdTREwgZmlsZSBvciBKYXZhIGJlYW4gd2l0aGluDQoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDx1c2VyaW5wdXQ+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC91c2VyaW5wdXQ+IG9yIDx1c2VyaW5wdXQ+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L3VzZXJpbnB1dA0KLT48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TGlzdFJ1bnRpbWVzPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+SWYgPGNvZGVwaD50cnVlPC9jb2RlcGg+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TGlzdFNlcnZlcnM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHNlcnZlciBvcHRpb25zDQotd2lsbCBiZSBwcm92aWRlZCB3aGVuIHRoZSBBbnQgdGFzayBpcyBydW4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlNlcnZpY2UuUnVudGltZUlkPC9wdD4NCi08cGQ+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIFdlYiBzZXJ2aWNlJ3MgcnVudGltZS4gVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIG5vdA0KLWJlIG1vZGlmaWVkLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TZXJ2aWNlLlNlcnZlcklkPC9wdD4NCi08cGQ+T3B0aW9uczo8c2w+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0Lng8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyLA0KLTQwLCA0MSwgNTAsPC9jb2RlcGg+IG9yIDxjb2RlcGg+NTU8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy53ZWJsb2dpY3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjgxPC9jb2RlcGg+IG9yIDxjb2RlcGg+OTA8L2NvZGVwaD4pIDwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9jb2RlcGg+ICh3aGVyZSA8Y29kZXBoPng8L2NvZGVwaD4gaXMgPGNvZGVwaD4zMjM8L2NvZGVwaD4gb3IgPGNvZGVwaD40PC9jb2RlcGg+KTwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuam9uYXM0PC9jb2RlcGg+PC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5vcmFjbGUxMDEzPC9jb2RlcGg+PC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9jb2RlcGg+PC9zbGk+DQotPC9zbD48L3BkPg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyDQotdG8gaGF2ZSB0aGUgQW50IHRhc2sgc2VsZWN0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBzZXJ2ZXIgc2V0dGluZ3MNCi1vZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdC48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZVByb2plY3ROYW1lPC9wdD4NCi08cGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBwcm9qZWN0IGlzIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgb3IgSmF2YQ0KLWJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlIHByb2plY3QNCi13aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlNlcnZpY2VFYXJQcm9qZWN0TmFtZTwvcHQ+DQotPHBkPkJ5IGRlZmF1bHQgdGhlIHNlcnZpY2UgRUFSIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZQ0KLW9yIEphdmEgYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UNCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk1hcHBpbmdzPC9wdD4NCi08cGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYSBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MuPC9wZD4NCi08cGQ+TWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFja2FnZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkDQotSmF2YSB0ZW1wbGF0ZSBjbGFzc2VzLiBUaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdA0KLW5hbWVzcGFjZT1wYWNrYWdlLiBZb3Ugd2lsbCBuZWVkIHRvIGVzY2FwZSBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUNCi1wcm9wZXJ0aWVzIGZpbGVzLiAgRm9yIGV4YW1wbGUgPGNvZGVwaD5odHRwOi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvY29kZXBoPiBzaG91bGQNCi1iZSA8Y29kZXBoPmh0dHBcOi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvY29kZXBoPi4gIE90aGVyd2lzZSwgdGhlIGNvbG9uDQotKDopIHdvdWxkIGJlIHRyZWF0ZWQgYXMgZGVsaW1pdGVyIHJlc3VsdGluZyBpbiB0cnlpbmcgdG8gbWFwIDxjb2RlcGg+aHR0cDwvY29kZXBoPiB0byA8Y29kZXBoPi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+SmF2YU91dHB1dDwvcHQ+DQotPHBkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGFuIGV4aXN0aW5nIEphdmEgc291cmNlIGZvbGRlciBmb3INCi10aGUgZ2VuZXJhdGVkIEphdmEgY29kZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWV0aG9kczwvcHQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byBsaW1pdCB3aGljaCBtZXRob2RzIGFyZSBleHBvc2VkIGluIHRoZSBzZXJ2aWNlLg0KLUl0IG11c3QgYmUgaW4gdGhlIGZvcm0gb2YgYSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzLiBGb3INCi1leGFtcGxlLCA8dXNlcmlucHV0Pm1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMik8L3VzZXJpbnB1dD4uIElmDQotbm8gbGlzdCBpcyBwcm92aWRlZCwgYWxsIG1ldGhvZHMgYXJlIGV4cG9zZWQuIDwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TdHlsZTwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD5ET0NVTUVOVDwvY29kZXBoPiA8Y29kZXBoPlJQQzwvY29kZXBoPiA8Y29kZXBoPldSQVBQRUQ8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlNlbGVjdCB0aGUgU09BUCBtZXNzYWdlIHN0eWxlLiBUaGUgZGVmYXVsdCBpcyA8Y29kZXBoPkRPQ1VNRU5UPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5Vc2U8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+TElURVJBTDwvY29kZXBoPiA8Y29kZXBoPkVOQ09ERUQ8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlNlbGVjdCBpZiB0aGUgU09BUCBtZXNzYWdlIHdpbGwgYmUgbGl0ZXJhbCBvciBlbmNvZGVkLiBUaGUgZGVmYXVsdCBpcyA8Y29kZXBoPkxJVEVSQUw8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk92ZXJ3cml0ZUZpbGVzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdA0KLWNyZWF0ZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGZpbGUuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjcmVhdGUgYW55IG5lY2Vzc2FyeSBmb2xkZXJzLg0KLUJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DaGVja291dEZpbGVzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjaGVja291dCBmaWxlcyBmcm9tIENWUyB3aXRob3V0DQotcHJvbXB0aW5nIHlvdS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PC9wYXJtbD48L3NlY3Rpb24+DQotPC9yZWZib2R5Pg0KLTwvcmVmZXJlbmNlPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9ydGR3c2EuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9ydGR3c2EuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiZjEwOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcnRkd3NhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InJlZmVyZW5jZSIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJUb3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIGF4aXNfdGRqYXZhLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgYXhpc190ZGphdmEucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBza2VsZXRvbiBXZWIgc2VydmljZXMsIEFudCB0YXNrIHJlZmVyZW5jZSwgV2ViIHNlcnZpY2VzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIEFudCB0YXNrIHJlZmVyZW5jZSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgc2tlbGV0b24gV2ViIHNlcnZpY2VzLCBBbnQgdGFzayByZWZlcmVuY2UsIFdlYiBzZXJ2aWNlcywgQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBBbnQgdGFzayByZWZlcmVuY2UiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHdid3NhLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idG9wLWRvd25heGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VG9wLWRvd24gQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0b3AtZG93bmF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiPjxhIG5hbWU9InRvcC1kb3duYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VG9wLWRvd24gQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc190ZGphdmEucHJvcGVydGllczwva2JkPiBmaWxlIGlzIHVzZWQKLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UKLS4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5QYXJhbWV0ZXJzPC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+U2NlbmFyaW9UeXBlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnNlcnZpY2U8L3NhbXA+IDwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Jbml0aWFsU2VsZWN0aW9uPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbgoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L2tiZD48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0UnVudGltZXM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RTZXJ2ZXJzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuUnVudGltZUlkPC9kdD4KLQotPGRkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QKLWJlIG1vZGlmaWVkLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuU2VydmVySWQ8L2R0PgotCi08ZGQ+T3B0aW9uczo8dWwgY2xhc3M9InNpbXBsZSI+Ci08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyLAotNDAsIDQxLCA1MCw8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjU1PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjgxPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj45MDwvc2FtcD4pIDwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+MzIzPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj40PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpvbmFzNDwvc2FtcD48L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9zYW1wPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncwotb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZVByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIHNlcnZpY2UgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmEKLWJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlIHByb2plY3QKLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlRWFyUHJvamVjdE5hbWU8L2R0PgotCi08ZGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlCi1vciBKYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWFwcGluZ3M8L2R0PgotCi08ZGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYSBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MuPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+TWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFja2FnZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkCi1KYXZhIHRlbXBsYXRlIGNsYXNzZXMuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0Ci1uYW1lc3BhY2U9cGFja2FnZS4gWW91IHdpbGwgbmVlZCB0byBlc2NhcGUgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlCi1wcm9wZXJ0aWVzIGZpbGVzLiAgRm9yIGV4YW1wbGUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L3NhbXA+IHNob3VsZAotYmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cFw6Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9zYW1wPi4gIE90aGVyd2lzZSwgdGhlIGNvbG9uCi0oOikgd291bGQgYmUgdHJlYXRlZCBhcyBkZWxpbWl0ZXIgcmVzdWx0aW5nIGluIHRyeWluZyB0byBtYXAgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDwvc2FtcD4gdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5KYXZhT3V0cHV0PC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGFuIGV4aXN0aW5nIEphdmEgc291cmNlIGZvbGRlciBmb3IKLXRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk1ldGhvZHM8L2R0PgotCi08ZGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHdoaWNoIG1ldGhvZHMgYXJlIGV4cG9zZWQgaW4gdGhlIHNlcnZpY2UuCi1JdCBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcy4gRm9yCi1leGFtcGxlLCA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPm1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMik8L2tiZD4uIElmCi1ubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4gPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U3R5bGU8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+RE9DVU1FTlQ8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPlJQQzwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+V1JBUFBFRDwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+U2VsZWN0IHRoZSBTT0FQIG1lc3NhZ2Ugc3R5bGUuIFRoZSBkZWZhdWx0IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPkRPQ1VNRU5UPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Vc2U8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+TElURVJBTDwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+RU5DT0RFRDwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+U2VsZWN0IGlmIHRoZSBTT0FQIG1lc3NhZ2Ugd2lsbCBiZSBsaXRlcmFsIG9yIGVuY29kZWQuIFRoZSBkZWZhdWx0IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPkxJVEVSQUw8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk92ZXJ3cml0ZUZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIG92ZXJ3cml0ZSBhbnkgZmlsZSB0aGF0IGl0Ci1jcmVhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNyZWF0ZUZvbGRlcnNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY3JlYXRlIGFueSBuZWNlc3NhcnkgZm9sZGVycy4KLUJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2hlY2tvdXRGaWxlc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjaGVja291dCBmaWxlcyBmcm9tIENWUyB3aXRob3V0Ci1wcm9tcHRpbmcgeW91LiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL3R3YndzYS5odG1sIiB0aXRsZT0iWW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaXMgc3VwcG9ydGVkIHdpdGggdGhlIEFudCB0YXNrcy4iPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2g8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J3c2NsaWVudGEuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yd3NjbGllbnRhLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNWMyMmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J3c2NsaWVudGEuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iDQotICJyZWZlcmVuY2UuZHRkIj4NCi08cmVmZXJlbmNlIGlkPSJheGlzd2Vic2VydmljZWNsaWVudGNvbW1hbmRsaW5lcmVmZXJlbmNlIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5BeGlzIFdlYiBzZXJ2aWNlIGNsaWVudCBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC90aXRsZT4NCi08c2hvcnRkZXNjPlRoZSA8dXNlcmlucHV0PmF4aXNfY2xpZW50LnByb3BlcnRpZXM8L3VzZXJpbnB1dD4gZmlsZSBpcyB1c2VkDQotdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZQ0KLWNsaWVudC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlcyBjbGllbnQ8aW5kZXh0ZXJtPkFudA0KLXRhc2sgcmVmZXJlbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkF4aXMNCi1ydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5XZWIgc2VydmljZXMgY2xpZW50PGluZGV4dGVybT5BbnQgdGFzayByZWZlcmVuY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHJlZmJvZHk+DQotPHNlY3Rpb24+PHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPjxwYXJtbD48cGxlbnRyeT4NCi08cHQ+U2NlbmFyaW9UeXBlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPmNsaWVudDwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VGhpcyBpcyBhIHJlcXVpcmVkIGVsZW1lbnQgdGhhdCB0ZWxscyB0aGUgQW50IHRhc2sgaWYgaXQgaXMgY3JlYXRpbmcgYQ0KLVdlYiBzZXJ2aWNlIG9yIGEgV2ViIHNlcnZpY2UgY2xpZW50LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5Jbml0aWFsU2VsZWN0aW9uPC9wdD4NCi08cGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gdGhlIFdTREwgZmlsZSBvciBKYXZhIGJlYW4gd2l0aGluDQoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDx1c2VyaW5wdXQ+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC91c2VyaW5wdXQ+IG9yIDx1c2VyaW5wdXQ+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L3VzZXJpbnB1dA0KLT48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TGlzdFJ1bnRpbWVzPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+SWYgPGNvZGVwaD50cnVlPC9jb2RlcGg+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TGlzdFNlcnZlcnM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHNlcnZlciBvcHRpb25zDQotd2lsbCBiZSBwcm92aWRlZCB3aGVuIHRoZSBBbnQgdGFzayBpcyBydW4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNsaWVudC5SdW50aW1lSWQ8L3B0Pg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgV2ViIHNlcnZpY2UncyBydW50aW1lLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgbm90DQotYmUgbW9kaWZpZWQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNsaWVudC5TZXJ2ZXJJZDwvcHQ+DQotPHBkPk9wdGlvbnM6PHNsPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC54PC9jb2RlcGg+ICh3aGVyZSA8Y29kZXBoPng8L2NvZGVwaD4gaXMgPGNvZGVwaD4zMiwNCi00MCwgNDEsIDUwLDwvY29kZXBoPiBvciA8Y29kZXBoPjU1PC9jb2RlcGg+KTwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMud2VibG9naWN4PC9jb2RlcGg+ICh3aGVyZSA8Y29kZXBoPng8L2NvZGVwaD4gaXMgPGNvZGVwaD44MTwvY29kZXBoPiBvciA8Y29kZXBoPjkwPC9jb2RlcGg+KSA8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpib3NzeDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+MzIzPC9jb2RlcGg+IG9yIDxjb2RlcGg+NDwvY29kZXBoPik8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpvbmFzNDwvY29kZXBoPjwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMub3JhY2xlMTAxMzwvY29kZXBoPjwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVycy53ZWJzcGhlcmUuNjwvY29kZXBoPjwvc2xpPg0KLTwvc2w+PC9wZD4NCi08cGQ+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIHRhcmdldCBzZXJ2ZXIuIERlbGV0ZSBvciBjb21tZW50IG91dCB0aGlzIHBhcmFtZXRlcg0KLXRvIGhhdmUgdGhlIEFudCB0YXNrIHNlbGVjdCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgc2VydmVyIHNldHRpbmdzDQotb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNsaWVudFByb2plY3ROYW1lPC9wdD4NCi08cGQ+QnkgZGVmYXVsdCB0aGUgY2xpZW50IHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBKYXZhDQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdA0KLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50RWFyUHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBjbGllbnQgRUFSIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvcg0KLUphdmEgYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UNCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNsaWVudENvbXBvbmVudFR5cGU8L3B0Pg0KLTxwZD48cD5PcHRpb25zOiA8dXNlcmlucHV0PmpzdC53ZWI8L3VzZXJpbnB1dD4gPHVzZXJpbnB1dD5qc3QuamF2YTwvdXNlcmlucHV0PjwvcD48cD5Vc2UNCi10aGlzIHBhcmFtZXRlciB0byBzZWxlY3QgdGhlIHR5cGUgb2YgY2xpZW50IHByb2plY3QuIFRoZSBvbmx5IHZhbGlkIGNsaWVudA0KLXByb2plY3QgdHlwZSBmb3IgQXhpcyBjbGllbnRzIGlzIDx1c2VyaW5wdXQ+anN0LndlYjwvdXNlcmlucHV0Pi48L3A+PC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzPC9wdD4NCi08cGQ+PHA+T3B0aW9uczogPHVzZXJpbnB1dD50cnVlPC91c2VyaW5wdXQ+IDx1c2VyaW5wdXQ+ZmFsc2U8L3VzZXJpbnB1dD48L3A+PHA+TWFwcGluZ3MNCi1hcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBXU0RMLiBUaGUNCi1jb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IG5hbWVzcGFjZT1wYWNrYWdlLiBZb3UNCi13aWxsIG5lZWQgdG8gZXNjYXBlIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGVzLiAgRm9yDQotZXhhbXBsZSA8Y29kZXBoPmh0dHA6Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9jb2RlcGg+IHNob3VsZCBiZSA8Y29kZXBoPmh0dHBcOi8vc29tZU5hbWVzcGFjZT1zb21lUGFja2FnZTwvY29kZXBoPi4NCi0gT3RoZXJ3aXNlLCB0aGUgY29sb24gKDopIHdvdWxkIGJlIHRyZWF0ZWQgYXMgZGVsaW1pdGVyIHJlc3VsdGluZyBpbiB0cnlpbmcNCi10byBtYXAgPGNvZGVwaD5odHRwPC9jb2RlcGg+IHRvIDxjb2RlcGg+Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9jb2RlcGg+LjwvcD48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWFwcGluZ3M8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy4gPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk92ZXJ3cml0ZUZpbGVzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdA0KLWNyZWF0ZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGZpbGUuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjcmVhdGUgYW55IG5lY2Nlc3NhcnkgZm9sZGVycy4NCi1CeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2hlY2tvdXRGaWxlc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY2hlY2tvdXQgZmlsZXMgZnJvbSBDVlMgd2l0aG91dA0KLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjwvcGFybWw+PC9zZWN0aW9uPg0KLTwvcmVmYm9keT4NCi08L3JlZmVyZW5jZT4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J3c2NsaWVudGEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM4ZTg5Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgYXhpc19jbGllbnQucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSBjbGllbnQuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBheGlzX2NsaWVudC5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIGNsaWVudC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcyBjbGllbnQsIEFudCB0YXNrIHJlZmVyZW5jZSwgV2ViIHNlcnZpY2VzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIEFudCB0YXNrIHJlZmVyZW5jZSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzIGNsaWVudCwgQW50IHRhc2sgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgQW50IHRhc2sgcmVmZXJlbmNlIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3R3YndzY2xpZW50YS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImF4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5BeGlzIFdlYiBzZXJ2aWNlIGNsaWVudCBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJheGlzd2Vic2VydmljZWNsaWVudGNvbW1hbmRsaW5lcmVmZXJlbmNlIj48YSBuYW1lPSJheGlzd2Vic2VydmljZWNsaWVudGNvbW1hbmRsaW5lcmVmZXJlbmNlIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5BeGlzIFdlYiBzZXJ2aWNlIGNsaWVudCBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc19jbGllbnQucHJvcGVydGllczwva2JkPiBmaWxlIGlzIHVzZWQKLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UKLWNsaWVudC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5QYXJhbWV0ZXJzPC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+U2NlbmFyaW9UeXBlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmNsaWVudDwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VGhpcyBpcyBhIHJlcXVpcmVkIGVsZW1lbnQgdGhhdCB0ZWxscyB0aGUgQW50IHRhc2sgaWYgaXQgaXMgY3JlYXRpbmcgYQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+SW5pdGlhbFNlbGVjdGlvbjwvZHQ+Ci0KLTxkZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4KLXlvdXIgd29ya3NwYWNlLiBGb3IgZXhhbXBsZSA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPi9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC9teVNlcnZpY2Uud3NkbDwva2JkPiBvciA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPi9keW5hbWljV2ViUHJvamVjdE5hbWUvc3JjL215QmVhbi5qYXZhPC9rYmQ+PC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TGlzdFJ1bnRpbWVzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgcnVudGltZSBvcHRpb25zCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0U2VydmVyczwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+SWYgPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHNlcnZlciBvcHRpb25zCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DbGllbnQuUnVudGltZUlkPC9kdD4KLQotPGRkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QKLWJlIG1vZGlmaWVkLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudC5TZXJ2ZXJJZDwvZHQ+Ci0KLTxkZD5PcHRpb25zOjx1bCBjbGFzcz0ic2ltcGxlIj4KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC54PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+MzIsCi00MCwgNDEsIDUwLDwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+NTU8L3NhbXA+KTwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMud2VibG9naWN4PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+ODE8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjkwPC9zYW1wPikgPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qYm9zc3g8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj4zMjM8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjQ8L3NhbXA+KTwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuam9uYXM0PC9zYW1wPjwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMub3JhY2xlMTAxMzwvc2FtcD48L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlcnMud2Vic3BoZXJlLjY8L3NhbXA+PC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlRoaXMgaXMgdGhlIElEIG9mIHRoZSB0YXJnZXQgc2VydmVyLiBEZWxldGUgb3IgY29tbWVudCBvdXQgdGhpcyBwYXJhbWV0ZXIKLXRvIGhhdmUgdGhlIEFudCB0YXNrIHNlbGVjdCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgc2VydmVyIHNldHRpbmdzCi1vZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DbGllbnRQcm9qZWN0TmFtZTwvZHQ+Ci0KLTxkZD5CeSBkZWZhdWx0IHRoZSBjbGllbnQgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmEKLWJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlIHByb2plY3QKLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DbGllbnRFYXJQcm9qZWN0TmFtZTwvZHQ+Ci0KLTxkZD5CeSBkZWZhdWx0IHRoZSBjbGllbnQgRUFSIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvcgotSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQotRUFSIHByb2plY3Qgd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudENvbXBvbmVudFR5cGU8L2R0PgotCi08ZGQ+PHA+T3B0aW9uczogPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5qc3Qud2ViPC9rYmQ+IDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+anN0LmphdmE8L2tiZD48L3A+Ci08cD5Vc2UKLXRoaXMgcGFyYW1ldGVyIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBjbGllbnQgcHJvamVjdC4gVGhlIG9ubHkgdmFsaWQgY2xpZW50Ci1wcm9qZWN0IHR5cGUgZm9yIEF4aXMgY2xpZW50cyBpcyA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmpzdC53ZWI8L2tiZD4uPC9wPgotPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q3VzdG9taXplQ2xpZW50TWFwcGluZ3M8L2R0PgotCi08ZGQ+PHA+T3B0aW9uczogPGtiZCBjbGFzcz0idXNlcmlucHV0Ij50cnVlPC9rYmQ+IDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+ZmFsc2U8L2tiZD48L3A+Ci08cD5NYXBwaW5ncwotYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG5hbWVzIGluIHRoZSBnZW5lcmF0ZWQgV1NETC4gVGhlCi1jb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IG5hbWVzcGFjZT1wYWNrYWdlLiBZb3UKLXdpbGwgbmVlZCB0byBlc2NhcGUgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIHByb3BlcnRpZXMgZmlsZXMuICBGb3IKLWV4YW1wbGUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L3NhbXA+IHNob3VsZCBiZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwXDovL3NvbWVOYW1lc3BhY2U9c29tZVBhY2thZ2U8L3NhbXA+LgotIE90aGVyd2lzZSwgdGhlIGNvbG9uICg6KSB3b3VsZCBiZSB0cmVhdGVkIGFzIGRlbGltaXRlciByZXN1bHRpbmcgaW4gdHJ5aW5nCi10byBtYXAgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDwvc2FtcD4gdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+Ly9zb21lTmFtZXNwYWNlPXNvbWVQYWNrYWdlPC9zYW1wPi48L3A+Ci08L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5NYXBwaW5nczwvZHQ+Ci0KLTxkZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy4gPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+T3ZlcndyaXRlRmlsZXNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gb3ZlcndyaXRlIGFueSBmaWxlIHRoYXQgaXQKLWNyZWF0ZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGZpbGUuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q3JlYXRlRm9sZGVyc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjcmVhdGUgYW55IG5lY2Nlc3NhcnkgZm9sZGVycy4KLUJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2hlY2tvdXRGaWxlc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjaGVja291dCBmaWxlcyBmcm9tIENWUyB3aXRob3V0Ci1wcm9tcHRpbmcgeW91LiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL3R3YndzY2xpZW50YS5odG1sIiB0aXRsZT0iSWYgeW91IGhhdmUgYSBXU0RMIGZpbGUgeW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2EuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2EuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YzZTFlNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InR0ZHdzYSIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+Q3JlYXRpbmcgYW4gQXhpcyBydW50aW1lIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoPC9zZWFyY2h0aXRsZT4NCi08L3RpdGxlYWx0cz4NCi08c2hvcnRkZXNjPllvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYg0KLXNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWINCi1zZXJ2aWNlcyBkZXZlbG9wbWVudCBpcyBzdXBwb3J0ZWQgd2l0aCB0aGUgQW50IHRhc2tzLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5jcmVhdGluZw0KLXdpdGggQW50IHRhc2tzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkF4aXMNCi1ydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nIHdpdGggQW50IHRhc2tzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keT4NCi08cHJlcmVxPkJlZm9yZSBjcmVhdGluZyB0aGUgV2ViIHNlcnZpY2UgeW91IG11c3Q6PHVsPg0KLTxsaT5jb21wbGV0ZSB0aGUgcHJlcmVxdWlzaXRlcyBsaXN0ZWQgaW46IDx4cmVmIGhyZWY9ImN3c2F4aXNhbnQuZGl0YSI+PC94cmVmPjwvbGk+DQotPGxpPmlmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgY3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZQ0KLWludG8gdGhlIDx1c2VyaW5wdXQ+V2ViQ29udGVudDwvdXNlcmlucHV0PiBmb2xkZXIgb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QNCi15b3UgY3JlYXRlZC48L2xpPg0KLTxsaT5JZiB5b3UgYXJlIGNyZWF0aW5nIGEgYm90dG9tLXVwIFdlYiBzZXJ2aWNlLCBjcmVhdGUgb3IgaW1wb3J0IGEgSmF2YSBiZWFuDQotaW50byB0aGUgPHVzZXJpbnB1dD5zcmM8L3VzZXJpbnB1dD4gZm9sZGVyIG9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvbGk+DQotPC91bD48L3ByZXJlcT4NCi08Y29udGV4dD5JbiBvcmRlciB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlIHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUgQW50IGZpbGUNCi1hbmQgdGhlIHNlcnZpY2UgQW50IHByb3BlcnRpZXMgZmlsZS48L2NvbnRleHQ+DQotPHN0ZXBzPg0KLTxzdGVwPjxjbWQ+RWRpdCB0aGUgQW50IGZpbGUgKDx1c2VyaW5wdXQ+YXhpc190ZGphdmEueG1sPC91c2VyaW5wdXQ+IG9yIDx1c2VyaW5wdXQ+YXhpc19idWphdmEueG1sPC91c2VyaW5wdXQ+KQ0KLXRoYXQgeW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuIEVuc3VyZSB0aGF0IGl0IHBvaW50cyB0byB0aGUNCi1zZXJ2aWNlIEFudCBwcm9wZXJ0aWVzIGZpbGU6IGl0IHNob3VsZCBjb250YWluIGEgbGluZSBzdGF0aW5nIDx1c2VyaW5wdXQ+Jmx0O3Byb3BlcnR5DQotZmlsZT0iYXhpc190ZGphdmEucHJvcGVydGllcyIvPjwvdXNlcmlucHV0PiBvciA8dXNlcmlucHV0PiZsdDtwcm9wZXJ0eSBmaWxlPSJheGlzX2J1amF2YS5wcm9wZXJ0aWVzIi8+PC91c2VyaW5wdXQ+LjwvY21kPg0KLTxpbmZvPlNhdmUgYW55IGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBtYWRlLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5FZGl0IHRoZSBwcm9wZXJ0aWVzIGZpbGUgdGhhdCB5b3UgaW1wb3J0ZWQgaW4gdGhlIHByZXJlcXVpc2l0ZQ0KLXN0ZXBzLjwvY21kPg0KLTxzdWJzdGVwcz4NCi08c3Vic3RlcD48Y21kPkVuc3VyZSB0aGF0IHRoZSBzY2VuYXJpb1R5cGUgcGFyYW1ldGVyIGlzIHNldCB0byBzZXJ2aWNlLjwvY21kPg0KLTwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNldCB0aGUgd29ya3NwYWNlIHBhcmFtZXRlciBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgbG9jYXRpb24NCi1vZiB5b3VyIFdTREwgZmlsZSBvciBKYXZhIGJlYW4uPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+QWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBzaG91bGQgYmUgZGVsZXRlZCBpZiBub3QNCi1leHBsaWNpdGx5IHNldC4gVGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgd2lsbCBiZSByZXRyaWV2ZWQNCi1mcm9tIHRoZSBkeW5hbWljIHByb2plY3Qgc2V0dGluZ3MgYW5kIHByZWZlcmVuY2VzLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLW9uIGhvdyB0byBzZXQgdGhlc2UgcGFyYW1ldGVycyByZWZlciB0bzogPC9jbWQ+PGluZm8+PHVsPg0KLTxsaT48eHJlZiBocmVmPSJydGR3c2EuZGl0YSI+PC94cmVmPjwvbGk+DQotPGxpPjx4cmVmIGhyZWY9InJidXdzYS5kaXRhIj48L3hyZWY+PC9saT4NCi08L3VsPjwvaW5mbz48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08aW5mbz5TYXZlIHRoZSBwcm9wZXJ0aWVzIGZpbGUuPC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPlJpZ2h0LWNsaWNrIDx1c2VyaW5wdXQ+YXhpc190ZGphdmEueG1sPC91c2VyaW5wdXQ+IG9yIDx1c2VyaW5wdXQ+YXhpc19idWphdmEueG1sPC91c2VyaW5wdXQ+IGFuZA0KLXNlbGVjdCA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5SdW4gQXM8L3VpY29udHJvbD48dWljb250cm9sPkFudCBCdWlsZC4uLjwvdWljb250cm9sPg0KLTwvbWVudWNhc2NhZGU+PC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIGRpYWxvZyB0aGF0IG9wZW5zLCBzZWxlY3QgdGhlIDx1aWNvbnRyb2w+SlJFPC91aWNvbnRyb2w+IHRhYg0KLWFuZCBzZWxlY3QgPHVpY29udHJvbD5SdW4gaW4gdGhlIHNhbWUgSlJFIGFzIHRoZSB3b3Jrc3BhY2U8L3VpY29udHJvbD4uPC9jbWQ+DQotPGluZm8+Q2xpY2sgPHVpY29udHJvbD5BcHBseTwvdWljb250cm9sPiBhbmQgdGhlbiBjbGljayA8dWljb250cm9sPlJ1bjwvdWljb250cm9sPi48L2luZm8+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+T25jZSB5b3VyIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGdlbmVyYXRlZCB0aGUgY29uc29sZSBkaXNwbGF5cyBhIDx1c2VyaW5wdXQ+QnVpbGQNCi1TdWNjZXNzZnVsPC91c2VyaW5wdXQ+IG1lc3NhZ2UuPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHJlc3VsdD5UaGUgV1NETCBmaWxlIGZvciB0aGUgc2VydmljZSB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4NCi10aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzIFdlYkNvbnRlbnRcd3NkbCBmb2xkZXIuIFRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbA0KLWhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3Qncw0KLVdlYkNvbnRlbnRcV0VCLUlORiBmb2xkZXI6PHVsPg0KLTxsaT53ZWIueG1sPC9saT4NCi08bGk+dW5kZXBsb3kud3NkZDwvbGk+DQotPGxpPmRlcGxveS53c2RkIDwvbGk+DQotPC91bD5JZiB5b3UgYXJlIGNyZWF0aW5nIGEgdG9wLWRvd24gV2ViIHNlcnZpY2UsIFdlYiBzZXJ2aWNlIGZpbGVzIHNpbWlsYXINCi10byB0aGUgZm9sbG93aW5nIG9uZXMgd2lsbCBiZSBjcmVhdGVkIGFuZCBwbGFjZWQgdW5kZXIgdGhlIGR5bmFtaWMgV2ViIHByb2plY3Qncw0KLXNyYyBmb2xkZXIuIERlcGVuZGluZyBvbiB0aGUgV1NETCBmaWxlIG9uIHdoaWNoIHRoZSBXZWIgc2VydmljZSBpcyBiYXNlZCwNCi10aGUgZmlsZXMgZm9yIHlvdXIgV2ViIHNlcnZpY2UgbWF5IGJlIGRpZmZlcmVudDo8dWw+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5fUG9ydFR5cGUuamF2YTwvbGk+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5fU2VydmljZS5qYXZhPC9saT4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPl9TZXJ2aWNlTG9jYXRvci5qYXZhPC9saT4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPlNPQVBJbXBsLmphdmE8L2xpPg0KLTxsaT48aT5TZXJ2aWNlX25hbWU8L2k+U09BUFNrZWxldG9uLmphdmE8L2xpPg0KLTxsaT48aT5TZXJ2aWNlX25hbWU8L2k+U09BUFN0dWIuamF2YTwvbGk+DQotPC91bD4gPC9yZXN1bHQ+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTMyNDkxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2EuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IllvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBCb3RoIHRvcC1kb3duIGFuZCBib3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBCb3RoIHRvcC1kb3duIGFuZCBib3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuIiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2N3c2F4aXNhbnQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3J0ZHdzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcmJ1d3NhLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHRkd3NhIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gQXhpcyBydW50aW1lIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0dGR3c2EiPjxhIG5hbWU9InR0ZHdzYSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+WW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViCi1zZXJ2aWNlIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBCb3RoIHRvcC1kb3duIGFuZCBib3R0b20tdXAgV2ViCi1zZXJ2aWNlcyBkZXZlbG9wbWVudCBpcyBzdXBwb3J0ZWQgd2l0aCB0aGUgQW50IHRhc2tzLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+QmVmb3JlIGNyZWF0aW5nIHRoZSBXZWIgc2VydmljZSB5b3UgbXVzdDo8dWw+Ci08bGk+Y29tcGxldGUgdGhlIHByZXJlcXVpc2l0ZXMgbGlzdGVkIGluOiA8YSBocmVmPSJjd3NheGlzYW50Lmh0bWwiIHRpdGxlPSJJZiB5b3UgcHJlZmVyIG5vdCB0byB1c2UgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZCwgeW91IGNhbiB1c2UgQW50JiMxMDtmaWxlcyB0byBjcmVhdGUgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQuJiMxMDtUaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSYjMTA7dXNpbmcgUnVuIEFzICZndDsgQW50IEJ1aWxkLi4uLCBvciB0aGV5IGNhbiBiZSBydW4gaGVhZGxlc3MgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLiBPbmNlJiMxMDt5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UsIHlvdSBjYW4gdGhlbiBkZXBsb3kgaXQgdG8gYSBzZXJ2ZXIsIHRlc3QmIzEwO2l0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLiI+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIgc2VydmljZXMgQW50IHRhc2tzPC9hPjwvbGk+Ci0KLTxsaT5pZiB5b3UgYXJlIGNyZWF0aW5nIGEgdG9wLWRvd24gV2ViIHNlcnZpY2UsIGNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUKLWludG8gdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+V2ViQ29udGVudDwva2JkPiBmb2xkZXIgb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QKLXlvdSBjcmVhdGVkLjwvbGk+Ci0KLTxsaT5JZiB5b3UgYXJlIGNyZWF0aW5nIGEgYm90dG9tLXVwIFdlYiBzZXJ2aWNlLCBjcmVhdGUgb3IgaW1wb3J0IGEgSmF2YSBiZWFuCi1pbnRvIHRoZSA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPnNyYzwva2JkPiBmb2xkZXIgb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5JbiBvcmRlciB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlIHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUgQW50IGZpbGUKLWFuZCB0aGUgc2VydmljZSBBbnQgcHJvcGVydGllcyBmaWxlLjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkVkaXQgdGhlIEFudCBmaWxlICg8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmF4aXNfdGRqYXZhLnhtbDwva2JkPiBvciA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmF4aXNfYnVqYXZhLnhtbDwva2JkPikKLXRoYXQgeW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuIEVuc3VyZSB0aGF0IGl0IHBvaW50cyB0byB0aGUKLXNlcnZpY2UgQW50IHByb3BlcnRpZXMgZmlsZTogaXQgc2hvdWxkIGNvbnRhaW4gYSBsaW5lIHN0YXRpbmcgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij4mbHQ7cHJvcGVydHkKLWZpbGU9ImF4aXNfdGRqYXZhLnByb3BlcnRpZXMiLyZndDs8L2tiZD4gb3IgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij4mbHQ7cHJvcGVydHkgZmlsZT0iYXhpc19idWphdmEucHJvcGVydGllcyIvJmd0Ozwva2JkPi48L3NwYW4+Ci0gU2F2ZSBhbnkgY2hhbmdlcyB0aGF0IHlvdSBoYXZlIG1hZGUuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FZGl0IHRoZSBwcm9wZXJ0aWVzIGZpbGUgdGhhdCB5b3UgaW1wb3J0ZWQgaW4gdGhlIHByZXJlcXVpc2l0ZQotc3RlcHMuPC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5FbnN1cmUgdGhhdCB0aGUgc2NlbmFyaW9UeXBlIHBhcmFtZXRlciBpcyBzZXQgdG8gc2VydmljZS48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNldCB0aGUgd29ya3NwYWNlIHBhcmFtZXRlciBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgbG9jYXRpb24KLW9mIHlvdXIgV1NETCBmaWxlIG9yIEphdmEgYmVhbi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5BbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBkZWxldGVkIGlmIG5vdAotZXhwbGljaXRseSBzZXQuIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0cmlldmVkCi1mcm9tIHRoZSBkeW5hbWljIHByb2plY3Qgc2V0dGluZ3MgYW5kIHByZWZlcmVuY2VzLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotb24gaG93IHRvIHNldCB0aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8L3NwYW4+IDx1bD4KLTxsaT48YSBocmVmPSJydGR3c2EuaHRtbCIgdGl0bGU9IlRoZSBheGlzX3RkamF2YS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCYjMTA7dG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSYjMTA7LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiI+VG9wLWRvd24gQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJyYnV3c2EuaHRtbCIgdGl0bGU9IlRoZSBheGlzX2J1amF2YS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCYjMTA7dG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSYjMTA7LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiI+Qm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L2xpPgotCi08L3VsPgotPC9saT4KLQotPC9vbD4KLQotIFNhdmUgdGhlIHByb3BlcnRpZXMgZmlsZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlJpZ2h0LWNsaWNrIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc190ZGphdmEueG1sPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc19idWphdmEueG1sPC9rYmQ+IGFuZAotc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuIEFzPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFudCBCdWlsZC4uLjwvc3Bhbj4KLTwvc3Bhbj48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgZGlhbG9nIHRoYXQgb3BlbnMsIHNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SlJFPC9zcGFuPiB0YWIKLWFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuIGluIHRoZSBzYW1lIEpSRSBhcyB0aGUgd29ya3NwYWNlPC9zcGFuPi48L3NwYW4+Ci0gQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QXBwbHk8L3NwYW4+IGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJ1bjwvc3Bhbj4uCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPk9uY2UgeW91ciBXZWIgc2VydmljZSBoYXMgYmVlbiBnZW5lcmF0ZWQgdGhlIGNvbnNvbGUgZGlzcGxheXMgYSA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPkJ1aWxkCi1TdWNjZXNzZnVsPC9rYmQ+IG1lc3NhZ2UuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRoZSBXU0RMIGZpbGUgZm9yIHRoZSBzZXJ2aWNlIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbgotdGhlIGR5bmFtaWMgV2ViIHByb2plY3QncyBXZWJDb250ZW50XHdzZGwgZm9sZGVyLiBUaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwKLWhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QncwotV2ViQ29udGVudFxXRUItSU5GIGZvbGRlcjo8dWw+Ci08bGk+d2ViLnhtbDwvbGk+Ci0KLTxsaT51bmRlcGxveS53c2RkPC9saT4KLQotPGxpPmRlcGxveS53c2RkIDwvbGk+Ci0KLTwvdWw+Ci1JZiB5b3UgYXJlIGNyZWF0aW5nIGEgdG9wLWRvd24gV2ViIHNlcnZpY2UsIFdlYiBzZXJ2aWNlIGZpbGVzIHNpbWlsYXIKLXRvIHRoZSBmb2xsb3dpbmcgb25lcyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHBsYWNlZCB1bmRlciB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzCi1zcmMgZm9sZGVyLiBEZXBlbmRpbmcgb24gdGhlIFdTREwgZmlsZSBvbiB3aGljaCB0aGUgV2ViIHNlcnZpY2UgaXMgYmFzZWQsCi10aGUgZmlsZXMgZm9yIHlvdXIgV2ViIHNlcnZpY2UgbWF5IGJlIGRpZmZlcmVudDo8dWw+Ci08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+X1BvcnRUeXBlLmphdmE8L2xpPgotCi08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+X1NlcnZpY2UuamF2YTwvbGk+Ci0KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5fU2VydmljZUxvY2F0b3IuamF2YTwvbGk+Ci0KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5TT0FQSW1wbC5qYXZhPC9saT4KLQotPGxpPjxlbT5TZXJ2aWNlX25hbWU8L2VtPlNPQVBTa2VsZXRvbi5qYXZhPC9saT4KLQotPGxpPjxlbT5TZXJ2aWNlX25hbWU8L2VtPlNPQVBTdHViLmphdmE8L2xpPgotCi08L3VsPgotIDwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy9ydGR3c2EuaHRtbCI+VG9wLWRvd24gQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIGF4aXNfdGRqYXZhLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy9yYnV3c2EuaHRtbCI+Qm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBheGlzX2J1amF2YS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3RvcGljcy9jd3NheGlzYW50Lmh0bWwiIHRpdGxlPSJJZiB5b3UgcHJlZmVyIG5vdCB0byB1c2UgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZCwgeW91IGNhbiB1c2UgQW50IGZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4gVGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MgY2FuIGJlIHJ1biBpbiB0d28gd2F5czogdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdXNpbmcgUnVuIEFzICZndDsgQW50IEJ1aWxkLi4uLCBvciB0aGV5IGNhbiBiZSBydW4gaGVhZGxlc3MgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLiBPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCBpdCwgYW5kIHB1Ymxpc2ggaXQgYXMgYSBidXNpbmVzcyBlbnRpdHkgb3IgYnVzaW5lc3Mgc2VydmljZS4iPkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgV2ViIHNlcnZpY2VzIEFudCB0YXNrczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NjbGllbnRhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NjbGllbnRhLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYTU0ZjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIg0KLSAidGFzay5kdGQiPg0KLTx0YXNrIGlkPSJ0d3NjbGllbnRhIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3M8L3RpdGxlPg0KLTx0aXRsZWFsdHM+DQotPHNlYXJjaHRpdGxlPkNyZWF0aW5nIGFuIEF4aXMgcnVudGltZSBXZWIgc2VydmljZSBjbGllbnQgZnJvbSBhIFdTREwgZmlsZQ0KLXVzaW5nIGNvbW1hbmQgbGluZSB0b29sczwvc2VhcmNodGl0bGU+DQotPC90aXRsZWFsdHM+DQotPHNob3J0ZGVzYz5JZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UNCi10byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlcyBjbGllbnQ8aW5kZXh0ZXJtPmNyZWF0aW5nDQotd2l0aCBBbnQgdGFza3M8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcw0KLXJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlcyBjbGllbnQ8aW5kZXh0ZXJtPmNyZWF0aW5nIHdpdGgNCi1BbnQgdGFza3M8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+QmVmb3JlIGNyZWF0aW5nIHRoZSBXZWIgc2VydmljZSBjbGllbnQgeW91IG11c3Q6PHVsPg0KLTxsaT5jb21wbGV0ZSB0aGUgcHJlcmVxdWlzaXRlcyBsaXN0ZWQgaW46IDx4cmVmIGhyZWY9ImN3c2F4aXNhbnQuZGl0YSI+PC94cmVmPjwvbGk+DQotPGxpPmNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUgaW50byB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCB5b3UgY3JlYXRlZC48L2xpPg0KLTwvdWw+PC9wcmVyZXE+DQotPGNvbnRleHQ+SW4gb3JkZXIgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZSBjbGllbnQgeW91IG5lZWQgdG8gbW9kaWZ5IHRoZQ0KLUFudCBmaWxlIGFuZCB0aGUgQW50IHByb3BlcnRpZXMgZmlsZS48L2NvbnRleHQ+DQotPHN0ZXBzPg0KLTxzdGVwPjxjbWQ+RWRpdCB0aGUgQW50IGZpbGUgKDx1c2VyaW5wdXQ+YXhpc19jbGllbnQueG1sPC91c2VyaW5wdXQ+KSB0aGF0DQoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuIEVuc3VyZSB0aGF0IGl0IHBvaW50cyB0byB0aGUgY2xpZW50DQotQW50IHByb3BlcnRpZXMgZmlsZTogaXQgc2hvdWxkIGNvbnRhaW4gYSBsaW5lIHN0YXRpbmcgPHVzZXJpbnB1dD4mbHQ7cHJvcGVydHkNCi1maWxlPSJheGlzX2NsaWVudC5wcm9wZXJ0aWVzIi8+PC91c2VyaW5wdXQ+LjwvY21kPjxpbmZvPlNhdmUgYW55IGNoYW5nZXMgdGhhdA0KLXlvdSBoYXZlIG1hZGUuPC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPkVkaXQgdGhlIDx1c2VyaW5wdXQ+YXhpc19jbGllbnQucHJvcGVydGllczwvdXNlcmlucHV0PiBmaWxlIHRoYXQNCi15b3UgaW1wb3J0ZWQgaW4gdGhlIHByZXJlcXVpc2l0ZSBzdGVwcy48L2NtZD4NCi08c3Vic3RlcHM+DQotPHN1YnN0ZXA+PGNtZD5FbnN1cmUgdGhhdCB0aGUgc2NlbmFyaW9UeXBlIHBhcmFtZXRlciBpcyBzZXQgdG8gY2xpZW50LjwvY21kPg0KLTwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNldCB0aGUgd29ya3NwYWNlIHBhcmFtZXRlciBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgbG9jYXRpb24NCi1vZiB5b3VyIFdTREwgZmlsZS48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5BbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBkZWxldGVkIGlmIG5vdA0KLWV4cGxpY2l0bHkgc2V0LiBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycyB3aWxsIGJlIHJldHJpZXZlZA0KLWZyb20gdGhlIGR5bmFtaWMgcHJvamVjdCBzZXR0aW5ncy4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldA0KLXRoZXNlIHBhcmFtZXRlcnMgcmVmZXIgdG86IDx4cmVmIGhyZWY9InJ3c2NsaWVudGEuZGl0YSI+PC94cmVmPjwvY21kPjwvc3Vic3RlcD4NCi08L3N1YnN0ZXBzPg0KLTxpbmZvPlNhdmUgdGhlIDx1c2VyaW5wdXQ+YXhpc19jbGllbnQucHJvcGVydGllczwvdXNlcmlucHV0PiBmaWxlLjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5SaWdodC1jbGljayA8dXNlcmlucHV0PmF4aXNfY2xpZW50LnhtbDwvdXNlcmlucHV0PiBhbmQgc2VsZWN0IDxtZW51Y2FzY2FkZT4NCi08dWljb250cm9sPlJ1biBBczwvdWljb250cm9sPjx1aWNvbnRyb2w+QW50IEJ1aWxkLi4uPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgZGlhbG9nIHRoYXQgb3BlbnMsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5KUkU8L3VpY29udHJvbD4gdGFiDQotYW5kIHNlbGVjdCA8dWljb250cm9sPlJ1biBpbiB0aGUgc2FtZSBKUkUgYXMgdGhlIHdvcmtzcGFjZTwvdWljb250cm9sPi48L2NtZD4NCi08aW5mbz5DbGljayA8dWljb250cm9sPkFwcGx5PC91aWNvbnRyb2w+IGFuZCB0aGVuIGNsaWNrIDx1aWNvbnRyb2w+UnVuPC91aWNvbnRyb2w+LjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaGFzIGJlZW4gZ2VuZXJhdGVkIHRoZSBjb25zb2xlIGRpc3BsYXlzIGEgPHVzZXJpbnB1dD5CdWlsZA0KLVN1Y2Nlc3NmdWw8L3VzZXJpbnB1dD4gbWVzc2FnZS48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cmVzdWx0PlRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIGluIHRoZSBkeW5hbWljDQotV2ViIHByb2plY3QncyBXZWJDb250ZW50XHdzZGwgZm9sZGVyOjx1bD4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPlNPQVAud3NkbCA8L2xpPg0KLTwvdWw+VGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4gdGhlIGR5bmFtaWMNCi1XZWIgcHJvamVjdCdzIFdlYkNvbnRlbnRcV0VCLUlORiBmb2xkZXI6PHVsPg0KLTxsaT51bmRlcGxveS53c2RkPC9saT4NCi08bGk+ZGVwbG95LndzZGQgPC9saT4NCi08L3VsPlRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIHVuZGVyIHRoZSBkeW5hbWljDQotV2ViIHByb2plY3QncyBzcmMgZm9sZGVyLiBEZXBlbmRpbmcgb24gdGhlIFdTREwgZmlsZSBvbiB3aGljaCB0aGUgV2ViIHNlcnZpY2UNCi1jbGllbnQgaXMgYmFzZWQsIHRoZSBmaWxlcyBmb3IgeW91ciBXZWIgc2VydmljZSBjbGllbnQgbWF5IGJlIGRpZmZlcmVudDo8dWw+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5Qcm94eS5qYXZhPC9saT4NCi08bGk+Z2V0PGk+U2VydmljZV9uYW1lPC9pPi5qYXZhPC9saT4NCi08bGk+Z2V0PGk+U2VydmljZV9uYW1lPC9pPkxvY2F0b3IuamF2YTwvbGk+DQotPGxpPmdldDxpPlNlcnZpY2VfbmFtZTwvaT5Tb2FwLmphdmE8L2xpPg0KLTxsaT5nZXQ8aT5TZXJ2aWNlX25hbWU8L2k+U29hcFByb3h5LmphdmE8L2xpPg0KLTxsaT5nZXQ8aT5TZXJ2aWNlX25hbWU8L2k+U29hcFN0dWIuamF2YTwvbGk+DQotPC91bD4gPC9yZXN1bHQ+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGViZGIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3MiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSWYgeW91IGhhdmUgYSBXU0RMIGZpbGUgeW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJJZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMgY2xpZW50LCBjcmVhdGluZyB3aXRoIEFudCB0YXNrcywgV2ViIHNlcnZpY2VzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMgY2xpZW50LCBjcmVhdGluZyB3aXRoIEFudCB0YXNrcywgV2ViIHNlcnZpY2VzLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGNyZWF0aW5nIHdpdGggQW50IHRhc2tzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2N3c2F4aXNhbnQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3J3c2NsaWVudGEuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0d3NjbGllbnRhIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gQXhpcyBydW50aW1lIFdlYiBzZXJ2aWNlIGNsaWVudCBmcm9tIGEgV1NETCBmaWxlCi11c2luZyBjb21tYW5kIGxpbmUgdG9vbHM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR3c2NsaWVudGEiPjxhIG5hbWU9InR3c2NsaWVudGEiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+SWYgeW91IGhhdmUgYSBXU0RMIGZpbGUgeW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlCi10byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPkJlZm9yZSBjcmVhdGluZyB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBtdXN0Ojx1bD4KLTxsaT5jb21wbGV0ZSB0aGUgcHJlcmVxdWlzaXRlcyBsaXN0ZWQgaW46IDxhIGhyZWY9ImN3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQmIzEwO2ZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4mIzEwO1RoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlJiMxMDt1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UmIzEwO3lvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCYjMTA7aXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIj5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3M8L2E+PC9saT4KLQotPGxpPmNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUgaW50byB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCB5b3UgY3JlYXRlZC48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPkluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUKLUFudCBmaWxlIGFuZCB0aGUgQW50IHByb3BlcnRpZXMgZmlsZS48L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FZGl0IHRoZSBBbnQgZmlsZSAoPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5heGlzX2NsaWVudC54bWw8L2tiZD4pIHRoYXQKLXlvdSBpbXBvcnRlZCBpbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLiBFbnN1cmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIGNsaWVudAotQW50IHByb3BlcnRpZXMgZmlsZTogaXQgc2hvdWxkIGNvbnRhaW4gYSBsaW5lIHN0YXRpbmcgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij4mbHQ7cHJvcGVydHkKLWZpbGU9ImF4aXNfY2xpZW50LnByb3BlcnRpZXMiLyZndDs8L2tiZD4uPC9zcGFuPiBTYXZlIGFueSBjaGFuZ2VzIHRoYXQKLXlvdSBoYXZlIG1hZGUuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FZGl0IHRoZSA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmF4aXNfY2xpZW50LnByb3BlcnRpZXM8L2tiZD4gZmlsZSB0aGF0Ci15b3UgaW1wb3J0ZWQgaW4gdGhlIHByZXJlcXVpc2l0ZSBzdGVwcy48L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+RW5zdXJlIHRoYXQgdGhlIHNjZW5hcmlvVHlwZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGNsaWVudC48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+U2V0IHRoZSB3b3Jrc3BhY2UgcGFyYW1ldGVyIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbgotb2YgeW91ciBXU0RMIGZpbGUuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5BbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBkZWxldGVkIGlmIG5vdAotZXhwbGljaXRseSBzZXQuIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0cmlldmVkCi1mcm9tIHRoZSBkeW5hbWljIHByb2plY3Qgc2V0dGluZ3MuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQKLXRoZXNlIHBhcmFtZXRlcnMgcmVmZXIgdG86IDxhIGhyZWY9InJ3c2NsaWVudGEuaHRtbCIgdGl0bGU9IlRoZSBheGlzX2NsaWVudC5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCYjMTA7dG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSYjMTA7Y2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiI+QXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotIFNhdmUgdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc19jbGllbnQucHJvcGVydGllczwva2JkPiBmaWxlLgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5SaWdodC1jbGljayA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmF4aXNfY2xpZW50LnhtbDwva2JkPiBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+Ci08c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gQXM8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QW50IEJ1aWxkLi4uPC9zcGFuPjwvc3Bhbj48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBkaWFsb2cgdGhhdCBvcGVucywgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5KUkU8L3NwYW4+IHRhYgotYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gaW4gdGhlIHNhbWUgSlJFIGFzIHRoZSB3b3Jrc3BhY2U8L3NwYW4+Ljwvc3Bhbj4KLSBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BcHBseTwvc3Bhbj4gYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuPC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T25jZSB5b3VyIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGdlbmVyYXRlZCB0aGUgY29uc29sZSBkaXNwbGF5cyBhIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+QnVpbGQKLVN1Y2Nlc3NmdWw8L2tiZD4gbWVzc2FnZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4gdGhlIGR5bmFtaWMKLVdlYiBwcm9qZWN0J3MgV2ViQ29udGVudFx3c2RsIGZvbGRlcjo8dWw+Ci08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+U09BUC53c2RsIDwvbGk+Ci0KLTwvdWw+Ci1UaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiB0aGUgZHluYW1pYwotV2ViIHByb2plY3QncyBXZWJDb250ZW50XFdFQi1JTkYgZm9sZGVyOjx1bD4KLTxsaT51bmRlcGxveS53c2RkPC9saT4KLQotPGxpPmRlcGxveS53c2RkIDwvbGk+Ci0KLTwvdWw+Ci1UaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCB1bmRlciB0aGUgZHluYW1pYwotV2ViIHByb2plY3QncyBzcmMgZm9sZGVyLiBEZXBlbmRpbmcgb24gdGhlIFdTREwgZmlsZSBvbiB3aGljaCB0aGUgV2ViIHNlcnZpY2UKLWNsaWVudCBpcyBiYXNlZCwgdGhlIGZpbGVzIGZvciB5b3VyIFdlYiBzZXJ2aWNlIGNsaWVudCBtYXkgYmUgZGlmZmVyZW50Ojx1bD4KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5Qcm94eS5qYXZhPC9saT4KLQotPGxpPmdldDxlbT5TZXJ2aWNlX25hbWU8L2VtPi5qYXZhPC9saT4KLQotPGxpPmdldDxlbT5TZXJ2aWNlX25hbWU8L2VtPkxvY2F0b3IuamF2YTwvbGk+Ci0KLTxsaT5nZXQ8ZW0+U2VydmljZV9uYW1lPC9lbT5Tb2FwLmphdmE8L2xpPgotCi08bGk+Z2V0PGVtPlNlcnZpY2VfbmFtZTwvZW0+U29hcFByb3h5LmphdmE8L2xpPgotCi08bGk+Z2V0PGVtPlNlcnZpY2VfbmFtZTwvZW0+U29hcFN0dWIuamF2YTwvbGk+Ci0KLTwvdWw+Ci0gPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3J3c2NsaWVudGEuaHRtbCI+QXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBheGlzX2NsaWVudC5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIGNsaWVudC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3RvcGljcy9jd3NheGlzYW50Lmh0bWwiIHRpdGxlPSJJZiB5b3UgcHJlZmVyIG5vdCB0byB1c2UgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZCwgeW91IGNhbiB1c2UgQW50IGZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4gVGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MgY2FuIGJlIHJ1biBpbiB0d28gd2F5czogdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdXNpbmcgUnVuIEFzICZndDsgQW50IEJ1aWxkLi4uLCBvciB0aGV5IGNhbiBiZSBydW4gaGVhZGxlc3MgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLiBPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCBpdCwgYW5kIHB1Ymxpc2ggaXQgYXMgYSBidXNpbmVzcyBlbnRpdHkgb3IgYnVzaW5lc3Mgc2VydmljZS4iPkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgV2ViIHNlcnZpY2VzIEFudCB0YXNrczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NmJmZWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvd3NheGlzYW50X3RvYy5kaXRhbWFwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiINCi0gIm1hcC5kdGQiPg0KLTxtYXAgYW5jaG9ycmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCN3c2F4aXNhbnQiDQotaWQ9IndzYXhpc2FudCIgdGl0bGU9IndzYXhpc2FudCI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9jd3NheGlzYW50LmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBBeGlzIHJ1bnRpbWUgV2ViIHNlcnZpY2VzIHVzaW5nIEFudCB0YXNrcyI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90d2J3c2EuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2giPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcnRkd3NhLmRpdGEiIG5hdnRpdGxlPSJUb3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCBmaWxlIHJlZmVyZW5jZSI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3JidXdzYS5kaXRhIiBuYXZ0aXRsZT0iQm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IGZpbGUgcmVmZXJlbmNlIj4NCi08L3RvcGljcmVmPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90d2J3c2NsaWVudGEuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoIj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3J3c2NsaWVudGEuZGl0YSIgbmF2dGl0bGU9IkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCBmaWxlIHJlZmVyZW5jZSI+DQotPC90b3BpY3JlZj4NCi08L3RvcGljcmVmPg0KLTwvdG9waWNyZWY+DQotPC9tYXA+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvd3NheGlzYW50X3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNkOGFjNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGlua190bz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbCN3c2F4aXNhbnQiIGxhYmVsPSJ3c2F4aXNhbnQiIHRvcGljPSJ0b3BpY3MvY3dzYXhpc2FudC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIgc2VydmljZXMgQW50IHRhc2tzIiBocmVmPSJ0b3BpY3MvY3dzYXhpc2FudC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaCIgaHJlZj0idG9waWNzL3R3YndzYS5odG1sIj4KLTx0b3BpYyBsYWJlbD0iVG9wLWRvd24gQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlIiBocmVmPSJ0b3BpY3MvcnRkd3NhLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgaHJlZj0idG9waWNzL3JidXdzYS5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3MiIGhyZWY9InRvcGljcy90d2J3c2NsaWVudGEuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiIGhyZWY9InRvcGljcy9yd3NjbGllbnRhLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvcGljPgotPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiODNmZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiNjM3Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3A7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIxNjY3NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3c3QtY29tbWFuZC1mMS54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCi1nZW5lcmF0ZVNvdXJjZUJ1bmRsZT1mYWxzZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGVlZjYyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSEgcGx1Zy1pbiBwcm9wZXJ0aWVzCi1wbHVnaW5OYW1lICAgICA9IFdlYiBzZXJ2aWNlcyBVSQotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3MGMwNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiID8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI+Ci0JCTxjb250ZXh0cyBmaWxlPSJ3c3QtY29tbWFuZC1mMS54bWwiIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpIi8+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3dzdC1jb21tYW5kLWYxLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3Avd3N0LWNvbW1hbmQtZjEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzYzYzY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3Avd3N0LWNvbW1hbmQtZjEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPz4KLTxjb250ZXh0cz4KLQotPCEtLW9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS0tPgotPGNvbnRleHQgaWQ9IlBQQUQwMDAxIj4KLTwhLS1BY3Rpb24gRGlhbG9ncyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Zb3UgY2FuIHVzZSB0aGlzIHBhZ2UgdG8gY2hvb3NlIHdoaWNoIFdlYiBzZXJ2aWNlcyBwb3B1cCBhY3Rpb25zIGFyZSBkaXNwbGF5ZWQgb3IgaGlkZGVuLiBXaGVuIHVzaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBsYXVuY2VkIGZyb20gYSBwb3B1cCBtZW51IHlvdSBtYXkgc2VlIGEgY2hlY2sgYm94IHRoYXQgZ2l2ZXMgeW91IHRoZSBvcHRpb24gb2YgaGlkaW5nIHRoZSBwb3B1cCBhY3Rpb24gdGhhdCB5b3UgaGF2ZSBqdXN0IHBlcmZvcm1lZC4gSWYgeW91IHNlbGVjdCB0aGF0IGNoZWNrYm94IGl0IHdpbGwgc2VsZWN0IHRoZSByZXNwZWN0aXZlIGNoZWNrYm94IG9uIHRoaXMgcHJlZmVyZW5jZSBwYWdlLiBJZiB5b3UgaGF2ZSBjaG9zZW4gdG8gaGlkZSBhIHBvcHVwIGFjdGlvbiB0aGF0IHlvdSB3YW50IHRvIGRpc3BsYXkgdXNlIHRoaXMgcGFnZSB0byBtYWtlIHRoZSBwb3B1cCBhY3Rpb24gdmlzaWJsZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwMiI+Ci08IS0tc2hvdyBhbGwgY2hlY2sgYm94IG9uIHRoZSBBY3Rpb24gRGlhbG9ncyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5CeSBzZWxlY3RpbmcgdGhpcyBjaGVja2JveCwgYWxsIHZhbGlkIFdlYiBzZXJ2aWNlcyBwb3B1cCBhY3Rpb25zIHdpbGwgYmUgZGlzcGxheWVkIHdoZW4geW91IHNlbGVjdCBhIGZpbGUgaW4geW91ciB3b3Jrc3BhY2UgYW5kIHJpZ2h0LWNsaWNrIGl0LiBBbHRlcm5hdGVseSB5b3UgY2FuIHNlbGVjdCB0byBkaXNwbGF5IG9yIGhpZGUgaW5kaXZpZHVhbCBwb3B1cCBhY3Rpb25zLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDAzIj4KLTwhLS1oaWRlIGFsbCBjaGVjayBib3ggb24gdGhlIEFjdGlvbiBEaWFsb2dzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkJ5IHNlbGVjdGluZyB0aGlzIGNoZWNrYm94LCBhbGwgV2ViIHNlcnZpY2VzIHBvcHVwIGFjdGlvbnMgd2lsbCBiZSBoaWRkZW4gd2hlbiB5b3Ugc2VsZWN0IGEgZmlsZSBpbiB5b3VyIHdvcmtzcGFjZSBhbmQgcmlnaHQtY2xpY2sgaXQuIEFsdGVybmF0ZWx5IHlvdSBjYW4gc2VsZWN0IHRvIGRpc3BsYXkgb3IgaGlkZSBpbmRpdmlkdWFsIHBvcHVwIGFjdGlvbnMuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iVFdQMDAwMSI+Ci08IS0tc2hvdy9oaWRlIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPldoZW4gdXNpbmcgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGxhdW5jZWQgZnJvbSBhIHBvcHVwIG1lbnUsIHRoaXMgY2hlY2sgYm94IHRoYXQgZ2l2ZXMgeW91IHRoZSBvcHRpb24gb2YgaGlkaW5nIHRoZSBwb3B1cCBhY3Rpb24gdGhhdCB5b3UgaGF2ZSBqdXN0IHBlcmZvcm1lZC4gSWYgeW91IHNlbGVjdCB0aGUgY2hlY2tib3ggaXQgd2lsbCBzZWxlY3QgdGhlIHJlc3BlY3RpdmUgY2hlY2tib3ggb24gdGhlIFdlYiBzZXJ2aWNlcyA+IFBvcHVwIERpYWxvZyBTZWxlY3Rpb24gcHJlZmVyZW5jZSBwYWdlLiBJZiB5b3UgaGF2ZSBjaG9zZW4gdG8gaGlkZSBhIHBvcHVwIGFjdGlvbiB0aGF0IHlvdSB3YW50IHRvIGRpc3BsYXksIGdvIHRvIFdpbmRvdyA+IFByZWZlcmVuY2VzID4gV2ViIHNlcnZpY2VzID4gUG9wdXAgRGlhbG9nIFNlbGVjdGlvbiwgYW5kIHVzZSB0aGlzIHBhZ2UgdG8gbWFrZSB0aGUgcG9wdXAgYWN0aW9uIHZpc2libGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08L2NvbnRleHRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdhZGY5Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyXzEuMC4wLmphcgotYnVpbGQueG1sCi1iYWsKLXRlbXAKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzg1MTAwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YzI2NDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gQXByIDE2IDE4OjAxOjI1IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRlYzVkOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jU3VuIEFwciAxNiAxODowMTozMiBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZDA4YmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gCi0KLQlUaGlzIHNjcmlwdCBidWlsZCB0aGUgSGVscCBwbHVnLWluIGJ5IHRyYW5zZm9ybWluZyB0aGUgRElUQSBzb3VyY2UgZmlsZXMgaW50byBIVE1MLgotCQotCVRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaW5zdGFsbCBESVRBLU9UIG9uIHlvdXIgbWFjaGluZSBpbiB0aGUgZGlyZWN0b3J5Ci0JZGVmaW5lZCBieSB0aGUgZGl0YS5vdC5kaXIgcHJvcGVydHkuCi0JCi0JUnVuIHRoZSBkZWZhdWx0IHRhcmdldCBhZnRlciB5b3UgZWRpdCB0aGUgRElUQSBzb3VyY2UgZmlsZXMgdG8gcmVnZW5lcmF0ZSB0aGUgSFRNTC4KLQkKLQlUbyBjdXN0b21pemUgdGhpcyBzY3JpcHQgZm9yIG90aGVyIEhlbHAgcGx1Zy1pbnMsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGFyZ3MuaW5wdXQgcHJvcGVydHkKLQl0byBiZSB0aGUgRElUQSBtYXAgZmlsZSBmb3IgdGhlIHBsdWctaW4uCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGxpbmtzIHRvIHNpYmxpbmcgSGVscCBwbHVnLWlucyBoYXZlIHNjb3BlPSJwZWVyIiwgb3RoZXJ3aXNlIHRoZQotCW91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgYmUgc2hpZnRlZCBpbmNvcnJlY3RseS4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgeW91IGhhbmQgY29kZSB5b3VyIHBsdWdpbi54bWwgZmlsZSBpbiBteXBsdWdpbi54bWwuIFRoaXMgZmlsZQotCXdpbGwgYmUgY29waWVkIG92ZXIgdGhlIGdlbmVyYXRlZCBwbHVnaW4ueG1sIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgZ2VuZXJhdGVkIGNvcnJlY3RseQotCWJ5IERJVEEtT1QuCi0JCi0JQ2hhbmdlTG9nOgotCTIwMDYtMDQtMDUgQXJ0aHVyIFJ5bWFuIDxyeW1hbkBjYS5pYm0uY29tPgotCS0gQ3JlYXRlZC4KLQkyMDA4LTAxLTA5IEthdGUgUHJpY2UgPGthdGVwQGNhLmlibS5jb20+Ci0JLSBtb2RpZmllZCBmb3IgbmV3IERJVEEtT1QgdmVyc2lvbgotCTIwMDgtMDUtMDUgS2F0ZSBQcmljZSA8a2F0ZXBAY2EuaWJtLmNvbT4KLQktIG1vZGlmaWVkIHRvIGFkZCBnZW5lcmF0aW9uIG9mIHByZS1idWlsdCBoZWxwIGluZGV4LiAKLQktIE11c3QgZGVsZXRlIC9pbmRleCBmb2xkZXIgYmVmb3JlIHJ1bm5pbmcgYnVpbGQKLQkKLS0tPgotPHByb2plY3QgbmFtZT0iZWNsaXBzZWhlbHAiIGRlZmF1bHQ9ImFsbCI+Ci0KLQk8cHJvcGVydHkgbmFtZT0iZGl0YS5vdC5kaXIiIGxvY2F0aW9uPSJDOi9ESVRBLU9UMS4yLjIiIC8+Ci0KLQk8cGF0aCBpZD0iZG9zdC5jbGFzcy5wYXRoIj4KLQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9bGliJHtmaWxlLnNlcGFyYXRvcn1kb3N0LmphciIgLz4KLQk8L3BhdGg+Ci0KLQk8dGFza2RlZiBuYW1lPSJpbnRlZ3JhdGUiIGNsYXNzbmFtZT0ib3JnLmRpdGEuZG9zdC5wbGF0Zm9ybS5JbnRlZ3JhdG9yVGFzayI+Ci0JCTxjbGFzc3BhdGggcmVmaWQ9ImRvc3QuY2xhc3MucGF0aCIgLz4KLQk8L3Rhc2tkZWY+Ci0JPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImludGVncmF0ZSwgZWNsaXBzZWhlbHAiPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iaW50ZWdyYXRlIj4KLQkJPGludGVncmF0ZSBkaXRhZGlyPSIke2RpdGEub3QuZGlyfSIgLz4KLQk8L3RhcmdldD4KLQotCTwhLS0gcmV2aXNlIGJlbG93IGhlcmUgLS0+Ci0JPHRhcmdldCBuYW1lPSJlY2xpcHNlaGVscCI+Ci0JCTxhbnQgYW50ZmlsZT0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWNvbmR1Y3Rvci54bWwiIHRhcmdldD0iaW5pdCIgZGlyPSIke2RpdGEub3QuZGlyfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jb3B5Y3NzIiB2YWx1ZT0ibm8iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jc3NwYXRoIiB2YWx1ZT0iLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS5wcm92aWRlciIgdmFsdWU9IkVjbGlwc2Uub3JnIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS52ZXJzaW9uIiB2YWx1ZT0iMy4zLjAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5pbnB1dCIgbG9jYXRpb249IndzZGxfYnVpbGRfdG9jLmRpdGFtYXAiIC8+ICAgIAkJCi0JCQk8cHJvcGVydHkgbmFtZT0iY2xlYW4udGVtcCIgdmFsdWU9InRydWUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS5leHRuYW1lIiB2YWx1ZT0iLmRpdGEiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS50ZW1wLmRpciIgbG9jYXRpb249InRlbXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LmRpciIgbG9jYXRpb249IiIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3R5cGUiIHZhbHVlPSJlY2xpcHNlaGVscCIgLz4KLQkJPC9hbnQ+Ci0JCTxjb3B5IGZpbGU9Im15cGx1Z2luLnhtbCIgdG9maWxlPSJwbHVnaW4ueG1sIiBvdmVyd3JpdGU9InllcyIgLz4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLmluZGV4IiBkZXNjcmlwdGlvbj0iQnVpbGRzIHNlYXJjaCBpbmRleCBmb3IgdGhlIHBsdWctaW4iIGlmPSJlY2xpcHNlLnJ1bm5pbmciPgotCSAgICAgPGhlbHAuYnVpbGRIZWxwSW5kZXggbWFuaWZlc3Q9InBsdWdpbi54bWwiIGRlc3RpbmF0aW9uPSIuIi8+Ci0JPC90YXJnZXQ+CQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4N2QxMGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAxLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzAxNjgyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHdzd3NkbGVkaXRvcmNfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICB3c3dzZGxlZGl0b3J0X3RvYy54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotCQkJICAgY29uY2VwdHMvKi5odG0qLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YQotYmluLmV4Y2x1ZGVzID0gRG9jQnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIG15UGx1Z2luKi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YTFiZTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3dzZGxlZCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBlZGl0b3I8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksCi12aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy48L3Nob3J0ZGVzYz4KLTxjb25ib2R5PgotPHA+VXNpbmcgdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6PC9wPgotPHVsPgotPGxpPkNyZWF0ZSBuZXcgV1NETCBmaWxlczwvbGk+Ci08bGk+VmFsaWRhdGUgYW5kIGVkaXQgV1NETCBmaWxlczwvbGk+Ci08bGk+Q3JlYXRlIGFuZCBkZWxldGU6ICA8dWw+Ci08bGk+U2VydmljZXM6IHVzZWQgdG8gYWdncmVnYXRlIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMuIFRoZXNlIGFyZSB0aGUgcm9vdAotZWxlbWVudHMgb2YgYWxsIFdTREwgZmlsZXMuPC9saT4KLTxsaT5Qb3J0czogc3BlY2lmeSBhbiBhZGRyZXNzIGZvciBhIGJpbmRpbmcsIHRodXMgZGVmaW5pbmcgYSBzaW5nbGUgY29tbXVuaWNhdGlvbgotZW5kcG9pbnQuPC9saT4KLTxsaT5CaW5kaW5nczogc3BlY2lmeSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgZm9yCi10aGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLjwvbGk+Ci08bGk+UG9ydCB0eXBlczogYSBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyB0aGF0IGVhY2ggcmVmZXIgdG8gYW4gaW5wdXQgbWVzc2FnZQotYW5kIG91dHB1dCBtZXNzYWdlcy48L2xpPgotPGxpPk9wZXJhdGlvbnM6IGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZXMuPC9saT4KLTxsaT5NZXNzYWdlczogcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuCi1BIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uCi13aXRoaW4gc29tZSB0eXBlIHN5c3RlbS48L2xpPgotPGxpPlBhcnRzOiBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50Ci1vZiBhIG1lc3NhZ2UuPD9QdWIgQ2FyZXQ/PjwvbGk+Ci08bGk+VHlwZXM6IGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLgotV1NETCBpcyBub3QgdGllZCBleGNsdXNpdmVseSB0byBhIHNwZWNpZmljIHR5cGluZyBzeXN0ZW0sIGJ1dCBpdCB1c2VzIHRoZQotVzNDIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiBhcyBpdHMgZGVmYXVsdCBjaG9pY2UuPC9saT4KLTxsaT5JbXBvcnQgc3RhdGVtZW50czogdXNlZCB0byBhc3NvY2lhdGUgYSBuYW1lc3BhY2Ugd2l0aCBhIGRvY3VtZW50IGxvY2F0aW9uLiA8L2xpPgotPC91bD48L2xpPgotPGxpPkltcG9ydCBleGlzdGluZyBXU0RMIGZpbGVzIGZvciBzdHJ1Y3R1cmVkIHZpZXdpbmc8L2xpPgotPGxpPkdlbmVyYXRlIGRvY3VtZW50YXRpb24gZnJvbSBhIFdTREwgZG9jdW1lbnQuPC9saT4KLTwvdWw+Ci08cD5UaGUgV1NETCBzdXBwb3J0IGluIHRoZSBXU0RMIGVkaXRvciBpcyBiYXNlZCBvbiB0aGUgVzNDIDx4cmVmIGZvcm1hdD0iaHRtbCIKLWhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHNjb3BlPSJleHRlcm5hbCI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uCi1MYW5ndWFnZSAoV1NETCkgMS4xPC94cmVmPi4gVGhlIFdTREwgc3BlY2lmaWNhdGlvbiBmcm9tIHRoZSBXM0MgV2ViIHNpdGUgaXMKLWFsc28gdXNlZCBmb3IgdmFsaWRhdGlvbi4mbmJzcDsgPC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgotPD9QdWIgKjAwMDAwMDI1MzQ/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5MTU3Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJFZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3IiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RjcnR3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzZGxlZCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIGVkaXRvcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3dzZGxlZCI+PGEgbmFtZT0iY3dzZGxlZCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwKLXZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLjwvcD4KLQotPHA+VXNpbmcgdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6PC9wPgotCi08dWw+Ci08bGk+Q3JlYXRlIG5ldyBXU0RMIGZpbGVzPC9saT4KLQotPGxpPlZhbGlkYXRlIGFuZCBlZGl0IFdTREwgZmlsZXM8L2xpPgotCi08bGk+Q3JlYXRlIGFuZCBkZWxldGU6ICA8dWw+Ci08bGk+U2VydmljZXM6IHVzZWQgdG8gYWdncmVnYXRlIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMuIFRoZXNlIGFyZSB0aGUgcm9vdAotZWxlbWVudHMgb2YgYWxsIFdTREwgZmlsZXMuPC9saT4KLQotPGxpPlBvcnRzOiBzcGVjaWZ5IGFuIGFkZHJlc3MgZm9yIGEgYmluZGluZywgdGh1cyBkZWZpbmluZyBhIHNpbmdsZSBjb21tdW5pY2F0aW9uCi1lbmRwb2ludC48L2xpPgotCi08bGk+QmluZGluZ3M6IHNwZWNpZnkgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb25zIGZvcgotdGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnQgdHlwZS48L2xpPgotCi08bGk+UG9ydCB0eXBlczogYSBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyB0aGF0IGVhY2ggcmVmZXIgdG8gYW4gaW5wdXQgbWVzc2FnZQotYW5kIG91dHB1dCBtZXNzYWdlcy48L2xpPgotCi08bGk+T3BlcmF0aW9uczogaW5wdXQgYW5kIG91dHB1dCBtZXNzYWdlcy48L2xpPgotCi08bGk+TWVzc2FnZXM6IHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLgotQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbgotd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uPC9saT4KLQotPGxpPlBhcnRzOiBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50Ci1vZiBhIG1lc3NhZ2UuPC9saT4KLQotPGxpPlR5cGVzOiBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvbGk+Ci0KLTxsaT5JbXBvcnQgc3RhdGVtZW50czogdXNlZCB0byBhc3NvY2lhdGUgYSBuYW1lc3BhY2Ugd2l0aCBhIGRvY3VtZW50IGxvY2F0aW9uLiA8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkltcG9ydCBleGlzdGluZyBXU0RMIGZpbGVzIGZvciBzdHJ1Y3R1cmVkIHZpZXdpbmc8L2xpPgotCi08bGk+R2VuZXJhdGUgZG9jdW1lbnRhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudC48L2xpPgotCi08L3VsPgotCi08cD5UaGUgV1NETCBzdXBwb3J0IGluIHRoZSBXU0RMIGVkaXRvciBpcyBiYXNlZCBvbiB0aGUgVzNDIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHRhcmdldD0iX2JsYW5rIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIDEuMTwvYT4uIFRoZSBXU0RMIHNwZWNpZmljYXRpb24gZnJvbSB0aGUgVzNDIFdlYiBzaXRlIGlzCi1hbHNvIHVzZWQgZm9yIHZhbGlkYXRpb24uwqAgPC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3Rhc2tzL3RlZHR3c2RsLmh0bWwiPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L3N0cm9uZz48YnIgLz4KLU9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiPldTREw8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9odHRwc2tlbC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9odHRwc2tlbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZTY2ODYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvaHR0cHNrZWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc2hvdy1oaWRlLWJpbmRpbmcuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc2hvdy1oaWRlLWJpbmRpbmcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGE5YjU4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3Nob3ctaGlkZS1iaW5kaW5nLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXBza2VsLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXBza2VsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0MjczNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9zb2Fwc2tlbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZWRpdG9yLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2JlM2I5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9fZi5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L19mLmNmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMxZTUzMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L19mLmNmcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5M2Y0NzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWExNjFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAxNCAxNzoyNzowOCBFRFQgMjAwOA0KLW9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyPW9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyXG4xLjAuNDAwLnF1YWxpZmllcg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGMzNmY1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDE0IDE3OjI3OjA4IEVEVCAyMDA4DQotbHVjZW5lPTEuOS4xLnYyMDA4MDMwNjE4MTENCi1hbmFseXplcj1vcmcuZWNsaXBzZS5oZWxwLmJhc2VcIzMuMy4xMDAudjIwMDgwNDI1P2xvY2FsZVw9ZW4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDk5OWMxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMTc6Mjc6MDggRURUIDIwMDgNCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RlZHR3c2RsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRvcGVyLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWU4ODMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTY4MzgwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFRoaXMgaXMgdGhlIHBsdWdpbiBmb3IgZGVjbGFyaW5nIHRoZSBoZWxwICAgICAgICAgLS0+Ci08IS0tIGNvbnRyaWJ1dGlvbnMgZm9yIHVzaW5nIHRoZSB0b29sLiAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLTxwbHVnaW4+Ci0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICA8dG9jIGZpbGU9Indzd3NkbGVkaXRvcnRfdG9jLnhtbCIvPiAgIAotICAgIDx0b2MgZmlsZT0id3N3c2RsZWRpdG9yY190b2MueG1sIi8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotICAgICAgCi08L2V4dGVuc2lvbj4KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS5sdWNlbmVTZWFyY2hQYXJ0aWNpcGFudHMiPgotICAgICAgPGJpbmRpbmcgcGFydGljaXBhbnRJZD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLnhodG1sIi8+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci5tYXBsaXN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGViOTlmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIubWFwbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxtYXBsaXN0IHZlcnNpb249IjMuNi4yIj4KLSAgPG5hdj4KLSAgICA8bWFwIGZpbGU9Indzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAiLz4KLSAgICA8bWFwIGZpbGU9Indzd3NkbGVkaXRvcmNfdG9jLmRpdGFtYXAiLz4KLSAgPC9uYXY+Ci0gIDxsaW5rPgotICAgIDxtYXAgZmlsZT0id3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcCIvPgotICAgIDxtYXAgZmlsZT0id3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcCIvPgotICA8L2xpbms+Ci08L21hcGxpc3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQxZTYyMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxpbmRleD4KLSAgPGVudHJ5IGtleXdvcmQ9IldTREwgZmlsZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbXBvcnRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RpbXB3c2RsLmh0bWwjdGltcHdzZGwiIHRpdGxlPSJJbXBvcnRpbmcgYSBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGNydHdzZGwuaHRtbCN0Y3J0d3NkbCIgdGl0bGU9IkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImVkaXRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RlZHR3c2RsLmh0bWwjdGVkdHdzZGwiIHRpdGxlPSJFZGl0aW5nIFdTREwgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHNydmMuaHRtbCN0YWRkc3J2YyIgdGl0bGU9IkFkZGluZyBhIHNlcnZpY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJwb3J0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHBvcnQuaHRtbCN0YWRkcG9ydCIgdGl0bGU9IkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2V0dGluZyBwb3J0IHR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0cHJ0dC5odG1sI3RzZXRwcnR0IiB0aXRsZT0iU2V0dGluZyBhIHBvcnQgdHlwZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImJpbmRpbmdzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sI3RzZXRiaW5kIiB0aXRsZT0iU2V0dGluZyBhIGJpbmRpbmciLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJvcGVyYXRpb25zIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkb3Blci5odG1sI3RhZGRvcGVyIiB0aXRsZT0iQWRkaW5nIGFuIG9wZXJhdGlvbiIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1lc3NhZ2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkbWVzcy5odG1sI2FkZGluZ2FtZXNzYWdlIiB0aXRsZT0iQWRkaW5nIGEgbWVzc2FnZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1lc3NhZ2UgcGFydHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRwYXJ0Lmh0bWwjdGFkZHBhcnQiIHRpdGxlPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImltcG9ydCBzdGF0ZW1lbnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0aW1wdC5odG1sI3RjcnRpbXB0IiB0aXRsZT0iQ3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0dHlwZS5odG1sI3RjcnR0eXBlIiB0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iaW1wb3J0aW5nIFdTREwgZmlsZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RpbXB3c2RsLmh0bWwjdGltcHdzZGwiIHRpdGxlPSJJbXBvcnRpbmcgYSBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBXU0RMIGZpbGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0d3NkbC5odG1sI3RjcnR3c2RsIiB0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZWRpdGluZyBXU0RMIGZpbGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90ZWR0d3NkbC5odG1sI3RlZHR3c2RsIiB0aXRsZT0iRWRpdGluZyBXU0RMIGZpbGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIHNlcnZpY2VzIHRvIFdTREwiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRzcnZjLmh0bWwjdGFkZHNydmMiIHRpdGxlPSJBZGRpbmcgYSBzZXJ2aWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIFdTREwgcG9ydHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRwb3J0Lmh0bWwjdGFkZHBvcnQiIHRpdGxlPSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNldHRpbmcgcG9ydCB0eXBlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNldHBydHQuaHRtbCN0c2V0cHJ0dCIgdGl0bGU9IlNldHRpbmcgYSBwb3J0IHR5cGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJiaW5kaW5ncyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmciPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCN0c2V0YmluZCIgdGl0bGU9IlNldHRpbmcgYSBiaW5kaW5nIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNldHRpbmcgV1NETCBiaW5kaW5ncyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCN0c2V0YmluZCIgdGl0bGU9IlNldHRpbmcgYSBiaW5kaW5nIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIFdTREwgb3BlcmF0aW9ucyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZG9wZXIuaHRtbCN0YWRkb3BlciIgdGl0bGU9IkFkZGluZyBhbiBvcGVyYXRpb24iLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBtZXNzYWdlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZG1lc3MuaHRtbCNhZGRpbmdhbWVzc2FnZSIgdGl0bGU9IkFkZGluZyBhIG1lc3NhZ2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBtZXNzYWdlIHBhcnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkcGFydC5odG1sI3RhZGRwYXJ0IiB0aXRsZT0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBpbXBvcnQgc3RhdGVtZW50cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGNydGltcHQuaHRtbCN0Y3J0aW1wdCIgdGl0bGU9IkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBXU0RMIHR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0dHlwZS5odG1sI3RjcnR0eXBlIiB0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxNjQyMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSIAotIyBOTFNfRU5DT0RJTkc9VVRGLTggCi0KLXBsdWdpbk5hbWUgICAgID0gV1NETCBFZGl0b3IgRG9jdW1lbnRhdGlvbgotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTY4MzgwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUaGlzIGlzIHRoZSBwbHVnaW4gZm9yIGRlY2xhcmluZyB0aGUgaGVscCAgICAgICAgIC0tPgotPCEtLSBjb250cmlidXRpb25zIGZvciB1c2luZyB0aGUgdG9vbC4gICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgPHRvYyBmaWxlPSJ3c3dzZGxlZGl0b3J0X3RvYy54bWwiLz4gICAKLSAgICA8dG9jIGZpbGU9Indzd3NkbGVkaXRvcmNfdG9jLnhtbCIvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLSAgICAgIAotPC9leHRlbnNpb24+Ci08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY2NWQwNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9ImFkZGluZ2FtZXNzYWdlIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIG1lc3NhZ2U8L3RpdGxlPgotPHNob3J0ZGVzYz5NZXNzYWdlcyByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZyB0cmFuc21pdHRlZC4KLUEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24KLXdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLiBXU0RMIG1lc3NhZ2VzIGFyZSB0b3AgbGV2ZWwgb2JqZWN0cyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkCi1ieSBhbiBvcGVyYXRpb24ncyBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCBlbGVtZW50cyAod2l0aGluIGEgcG9ydCB0eXBlKS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0ga2V5cmVmPSJ0YWRkbWVzc3wxfFdlYnNlcnZpY2VzYWRkaW5nV1NETG1lc3NhZ2VzIiBzdGF0dXM9InVuY2hhbmdlZCI+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIFdTREwgbWVzc2FnZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtCi1rZXlyZWY9InRhZGRtZXNzfDJ8V1NETG1lc3NhZ2VzIiBzdGF0dXM9InVuY2hhbmdlZCI+V1NETCBmaWxlczxpbmRleHRlcm0+bWVzc2FnZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT48L3ByZXJlcT4KLTxjb250ZXh0PjxwPllvdSBjYW4gY3JlYXRlIGEgbWVzc2FnZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3IGJ5IHJpZ2h0LWNsaWNraW5nCi10aGUgPGI+TWVzc2FnZXM8L2I+IGZvbGRlciBhbmQgY2xpY2tpbmcgPGI+QWRkIE1lc3NhZ2U8L2I+LjwvcD48cD5UbyBjcmVhdGUKLWEgbmV3IG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQKLWFuZCBjbGljayA8Yj5TZXQgTWVzc2FnZSA+IE5ldyBNZXNzYWdlLjwvYj48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgdGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2UgaW4gdGhlIDx1aWNvbnRyb2w+R2VuZXJhbDwvdWljb250cm9sPiBwYW5lCi1vZiB0aGUgUHJvcGVydGllcyB2aWV3LjwvY21kPjxpbmZvPlRoaXMgbmFtZSBzaG91bGQgYmUgYSB1bmlxdWUgYW1vbmdzdCBhbGwKLW1lc3NhZ2VzIGRlZmluZWQgd2l0aGluIHRoZSBlbmNsb3NpbmcgV1NETCBkb2N1bWVudC48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgbmV3IG1lc3NhZ2Ugd2lsbCBhcHBlYXIgaW4gdGhlIERlc2lnbiB2aWV3IHdpdGhpbiB0aGUgcG9ydAotdHlwZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHBvc3RyZXE+PHA+IDxiPk5vdGU8L2I+OiBNZXNzYWdlcyBhcmUgcmVmZXJlbmNlZCB3aXRoaW4gYSBwb3J0IHR5cGUgKHNwZWNpZmljYWxseQotYnkgYW4gb3BlcmF0aW9uJ3MgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgb2JqZWN0cykuIFRoZSBpbnB1dCwgb3V0cHV0IGFuZAotZmF1bHQgb2JqZWN0cyB3aXRoaW4gYSBiaW5kaW5nIGRvIG5vdCByZWZlcmVuY2UgbWVzc2FnZXMuIEhlbmNlIHlvdSBjYW5ub3QKLWNyZWF0ZSBhIG5ldyBtZXNzYWdlIGJ5IHJpZ2h0IGNsaWNraW5nIG9uIGEgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgd2l0aGluCi1hIGJpbmRpbmcgKHRoZXNlIGFyZSBhbHNvIGtub3duIGFzIGJpbmRpbmcgaW5wdXQsIGJpbmRpbmcgb3V0cHV0IGFuZCBiaW5kaW5nCi1mYXVsdHMpLjwvcD48bm90ZSB0eXBlPSJ0aXAiPllvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwKLW91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBVbmRlciB0aGUgIDxiPlBvcnQgVHlwZXM8L2I+IGZvbGRlciwKLXJpZ2h0LWNsaWNrIHlvdXIgZWxlbWVudCBhbmQgY2xpY2sgPGI+U2V0IE1lc3NhZ2UgPiBBZGQgTWVzc2FnZTwvYj4uIFlvdXIKLW1lc3NhZ2Ugd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgdmlldyB1bmRlciB0aGUgPGI+TWVzc2FnZXM8L2I+IGZvbGRlci48L25vdGU+PC9wb3N0cmVxPgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJyZXVzaW5nYW1lc3NhZ2UiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UmV1c2luZyBhIG1lc3NhZ2U8L3RpdGxlPgotPHRhc2tib2R5PgotPHByZXJlcT5UbyByZXVzZSBhIG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCwgY29tcGxldGUKLXRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wcmVyZXE+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgIDxiPlNldCBNZXNzYWdlID4gRXhpc3RpbmcgTWVzc2FnZS48L2I+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5Zb3UgY2FuIGNoYW5nZSB0aGUgc2NvcGUgb2YgdGhlIGxpc3QgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCi1vcHRpb25zOjwvY21kPjxpbmZvPjx1bD4KLTxsaT48Yj5Xb3Jrc3BhY2U8L2I+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci08bGk+PGI+RW5jbG9zaW5nIFByb2plY3Q8L2I+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotPGxpPjxiPkN1cnJlbnQgUmVzb3VyY2U8L2I+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudAotZmlsZS48L2xpPgotPGxpPjxiPldvcmtpbmcgU2V0czwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0IG9mCi1maWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8Yj5DaG9vc2U8L2I+LiBZb3UgY2FuIHNlbGVjdCBmaWxlcwotZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQKLXRoZSBmaWxlcywgY2xpY2sgPGI+T0s8L2I+LjwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBleGlzdGluZyBtZXNzYWdlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgIDxiPk9LPC9iPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cG9zdHJlcT48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImltcG9ydGluZ2FtZXNzYWdlIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkltcG9ydGluZyBhIG1lc3NhZ2U8L3RpdGxlPgotPHRhc2tib2R5PgotPHByZXJlcT5JZiB5b3Ugd2FudCB0byBpbXBvcnQgYW4gZXhpc3RpbmcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwgb3V0cHV0LAotb3IgZmF1bHQgZWxlbWVudCwgZm9sbG93IHRoZXNlIHN0ZXBzOjwvcHJlcmVxPgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudAotYW5kIGNsaWNrICA8Yj5TZXQgTWVzc2FnZSA+IEV4aXN0aW5nIE1lc3NhZ2UuPC9iPjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZyB0byBmaWx0ZXIgdGhlIGxpc3QKLW9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPllvdSBjYW4gaW1wb3J0IGEgbWVzc2FnZSBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L2NtZD4KLTxpbmZvPjx1bD4KLTxsaT48Yj5Xb3Jrc3BhY2U8L2I+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci08bGk+PGI+RW5jbG9zaW5nIFByb2plY3Q8L2I+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotPGxpPjxiPldvcmtpbmcgU2V0czwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0IG9mCi1maWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8Yj5DaG9vc2U8L2I+LiBZb3UgY2FuIHNlbGVjdCBmaWxlcwotZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQKLXRoZSBmaWxlcywgY2xpY2sgPGI+T0s8L2I+LjwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBtZXNzYWdlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPGI+T0s8L2I+LjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxwb3N0cmVxPllvdSBjYW4gbm93IGFkZCBwYXJ0cyB0byB5b3VyIG1lc3NhZ2UuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbQotZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLAotc2VlIDx4cmVmIGZvcm1hdD0iZGl0YSIgaHJlZj0idGFkZHBhcnQuZGl0YSIgc2NvcGU9ImxvY2FsIj5BZGRpbmcgYSBwYXJ0IHRvCi1hIG1lc3NhZ2U8L3hyZWY+LjwvcG9zdHJlcT4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUxODQyZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQWRkaW5nIGEgbWVzc2FnZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJNZXNzYWdlcyByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZyB0cmFuc21pdHRlZC4gQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbiB3aXRoaW4gc29tZSB0eXBlIHN5c3RlbS4gV1NETCBtZXNzYWdlcyBhcmUgdG9wIGxldmVsIG9iamVjdHMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBieSBhbiBvcGVyYXRpb24ncyBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCBlbGVtZW50cyAod2l0aGluIGEgcG9ydCB0eXBlKS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iTWVzc2FnZXMgcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24gd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uIFdTREwgbWVzc2FnZXMgYXJlIHRvcCBsZXZlbCBvYmplY3RzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYnkgYW4gb3BlcmF0aW9uJ3MgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgZWxlbWVudHMgKHdpdGhpbiBhIHBvcnQgdHlwZSkuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBtZXNzYWdlcywgV1NETCBmaWxlcywgbWVzc2FnZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIG1lc3NhZ2VzLCBXU0RMIGZpbGVzLCBtZXNzYWdlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iYWRkaW5nYW1lc3NhZ2UiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5BZGRpbmcgYSBtZXNzYWdlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJhZGRpbmdhbWVzc2FnZSI+PGEgbmFtZT0iYWRkaW5nYW1lc3NhZ2UiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIG1lc3NhZ2U8L2gxPgotCi0KLQotPGRpdj48cD5NZXNzYWdlcyByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZyB0cmFuc21pdHRlZC4KLUEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24KLXdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLiBXU0RMIG1lc3NhZ2VzIGFyZSB0b3AgbGV2ZWwgb2JqZWN0cyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkCi1ieSBhbiBvcGVyYXRpb24ncyBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCBlbGVtZW50cyAod2l0aGluIGEgcG9ydCB0eXBlKS48L3A+Ci0KLTxkaXYgY2xhc3M9InAiIC8+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgbWVzc2FnZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3IGJ5IHJpZ2h0LWNsaWNraW5nCi10aGUgPHN0cm9uZz5NZXNzYWdlczwvc3Ryb25nPiBmb2xkZXIgYW5kIGNsaWNraW5nIDxzdHJvbmc+QWRkIE1lc3NhZ2U8L3N0cm9uZz4uPC9wPgotPHA+VG8gY3JlYXRlCi1hIG5ldyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IE5ldyBNZXNzYWdlLjwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgdGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2UgaW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdlbmVyYWw8L3NwYW4+IHBhbmUKLW9mIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9zcGFuPiBUaGlzIG5hbWUgc2hvdWxkIGJlIGEgdW5pcXVlIGFtb25nc3QgYWxsCi1tZXNzYWdlcyBkZWZpbmVkIHdpdGhpbiB0aGUgZW5jbG9zaW5nIFdTREwgZG9jdW1lbnQuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UaGUgbmV3IG1lc3NhZ2Ugd2lsbCBhcHBlYXIgaW4gdGhlIERlc2lnbiB2aWV3IHdpdGhpbiB0aGUgcG9ydAotdHlwZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+Tm90ZTwvc3Ryb25nPjogTWVzc2FnZXMgYXJlIHJlZmVyZW5jZWQgd2l0aGluIGEgcG9ydCB0eXBlIChzcGVjaWZpY2FsbHkKLWJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IG9iamVjdHMpLiBUaGUgaW5wdXQsIG91dHB1dCBhbmQKLWZhdWx0IG9iamVjdHMgd2l0aGluIGEgYmluZGluZyBkbyBub3QgcmVmZXJlbmNlIG1lc3NhZ2VzLiBIZW5jZSB5b3UgY2Fubm90Ci1jcmVhdGUgYSBuZXcgbWVzc2FnZSBieSByaWdodCBjbGlja2luZyBvbiBhIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IHdpdGhpbgotYSBiaW5kaW5nICh0aGVzZSBhcmUgYWxzbyBrbm93biBhcyBiaW5kaW5nIGlucHV0LCBiaW5kaW5nIG91dHB1dCBhbmQgYmluZGluZwotZmF1bHRzKS48L3A+Ci08ZGl2IGNsYXNzPSJ0aXAiPjxzcGFuIGNsYXNzPSJ0aXB0aXRsZSI+VGlwOjwvc3Bhbj4gWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LAotb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFVuZGVyIHRoZSAgPHN0cm9uZz5Qb3J0IFR5cGVzPC9zdHJvbmc+IGZvbGRlciwKLXJpZ2h0LWNsaWNrIHlvdXIgZWxlbWVudCBhbmQgY2xpY2sgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IEFkZCBNZXNzYWdlPC9zdHJvbmc+LiBZb3VyCi1tZXNzYWdlIHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIHZpZXcgdW5kZXIgdGhlIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4gZm9sZGVyLjwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJyZXVzaW5nYW1lc3NhZ2UiPjxhIG5hbWU9InJldXNpbmdhbWVzc2FnZSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5SZXVzaW5nIGEgbWVzc2FnZTwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJwIj5UbyByZXVzZSBhIG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCwgY29tcGxldGUKLXRoZSBmb2xsb3dpbmcgc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQKLWFuZCBjbGljayAgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IEV4aXN0aW5nIE1lc3NhZ2UuPC9zdHJvbmc+PC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcgdG8gZmlsdGVyIHRoZSBsaXN0Ci1vciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGw8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5Zb3UgY2FuIGNoYW5nZSB0aGUgc2NvcGUgb2YgdGhlIGxpc3QgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCi1vcHRpb25zOjwvc3Bhbj4gPHVsPgotPGxpPjxzdHJvbmc+V29ya3NwYWNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkVuY2xvc2luZyBQcm9qZWN0PC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5DdXJyZW50IFJlc291cmNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudAotZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0IG9mCi1maWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8c3Ryb25nPkNob29zZTwvc3Ryb25nPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VGhlIGV4aXN0aW5nIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayAgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIiAvPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImltcG9ydGluZ2FtZXNzYWdlIj48YSBuYW1lPSJpbXBvcnRpbmdhbWVzc2FnZSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5JbXBvcnRpbmcgYSBtZXNzYWdlPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InAiPklmIHlvdSB3YW50IHRvIGltcG9ydCBhbiBleGlzdGluZyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsCi1vciBmYXVsdCBlbGVtZW50LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQKLWFuZCBjbGljayAgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IEV4aXN0aW5nIE1lc3NhZ2UuPC9zdHJvbmc+PC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcgdG8gZmlsdGVyIHRoZSBsaXN0Ci1vciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+WW91IGNhbiBpbXBvcnQgYSBtZXNzYWdlIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvc3Bhbj4KLSA8dWw+Ci08bGk+PHN0cm9uZz5Xb3Jrc3BhY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLQotPGxpPjxzdHJvbmc+RW5jbG9zaW5nIFByb2plY3Q8L3N0cm9uZz46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPldvcmtpbmcgU2V0czwvc3Ryb25nPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBzZXQgb2YKLWZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxzdHJvbmc+Q2hvb3NlPC9zdHJvbmc+LiBZb3UgY2FuIHNlbGVjdCBmaWxlcwotZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQKLXRoZSBmaWxlcywgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UaGUgbWVzc2FnZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+WW91IGNhbiBub3cgYWRkIHBhcnRzIHRvIHlvdXIgbWVzc2FnZS4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtCi1mb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCi1zZWUgPGEgaHJlZj0idGFkZHBhcnQuZGl0YSI+QWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2U8L2E+LjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRvcGVyLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRvcGVyLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMWMzODMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRhZGRvcGVyIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhbiBvcGVyYXRpb248L3RpdGxlPgotPHNob3J0ZGVzYz5BbiBvcGVyYXRpb24gbmFtZXMgdGhlIG9wZXJhdGlvbiBhbmQgbGlzdHMgdGhlIGV4cGVjdGVkIGlucHV0cwotYW5kIG91dHB1dHMuIFRoZSBvcGVyYXRpb24gZWxlbWVudCBtYXkgYWxzbyBjb250YWluIGEgZmF1bHQgc3ViLWVsZW1lbnQgdGhhdAotZGVzY3JpYmVzIGFueSBlcnJvciBkYXRhIHRoZSBvcGVyYXRpb24gbWF5IHJldHVybi48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgV1NETCBvcGVyYXRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPm9wZXJhdGlvbnM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PlVzaW5nIHRoZXNlLCB5b3UgY2FuIGRlY2xhcmUgZm91ciB0cmFuc21pc3Npb24gcHJpbWl0aXZlcyB0aGF0IGFuCi1lbmRwb2ludCBjYW4gc3VwcG9ydDo8dWw+Ci08bGk+IDxiPk9uZS13YXk8L2I+OiB0aGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLjwvbGk+Ci08bGk+IDxiPlJlcXVlc3QtcmVzcG9uc2U8L2I+OiB0aGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLCBhbmQgc2VuZHMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci08bGk+IDxiPlNvbGljaXQtcmVzcG9uc2U8L2I+OiB0aGUgZW5kcG9pbnQgc2VuZHMgYSBtZXNzYWdlLCBhbmQgcmVjZWl2ZXMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci08bGk+IDxiPk5vdGlmaWNhdGlvbjwvYj46IHRoZSBlbmRwb2ludCBzZW5kcyBhIG1lc3NhZ2UuPC9saT4KLTwvdWw+PHA+WW91IGNhbiBhZGQgYW4gb3BlcmF0aW9uIHRvIGEgcG9ydCB0eXBlIG9yIGEgcG9ydCBiaW5kaW5nLjwvcD48cD5UbwotYWRkIGFuIG9wZXJhdGlvbiB0byBhIHBvcnQgdHlwZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCB0eXBlLjwvY21kPjxpbmZvPkNsaWNrIDxiPkFkZAotT3BlcmF0aW9uPC9iPi4gVG8gc2VsZWN0IHRoZSBuZXcgb3BlcmF0aW9uLCBjbGljayB0aGUgb3BlcmF0aW9uIGluIHRoZSBwb3J0Ci10eXBlIG9iamVjdC48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5SaWdodCBjbGljayBvbiB0aGUgb3BlcmF0aW9uIHRvIGFkZCBpbnB1dCwgb3V0cHV0IG9yIGZhdWx0IG9iamVjdHMuPC9jbWQ+Ci08aW5mbz5EZXBlbmRpbmcgb24gYW4gb3BlcmF0aW9uJ3MgaW5wdXRzIGFuZCBvdXRwdXRzIGl0IGNhbiBiZSBjbGFzc2lmaWVkCi1hcyBmb2xsb3dzOjx1bD4KLTxsaT48Yj5PbmUgd2F5IG9wZXJhdGlvbjwvYj46IGlucHV0IDwvbGk+Ci08bGk+PGI+UmVxdWVzdCByZXNwb25zZSBvcGVyYXRpb248L2I+OiBpbnB1dCwgb3V0cHV0IDwvbGk+Ci08bGk+PGI+IFNvbGljaXQgcmVzcG9uc2Ugb3BlcmF0aW9uPC9iPjogb3V0cHV0LCBpbnB1dCA8L2xpPgotPGxpPjxiPk5vdGlmaWNhdGlvbiBvcGVyYXRpb248L2I+OiBvdXRwdXQ8L2xpPgotPC91bD48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCB0eXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3BlcmF0aW9uCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSAgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD4gPGI+VGlwPC9iPjogWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBvcGVyYXRpb24gZm9yIHlvdXIgcG9ydAotdHlwZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBSaWdodCBjbGljayBvbiBhIHBvcnQgdHlwZSBpbiB0aGUgPHVpY29udHJvbD5Qb3J0Ci1UeXBlPC91aWNvbnRyb2w+IGZvbGRlciBhbmQgc2VsZWN0IDx1aWNvbnRyb2w+QWRkIE9wZXJhdGlvbjwvdWljb250cm9sPi48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRvcGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRvcGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3OTE0YjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkFkZGluZyBhbiBvcGVyYXRpb24iIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQW4gb3BlcmF0aW9uIG5hbWVzIHRoZSBvcGVyYXRpb24gYW5kIGxpc3RzIHRoZSBleHBlY3RlZCBpbnB1dHMgYW5kIG91dHB1dHMuIFRoZSBvcGVyYXRpb24gZWxlbWVudCBtYXkgYWxzbyBjb250YWluIGEgZmF1bHQgc3ViLWVsZW1lbnQgdGhhdCBkZXNjcmliZXMgYW55IGVycm9yIGRhdGEgdGhlIG9wZXJhdGlvbiBtYXkgcmV0dXJuLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBbiBvcGVyYXRpb24gbmFtZXMgdGhlIG9wZXJhdGlvbiBhbmQgbGlzdHMgdGhlIGV4cGVjdGVkIGlucHV0cyBhbmQgb3V0cHV0cy4gVGhlIG9wZXJhdGlvbiBlbGVtZW50IG1heSBhbHNvIGNvbnRhaW4gYSBmYXVsdCBzdWItZWxlbWVudCB0aGF0IGRlc2NyaWJlcyBhbnkgZXJyb3IgZGF0YSB0aGUgb3BlcmF0aW9uIG1heSByZXR1cm4uIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBvcGVyYXRpb25zLCBXU0RMIGZpbGVzLCBvcGVyYXRpb25zIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBvcGVyYXRpb25zLCBXU0RMIGZpbGVzLCBvcGVyYXRpb25zIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhZGRvcGVyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGFuIG9wZXJhdGlvbjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGFkZG9wZXIiPjxhIG5hbWU9InRhZGRvcGVyIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5BZGRpbmcgYW4gb3BlcmF0aW9uPC9oMT4KLQotCi0KLTxkaXY+PHA+QW4gb3BlcmF0aW9uIG5hbWVzIHRoZSBvcGVyYXRpb24gYW5kIGxpc3RzIHRoZSBleHBlY3RlZCBpbnB1dHMKLWFuZCBvdXRwdXRzLiBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgbWF5IGFsc28gY29udGFpbiBhIGZhdWx0IHN1Yi1lbGVtZW50IHRoYXQKLWRlc2NyaWJlcyBhbnkgZXJyb3IgZGF0YSB0aGUgb3BlcmF0aW9uIG1heSByZXR1cm4uPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5Vc2luZyB0aGVzZSwgeW91IGNhbiBkZWNsYXJlIGZvdXIgdHJhbnNtaXNzaW9uIHByaW1pdGl2ZXMgdGhhdCBhbgotZW5kcG9pbnQgY2FuIHN1cHBvcnQ6PHVsPgotPGxpPiA8c3Ryb25nPk9uZS13YXk8L3N0cm9uZz46IHRoZSBlbmRwb2ludCByZWNlaXZlcyBhIG1lc3NhZ2UuPC9saT4KLQotPGxpPiA8c3Ryb25nPlJlcXVlc3QtcmVzcG9uc2U8L3N0cm9uZz46IHRoZSBlbmRwb2ludCByZWNlaXZlcyBhIG1lc3NhZ2UsIGFuZCBzZW5kcyBhCi1jb3JyZWxhdGVkIG1lc3NhZ2UuPC9saT4KLQotPGxpPiA8c3Ryb25nPlNvbGljaXQtcmVzcG9uc2U8L3N0cm9uZz46IHRoZSBlbmRwb2ludCBzZW5kcyBhIG1lc3NhZ2UsIGFuZCByZWNlaXZlcyBhCi1jb3JyZWxhdGVkIG1lc3NhZ2UuPC9saT4KLQotPGxpPiA8c3Ryb25nPk5vdGlmaWNhdGlvbjwvc3Ryb25nPjogdGhlIGVuZHBvaW50IHNlbmRzIGEgbWVzc2FnZS48L2xpPgotCi08L3VsPgotPHA+WW91IGNhbiBhZGQgYW4gb3BlcmF0aW9uIHRvIGEgcG9ydCB0eXBlIG9yIGEgcG9ydCBiaW5kaW5nLjwvcD4KLTxwPlRvCi1hZGQgYW4gb3BlcmF0aW9uIHRvIGEgcG9ydCB0eXBlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBwb3J0IHR5cGUuPC9zcGFuPiBDbGljayA8c3Ryb25nPkFkZAotT3BlcmF0aW9uPC9zdHJvbmc+LiBUbyBzZWxlY3QgdGhlIG5ldyBvcGVyYXRpb24sIGNsaWNrIHRoZSBvcGVyYXRpb24gaW4gdGhlIHBvcnQKLXR5cGUgb2JqZWN0LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxzdHJvbmc+R2VuZXJhbDwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlJpZ2h0IGNsaWNrIG9uIHRoZSBvcGVyYXRpb24gdG8gYWRkIGlucHV0LCBvdXRwdXQgb3IgZmF1bHQgb2JqZWN0cy48L3NwYW4+Ci0gRGVwZW5kaW5nIG9uIGFuIG9wZXJhdGlvbidzIGlucHV0cyBhbmQgb3V0cHV0cyBpdCBjYW4gYmUgY2xhc3NpZmllZAotYXMgZm9sbG93czo8dWw+Ci08bGk+PHN0cm9uZz5PbmUgd2F5IG9wZXJhdGlvbjwvc3Ryb25nPjogaW5wdXQgPC9saT4KLQotPGxpPjxzdHJvbmc+UmVxdWVzdCByZXNwb25zZSBvcGVyYXRpb248L3N0cm9uZz46IGlucHV0LCBvdXRwdXQgPC9saT4KLQotPGxpPjxzdHJvbmc+IFNvbGljaXQgcmVzcG9uc2Ugb3BlcmF0aW9uPC9zdHJvbmc+OiBvdXRwdXQsIGlucHV0IDwvbGk+Ci0KLTxsaT48c3Ryb25nPk5vdGlmaWNhdGlvbiBvcGVyYXRpb248L3N0cm9uZz46IG91dHB1dDwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcGVyYXRpb24KLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlICA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+VGlwPC9zdHJvbmc+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IG9wZXJhdGlvbiBmb3IgeW91ciBwb3J0Ci10eXBlIHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFJpZ2h0IGNsaWNrIG9uIGEgcG9ydCB0eXBlIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qb3J0Ci1UeXBlPC9zcGFuPiBmb2xkZXIgYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgT3BlcmF0aW9uPC9zcGFuPi48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMjg3YmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRhZGRwYXJ0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlPC90aXRsZT4KLTxzaG9ydGRlc2M+QWxsIG1lc3NhZ2VzIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFydHMuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbQotZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIGRlZmluaXRpb24KLWFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIG1lc3NhZ2UgcGFydHM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETCBmaWxlczxpbmRleHRlcm0+bWVzc2FnZSBwYXJ0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gYWRkIGEgcGFydCB0byBhIG1lc3NhZ2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIGFuIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IG9iamVjdCBhbmQKLWNsaWNrIDxiPkFkZCBQYXJ0PC9iPi48L2NtZD48c3RlcHJlc3VsdD5UaGUgcGFydCBpcyBhZGRlZCB0byB0aGUgaW5wdXQsIG91dHB1dCwKLW9yIGZhdWx0J3MgbWVzc2FnZSByZWZlcmVuY2UuIFRvIHNlbGVjdCB0aGUgcGFydCwgY2xpY2sgdGhlIHBhcnQgaW4gdGhlIHBvcnQKLXR5cGUgb2JqZWN0Ljwvc3RlcHJlc3VsdD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8Yj5HZW5lcmFsPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBwYXJ0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91ciBwYXJ0IGNhbiByZWZlciB0byBlaXRoZXIgYSA8Yj5UeXBlPC9iPiBvciBhbiA8Yj5FbGVtZW50PC9iPi48L2NtZD4KLTxpbmZvPlNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uIGFzIHRoZSA8Yj5SZWZlcmVuY2UgS2luZDwvYj4gLjwvaW5mbz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+SWYgeW91IHNlbGVjdGVkIDxiPlR5cGU8L2I+LCB5b3Ugbm93IGhhdmUgdGhlIG9wdGlvbiBvZiBzZWxlY3RpbmcKLWFuIFhNTCBzY2hlbWEgZGF0YSB0eXBlIGZyb20gdGhlIDxiPlR5cGU8L2I+IGRyb3AgZG93biBsaXN0LjwvY21kPjxpbmZvPlRoZQotbGlzdCBvZiB0eXBlcyBjb21lcyBmcm9tIGFueSBhdmFpbGFibGUgcmVmZXJlbmNlZCBYTUwgc2NoZW1hcy48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5JZiB5b3Ugc2VsZWN0ZWQgPGI+RWxlbWVudDwvYj4gLCB5b3Ugbm93IGhhdmUgdGhlIG9wdGlvbiBvZiBzZWxlY3RpbmcKLWFuIFhNTCBzY2hlbWEgZWxlbWVudCBmcm9tIHRoZSAgPGI+RWxlbWVudDwvYj4gZHJvcCBkb3duIGxpc3QuPC9jbWQ+PGluZm8+VGhlCi1saXN0IG9mIGVsZW1lbnRzIGNvbWVzIGZyb20gYW55IGF2YWlsYWJsZSByZWZlcmVuY2VkIFhNTCBzY2hlbWFzLjwvaW5mbz48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48bm90ZSB0eXBlPSJ0aXAiPiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IHBhcnQgZm9yIHlvdXIgbWVzc2FnZQotdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gVW5kZXIgdGhlICA8Yj5NZXNzYWdlczwvYj4gZm9sZGVyLCByaWdodC1jbGljayB5b3VyCi1lbGVtZW50IGFuZCBjbGljayA8Yj5BZGQgUGFydDwvYj4uIFlvdXIgcGFydCB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwZWFyIGluCi10aGUgT3V0bGluZSB2aWV3ICh1bmRlciB0aGUgPGI+TWVzc2FnZXM8L2I+IGZvbGRlciksIGJ1dCBpdCB3aWxsIG9ubHkgYXBwZWFyCi1pbiB0aGUgRGVzaWduIHZpZXcgaWYgdGhlIG1lc3NhZ2UgeW91IGFkZGVkIGl0IHRvIGN1cnJlbnRseSBkb2VzLjwvbm90ZT48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM3MTYwNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBbGwgbWVzc2FnZXMgY29udGFpbiBvbmUgb3IgbW9yZSBwYXJ0cy4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBkZWZpbml0aW9uIGFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBbGwgbWVzc2FnZXMgY29udGFpbiBvbmUgb3IgbW9yZSBwYXJ0cy4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBkZWZpbml0aW9uIGFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgbWVzc2FnZSBwYXJ0cywgV1NETCBmaWxlcywgbWVzc2FnZSBwYXJ0cyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgbWVzc2FnZSBwYXJ0cywgV1NETCBmaWxlcywgbWVzc2FnZSBwYXJ0cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkcGFydCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YWRkcGFydCI+PGEgbmFtZT0idGFkZHBhcnQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlPC9oMT4KLQotCi0KLTxkaXY+PHA+QWxsIG1lc3NhZ2VzIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFydHMuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbQotZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIGRlZmluaXRpb24KLWFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gYWRkIGEgcGFydCB0byBhIG1lc3NhZ2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIGFuIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IG9iamVjdCBhbmQKLWNsaWNrIDxzdHJvbmc+QWRkIFBhcnQ8L3N0cm9uZz4uPC9zcGFuPiBUaGUgcGFydCBpcyBhZGRlZCB0byB0aGUgaW5wdXQsIG91dHB1dCwKLW9yIGZhdWx0J3MgbWVzc2FnZSByZWZlcmVuY2UuIFRvIHNlbGVjdCB0aGUgcGFydCwgY2xpY2sgdGhlIHBhcnQgaW4gdGhlIHBvcnQKLXR5cGUgb2JqZWN0LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxzdHJvbmc+R2VuZXJhbDwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIHBhcnQuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+WW91ciBwYXJ0IGNhbiByZWZlciB0byBlaXRoZXIgYSA8c3Ryb25nPlR5cGU8L3N0cm9uZz4gb3IgYW4gPHN0cm9uZz5FbGVtZW50PC9zdHJvbmc+Ljwvc3Bhbj4KLSBTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiBhcyB0aGUgPHN0cm9uZz5SZWZlcmVuY2UgS2luZDwvc3Ryb25nPiAuCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPklmIHlvdSBzZWxlY3RlZCA8c3Ryb25nPlR5cGU8L3N0cm9uZz4sIHlvdSBub3cgaGF2ZSB0aGUgb3B0aW9uIG9mIHNlbGVjdGluZwotYW4gWE1MIHNjaGVtYSBkYXRhIHR5cGUgZnJvbSB0aGUgPHN0cm9uZz5UeXBlPC9zdHJvbmc+IGRyb3AgZG93biBsaXN0Ljwvc3Bhbj4gVGhlCi1saXN0IG9mIHR5cGVzIGNvbWVzIGZyb20gYW55IGF2YWlsYWJsZSByZWZlcmVuY2VkIFhNTCBzY2hlbWFzLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SWYgeW91IHNlbGVjdGVkIDxzdHJvbmc+RWxlbWVudDwvc3Ryb25nPiAsIHlvdSBub3cgaGF2ZSB0aGUgb3B0aW9uIG9mIHNlbGVjdGluZwotYW4gWE1MIHNjaGVtYSBlbGVtZW50IGZyb20gdGhlICA8c3Ryb25nPkVsZW1lbnQ8L3N0cm9uZz4gZHJvcCBkb3duIGxpc3QuPC9zcGFuPiBUaGUKLWxpc3Qgb2YgZWxlbWVudHMgY29tZXMgZnJvbSBhbnkgYXZhaWxhYmxlIHJlZmVyZW5jZWQgWE1MIHNjaGVtYXMuPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGRpdiBjbGFzcz0idGlwIj48c3BhbiBjbGFzcz0idGlwdGl0bGUiPlRpcDo8L3NwYW4+ICBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IHBhcnQgZm9yIHlvdXIgbWVzc2FnZQotdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gVW5kZXIgdGhlICA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+IGZvbGRlciwgcmlnaHQtY2xpY2sgeW91cgotZWxlbWVudCBhbmQgY2xpY2sgPHN0cm9uZz5BZGQgUGFydDwvc3Ryb25nPi4gWW91ciBwYXJ0IHdpbGwgYXV0b21hdGljYWxseSBhcHBlYXIgaW4KLXRoZSBPdXRsaW5lIHZpZXcgKHVuZGVyIHRoZSA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+IGZvbGRlciksIGJ1dCBpdCB3aWxsIG9ubHkgYXBwZWFyCi1pbiB0aGUgRGVzaWduIHZpZXcgaWYgdGhlIG1lc3NhZ2UgeW91IGFkZGVkIGl0IHRvIGN1cnJlbnRseSBkb2VzLjwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDY5ZjA4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkcG9ydCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzCi1mb3IgYSBiaW5kaW5nLiBUaGUgcG9ydCBjb250YWlucyBhICdiaW5kaW5nJyBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgYmluZGluZwotYW5kIGFuIGFkZHJlc3MgZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGVuZHBvaW50Ljwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIHBvcnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPnBvcnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5TZXJ2aWNlcyBhcmUgdXNlZCB0byBncm91cCBzZXRzIG9mIHJlbGF0ZWQgcG9ydHMgdG9nZXRoZXIuIFBvcnRzCi13aXRoaW4gYSBzZXJ2aWNlIGhhdmUgdGhlIGZvbGxvd2luZyByZWxhdGlvbnNoaXA6PC9wPjx1bD4KLTxsaT5Ob25lIG9mIHRoZSBwb3J0cyBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgKGZvciBleGFtcGxlLCB0aGUgb3V0cHV0Ci1vZiBvbmUgcG9ydCBpcyBub3QgdGhlIGlucHV0IG9mIGFub3RoZXIpLjwvbGk+Ci08bGk+SWYgYSBzZXJ2aWNlIGhhcyBzZXZlcmFsIHBvcnRzIHRoYXQgc2hhcmUgYSBwb3J0IHR5cGUsIGJ1dCBlbXBsb3kgZGlmZmVyZW50Ci1iaW5kaW5ncyBvciBhZGRyZXNzZXMsIHRoZSBwb3J0cyBhcmUgYWx0ZXJuYXRpdmVzLiBFYWNoIHBvcnQgcHJvdmlkZXMgc2VtYW50aWNhbGx5Ci1lcXVpdmFsZW50IGJlaGF2aW9yICh3aXRoaW4gdGhlIHRyYW5zcG9ydCBhbmQgbWVzc2FnZSBmb3JtYXQgbGltaXRhdGlvbnMgaW1wb3NlZAotYnkgZWFjaCBiaW5kaW5nKS48L2xpPgotPGxpPllvdSBjYW4gZGV0ZXJtaW5lIGEgc2VydmljZSdzIHBvcnQgdHlwZXMgYnkgZXhhbWluaW5nIGl0cyBwb3J0cy4gVXNpbmcKLXRoaXMgaW5mb3JtYXRpb24sIGEgdXNlciBjYW4gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gbWFjaGluZSBzdXBwb3J0cyBhbGwgdGhlCi1vcGVyYXRpb25zIG5lZWRlZCB0byBjb21wbGV0ZSBhIGdpdmVuIHRhc2suPC9saT4KLTwvdWw+PHA+VG8gYWRkIGEgcG9ydCB0byBhIHNlcnZpY2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB0aGUgc2VydmljZSB5b3Ugd2FudCB0byBhZGQgYSBwb3J0Ci10bywgdGhlbiBjbGljayA8Yj5BZGQgUG9ydC48L2I+IDwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RmlsbCBpbiB0aGUgPGI+TmFtZTwvYj4gZm9yIHRoZSBwb3J0LjwvY21kPjxpbmZvPlRoZSBuYW1lIG9mIHRoZQotcG9ydCBzaG91bGQgcHJvdmlkZSBpdCB3aXRoIGEgdW5pcXVlIG5hbWUgYW1vbmdzdCBhbGwgdGhlIHBvcnRzIGRlZmluZWQgd2l0aGluCi10aGUgc2VydmljZS48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgYSA8Yj5CaW5kaW5nPC9iPiBhbmQgPHVpY29udHJvbD5Qcm90b2NvbDwvdWljb250cm9sPiBmb3IKLXRoZSBwb3J0LCBhbmQgZW50ZXIgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvcnQgaW50byB0aGUgPHVpY29udHJvbD5BZGRyZXNzPC91aWNvbnRyb2w+IGZpZWxkLgotQ2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9jbWQ+PGluZm8+VG8gc2VsZWN0IHRoZSBuZXcgcG9ydCwgY2xpY2sKLXRoZSBwb3J0IGluIHRoZSBzZXJ2aWNlIG9iamVjdC4gWW91IGNhbiBjaGFuZ2UgdGhlIGluZm9ybWF0aW9uIHlvdSBlbnRlcmVkCi1hYm91dCB0aGlzIHBvcnQgYW55IHRpbWUgaW4gdGhlIDx1aWNvbnRyb2w+R2VuZXJhbDwvdWljb250cm9sPiBwYW5lLjwvaW5mbz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZCBpbgotdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUgb2YgdGhlIFByb3BlcnRpZXMgdmlldy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlRvIG1hbmFnZSBleHRlbnNpb25zLCBjbGljayB0aGUgPGI+RXh0ZW5zaW9uczwvYj4gcGFuZS4gWW91IGNhbgotZWl0aGVyIGFkZCwgc29ydCwgb3IgcmVtb3ZlIGV4dGVuc2lvbnMuIDwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPllvdSBjYW4gY3JlYXRlIGEgbmV3IGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgcmUtdXNlIGFuIGV4aXN0aW5nCi1vbmUsIG9yIGltcG9ydCBvbmUuIEEgPGI+QmluZGluZzwvYj4gZGVmaW5lcyB0aGUgbWVzc2FnZSBmb3JtYXQgYW5kIHByb3RvY29sCi1kZXRhaWxzIGZvciBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuIEZvcgotbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDx4cmVmIGZvcm1hdD0iZGl0YSIgaHJlZj0idHNldGJpbmQuZGl0YSIgc2NvcGU9ImxvY2FsIj5TZXR0aW5nCi1hIGJpbmRpbmc8L3hyZWY+IC48L3A+PHA+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIHBvcnQgdXNpbmcgdGhlIE91dGxpbmUgdmlldwotYnkgcmlnaHQtY2xpY2tpbmcgeW91ciBzZXJ2aWNlIHVuZGVyIHRoZSA8Yj5TZXJ2aWNlczwvYj4gZm9sZGVyIGFuZCBjbGlja2luZyA8Yj5BZGQKLVBvcnQ8L2I+LiBZb3VyIHBvcnQgKHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggdmlldyB5b3UgY3JlYXRlIGl0IGluKSB3aWxsIGFwcGVhcgotaW4gYm90aCB0aGUgRGVzaWduIHZpZXcgYW5kIHRoZSBPdXRsaW5lIHZpZXcuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTg3NzhhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLiBUaGUgcG9ydCBjb250YWlucyBhICdiaW5kaW5nJyBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgYmluZGluZyBhbmQgYW4gYWRkcmVzcyBlbGVtZW50IHRoYXQgcHJvdmlkZXMgYSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZW5kcG9pbnQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzIGZvciBhIGJpbmRpbmcuIFRoZSBwb3J0IGNvbnRhaW5zIGEgJ2JpbmRpbmcnIGF0dHJpYnV0ZSB0aGF0IHJlZmVyZW5jZXMgYSBiaW5kaW5nIGFuZCBhbiBhZGRyZXNzIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBlbmRwb2ludC4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIHBvcnRzLCBXU0RMIGZpbGVzLCBwb3J0cyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgcG9ydHMsIFdTREwgZmlsZXMsIHBvcnRzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhZGRwb3J0IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRwb3J0Ij48YSBuYW1lPSJ0YWRkcG9ydCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2U8L2gxPgotCi0KLQotPGRpdj48cD5BIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcwotZm9yIGEgYmluZGluZy4gVGhlIHBvcnQgY29udGFpbnMgYSAnYmluZGluZycgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcyBhIGJpbmRpbmcKLWFuZCBhbiBhZGRyZXNzIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBlbmRwb2ludC48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlNlcnZpY2VzIGFyZSB1c2VkIHRvIGdyb3VwIHNldHMgb2YgcmVsYXRlZCBwb3J0cyB0b2dldGhlci4gUG9ydHMKLXdpdGhpbiBhIHNlcnZpY2UgaGF2ZSB0aGUgZm9sbG93aW5nIHJlbGF0aW9uc2hpcDo8L3A+Ci08dWw+Ci08bGk+Tm9uZSBvZiB0aGUgcG9ydHMgY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyIChmb3IgZXhhbXBsZSwgdGhlIG91dHB1dAotb2Ygb25lIHBvcnQgaXMgbm90IHRoZSBpbnB1dCBvZiBhbm90aGVyKS48L2xpPgotCi08bGk+SWYgYSBzZXJ2aWNlIGhhcyBzZXZlcmFsIHBvcnRzIHRoYXQgc2hhcmUgYSBwb3J0IHR5cGUsIGJ1dCBlbXBsb3kgZGlmZmVyZW50Ci1iaW5kaW5ncyBvciBhZGRyZXNzZXMsIHRoZSBwb3J0cyBhcmUgYWx0ZXJuYXRpdmVzLiBFYWNoIHBvcnQgcHJvdmlkZXMgc2VtYW50aWNhbGx5Ci1lcXVpdmFsZW50IGJlaGF2aW9yICh3aXRoaW4gdGhlIHRyYW5zcG9ydCBhbmQgbWVzc2FnZSBmb3JtYXQgbGltaXRhdGlvbnMgaW1wb3NlZAotYnkgZWFjaCBiaW5kaW5nKS48L2xpPgotCi08bGk+WW91IGNhbiBkZXRlcm1pbmUgYSBzZXJ2aWNlJ3MgcG9ydCB0eXBlcyBieSBleGFtaW5pbmcgaXRzIHBvcnRzLiBVc2luZwotdGhpcyBpbmZvcm1hdGlvbiwgYSB1c2VyIGNhbiBkZXRlcm1pbmUgaWYgYSBnaXZlbiBtYWNoaW5lIHN1cHBvcnRzIGFsbCB0aGUKLW9wZXJhdGlvbnMgbmVlZGVkIHRvIGNvbXBsZXRlIGEgZ2l2ZW4gdGFzay48L2xpPgotCi08L3VsPgotPHA+VG8gYWRkIGEgcG9ydCB0byBhIHNlcnZpY2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB0aGUgc2VydmljZSB5b3Ugd2FudCB0byBhZGQgYSBwb3J0Ci10bywgdGhlbiBjbGljayA8c3Ryb25nPkFkZCBQb3J0Ljwvc3Ryb25nPiA8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5GaWxsIGluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZm9yIHRoZSBwb3J0Ljwvc3Bhbj4gVGhlIG5hbWUgb2YgdGhlCi1wb3J0IHNob3VsZCBwcm92aWRlIGl0IHdpdGggYSB1bmlxdWUgbmFtZSBhbW9uZ3N0IGFsbCB0aGUgcG9ydHMgZGVmaW5lZCB3aXRoaW4KLXRoZSBzZXJ2aWNlLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IGEgPHN0cm9uZz5CaW5kaW5nPC9zdHJvbmc+IGFuZCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm90b2NvbDwvc3Bhbj4gZm9yCi10aGUgcG9ydCwgYW5kIGVudGVyIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3J0IGludG8gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZHJlc3M8L3NwYW4+IGZpZWxkLgotQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi48L3NwYW4+IFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQsIGNsaWNrCi10aGUgcG9ydCBpbiB0aGUgc2VydmljZSBvYmplY3QuIFlvdSBjYW4gY2hhbmdlIHRoZSBpbmZvcm1hdGlvbiB5b3UgZW50ZXJlZAotYWJvdXQgdGhpcyBwb3J0IGFueSB0aW1lIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmFsPC9zcGFuPiBwYW5lLgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB5b3Ugd2FudCB0aGUgdXNlciB0byByZWFkIGluCi10aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUgb2YgdGhlIFByb3BlcnRpZXMgdmlldy48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UbyBtYW5hZ2UgZXh0ZW5zaW9ucywgY2xpY2sgdGhlIDxzdHJvbmc+RXh0ZW5zaW9uczwvc3Ryb25nPiBwYW5lLiBZb3UgY2FuCi1laXRoZXIgYWRkLCBzb3J0LCBvciByZW1vdmUgZXh0ZW5zaW9ucy4gPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgbmV3IGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgcmUtdXNlIGFuIGV4aXN0aW5nCi1vbmUsIG9yIGltcG9ydCBvbmUuIEEgPHN0cm9uZz5CaW5kaW5nPC9zdHJvbmc+IGRlZmluZXMgdGhlIG1lc3NhZ2UgZm9ybWF0IGFuZCBwcm90b2NvbAotZGV0YWlscyBmb3Igb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBGb3IKLW1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPSJ0c2V0YmluZC5kaXRhIj5TZXR0aW5nIGEgYmluZGluZzwvYT4gLjwvcD4KLTxwPllvdSBjYW4gYWxzbyBjcmVhdGUgYSBwb3J0IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcKLWJ5IHJpZ2h0LWNsaWNraW5nIHlvdXIgc2VydmljZSB1bmRlciB0aGUgPHN0cm9uZz5TZXJ2aWNlczwvc3Ryb25nPiBmb2xkZXIgYW5kIGNsaWNraW5nIDxzdHJvbmc+QWRkCi1Qb3J0PC9zdHJvbmc+LiBZb3VyIHBvcnQgKHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggdmlldyB5b3UgY3JlYXRlIGl0IGluKSB3aWxsIGFwcGVhcgotaW4gYm90aCB0aGUgRGVzaWduIHZpZXcgYW5kIHRoZSBPdXRsaW5lIHZpZXcuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTNmMjI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkc3J2YyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBzZXJ2aWNlPC90aXRsZT4KLTxzaG9ydGRlc2M+VGhlICA8c3lzdGVtb3V0cHV0PnNlcnZpY2U8L3N5c3RlbW91dHB1dD4gZWxlbWVudCBpcyBhIGNvbGxlY3Rpb24KLW9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIHNlcnZpY2VzIHRvIFdTREw8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETCBmaWxlczxpbmRleHRlcm0+c2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGNyZWF0ZSBhIG5ldyBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgaW4gYW55IGJsYW5rIHNwYWNlIGFuZCBjbGljayA8Yj5BZGQKLVNlcnZpY2U8L2I+LiBUbyBzZWxlY3QgdGhlIG5ldyBzZXJ2aWNlLCBjbGljayB0aGUgc2VydmljZSBvYmplY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS4gSW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLAotdHlwZSB0aGUgbmFtZSBvZiB0aGUgc2VydmljZS48L2NtZD48aW5mbz5UaGUgbmFtZSBvZiB0aGUgc2VydmljZSBwcm92aWRlcwotaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBzZXJ2aWNlcyBkZWZpbmVkIHdpdGhpbiBpbiB0aGUgZW5jbG9zaW5nCi1XU0RMIGRvY3VtZW50LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VG8gbWFuYWdlIGV4dGVuc2lvbnMsIGNsaWNrIHRoZSA8Yj5FeHRlbnNpb25zPC9iPiBwYW5lLiBZb3UgY2FuCi1laXRoZXIgYWRkLCBzb3J0LCBvciByZW1vdmUgZXh0ZW5zaW9ucy48ZHJhZnQtY29tbWVudD4gUmVmZXIgdG8gdGhlIHJlbGF0ZWQKLXRhc2tzIGZvciBtb3JlIGRldGFpbHMuIEFkZCBsaW5rIHRvIHRoZSBYU0QgRWRpdG9yIHBsdWdpbiB0b3BpYyBmb3IgIkFkZGluZwotZXh0ZW5zaW9uIGNvbXBvbmVudHMiPC9kcmFmdC1jb21tZW50PjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5UaXA8L2I+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgc2VydmljZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3Ci1ieSByaWdodC1jbGlja2luZyB0aGUgPGI+U2VydmljZXM8L2I+IGZvbGRlciBhbmQgY2xpY2tpbmcgPGI+QWRkIFNlcnZpY2U8L2I+LjwvcD48cD5Zb3UKLWNhbiBub3cgYWRkIGEgcG9ydCB0byB5b3VyIHNlcnZpY2UuIEEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQKLWJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5MzEwNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBzZXJ2aWNlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgc2VydmljZXMgdG8gV1NETCwgV1NETCBmaWxlcywgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBzZXJ2aWNlcyB0byBXU0RMLCBXU0RMIGZpbGVzLCBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkc3J2YyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIHNlcnZpY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRzcnZjIj48YSBuYW1lPSJ0YWRkc3J2YyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgc2VydmljZTwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPnNlcnZpY2U8L3R0PiBlbGVtZW50IGlzIGEgY29sbGVjdGlvbgotb2YgcmVsYXRlZCBwb3J0cyBhbmQgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2VydmljZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhIG5ldyBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgaW4gYW55IGJsYW5rIHNwYWNlIGFuZCBjbGljayA8c3Ryb25nPkFkZAotU2VydmljZTwvc3Ryb25nPi4gVG8gc2VsZWN0IHRoZSBuZXcgc2VydmljZSwgY2xpY2sgdGhlIHNlcnZpY2Ugb2JqZWN0Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS4gSW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwKLXR5cGUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UuPC9zcGFuPiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSBwcm92aWRlcwotaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBzZXJ2aWNlcyBkZWZpbmVkIHdpdGhpbiBpbiB0aGUgZW5jbG9zaW5nCi1XU0RMIGRvY3VtZW50LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZpY2UgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZAotaW4gdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlRvIG1hbmFnZSBleHRlbnNpb25zLCBjbGljayB0aGUgPHN0cm9uZz5FeHRlbnNpb25zPC9zdHJvbmc+IHBhbmUuIFlvdSBjYW4KLWVpdGhlciBhZGQsIHNvcnQsIG9yIHJlbW92ZSBleHRlbnNpb25zLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHN0cm9uZz5UaXA8L3N0cm9uZz46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBzZXJ2aWNlIHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcKLWJ5IHJpZ2h0LWNsaWNraW5nIHRoZSA8c3Ryb25nPlNlcnZpY2VzPC9zdHJvbmc+IGZvbGRlciBhbmQgY2xpY2tpbmcgPHN0cm9uZz5BZGQgU2VydmljZTwvc3Ryb25nPi48L3A+Ci08cD5Zb3UKLWNhbiBub3cgYWRkIGEgcG9ydCB0byB5b3VyIHNlcnZpY2UuIEEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQKLWJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkYWZmNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGNydGltcHQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudDwvdGl0bGU+Ci08c2hvcnRkZXNjPlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yCi1YTUwgc2NoZW1hcyBpbnRvIHlvdXIgV1NETCBkb2N1bWVudC4gVGhpcyBlbmFibGVzIHlvdSB0byBoYXZlIG1vcmUgbW9kdWxhcgotV1NETCBkb2N1bWVudHMuIFRoZSB1c2Ugb2YgdGhlIDxiPmltcG9ydDwvYj4gc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbgotb2YgdGhlIGRpZmZlcmVudCBlbGVtZW50cyBvZiBhIHNlcnZpY2UgZGVmaW5pdGlvbiBpbnRvIGluZGVwZW5kZW50IGRvY3VtZW50cywKLXdoaWNoIGNhbiB0aGVuIGJlIGltcG9ydGVkIGFzIG5lZWRlZC4gVGhpcyB0ZWNobmlxdWUgaGVscHMgaW4gd3JpdGluZyBjbGVhcmVyCi1zZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwKLW9mIGFic3RyYWN0aW9uLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPmltcG9ydCBzdGF0ZW1lbnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGNyZWF0ZSBhbiBpbXBvcnQgc3RhdGVtZW50LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBPdXRsaW5lIHZpZXcsIHJpZ2h0LWNsaWNrIHRoZSA8Yj5JbXBvcnRzPC9iPiBmb2xkZXIgYW5kCi1jbGljayA8Yj5BZGQgSW1wb3J0LjwvYj4gU2VsZWN0IHlvdXIgbmV3IGltcG9ydCBzdGF0ZW1lbnQuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrIHRoZSBpY29uIHRvIHRoZSByaWdodCBvZiB0aGUgPGI+TG9jYXRpb248L2I+IGZpZWxkIHRvIG9wZW4KLXRoZSBTZWxlY3QgRmlsZSB3aW5kb3cuPHVpY29udHJvbD48L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgYSBXU0RMIGZpbGUgb3IgWE1MIFNjaGVtYSB0byBpbXBvcnQgYnkgZG9pbmcgb25lIG9mIHRoZQotZm9sbG93aW5nOjwvY21kPjxpbmZvPjx1bD4KLTxsaT5TZWxlY3QgYSBmaWxlIGZyb20gYW5vdGhlciBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UgaW4gdGhlIDx1aWNvbnRyb2w+V29ya3NwYWNlCi1GaWxlczwvdWljb250cm9sPiBzZWN0aW9uLjwvbGk+Ci08bGk+Q2xpY2sgPHVpY29udHJvbD5JbXBvcnQgRmlsZXM8L3VpY29udHJvbD4gYW5kIHRoZW4gPHVpY29udHJvbD5Ccm93c2U8L3VpY29udHJvbD4gdG8KLWZpbmQgYW5kIHNlbGVjdCBmaWxlcyBvdXRzaWRlIHRoZSB3b3Jrc3BhY2UuIENsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+IGFmdGVyCi1jb21wbGV0aW5nIHRoaXMgSW1wb3J0IHdpemFyZC48L2xpPgotPC91bD5DbGljayA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbXBvcnQgc3RhdGVtZW50IHlvdSB3YW50IHRoZSB1c2VyCi10byByZWFkIGluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0Pk9uY2UgeW91IHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudCB5b3Ugd2lzaCB0byBpbXBvcnQsCi10aGUgaW1wb3J0IG9iamVjdCdzIGxhYmVsIGNoYW5nZXMgdG8gcmVmbGVjdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiBJbXBvcnRlZAotV1NETCBjb21wb25lbnRzIG1heSBub3cgYmUgdmlzaWJsZSB3aXRoaW4gdGhlIGVkaXRvci48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E3ZjljMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yIFhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyIFdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIG9mIGEgc2VydmljZSBkZWZpbml0aW9uIGludG8gaW5kZXBlbmRlbnQgZG9jdW1lbnRzLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlciBzZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yIFhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyIFdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIG9mIGEgc2VydmljZSBkZWZpbml0aW9uIGludG8gaW5kZXBlbmRlbnQgZG9jdW1lbnRzLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlciBzZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBpbXBvcnQgc3RhdGVtZW50cywgV1NETCBmaWxlcywgaW1wb3J0IHN0YXRlbWVudHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzLCBXU0RMIGZpbGVzLCBpbXBvcnQgc3RhdGVtZW50cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0Y3J0aW1wdCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjcnRpbXB0Ij48YSBuYW1lPSJ0Y3J0aW1wdCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudDwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yCi1YTUwgc2NoZW1hcyBpbnRvIHlvdXIgV1NETCBkb2N1bWVudC4gVGhpcyBlbmFibGVzIHlvdSB0byBoYXZlIG1vcmUgbW9kdWxhcgotV1NETCBkb2N1bWVudHMuIFRoZSB1c2Ugb2YgdGhlIDxzdHJvbmc+aW1wb3J0PC9zdHJvbmc+IHN0YXRlbWVudCBhbGxvd3MgdGhlIHNlcGFyYXRpb24KLW9mIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMgb2YgYSBzZXJ2aWNlIGRlZmluaXRpb24gaW50byBpbmRlcGVuZGVudCBkb2N1bWVudHMsCi13aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlcgotc2VydmljZSBkZWZpbml0aW9ucywgYnkgc2VwYXJhdGluZyB0aGUgZGVmaW5pdGlvbnMgYWNjb3JkaW5nIHRvIHRoZWlyIGxldmVsCi1vZiBhYnN0cmFjdGlvbi48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhbiBpbXBvcnQgc3RhdGVtZW50LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBPdXRsaW5lIHZpZXcsIHJpZ2h0LWNsaWNrIHRoZSA8c3Ryb25nPkltcG9ydHM8L3N0cm9uZz4gZm9sZGVyIGFuZAotY2xpY2sgPHN0cm9uZz5BZGQgSW1wb3J0Ljwvc3Ryb25nPiBTZWxlY3QgeW91ciBuZXcgaW1wb3J0IHN0YXRlbWVudC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgdGhlIGljb24gdG8gdGhlIHJpZ2h0IG9mIHRoZSA8c3Ryb25nPkxvY2F0aW9uPC9zdHJvbmc+IGZpZWxkIHRvIG9wZW4KLXRoZSBTZWxlY3QgRmlsZSB3aW5kb3cuPHNwYW4gY2xhc3M9InVpY29udHJvbCIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IGEgV1NETCBmaWxlIG9yIFhNTCBTY2hlbWEgdG8gaW1wb3J0IGJ5IGRvaW5nIG9uZSBvZiB0aGUKLWZvbGxvd2luZzo8L3NwYW4+IDx1bD4KLTxsaT5TZWxlY3QgYSBmaWxlIGZyb20gYW5vdGhlciBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UgaW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldvcmtzcGFjZQotRmlsZXM8L3NwYW4+IHNlY3Rpb24uPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydCBGaWxlczwvc3Bhbj4gYW5kIHRoZW4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnJvd3NlPC9zcGFuPiB0bwotZmluZCBhbmQgc2VsZWN0IGZpbGVzIG91dHNpZGUgdGhlIHdvcmtzcGFjZS4gQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPiBhZnRlcgotY29tcGxldGluZyB0aGlzIEltcG9ydCB3aXphcmQuPC9saT4KLQotPC91bD4KLUNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbXBvcnQgc3RhdGVtZW50IHlvdSB3YW50IHRoZSB1c2VyCi10byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+T25jZSB5b3Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50IHlvdSB3aXNoIHRvIGltcG9ydCwKLXRoZSBpbXBvcnQgb2JqZWN0J3MgbGFiZWwgY2hhbmdlcyB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIEltcG9ydGVkCi1XU0RMIGNvbXBvbmVudHMgbWF5IG5vdyBiZSB2aXNpYmxlIHdpdGhpbiB0aGUgZWRpdG9yLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5YTdjMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGNydHR5cGUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGU8L3RpdGxlPgotPHNob3J0ZGVzYz5UeXBlcyBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nIFdTREwgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETCBmaWxlczxpbmRleHRlcm0+dHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPldTREwgYWxsb3dzIHR5cGUgc3lzdGVtcyB0byBiZSBhZGRlZCB2aWEgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLUFuIGV4dGVuc2liaWxpdHkgZWxlbWVudCBtYXkgYXBwZWFyIHVuZGVyIHRoZSAgPGI+dHlwZXM8L2I+IGVsZW1lbnQgdG8gaWRlbnRpZnkKLXRoZSB0eXBlIGRlZmluaXRpb24gc3lzdGVtIGJlaW5nIHVzZWQgYW5kIHRvIHByb3ZpZGUgYW4gWE1MIGNvbnRhaW5lciBlbGVtZW50Ci1mb3IgdGhlIHR5cGUgZGVmaW5pdGlvbnMuPC9wPjxwPlRvIGFkZCBhbiBYU0QgdHlwZSBvciBlbGVtZW50IHRvIHlvdXIgV1NETAotZmlsZTogPC9wPjwvY29udGV4dD4KLTxzdGVwcy11bm9yZGVyZWQ+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIGFycm93IGljb24gdG8gdGhlIHJpZ2h0IG9mIHRoZSBwb3J0Ci10eXBlIG9iamVjdCB0byBvcGVuIHRoYXQgb3BlcmF0aW9uIGluIHRoZSBYTUwgc2NoZW1hIGVkaXRvci48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzLXVub3JkZXJlZD4KLTxyZXN1bHQ+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgWE1MIHNjaGVtYXMsIHNlZSB0aGUgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LnhzZGVkaXRvci5kb2MudXNlci90b3BpY3MvY3htbHNjZWQuZGl0YSIgc2NvcGU9InBlZXIiPlhNTAotc2NoZW1hIGVkaXRvciBkb2N1bWVudGF0aW9uPC94cmVmPiBmb3IgbGlua3MgdG8gb25saW5lIHJlc291cmNlcy48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYTI0NDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVHlwZXMgZGVzY3JpYmUgYWxsIHRoZSBkYXRhIHR5cGVzIHVzZWQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuIFdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUgVzNDIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiBhcyBpdHMgZGVmYXVsdCBjaG9pY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlR5cGVzIGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLiBXU0RMIGlzIG5vdCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIGEgc3BlY2lmaWMgdHlwaW5nIHN5c3RlbSwgYnV0IGl0IHVzZXMgdGhlIFczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgY3JlYXRpbmcgV1NETCB0eXBlcywgV1NETCBmaWxlcywgdHlwZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGNyZWF0aW5nIFdTREwgdHlwZXMsIFdTREwgZmlsZXMsIHR5cGVzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRjcnR0eXBlIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjcnR0eXBlIj48YSBuYW1lPSJ0Y3J0dHlwZSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGU8L2gxPgotCi0KLQotPGRpdj48cD5UeXBlcyBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V1NETCBhbGxvd3MgdHlwZSBzeXN0ZW1zIHRvIGJlIGFkZGVkIHZpYSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotQW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG1heSBhcHBlYXIgdW5kZXIgdGhlICA8c3Ryb25nPnR5cGVzPC9zdHJvbmc+IGVsZW1lbnQgdG8gaWRlbnRpZnkKLXRoZSB0eXBlIGRlZmluaXRpb24gc3lzdGVtIGJlaW5nIHVzZWQgYW5kIHRvIHByb3ZpZGUgYW4gWE1MIGNvbnRhaW5lciBlbGVtZW50Ci1mb3IgdGhlIHR5cGUgZGVmaW5pdGlvbnMuPC9wPgotPHA+VG8gYWRkIGFuIFhTRCB0eXBlIG9yIGVsZW1lbnQgdG8geW91ciBXU0RMCi1maWxlOiA8L3A+Ci08L2Rpdj4KLQotCi08ZGl2IGNsYXNzPSJwIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBhcnJvdyBpY29uIHRvIHRoZSByaWdodCBvZiB0aGUgcG9ydAotdHlwZSBvYmplY3QgdG8gb3BlbiB0aGF0IG9wZXJhdGlvbiBpbiB0aGUgWE1MIHNjaGVtYSBlZGl0b3IuPC9zcGFuPjwvZGl2PgotCi0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFhNTCBzY2hlbWFzLCBzZWUgdGhlIDxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC54c2RlZGl0b3IuZG9jLnVzZXIvdG9waWNzL2N4bWxzY2VkLmRpdGEiPlhNTCBzY2hlbWEgZWRpdG9yIGRvY3VtZW50YXRpb248L2E+IGZvciBsaW5rcyB0byBvbmxpbmUgcmVzb3VyY2VzLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5MmE3MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGNydHdzZGwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC90aXRsZT4KLTxzaG9ydGRlc2M+WW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMCi1lZGl0b3IuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPmNyZWF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Y3JlYXRpbmcgV1NETCBmaWxlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBjcmVhdGUgYSBXU0RMIGZpbGUsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+Q3JlYXRlIGEgcHJvamVjdCB0byBjb250YWluIHRoZSBXU0RMIGRvY3VtZW50LjwvY21kPjxpbmZvPkl0IGRvZXMKLW5vdCBtYXR0ZXIgd2hhdCBraW5kIG9mIHByb2plY3QgeW91IGNyZWF0ZS48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgd29ya2JlbmNoLCBjbGljayA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5GaWxlPC91aWNvbnRyb2w+Ci08dWljb250cm9sPk5ldzwvdWljb250cm9sPjx1aWNvbnRyb2w+T3RoZXI8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiBhbmQgc2VsZWN0IDxtZW51Y2FzY2FkZT4KLTx1aWNvbnRyb2w+V2ViIFNlcnZpY2VzPC91aWNvbnRyb2w+PHVpY29udHJvbD5XU0RMPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4uPC9jbWQ+Ci08aW5mbz5DbGljayA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSBwcm9qZWN0IG9yIGZvbGRlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgV1NETCBmaWxlLjwvY21kPgotPGluZm8+SW4gdGhlICA8dWljb250cm9sPkZpbGUgbmFtZTwvdWljb250cm9sPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUKLVdTREwgZmlsZS4gVGhlIG5hbWUgb2YgeW91ciBYTUwgZmlsZSBtdXN0IGVuZCBpbiAgPHN5c3RlbW91dHB1dD4ud3NkbDwvc3lzdGVtb3V0cHV0PjwvaW5mbz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPiBhbmQgZW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbgotb24gdGhlIG5leHQgcGFnZSBvZiB0aGUgd2l6YXJkOjwvY21kPgotPHN1YnN0ZXBzPgotPHN1YnN0ZXA+PGNtZD5BIDx1aWNvbnRyb2w+VGFyZ2V0IG5hbWVzcGFjZTwvdWljb250cm9sPiBmb3IgdGhlIFdTREwgZmlsZQotb3IgYWNjZXB0IHRoZSBkZWZhdWx0ICg8Y29kZXBoPmh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvPGk+TXlXU0RMRmlsZTwvaT4vPC9jb2RlcGg+KS48L2NtZD4KLTxpbmZvPlRoZSB0YXJnZXQgbmFtZXNwYWNlIGlzIHVzZWQgZm9yIHRoZSBuYW1lcyBvZiBtZXNzYWdlcyBhbmQgdGhlIHBvcnQKLXR5cGUsIGJpbmRpbmcgYW5kIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgV1NETCBmaWxlLiBUaGUgdmFsdWUgbXVzdCB0YWtlIHRoZQotZm9ybSBvZiBhIHZhbGlkIFVSSSAoZm9yIGV4YW1wbGUsIDxjb2RlcGg+aHR0cDovL3d3dy5teWNvbXBhbnkuY29tL215c2VydmljZS88L2NvZGVwaD4pPC9pbmZvPgotPC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5UaGUgPHVpY29udHJvbD5QcmVmaXg8L3VpY29udHJvbD4gYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQKLW5hbWVzcGFjZS48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCA8dWljb250cm9sPkNyZWF0ZSBXU0RMIFNrZWxldG9uPC91aWNvbnRyb2w+IGlmIHlvdSB3YW50Ci10aGUgd2l6YXJkIHRvIGNyZWF0ZSB0aGUgc2tlbGV0b24gb2YgdGhlIFdTREwgZmlsZS48L2NtZD48aW5mbz5UaGlzIHdpbGwgZ2VuZXJhdGUKLXRoZSBXU0RMIGVsZW1lbnRzIHJlcXVpcmVkIGZvciB5b3VyIHNlcnZpY2UsIGluY2x1ZGluZyBiaW5kaW5ncywgcG9ydHMgYW5kCi1tZXNzYWdlcy4gWW91IGNhbiB0aGVuIG1vZGlmeSB0aGVzZSB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgeW91ciBXZWIgc2VydmljZQotLjwvaW5mbz48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPklmIHlvdSBoYXZlIGNob3NlbiB0byBjcmVhdGUgYSBXU0RMIHNrZWxldG9uLCBzZWxlY3QgdGhlIGJpbmRpbmcKLW9wdGlvbnMgeW91IHdhbnQgdG8gdXNlIGluIHRoZSA8dWljb250cm9sPlByb3RvY29sPC91aWNvbnRyb2w+IGRyb3AgZG93bi4KLVRoZSBvcHRpb25zIGFyZSBTT0FQIGFuZCBIVFRQLiBVc2UgdGhlIFNPQVAgcHJvdG9jb2wgd2hlbiB5b3Ugd2FudCB0byBleGNoYW5nZQotc3RydWN0dXJlZCBhbmQgdHlwZWQgaW5mb3JtYXRpb24uIFVzZSB0aGUgSFRUUCBwcm90b2NvbCB3aGVuIHlvdSB3YW50IHlvdXIKLWFwcGxpY2F0aW9uIGNsaWVudCB0byBqdXN0IHJlcXVlc3Qgb3IgdXBkYXRlIGluZm9ybWF0aW9uLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+PC9jbWQ+PGluZm8+SWYgeW91IHNlbGVjdCBTT0FQIHlvdSBjYW4gdGhlbiBzZWxlY3QgdGhlIGVuY29kaW5nCi1zdHlsZSB5b3Ugd2FudCB0byB1c2U6PHVsPgotPGxpPjx1aWNvbnRyb2w+ZG9jdW1lbnQgbGl0ZXJhbDwvdWljb250cm9sPi4gRG9jdW1lbnQgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwKLWVuY29kaW5nLiBVc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc2VuZCBTT0FQIG1lc3NhZ2VzIHRoYXQKLWNhbiBiZSB2YWxpZGF0ZWQgYnkgYW4gWE1MIHZhbGlkYXRvci4gIEFsbCB0aGUgZGF0YSB0eXBlcyBpbiB0aGUgU09BUCBtZXNzYWdlCi1ib2R5IGFyZSBkZWZpbmVkIGluIGEgc2NoZW1hLCBzbyB0aGUgV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIHNjaGVtYSBlbGVtZW50cy4gPC9saT4KLTxsaT48dWljb250cm9sPnJwYyBsaXRlcmFsPC91aWNvbnRyb2w+LiBSUEMgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwgZW5jb2RpbmcuCi1Vc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgb3BlcmF0aW9uIG1ldGhvZCBuYW1lcwotaW4geW91ciBTT0FQIG1lc3NhZ2VzIHNvIGEgc2VydmVyIGNhbiBkaXNwYXRjaCB0aGUgc3BlY2lmaWVkIG1ldGhvZHMuICBEYXRhCi10eXBlcyBtdXN0IGJlIGRlZmluZWQsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gWFNEIHR5cGVzLjwvbGk+Ci08bGk+PHVpY29udHJvbD5ycGMgZW5jb2RlZDwvdWljb250cm9sPi4gUlBDIHN0eWxlIG1lc3NhZ2VzIGFuZCBTT0FQIGVuY29kaW5nLgotVXNlIHRoaXMgc3R5bGUgb2YgYmluZGluZyB3aGVuIHlvdSB3YW50IHRvIGVuY29kZSBkYXRhIGdyYXBocyBpbiB5b3VyIFNPQVAKLW1lc3NhZ2VzIHNvIGEgc2VydmVyIGNhbiBkZXNlcmlhbGl6ZSB0aGUgb2JqZWN0IGRhdGEuICBEYXRhIHR5cGVzIG11c3QgYmUKLWRlZmluZWQsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gWFNEIHR5cGVzLjwvbGk+Ci08L3VsPjwvaW5mbz48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPjwvY21kPjxpbmZvPklmIHlvdSBzZWxlY3QgSFRUUCB5b3UgY2FuIHNlbGVjdCB3aGV0aGVyIHRvIGNyZWF0ZQotYW4gSFRUUCBnZXR0ZXIgb3Igc2V0dGVyLjx1bD4KLTxsaT48dWljb250cm9sPkhUVFAgR0VUPC91aWNvbnRyb2w+LiBBIEdFVCByZXF1ZXN0IGZldGNoZXMgZGF0YSBmcm9tIGEgV2ViCi1zZXJ2ZXIgYmFzZWQgb24gYW4gVVJMIHZhbHVlIGFuZCBhIHNldCBvZiBIVFRQIGhlYWRlcnMuIFVzZSB0aGlzIG1ldGhvZCB3aGVuCi15b3Ugd2FudCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QuIDwvbGk+Ci08bGk+PHVpY29udHJvbD5IVFRQIFBPU1Q8L3VpY29udHJvbD4uIEEgUE9TVCByZXF1ZXN0IHNlbmRzIGFkZGl0aW9uYWwgZGF0YQotdG8gdGhlIHNlcnZlciwgc3BlY2lmaWVkIGFmdGVyIHRoZSBVUkwgYW5kIHRoZSBoZWFkZXJzLiBVc2UgdGhpcyBtZXRob2Qgd2hlbgoteW91IHdhbnQgdG8gc2VuZCBkYXRhIGVuY2xvc2VkIGluIHRoZSBib2R5IG9mIHRoZSByZXF1ZXN0LjwvbGk+Ci08L3VsPjwvaW5mbz48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9jbWQ+PGluZm8+VGhlIFdTREwgZmlsZQotb3BlbnMgaW4gdGhlIFdTREwgZWRpdG9yLjwvaW5mbz48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5JZiB5b3UgY3JlYXRlZCBhIFdTREwgZmlsZSB3aXRoIGEgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncywKLWl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzo8L3A+PHA+PGltYWdlIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIFNPQVAgYmluZGluZ3MiCi1ocmVmPSIuLi9pbWFnZXMvc29hcHNrZWwuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvcD48cD5JZiB5b3UgY3JlYXRlZAotYSBXU0RMIGZpbGUgd2l0aCBhIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MsIGl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8KLXRoZSBmb2xsb3dpbmc6PC9wPjxwPjxpbWFnZSBhbHQ9IkltYWdlIG9mIGEgV1NETCBza2VsZXRvbiB1c2luZyBIVFRQIGJpbmRpbmdzIgotaHJlZj0iLi4vaW1hZ2VzL2h0dHBza2VsLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0aW1wd3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZlOTA4Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCBmaWxlcywgY3JlYXRpbmcsIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcgV1NETCBmaWxlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwgZmlsZXMsIGNyZWF0aW5nLCBXZWIgc2VydmljZXMsIGNyZWF0aW5nIFdTREwgZmlsZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0aW1wd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRjcnR3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0Y3J0d3NkbCI+PGEgbmFtZT0idGNydHdzZGwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvaDE+Ci0KLQotCi08ZGl2PjxwPllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETAotZWRpdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gY3JlYXRlIGEgV1NETCBmaWxlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNyZWF0ZSBhIHByb2plY3QgdG8gY29udGFpbiB0aGUgV1NETCBkb2N1bWVudC48L3NwYW4+IEl0IGRvZXMKLW5vdCBtYXR0ZXIgd2hhdCBraW5kIG9mIHByb2plY3QgeW91IGNyZWF0ZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSB3b3JrYmVuY2gsIGNsaWNrIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldzwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PdGhlcjwvc3Bhbj48L3NwYW4+IGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj4KLTxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBTZXJ2aWNlczwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XU0RMPC9zcGFuPjwvc3Bhbj4uPC9zcGFuPgotIENsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSBwcm9qZWN0IG9yIGZvbGRlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgV1NETCBmaWxlLjwvc3Bhbj4KLSBJbiB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgbmFtZTwvc3Bhbj4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlCi1XU0RMIGZpbGUuIFRoZSBuYW1lIG9mIHlvdXIgWE1MIGZpbGUgbXVzdCBlbmQgaW4gIDx0dCBjbGFzcz0ic3lzb3V0Ij4ud3NkbDwvdHQ+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPiBhbmQgZW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbgotb24gdGhlIG5leHQgcGFnZSBvZiB0aGUgd2l6YXJkOjwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+QSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5UYXJnZXQgbmFtZXNwYWNlPC9zcGFuPiBmb3IgdGhlIFdTREwgZmlsZQotb3IgYWNjZXB0IHRoZSBkZWZhdWx0ICg8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwOi8vd3d3LmV4YW1wbGUub3JnLzxlbT5NeVdTRExGaWxlPC9lbT4vPC9zYW1wPikuPC9zcGFuPgotIFRoZSB0YXJnZXQgbmFtZXNwYWNlIGlzIHVzZWQgZm9yIHRoZSBuYW1lcyBvZiBtZXNzYWdlcyBhbmQgdGhlIHBvcnQKLXR5cGUsIGJpbmRpbmcgYW5kIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgV1NETCBmaWxlLiBUaGUgdmFsdWUgbXVzdCB0YWtlIHRoZQotZm9ybSBvZiBhIHZhbGlkIFVSSSAoZm9yIGV4YW1wbGUsIDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHA6Ly93d3cubXljb21wYW55LmNvbS9teXNlcnZpY2UvPC9zYW1wPikKLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+VGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByZWZpeDwvc3Bhbj4gYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQKLW5hbWVzcGFjZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q3JlYXRlIFdTREwgU2tlbGV0b248L3NwYW4+IGlmIHlvdSB3YW50Ci10aGUgd2l6YXJkIHRvIGNyZWF0ZSB0aGUgc2tlbGV0b24gb2YgdGhlIFdTREwgZmlsZS48L3NwYW4+IFRoaXMgd2lsbCBnZW5lcmF0ZQotdGhlIFdTREwgZWxlbWVudHMgcmVxdWlyZWQgZm9yIHlvdXIgc2VydmljZSwgaW5jbHVkaW5nIGJpbmRpbmdzLCBwb3J0cyBhbmQKLW1lc3NhZ2VzLiBZb3UgY2FuIHRoZW4gbW9kaWZ5IHRoZXNlIHRvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiB5b3VyIFdlYiBzZXJ2aWNlCi0uPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3UgaGF2ZSBjaG9zZW4gdG8gY3JlYXRlIGEgV1NETCBza2VsZXRvbiwgc2VsZWN0IHRoZSBiaW5kaW5nCi1vcHRpb25zIHlvdSB3YW50IHRvIHVzZSBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJvdG9jb2w8L3NwYW4+IGRyb3AgZG93bi4KLVRoZSBvcHRpb25zIGFyZSBTT0FQIGFuZCBIVFRQLiBVc2UgdGhlIFNPQVAgcHJvdG9jb2wgd2hlbiB5b3Ugd2FudCB0byBleGNoYW5nZQotc3RydWN0dXJlZCBhbmQgdHlwZWQgaW5mb3JtYXRpb24uIFVzZSB0aGUgSFRUUCBwcm90b2NvbCB3aGVuIHlvdSB3YW50IHlvdXIKLWFwcGxpY2F0aW9uIGNsaWVudCB0byBqdXN0IHJlcXVlc3Qgb3IgdXBkYXRlIGluZm9ybWF0aW9uLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuIC8+IElmIHlvdSBzZWxlY3QgU09BUCB5b3UgY2FuIHRoZW4gc2VsZWN0IHRoZSBlbmNvZGluZwotc3R5bGUgeW91IHdhbnQgdG8gdXNlOjx1bD4KLTxsaT48c3BhbiBjbGFzcz0idWljb250cm9sIj5kb2N1bWVudCBsaXRlcmFsPC9zcGFuPi4gRG9jdW1lbnQgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwKLWVuY29kaW5nLiBVc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc2VuZCBTT0FQIG1lc3NhZ2VzIHRoYXQKLWNhbiBiZSB2YWxpZGF0ZWQgYnkgYW4gWE1MIHZhbGlkYXRvci4gIEFsbCB0aGUgZGF0YSB0eXBlcyBpbiB0aGUgU09BUCBtZXNzYWdlCi1ib2R5IGFyZSBkZWZpbmVkIGluIGEgc2NoZW1hLCBzbyB0aGUgV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIHNjaGVtYSBlbGVtZW50cy4gPC9saT4KLQotPGxpPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPnJwYyBsaXRlcmFsPC9zcGFuPi4gUlBDIHN0eWxlIG1lc3NhZ2VzLCBsaXRlcmFsIGVuY29kaW5nLgotVXNlIHRoaXMgc3R5bGUgb2YgYmluZGluZyB3aGVuIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIG9wZXJhdGlvbiBtZXRob2QgbmFtZXMKLWluIHlvdXIgU09BUCBtZXNzYWdlcyBzbyBhIHNlcnZlciBjYW4gZGlzcGF0Y2ggdGhlIHNwZWNpZmllZCBtZXRob2RzLiAgRGF0YQotdHlwZXMgbXVzdCBiZSBkZWZpbmVkLCBzbyB0aGUgV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIFhTRCB0eXBlcy48L2xpPgotCi08bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+cnBjIGVuY29kZWQ8L3NwYW4+LiBSUEMgc3R5bGUgbWVzc2FnZXMgYW5kIFNPQVAgZW5jb2RpbmcuCi1Vc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gZW5jb2RlIGRhdGEgZ3JhcGhzIGluIHlvdXIgU09BUAotbWVzc2FnZXMgc28gYSBzZXJ2ZXIgY2FuIGRlc2VyaWFsaXplIHRoZSBvYmplY3QgZGF0YS4gIERhdGEgdHlwZXMgbXVzdCBiZQotZGVmaW5lZCwgc28gdGhlIFdTREwgcGFydHMgbXVzdCBwb2ludCB0byBYU0QgdHlwZXMuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4gLz4gSWYgeW91IHNlbGVjdCBIVFRQIHlvdSBjYW4gc2VsZWN0IHdoZXRoZXIgdG8gY3JlYXRlCi1hbiBIVFRQIGdldHRlciBvciBzZXR0ZXIuPHVsPgotPGxpPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkhUVFAgR0VUPC9zcGFuPi4gQSBHRVQgcmVxdWVzdCBmZXRjaGVzIGRhdGEgZnJvbSBhIFdlYgotc2VydmVyIGJhc2VkIG9uIGFuIFVSTCB2YWx1ZSBhbmQgYSBzZXQgb2YgSFRUUCBoZWFkZXJzLiBVc2UgdGhpcyBtZXRob2Qgd2hlbgoteW91IHdhbnQgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0LiA8L2xpPgotCi08bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+SFRUUCBQT1NUPC9zcGFuPi4gQSBQT1NUIHJlcXVlc3Qgc2VuZHMgYWRkaXRpb25hbCBkYXRhCi10byB0aGUgc2VydmVyLCBzcGVjaWZpZWQgYWZ0ZXIgdGhlIFVSTCBhbmQgdGhlIGhlYWRlcnMuIFVzZSB0aGlzIG1ldGhvZCB3aGVuCi15b3Ugd2FudCB0byBzZW5kIGRhdGEgZW5jbG9zZWQgaW4gdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9zcGFuPiBUaGUgV1NETCBmaWxlCi1vcGVucyBpbiB0aGUgV1NETCBlZGl0b3IuPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IGNyZWF0ZWQgYSBXU0RMIGZpbGUgd2l0aCBhIHNrZWxldG9uIHVzaW5nIFNPQVAgYmluZGluZ3MsCi1pdCBzaG91bGQgbG9vayBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmc6PC9wPgotPHA+PGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy9zb2Fwc2tlbC5naWYiIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIFNPQVAgYmluZGluZ3MiIC8+PGJyIC8+PC9wPgotPHA+SWYgeW91IGNyZWF0ZWQKLWEgV1NETCBmaWxlIHdpdGggYSBza2VsZXRvbiB1c2luZyBIVFRQIGJpbmRpbmdzLCBpdCBzaG91bGQgbG9vayBzaW1pbGFyIHRvCi10aGUgZm9sbG93aW5nOjwvcD4KLTxwPjxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvaHR0cHNrZWwuZ2lmIiBhbHQ9IkltYWdlIG9mIGEgV1NETCBza2VsZXRvbiB1c2luZyBIVFRQIGJpbmRpbmdzIiAvPjxiciAvPjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0aW1wd3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkgdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLiI+SW1wb3J0aW5nIGEgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg4MDlkMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RlZHR3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRlZHR3c2RsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkVkaXRpbmcgV1NETCBmaWxlczwvdGl0bGU+Ci08c2hvcnRkZXNjPk9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMCi1lZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaAotYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPmVkaXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5lZGl0aW5nIFdTREwgZmlsZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gb3BlbiBhIFdTREwgZmlsZSBpbiB0aGUgV1NETCBlZGl0b3IsIGRvdWJsZS1jbGljayBpdCBpbiB0aGUKLU5hdmlnYXRvciB2aWV3IG9yIHJpZ2h0LWNsaWNrIGl0IGFuZCBjbGljayAgPGI+T3BlbiBXaXRoID4gV1NETCBFZGl0b3IuPC9iPjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImVkaXRpc291cmNldmlldyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgU291cmNlIHZpZXc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+VG8gZWRpdCBhIFdTREwgZmlsZSBpbiB0aGUgU291cmNlIHZpZXcsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5PcGVuIHlvdXIgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvci48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrIHRoZSAgPHVpY29udHJvbD5Tb3VyY2U8L3VpY29udHJvbD4gdGFiLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSBzb3VyY2UgY29kZSB5b3Ugd2FudCB0byBlZGl0LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPkF0IGFueSB0aW1lLCB5b3UgY2FuIHN3aXRjaCB0byB0aGUgU291cmNlIHZpZXcgdG8gcmV2aWV3IHRoZSBzb3VyY2UKLWNvZGUgb2YgdGhlIFdTREwgZmlsZS4gWW91IGNhbiBhbHNvIGVkaXQgeW91ciBXU0RMIGZpbGUgZGlyZWN0bHkgaW4gdGhlIFNvdXJjZQotdmlldy48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImVkaXRlZGl0dmlldyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgRGVzaWduIHZpZXc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VGhlIERlc2lnbiB2aWV3IHByb3ZpZGVzIGEgZ3JhcGhpY2FsIHdheSB0byBicm93c2UgYW5kIGVkaXQgeW91cgotV1NETCBmaWxlLiBFYWNoIHR5cGUgb2YgdG9wIGxldmVsIFdTREwgb2JqZWN0IGlzIHNob3duIHdpdGhpbiBhIHRhYnVsYXIgdmlldwotKGZvciBleGFtcGxlLCBzZXJ2aWNlLCBiaW5kaW5nLCBwb3J0IHR5cGUpLiBFYWNoIHRhYnVsYXIgdmlldyBjb250YWlucyBvbmUKLW9yIG1vcmUgcm93cyB0aGF0IHJlcHJlc2VudCB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QuIFRoZSBzZXJ2aWNlLCBiaW5kaW5nLAotYW5kIHBvcnQgdHlwZSBvYmplY3RzIGFyZSAnbGlua2VkJy4gQSBsaW5lIGRpc3BsYXlzIHRvIGRlbm90ZSBhIHJlZmVyZW5jZQotKG9yIGFzc29jaWF0aW9uKSBiZXR3ZWVuIHRoZXNlIG9iamVjdHMuPC9wPjxwPiA8aW1hZ2UgYWx0PSJJbWFnZSBvZiBhIFdTREwgZmlsZSBvcGVuIGluIHRoZSBXU0RMIGVkaXRvciIKLWhyZWY9Ii4uL2ltYWdlcy93c2RsZWRpdG9yLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJlZGl0cHJvcGVydGllc3ZpZXciPgotPHRpdGxlPkVkaXRpbmcgaW4gdGhlIFByb3BlcnRpZXMgdmlldzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UaGUgUHJvcGVydGllcyB2aWV3IGRpc3BsYXlzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIGFuZCBlZGl0YWJsZQotYXR0cmlidXRlIHZhbHVlcyBvZiBhIHNlbGVjdGVkIFdTREwgb2JqZWN0IGFuZCBjb250YWlucyB0aGUgZm9sbG93aW5nIHBhbmVzCi10byBlZGl0OjwvcD48dWw+Ci08bGk+IDx1aWNvbnRyb2w+R2VuZXJhbDwvdWljb250cm9sPiBwYW5lLCB3aGljaCBkaXNwbGF5cyBhIGxpc3Qgb2Ygb2JqZWN0Ci1hdHRyaWJ1dGVzLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RG9jdW1lbnRhdGlvbjwvdWljb250cm9sPiBwYW5lLCB3aGljaCBzcGVjaWZpZXMgdGhlIGluZm9ybWF0aW9uCi15b3Ugd2FudCB0aGUgdXNlciB0byByZWFkLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RXh0ZW5zaW9uczwvdWljb250cm9sPiBwYW5lLCB3aGljaCBpcyB1c2VkIHRvIGFkZCBleHRlbnNpb24KLWNvbXBvbmVudHMuPC9saT4KLTwvdWw+PGRyYWZ0LWNvbW1lbnQ+IFtMZWdhY3kgVGl0bGVdIFNob3dpbmcgQmluZGluZ3MgaW4gdGhlIERlc2lnbiBbTGVnYWN5Ci1Db250ZXh0XUJ5IGRlZmF1bHQgYmluZGluZ3MgYXJlIHNob3duIGluIHRoZSBEZXNpZ24gVmlldy4gU2VsZWN0IHRoZSBzaG93L2hpZGUKLWJpbmRpbmcgYnV0dG9uIGF0IHRoZSB0b3AgbGVmdCBvZiB0aGUgRGVzaWduIFZpZXcgdG8gaGlkZSB0aGUgYmluZGluZ3MuIFdpdGgKLXRoZSBiaW5kaW5ncyBoaWRkZW4gYSBzZXJ2aWNlIGNhbiBiZSBicm93c2VkIGZyb20gYSBwdXJlbHkgYWJzdHJhY3QgbGV2ZWwKLXdpdGhvdXQgc2hvd2luZyBiaW5kaW5nIGluZm9ybWF0aW9uLiBXaGVuIHRoZSBuZWVkIGFyaXNlcyB0byB1bmRlcnN0YW5kIHRoZQotY29uY3JldGUgZGV0YWlscyByZXByZXNlbnRlZCBieSB0aGUgYmluZGluZywgc2VsZWN0IHRoZSBzaG93L2hpZGUgYmluZGluZwotYnV0dG9uIGFnYWluIHRvIG1ha2UgdGhlbSB2aXNpYmxlLiB2aWV3IFtXcml0ZXIgY29tbWVudHNdIFJlbW92ZSB0b3BpYyAiU2hvd2luZwotYmluZGluZ3MuLi4iIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2hvdy9oaWRlIGJpbmRpbmcgZnVuY3Rpb24gaW4gdGhlIG5ldyBHVUk8L2RyYWZ0LWNvbW1lbnQ+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJlZGl0b3V0bGluZXZpZXciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgT3V0bGluZSB2aWV3PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSBPdXRsaW5lIHZpZXcgd2lsbCBzaG93IHlvdSBhbGwgdGhlIGl0ZW1zIGluIHlvdXIgV1NETCBmaWxlCi1hcyB5b3UgYWRkIHRoZW0uIEluIHRoaXMgdmlldywgeW91IGNhbiBib3RoIGNyZWF0ZSBhbmQgZGVsZXRlIFdTREwgY29tcG9uZW50cy48L3A+PHA+VGhlCi1PdXRsaW5lIHZpZXcgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmb2xkZXJzIHlvdSBjYW4gdXNlIChieSByaWdodC1jbGlja2luZwotYW5kIHNlbGVjdGluZyB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uKSB0byBlZGl0IHlvdXIgV1NETCBmaWxlOjwvcD48dWw+Ci08bGk+IDxiPkltcG9ydHM8L2I+Jm5ic3A7c3RhdGVtZW50cywgd2hpY2ggYXJlIHVzZWQgdG8gYXNzb2NpYXRlIGEgbmFtZXNwYWNlCi13aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24uPC9saT4KLTxsaT4gPGI+VHlwZXM8L2I+LCB3aGljaCBwcm92aWRlIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB1c2VkIHRvIGRlc2NyaWJlIHRoZQotbWVzc2FnZXMgZXhjaGFuZ2VkLiBZb3UgY2Fubm90IGVkaXQgYW55IHR5cGVzIGRpcmVjdGx5IHVzaW5nIHRoaXMgZm9sZGVyLjwvbGk+Ci08bGk+IDxiPlNlcnZpY2VzPC9iPiwgd2hpY2ggYXJlIHVzZWQgdG8gYWdncmVnYXRlIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMuPC9saT4KLTxsaT4gPGI+QmluZGluZ3M8L2I+LCB3aGljaCBzcGVjaWZ5IGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucwotZm9yIHRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuPC9saT4KLTxsaT4gPGI+UG9ydCBUeXBlPC9iPiwgd2hpY2ggaXMgYSBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucy4gRWFjaCBvcGVyYXRpb24KLXJlZmVycyB0byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuIDwvbGk+Ci08bGk+IDxiPk1lc3NhZ2VzPC9iPiwgd2hpY2ggcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcKLXRyYW5zbWl0dGVkLiBBIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkCi13aXRoIGEgZGVmaW5pdGlvbiB3aXRoaW4gc29tZSB0eXBlIHN5c3RlbS48L2xpPgotPC91bD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRpbXB3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTllMTZjOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RlZHR3c2RsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRWRpdGluZyBXU0RMIGZpbGVzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMIGZpbGVzLCBlZGl0aW5nLCBXZWIgc2VydmljZXMsIGVkaXRpbmcgV1NETCBmaWxlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwgZmlsZXMsIGVkaXRpbmcsIFdlYiBzZXJ2aWNlcywgZWRpdGluZyBXU0RMIGZpbGVzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0ZWR0d3NkbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkVkaXRpbmcgV1NETCBmaWxlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGVkdHdzZGwiPjxhIG5hbWU9InRlZHR3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5FZGl0aW5nIFdTREwgZmlsZXM8L2gxPgotCi0KLQotPGRpdj48cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETAotZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2gKLWFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gb3BlbiBhIFdTREwgZmlsZSBpbiB0aGUgV1NETCBlZGl0b3IsIGRvdWJsZS1jbGljayBpdCBpbiB0aGUKLU5hdmlnYXRvciB2aWV3IG9yIHJpZ2h0LWNsaWNrIGl0IGFuZCBjbGljayAgPHN0cm9uZz5PcGVuIFdpdGggJmd0OyBXU0RMIEVkaXRvci48L3N0cm9uZz48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJlZGl0aXNvdXJjZXZpZXciPjxhIG5hbWU9ImVkaXRpc291cmNldmlldyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5FZGl0aW5nIGluIHRoZSBTb3VyY2UgdmlldzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyBlZGl0IGEgV1NETCBmaWxlIGluIHRoZSBTb3VyY2UgdmlldywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk9wZW4geW91ciBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Tb3VyY2U8L3NwYW4+IHRhYi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgc291cmNlIGNvZGUgeW91IHdhbnQgdG8gZWRpdC48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+QXQgYW55IHRpbWUsIHlvdSBjYW4gc3dpdGNoIHRvIHRoZSBTb3VyY2UgdmlldyB0byByZXZpZXcgdGhlIHNvdXJjZQotY29kZSBvZiB0aGUgV1NETCBmaWxlLiBZb3UgY2FuIGFsc28gZWRpdCB5b3VyIFdTREwgZmlsZSBkaXJlY3RseSBpbiB0aGUgU291cmNlCi12aWV3LjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImVkaXRlZGl0dmlldyI+PGEgbmFtZT0iZWRpdGVkaXR2aWV3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkVkaXRpbmcgaW4gdGhlIERlc2lnbiB2aWV3PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBEZXNpZ24gdmlldyBwcm92aWRlcyBhIGdyYXBoaWNhbCB3YXkgdG8gYnJvd3NlIGFuZCBlZGl0IHlvdXIKLVdTREwgZmlsZS4gRWFjaCB0eXBlIG9mIHRvcCBsZXZlbCBXU0RMIG9iamVjdCBpcyBzaG93biB3aXRoaW4gYSB0YWJ1bGFyIHZpZXcKLShmb3IgZXhhbXBsZSwgc2VydmljZSwgYmluZGluZywgcG9ydCB0eXBlKS4gRWFjaCB0YWJ1bGFyIHZpZXcgY29udGFpbnMgb25lCi1vciBtb3JlIHJvd3MgdGhhdCByZXByZXNlbnQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0LiBUaGUgc2VydmljZSwgYmluZGluZywKLWFuZCBwb3J0IHR5cGUgb2JqZWN0cyBhcmUgJ2xpbmtlZCcuIEEgbGluZSBkaXNwbGF5cyB0byBkZW5vdGUgYSByZWZlcmVuY2UKLShvciBhc3NvY2lhdGlvbikgYmV0d2VlbiB0aGVzZSBvYmplY3RzLjwvcD4KLTxwPiA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmIiBhbHQ9IkltYWdlIG9mIGEgV1NETCBmaWxlIG9wZW4gaW4gdGhlIFdTREwgZWRpdG9yIiAvPjxiciAvPjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJlZGl0cHJvcGVydGllc3ZpZXciPjxhIG5hbWU9ImVkaXRwcm9wZXJ0aWVzdmlldyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5FZGl0aW5nIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFByb3BlcnRpZXMgdmlldyBkaXNwbGF5cyBhIGxpc3Qgb2YgYXR0cmlidXRlcyBhbmQgZWRpdGFibGUKLWF0dHJpYnV0ZSB2YWx1ZXMgb2YgYSBzZWxlY3RlZCBXU0RMIG9iamVjdCBhbmQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBwYW5lcwotdG8gZWRpdDo8L3A+Ci08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdlbmVyYWw8L3NwYW4+IHBhbmUsIHdoaWNoIGRpc3BsYXlzIGEgbGlzdCBvZiBvYmplY3QKLWF0dHJpYnV0ZXMuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Eb2N1bWVudGF0aW9uPC9zcGFuPiBwYW5lLCB3aGljaCBzcGVjaWZpZXMgdGhlIGluZm9ybWF0aW9uCi15b3Ugd2FudCB0aGUgdXNlciB0byByZWFkLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RXh0ZW5zaW9uczwvc3Bhbj4gcGFuZSwgd2hpY2ggaXMgdXNlZCB0byBhZGQgZXh0ZW5zaW9uCi1jb21wb25lbnRzLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJlZGl0b3V0bGluZXZpZXciPjxhIG5hbWU9ImVkaXRvdXRsaW5ldmlldyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5FZGl0aW5nIGluIHRoZSBPdXRsaW5lIHZpZXc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIE91dGxpbmUgdmlldyB3aWxsIHNob3cgeW91IGFsbCB0aGUgaXRlbXMgaW4geW91ciBXU0RMIGZpbGUKLWFzIHlvdSBhZGQgdGhlbS4gSW4gdGhpcyB2aWV3LCB5b3UgY2FuIGJvdGggY3JlYXRlIGFuZCBkZWxldGUgV1NETCBjb21wb25lbnRzLjwvcD4KLTxwPlRoZQotT3V0bGluZSB2aWV3IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZm9sZGVycyB5b3UgY2FuIHVzZSAoYnkgcmlnaHQtY2xpY2tpbmcKLWFuZCBzZWxlY3RpbmcgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbikgdG8gZWRpdCB5b3VyIFdTREwgZmlsZTo8L3A+Ci08dWw+Ci08bGk+IDxzdHJvbmc+SW1wb3J0czwvc3Ryb25nPsKgc3RhdGVtZW50cywgd2hpY2ggYXJlIHVzZWQgdG8gYXNzb2NpYXRlIGEgbmFtZXNwYWNlCi13aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24uPC9saT4KLQotPGxpPiA8c3Ryb25nPlR5cGVzPC9zdHJvbmc+LCB3aGljaCBwcm92aWRlIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB1c2VkIHRvIGRlc2NyaWJlIHRoZQotbWVzc2FnZXMgZXhjaGFuZ2VkLiBZb3UgY2Fubm90IGVkaXQgYW55IHR5cGVzIGRpcmVjdGx5IHVzaW5nIHRoaXMgZm9sZGVyLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5TZXJ2aWNlczwvc3Ryb25nPiwgd2hpY2ggYXJlIHVzZWQgdG8gYWdncmVnYXRlIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMuPC9saT4KLQotPGxpPiA8c3Ryb25nPkJpbmRpbmdzPC9zdHJvbmc+LCB3aGljaCBzcGVjaWZ5IGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucwotZm9yIHRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuPC9saT4KLQotPGxpPiA8c3Ryb25nPlBvcnQgVHlwZTwvc3Ryb25nPiwgd2hpY2ggaXMgYSBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucy4gRWFjaCBvcGVyYXRpb24KLXJlZmVycyB0byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuIDwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5NZXNzYWdlczwvc3Ryb25nPiwgd2hpY2ggcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcKLXRyYW5zbWl0dGVkLiBBIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkCi13aXRoIGEgZGVmaW5pdGlvbiB3aXRoaW4gc29tZSB0eXBlIHN5c3RlbS48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGltcHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gaW1wb3J0IFdTREwgZmlsZXMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBvcGVuIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiBPcGVuaW5nIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yIHByb3ZpZGVzIHlvdSB3aXRoIGFuIG9wcG9ydHVuaXR5IHRvIGhhdmUgYSBzdHJ1Y3R1cmVkIHZpZXdpbmcgb2YgdGhlIFdTREwgZmlsZS4iPkltcG9ydGluZyBhIFdTREwgZmlsZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQyZWI1OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGltcHdzZGwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+SW1wb3J0aW5nIGEgV1NETCBmaWxlPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+SW1wb3J0aW5nIFdTREwgZmlsZXM8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPllvdSBjYW4gaW1wb3J0IFdTREwgZmlsZXMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBvcGVuIHRoZW0gaW4gdGhlCi1XU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eQotdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMIGZpbGVzPGluZGV4dGVybT5pbXBvcnRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5pbXBvcnRpbmcgV1NETCBmaWxlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlCi1mcm9tIGEgV1NETCBmaWxlLiBZb3UgbXVzdCBmaXJzdCBjcmVhdGUgb3IgaW1wb3J0IGEgV1NETCBmaWxlLiBBIFdTREwgZmlsZQotY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiBUaGlzIGlzIGRlc2NyaWJlZCBpbjogIDx4cmVmIGhyZWY9Ii4uL3Rhc2tzL3RjcnR3c2RsLmRpdGEiCi1zY29wZT0icGVlciI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC94cmVmPi4gVG8gaW1wb3J0IGEgV1NETCBmaWxlIGZvbGxvdwotdGhlIGluc3RydWN0aW9ucyBiZWxvdy48L3A+PHA+IDx1aWNvbnRyb2w+UHJlcmVxdWlzaXRlOjwvdWljb250cm9sPiBDcmVhdGUKLWEgcHJvamVjdC4gSXQgaXMgcmVjb21tZW5kIHRoYXQgeW91IGNyZWF0ZSBhIFdlYiBwcm9qZWN0IHNvIHRoYXQgdGhlIFdTREwKLWNhbiBiZSBlYXNpbHkgdXNlZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIGFydGlmYWN0cyBhbmQgZGVwbG95ZWQuPC9wPjxwPkZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiBjcmVhdGluZyBhIFdlYiBwcm9qZWN0LCByZWZlciB0byB0aGUgV2ViIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50Ci1kb2N1bWVudGF0aW9uLjwvcD48cD5UbyBpbXBvcnQgYSBXU0RMIGZpbGUgdG8geW91ciBXZWIgcHJvamVjdCwgY29tcGxldGUgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgcHJvamVjdCBpbiB0aGUgSmF2YSBFRSBOYXZpZ2F0b3IgcGFuZSwgYW5kIGZyb20gdGhlIDx1aWNvbnRyb2w+RmlsZTwvdWljb250cm9sPiBtZW51LAotc2VsZWN0IDx1aWNvbnRyb2w+SW1wb3J0PC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IDxtZW51Y2FzY2FkZT48dWljb250cm9sPkdlbmVyYWw8L3VpY29udHJvbD48dWljb250cm9sPkZpbGUKLVN5c3RlbTwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+IGFuZCBjbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkJyb3dzZTwvdWljb250cm9sPiBvbiB0aGUgbmV4dCBwYWdlIG9mIHRoZSB3aXphcmQKLXRvIHNlbGVjdCB0aGUgZGlyZWN0b3JpZXMgZnJvbSB3aGljaCB5b3Ugd291bGQgbGlrZSB0byBhZGQgdGhlIFdTREwuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBpbXBvcnQgc2VsZWN0aW9uIHBhbmVzLCB1c2UgdGhlIGZvbGxvd2luZyBtZXRob2RzIHRvIHNlbGVjdAotZXhhY3RseSB0aGUgcmVzb3VyY2VzIHlvdSB3YW50IHRvIGFkZDogIDwvY21kPjxpbmZvPjx1bD4KLTxsaT5FeHBhbmQgdGhlIGhpZXJhcmNoaWVzIGluIHRoZSBsZWZ0IHBhbmUgYW5kIHNlbGVjdCBvciBjbGVhciB0aGUgY2hlY2tib3hlcwotdGhhdCByZXByZXNlbnQgdGhlIGZvbGRlcnMgaW4gdGhlIHNlbGVjdGVkIGRpcmVjdG9yeS4gVGhlbiBpbiB0aGUgcmlnaHQgcGFuZSwKLXNlbGVjdCBvciBjbGVhciBjaGVjayBib3hlcyBmb3IgaW5kaXZpZHVhbCBmaWxlcy48L2xpPgotPGxpPkNsaWNrIDx1aWNvbnRyb2w+RmlsdGVyIFR5cGVzPC91aWNvbnRyb2w+IHRvIGZpbHRlciB0aGUgY3VycmVudCBzZWxlY3Rpb24KLWZvciBmaWxlcyBvZiBhIHNwZWNpZmljIHR5cGUuPC9saT4KLTxsaT5DbGljayA8dWljb250cm9sPlNlbGVjdCBBbGw8L3VpY29udHJvbD4gdG8gc2VsZWN0IGFsbCByZXNvdXJjZXMgaW4gdGhlCi1kaXJlY3RvcnksIHRoZW4gZ28gdGhyb3VnaCBhbmQgZGVzZWxlY3QgdGhlIG9uZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdG8gYWRkLjwvbGk+Ci08bGk+Q2xpY2sgPHVpY29udHJvbD5EZXNlbGVjdCBBbGw8L3VpY29udHJvbD4gdG8gZGVzZWxlY3QgYWxsIHJlc291cmNlcyBpbgotdGhlIGRpcmVjdG9yeSwgdGhlbiBnbyB0aHJvdWdoIGFuZCBjaG9vc2UgaW5kaXZpZHVhbCByZXNvdXJjZXMgdG8gYWRkLjwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlNwZWNpZnkgdGhlIFdvcmtiZW5jaCBwcm9qZWN0IG9yIGZvbGRlciB0aGF0IHdpbGwgYmUgdGhlIGltcG9ydAotZGVzdGluYXRpb24uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5XaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHNwZWNpZnlpbmcgeW91ciBpbXBvcnQgb3B0aW9ucywgY2xpY2sgPHVpY29udHJvbD5GaW5pc2guPC91aWNvbnRyb2w+PC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5BbHRlcm5hdGVseSwgeW91IGNhbiBpbXBvcnQgYSBXU0RMIGZpbGUgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG86ICA8eHJlZiBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuZGl0YSIKLXNjb3BlPSJwZWVyIj4gVXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3hyZWY+LiAgPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1NETDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyOGI3M2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkltcG9ydGluZyBhIFdTREwgZmlsZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJZb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eSB0byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gaW1wb3J0IFdTREwgZmlsZXMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBvcGVuIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiBPcGVuaW5nIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yIHByb3ZpZGVzIHlvdSB3aXRoIGFuIG9wcG9ydHVuaXR5IHRvIGhhdmUgYSBzdHJ1Y3R1cmVkIHZpZXdpbmcgb2YgdGhlIFdTREwgZmlsZS4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMIGZpbGVzLCBpbXBvcnRpbmcsIFdlYiBzZXJ2aWNlcywgaW1wb3J0aW5nIFdTREwgZmlsZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMIGZpbGVzLCBpbXBvcnRpbmcsIFdlYiBzZXJ2aWNlcywgaW1wb3J0aW5nIFdTREwgZmlsZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRpbXB3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+SW1wb3J0aW5nIFdTREwgZmlsZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRpbXB3c2RsIj48YSBuYW1lPSJ0aW1wd3NkbCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+SW1wb3J0aW5nIGEgV1NETCBmaWxlPC9oMT4KLQotCi0KLQotPGRpdj48cD5Zb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZQotV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkKLXRvIGhhdmUgYSBzdHJ1Y3R1cmVkIHZpZXdpbmcgb2YgdGhlIFdTREwgZmlsZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBXZWIgU2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBuZXcgV2ViIHNlcnZpY2UKLWZyb20gYSBXU0RMIGZpbGUuIFlvdSBtdXN0IGZpcnN0IGNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUuIEEgV1NETCBmaWxlCi1jYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIFRoaXMgaXMgZGVzY3JpYmVkIGluOiAgPGEgaHJlZj0iLi4vdGFza3MvdGNydHdzZGwuaHRtbCI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPi4gVG8gaW1wb3J0IGEgV1NETCBmaWxlIGZvbGxvdwotdGhlIGluc3RydWN0aW9ucyBiZWxvdy48L3A+Ci08cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJlcmVxdWlzaXRlOjwvc3Bhbj4gQ3JlYXRlCi1hIHByb2plY3QuIEl0IGlzIHJlY29tbWVuZCB0aGF0IHlvdSBjcmVhdGUgYSBXZWIgcHJvamVjdCBzbyB0aGF0IHRoZSBXU0RMCi1jYW4gYmUgZWFzaWx5IHVzZWQgdG8gZ2VuZXJhdGUgYWRkaXRpb25hbCBhcnRpZmFjdHMgYW5kIGRlcGxveWVkLjwvcD4KLTxwPkZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiBjcmVhdGluZyBhIFdlYiBwcm9qZWN0LCByZWZlciB0byB0aGUgV2ViIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50Ci1kb2N1bWVudGF0aW9uLjwvcD4KLTxwPlRvIGltcG9ydCBhIFdTREwgZmlsZSB0byB5b3VyIFdlYiBwcm9qZWN0LCBjb21wbGV0ZSB0aGUKLWZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBwcm9qZWN0IGluIHRoZSBKYXZhIEVFIE5hdmlnYXRvciBwYW5lLCBhbmQgZnJvbSB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4gbWVudSwKLXNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbXBvcnQ8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdlbmVyYWw8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZQotU3lzdGVtPC9zcGFuPjwvc3Bhbj4gYW5kIGNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJyb3dzZTwvc3Bhbj4gb24gdGhlIG5leHQgcGFnZSBvZiB0aGUgd2l6YXJkCi10byBzZWxlY3QgdGhlIGRpcmVjdG9yaWVzIGZyb20gd2hpY2ggeW91IHdvdWxkIGxpa2UgdG8gYWRkIHRoZSBXU0RMLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIGltcG9ydCBzZWxlY3Rpb24gcGFuZXMsIHVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgdG8gc2VsZWN0Ci1leGFjdGx5IHRoZSByZXNvdXJjZXMgeW91IHdhbnQgdG8gYWRkOiAgPC9zcGFuPiA8dWw+Ci08bGk+RXhwYW5kIHRoZSBoaWVyYXJjaGllcyBpbiB0aGUgbGVmdCBwYW5lIGFuZCBzZWxlY3Qgb3IgY2xlYXIgdGhlIGNoZWNrYm94ZXMKLXRoYXQgcmVwcmVzZW50IHRoZSBmb2xkZXJzIGluIHRoZSBzZWxlY3RlZCBkaXJlY3RvcnkuIFRoZW4gaW4gdGhlIHJpZ2h0IHBhbmUsCi1zZWxlY3Qgb3IgY2xlYXIgY2hlY2sgYm94ZXMgZm9yIGluZGl2aWR1YWwgZmlsZXMuPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbHRlciBUeXBlczwvc3Bhbj4gdG8gZmlsdGVyIHRoZSBjdXJyZW50IHNlbGVjdGlvbgotZm9yIGZpbGVzIG9mIGEgc3BlY2lmaWMgdHlwZS48L2xpPgotCi08bGk+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2VsZWN0IEFsbDwvc3Bhbj4gdG8gc2VsZWN0IGFsbCByZXNvdXJjZXMgaW4gdGhlCi1kaXJlY3RvcnksIHRoZW4gZ28gdGhyb3VnaCBhbmQgZGVzZWxlY3QgdGhlIG9uZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdG8gYWRkLjwvbGk+Ci0KLTxsaT5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZXNlbGVjdCBBbGw8L3NwYW4+IHRvIGRlc2VsZWN0IGFsbCByZXNvdXJjZXMgaW4KLXRoZSBkaXJlY3RvcnksIHRoZW4gZ28gdGhyb3VnaCBhbmQgY2hvb3NlIGluZGl2aWR1YWwgcmVzb3VyY2VzIHRvIGFkZC48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TcGVjaWZ5IHRoZSBXb3JrYmVuY2ggcHJvamVjdCBvciBmb2xkZXIgdGhhdCB3aWxsIGJlIHRoZSBpbXBvcnQKLWRlc3RpbmF0aW9uLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldoZW4geW91IGhhdmUgZmluaXNoZWQgc3BlY2lmeWluZyB5b3VyIGltcG9ydCBvcHRpb25zLCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2guPC9zcGFuPjwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkFsdGVybmF0ZWx5LCB5b3UgY2FuIGltcG9ydCBhIFdTREwgZmlsZSB1c2luZyB0aGUgV1NETCBFeHBsb3Jlci4KLUZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0bzogIDxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sIj5Vc2luZyB0aGUgV1NETCBFeHBsb3JlcjwvYT4uICA8L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiPldTREw8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGUyODM3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHNldGJpbmQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U2V0dGluZyBhIGJpbmRpbmc8L3RpdGxlPgotPHNob3J0ZGVzYz5BIGJpbmRpbmcgaXMgYSB0b3AgbGV2ZWwgV1NETCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIGNvbmNyZXRlIHNwZWNpZmljYXRpb24KLXJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIGEgd2ViIHNlcnZpY2UuIEEgYmluZGluZwotcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFRoZSBzdHJ1Y3R1cmUgb2YgYSBiaW5kaW5nIGNvcnJlc3BvbmRzIHZlcnkKLWNsb3NlbHkgdG8gdGhhdCBvZiB0aGUgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBjb250YWlucyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0oZm9yIGV4YW1wbGUsIFNPQVAsIGh0dHAsIGFuZCBtaW1lKSB0aGF0IHNwZWNpZnkgcHJvdG9jb2wgc3BlY2lmaWMgZGV0YWlscy4KLUVhY2ggcG9ydCB3aXRoaW4gYSBzZXJ2aWNlIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgYmluZGluZy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5iaW5kaW5nczxpbmRleHRlcm0+Y3JlYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPnNldHRpbmcKLVdTREwgYmluZGluZ3M8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPmJpbmRpbmdzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPllvdSBjYW4gY3JlYXRlIGEgYmluZGluZyBieSByaWdodCBjbGlja2luZyBpbiBhbnkgYmxhbmsgc3BhY2UKLWluIHRoZSBEZXNpZ24gdmlldyBhbmQgc2VsZWN0aW5nIDx1aWNvbnRyb2w+QWRkIEJpbmRpbmc8L3VpY29udHJvbD4uIFlvdSBjYW4KLWNyZWF0ZSBhIG5ldyBiaW5kaW5nLCByZXVzZSBhbiBleGlzdGluZyBvbmUsIG9yIGltcG9ydCBvbmUuIDwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImNyZWF0ZW5ld2JpbmQiPgotPHRpdGxlPkNyZWF0aW5nIGEgbmV3IGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gY3JlYXRlIGEgbmV3IGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIHBvcnQgYW5kIGNsaWNrIDxiPlNldCBCaW5kaW5nCi0+IE5ldyBCaW5kaW5nPC9iPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgYmluZGluZy48L2NtZD48aW5mbz5UaGUKLW5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBhbW9uZyBhbGwgYmluZGluZ3MgZGVmaW5lZCB3aXRoaW4gdGhlIGVuY2xvc2luZyBXU0RMCi1kb2N1bWVudC4gQ2xpY2sgPGI+T0suPC9iPiBUbyBzZWxlY3QgdGhlIG5ldyBiaW5kaW5nLCBjbGljayB0aGUgYmluZGluZyBvYmplY3QuPC9pbmZvPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UeXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmluZGluZyB5b3Ugd2FudCB0aGUgdXNlciB0byByZWFkCi1pbiB0aGUgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48bm90ZT5BIDxiPlBvcnRUeXBlPC9iPiBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZAotdGhlIGFic3RyYWN0IG1lc3NhZ2VzIGludm9sdmVkLiBZb3UgY2FuIGVpdGhlciBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvcgoteW91ciBiaW5kaW5nLCByZXVzZSBhbiBleGlzdGluZyBvbmUsIG9yIGltcG9ydCBvbmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLAotc2VlIDx4cmVmIGZvcm1hdD0iZGl0YSIgaHJlZj0idHNldHBydHQuZGl0YSIgc2NvcGU9ImxvY2FsIj5TZXR0aW5nIGEgUG9ydAotVHlwZTwveHJlZj4uPC9ub3RlPjxub3RlIHR5cGU9InRpcCI+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nIGZvcgoteW91ciBwb3J0IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFJpZ2h0IGNsaWNrIG9uIHRoZSA8dWljb250cm9sPkJpbmRpbmdzPC91aWNvbnRyb2w+IGZvbGRlcgotYW5kIHNlbGVjdCA8dWljb250cm9sPkFkZCBCaW5kaW5nPC91aWNvbnRyb2w+Ljwvbm90ZT48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0icmV1c2ViaW5kaW5nIj4KLTx0aXRsZT5SZXVzaW5nIGEgYmluZGluZyBmb3IgYSBwb3J0PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHJldXNlIGEgYmluZGluZyBmb3IgeW91ciBwb3J0LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgc2VsZWN0IHlvdXIgcG9ydC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8Yj5HZW5lcmFsPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgPGI+QmluZGluZzwvYj4gZHJvcCBkb3duIGxpc3QsIHNlbGVjdCB0aGUgYmluZGluZyB5b3UKLXdhbnQgdG8gdXNlLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9InJlZ2VuZXJhdGluZ2FiaW5kaW5nIj4KLTx0aXRsZT5SZWdlbmVyYXRpbmcgYSBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PlRvIHJlZ2VuZXJhdGUgYSBiaW5kaW5nLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+UmlnaHQtY2xpY2sgdGhlIGJpbmRpbmcgeW91IHdhbnQgdG8gcmVnZW5lcmF0ZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCA8dWljb250cm9sPkdlbmVyYXRlIEJpbmRpbmcgQ29udGVudDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNwZWNpZnkgdGhlIHJlcXVpcmVkIGJpbmRpbmcgaW5mb3JtYXRpb24uIElmIHlvdSBhcmUgbW9kaWZ5aW5nCi1hbiBleGlzdGluZyBiaW5kaW5nLCBzZWxlY3QgdGhlIDx1aWNvbnRyb2w+T3ZlcndyaXRlIGV4aXN0aW5nIGJpbmRpbmcgaW5mb3JtYXRpb248L3VpY29udHJvbD4gY2hlY2sKLWJveC48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJpbXBiaW5kaW5nIj4KLTx0aXRsZT5JbXBvcnQgYW4gZXhpc3RpbmcgYmluZGluZzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD5UbyBpbXBvcnQgYW4gZXhpc3RpbmcgYmluZGluZyBmb3IgeW91ciBwb3J0LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBwb3J0IGFuZCBjbGljayAgPGI+U2V0IEJpbmRpbmcKLT4gRXhpc3RpbmcgQmluZGluZy48L2I+PC9jbWQ+PC9zdGVwPgotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZwotdG8gZmlsdGVyIHRoZSBsaXN0IG9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPllvdSBjYW4gaW1wb3J0IGEgYmluZGluZyBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT48Yj5Xb3Jrc3BhY2U8L2I+OiBsaXN0cyB0aGUgYmluZGluZ3MgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5DdXJyZW50IFJlc291cmNlPC9iPjogbGlzdHMgdGhlIGJpbmRpbmcgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIKLWN1cnJlbnQgZmlsZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+V29ya2luZyBTZXRzPC9iPjogbGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBzZXQKLW9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBiaW5kaW5ncyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPGI+T0s8L2I+LiBJbgotdGhlIERlc2lnbiB2aWV3LCBjbGljayB0aGUgYmluZGluZyBvYmplY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCB0eXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmluZGluZwoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjg5NTAxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJTZXR0aW5nIGEgYmluZGluZyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIGJpbmRpbmcgaXMgYSB0b3AgbGV2ZWwgV1NETCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIGNvbmNyZXRlIHNwZWNpZmljYXRpb24gcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgbWVzc2FnZXMgdG8gYW5kIGZyb20gYSB3ZWIgc2VydmljZS4gQSBiaW5kaW5nIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiBUaGUgc3RydWN0dXJlIG9mIGEgYmluZGluZyBjb3JyZXNwb25kcyB2ZXJ5IGNsb3NlbHkgdG8gdGhhdCBvZiB0aGUgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBjb250YWlucyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIChmb3IgZXhhbXBsZSwgU09BUCwgaHR0cCwgYW5kIG1pbWUpIHRoYXQgc3BlY2lmeSBwcm90b2NvbCBzcGVjaWZpYyBkZXRhaWxzLiBFYWNoIHBvcnQgd2l0aGluIGEgc2VydmljZSByZWZlcmVuY2VzIGV4YWN0bHkgb25lIGJpbmRpbmcuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgYmluZGluZyBpcyBhIHRvcCBsZXZlbCBXU0RMIG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgY29uY3JldGUgc3BlY2lmaWNhdGlvbiByZWdhcmRpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZiBtZXNzYWdlcyB0byBhbmQgZnJvbSBhIHdlYiBzZXJ2aWNlLiBBIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFRoZSBzdHJ1Y3R1cmUgb2YgYSBiaW5kaW5nIGNvcnJlc3BvbmRzIHZlcnkgY2xvc2VseSB0byB0aGF0IG9mIHRoZSBwb3J0IHR5cGUuIFRoZSBiaW5kaW5nIGNvbnRhaW5zIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgKGZvciBleGFtcGxlLCBTT0FQLCBodHRwLCBhbmQgbWltZSkgdGhhdCBzcGVjaWZ5IHByb3RvY29sIHNwZWNpZmljIGRldGFpbHMuIEVhY2ggcG9ydCB3aXRoaW4gYSBzZXJ2aWNlIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgYmluZGluZy4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGJpbmRpbmdzLCBjcmVhdGluZywgc2V0dGluZyBXU0RMIGJpbmRpbmdzLCBXU0RMIGZpbGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBiaW5kaW5ncywgY3JlYXRpbmcsIHNldHRpbmcgV1NETCBiaW5kaW5ncywgV1NETCBmaWxlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHNldGJpbmQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5TZXR0aW5nIGEgYmluZGluZzwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHNldGJpbmQiPjxhIG5hbWU9InRzZXRiaW5kIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5TZXR0aW5nIGEgYmluZGluZzwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgYmluZGluZyBpcyBhIHRvcCBsZXZlbCBXU0RMIG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgY29uY3JldGUgc3BlY2lmaWNhdGlvbgotcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgbWVzc2FnZXMgdG8gYW5kIGZyb20gYSB3ZWIgc2VydmljZS4gQSBiaW5kaW5nCi1yZWZlcmVuY2VzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4gVGhlIHN0cnVjdHVyZSBvZiBhIGJpbmRpbmcgY29ycmVzcG9uZHMgdmVyeQotY2xvc2VseSB0byB0aGF0IG9mIHRoZSBwb3J0IHR5cGUuIFRoZSBiaW5kaW5nIGNvbnRhaW5zIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLShmb3IgZXhhbXBsZSwgU09BUCwgaHR0cCwgYW5kIG1pbWUpIHRoYXQgc3BlY2lmeSBwcm90b2NvbCBzcGVjaWZpYyBkZXRhaWxzLgotRWFjaCBwb3J0IHdpdGhpbiBhIHNlcnZpY2UgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBiaW5kaW5nLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+WW91IGNhbiBjcmVhdGUgYSBiaW5kaW5nIGJ5IHJpZ2h0IGNsaWNraW5nIGluIGFueSBibGFuayBzcGFjZQotaW4gdGhlIERlc2lnbiB2aWV3IGFuZCBzZWxlY3RpbmcgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIEJpbmRpbmc8L3NwYW4+LiBZb3UgY2FuCi1jcmVhdGUgYSBuZXcgYmluZGluZywgcmV1c2UgYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQgb25lLiA8L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJjcmVhdGVuZXdiaW5kIj48YSBuYW1lPSJjcmVhdGVuZXdiaW5kIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkNyZWF0aW5nIGEgbmV3IGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gY3JlYXRlIGEgbmV3IGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIHBvcnQgYW5kIGNsaWNrIDxzdHJvbmc+U2V0IEJpbmRpbmcKLSZndDsgTmV3IEJpbmRpbmc8L3N0cm9uZz4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgYmluZGluZy48L3NwYW4+IFRoZQotbmFtZSBzaG91bGQgYmUgdW5pcXVlIGFtb25nIGFsbCBiaW5kaW5ncyBkZWZpbmVkIHdpdGhpbiB0aGUgZW5jbG9zaW5nIFdTREwKLWRvY3VtZW50LiBDbGljayA8c3Ryb25nPk9LLjwvc3Ryb25nPiBUbyBzZWxlY3QgdGhlIG5ldyBiaW5kaW5nLCBjbGljayB0aGUgYmluZGluZyBvYmplY3QuCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5kaW5nIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IEEgPHN0cm9uZz5Qb3J0VHlwZTwvc3Ryb25nPiBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZAotdGhlIGFic3RyYWN0IG1lc3NhZ2VzIGludm9sdmVkLiBZb3UgY2FuIGVpdGhlciBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvcgoteW91ciBiaW5kaW5nLCByZXVzZSBhbiBleGlzdGluZyBvbmUsIG9yIGltcG9ydCBvbmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLAotc2VlIDxhIGhyZWY9InRzZXRwcnR0LmRpdGEiPlNldHRpbmcgYSBQb3J0IFR5cGU8L2E+LjwvZGl2PgotPGRpdiBjbGFzcz0idGlwIj48c3BhbiBjbGFzcz0idGlwdGl0bGUiPlRpcDo8L3NwYW4+IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgYmluZGluZwotZm9yIHlvdXIgcG9ydCB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBSaWdodCBjbGljayBvbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QmluZGluZ3M8L3NwYW4+IGZvbGRlcgotYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgQmluZGluZzwvc3Bhbj4uPC9kaXY+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0icmV1c2ViaW5kaW5nIj48YSBuYW1lPSJyZXVzZWJpbmRpbmciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UmV1c2luZyBhIGJpbmRpbmcgZm9yIGEgcG9ydDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyByZXVzZSBhIGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgc2VsZWN0IHlvdXIgcG9ydC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkZyb20gdGhlIDxzdHJvbmc+QmluZGluZzwvc3Ryb25nPiBkcm9wIGRvd24gbGlzdCwgc2VsZWN0IHRoZSBiaW5kaW5nIHlvdQotd2FudCB0byB1c2UuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9InJlZ2VuZXJhdGluZ2FiaW5kaW5nIj48YSBuYW1lPSJyZWdlbmVyYXRpbmdhYmluZGluZyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5SZWdlbmVyYXRpbmcgYSBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIHJlZ2VuZXJhdGUgYSBiaW5kaW5nLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+UmlnaHQtY2xpY2sgdGhlIGJpbmRpbmcgeW91IHdhbnQgdG8gcmVnZW5lcmF0ZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmF0ZSBCaW5kaW5nIENvbnRlbnQ8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U3BlY2lmeSB0aGUgcmVxdWlyZWQgYmluZGluZyBpbmZvcm1hdGlvbi4gSWYgeW91IGFyZSBtb2RpZnlpbmcKLWFuIGV4aXN0aW5nIGJpbmRpbmcsIHNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T3ZlcndyaXRlIGV4aXN0aW5nIGJpbmRpbmcgaW5mb3JtYXRpb248L3NwYW4+IGNoZWNrCi1ib3guPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImltcGJpbmRpbmciPjxhIG5hbWU9ImltcGJpbmRpbmciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+SW1wb3J0IGFuIGV4aXN0aW5nIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gaW1wb3J0IGFuIGV4aXN0aW5nIGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgIDxzdHJvbmc+U2V0IEJpbmRpbmcKLSZndDsgRXhpc3RpbmcgQmluZGluZy48L3N0cm9uZz48L3NwYW4+PC9saT4KLQotPGxpPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+WW91IGNhbiBpbXBvcnQgYSBiaW5kaW5nIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvc3Bhbj4KLTx1bD4KLTxsaT48c3Ryb25nPldvcmtzcGFjZTwvc3Ryb25nPjogbGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPjogbGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+Q3VycmVudCBSZXNvdXJjZTwvc3Ryb25nPjogbGlzdHMgdGhlIGJpbmRpbmcgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIKLWN1cnJlbnQgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0Ci1vZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8c3Ryb25nPkNob29zZTwvc3Ryb25nPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC91bD4KLQotPC9saT4KLQotPGxpPjxzcGFuPlRoZSBiaW5kaW5ncyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi4gSW4KLXRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIGJpbmRpbmcgb2JqZWN0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpbmRpbmcKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRwcnR0LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRwcnR0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4OTczZmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0c2V0cHJ0dCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5TZXR0aW5nIGEgcG9ydCB0eXBlPC90aXRsZT4KLTxzaG9ydGRlc2M+QSBwb3J0IHR5cGUgaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQgdGhlIGFic3RyYWN0Ci1tZXNzYWdlcyBpbnZvbHZlZC4gRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4KLUEgcG9ydCB0eXBlIGlzIHJlZmVyZW5jZWQgYnkgYSBiaW5kaW5nIG9iamVjdC4gRWFjaCBiaW5kaW5nIHJlZmVyZW5jZXMgZXhhY3RseQotb25lIHBvcnQgdHlwZS4gU2luY2UgZWFjaCBwb3J0IHJlZmVycyB0byBleGFjdGx5IG9uZSBiaW5kaW5nLCBlYWNoIHBvcnQgaGFzCi1leGFjdGx5IG9uZSBwb3J0IHR5cGUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREwgZmlsZXM8aW5kZXh0ZXJtPnNldHRpbmcgcG9ydCB0eXBlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnNldHRpbmcgcG9ydCB0eXBlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5Zb3UgY2FuIGNyZWF0ZSBhIHBvcnQgdHlwZSBieSByaWdodCBjbGlja2luZyBpbiBhbnkgYmxhbmsgc3BhY2UKLWluIHRoZSBEZXNpZ24gdmlldyBhbmQgc2VsZWN0aW5nIDx1aWNvbnRyb2w+QWRkIFBvcnRUeXBlPC91aWNvbnRyb2w+LiBBcyBhCi1jb252ZW5pZW5jZSB5b3UgY2FuIGFsc28gYWRkIGEgcG9ydCB0eXBlIHZpYSBhIGJpbmRpbmcuIFRoaXMgYWxsb3dzIHlvdSB0bwotY3JlYXRlIGEgcG9ydCB0eXBlIGFuZCBtb2RpZnkgdGhlIGJpbmRpbmcgdG8gcmVmZXJlbmNlIHRoZSBuZXcgcG9ydCB0eXBlIGluCi1vbmUgYWN0aW9uLiBZb3UgY2FuIGVpdGhlciBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcsIHJlLXVzZQotYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQgb25lLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImNyZWF0ZXBvcnR0eXBlIj4KLTx0aXRsZT5DcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCBjb21wbGV0ZQotdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayA8Yj5TZXQgUG9ydFR5cGUgPiBOZXcgUG9ydFR5cGU8L2I+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UeXBlIHRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgaW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkIGFuZCBjbGljayA8Yj5PSzwvYj4uPC9jbWQ+Ci08aW5mbz5UaGUgbmFtZSBzaG91bGQgYmUgdW5pcXVlIG5hbWUgYW1vbmcgYWxsIHBvcnQgdHlwZXMgZGVmaW5lZCB3aXRoaW4gaW4KLXRoZSBlbmNsb3NpbmcgV1NETCBkb2N1bWVudC4gVG8gc2VsZWN0IHRoZSBuZXcgcG9ydCB0eXBlLCBjbGljayB0aGUgcG9ydCB0eXBlCi1vYmplY3QuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD4gPG5vdGUgdHlwZT0idGlwIj5Zb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nCi11c2luZyB0aGUgT3V0bGluZSB2aWV3Ljwvbm90ZT48cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBwb3J0IHR5cGUsIHlvdSBjYW4KLWFkZCBvcGVyYXRpb25zIHRvIGl0LCB3aGljaCBjYW4gc2VuZCBhbmQgcmVjZWl2ZSBtZXNzYWdlcy48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9InJldXNlcG9ydHR5cGUiPgotPHRpdGxlPlJldXNlIGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SWYgeW91IHdhbnQgdG8gcmV1c2UgYSBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgY29tcGxldGUgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgIDxiPlNldCBQb3J0IFR5cGUgPiBFeGlzdGluZyBQb3J0VHlwZTwvYj4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBsaXN0IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotb3B0aW9uczo8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT48Yj5Xb3Jrc3BhY2U8L2I+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkVuY2xvc2luZyBQcm9qZWN0PC9iPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+Q3VycmVudCBSZXNvdXJjZTwvYj46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQKLWZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPldvcmtpbmcgU2V0czwvYj46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZAotc2V0IG9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBleGlzdGluZyBwb3J0IHR5cGVzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uPC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJpbXBvcnRwb3J0dHlwZSI+Ci08dGl0bGU+SW1wb3J0IGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SWYgeW91IHdhbnQgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLAotY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayAgPGI+U2V0IFBvcnQgVHlwZSA+IEV4aXN0aW5nIFBvcnRUeXBlLjwvYj48L2NtZD4KLTwvc3RlcD4KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcKLXRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5Zb3UgY2FuIGltcG9ydCBhIHBvcnQgdHlwZSBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT48Yj5Xb3Jrc3BhY2U8L2I+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkVuY2xvc2luZyBQcm9qZWN0PC9iPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+V29ya2luZyBTZXRzPC9iPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkCi1zZXQgb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPGI+Q2hvb3NlPC9iPi4gWW91IGNhbiBzZWxlY3QKLWZpbGVzIGZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlCi1zZWxlY3RlZCB0aGUgZmlsZXMsIGNsaWNrIDxiPk9LPC9iPi48L2Nob2ljZT4KLTwvY2hvaWNlcz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VGhlIHBvcnQgdHlwZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxiPk9LPC9iPi4KLUluIHRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIHBvcnQgdHlwZSBvYmplY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCB0eXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB0eXBlCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRwcnR0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRwcnR0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjliYjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlNldHRpbmcgYSBwb3J0IHR5cGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBwb3J0IHR5cGUgaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQgdGhlIGFic3RyYWN0IG1lc3NhZ2VzIGludm9sdmVkLiBFYWNoIG9wZXJhdGlvbiByZWZlcnMgdG8gYW4gaW5wdXQgbWVzc2FnZSBhbmQgb3V0cHV0IG1lc3NhZ2VzLiBBIHBvcnQgdHlwZSBpcyByZWZlcmVuY2VkIGJ5IGEgYmluZGluZyBvYmplY3QuIEVhY2ggYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4gU2luY2UgZWFjaCBwb3J0IHJlZmVycyB0byBleGFjdGx5IG9uZSBiaW5kaW5nLCBlYWNoIHBvcnQgaGFzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBwb3J0IHR5cGUgaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQgdGhlIGFic3RyYWN0IG1lc3NhZ2VzIGludm9sdmVkLiBFYWNoIG9wZXJhdGlvbiByZWZlcnMgdG8gYW4gaW5wdXQgbWVzc2FnZSBhbmQgb3V0cHV0IG1lc3NhZ2VzLiBBIHBvcnQgdHlwZSBpcyByZWZlcmVuY2VkIGJ5IGEgYmluZGluZyBvYmplY3QuIEVhY2ggYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4gU2luY2UgZWFjaCBwb3J0IHJlZmVycyB0byBleGFjdGx5IG9uZSBiaW5kaW5nLCBlYWNoIHBvcnQgaGFzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMIGZpbGVzLCBzZXR0aW5nIHBvcnQgdHlwZXMsIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwgZmlsZXMsIHNldHRpbmcgcG9ydCB0eXBlcywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0c2V0cHJ0dCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlNldHRpbmcgYSBwb3J0IHR5cGU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRzZXRwcnR0Ij48YSBuYW1lPSJ0c2V0cHJ0dCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+U2V0dGluZyBhIHBvcnQgdHlwZTwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdAotbWVzc2FnZXMgaW52b2x2ZWQuIEVhY2ggb3BlcmF0aW9uIHJlZmVycyB0byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuCi1BIHBvcnQgdHlwZSBpcyByZWZlcmVuY2VkIGJ5IGEgYmluZGluZyBvYmplY3QuIEVhY2ggYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkKLW9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcwotZXhhY3RseSBvbmUgcG9ydCB0eXBlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+WW91IGNhbiBjcmVhdGUgYSBwb3J0IHR5cGUgYnkgcmlnaHQgY2xpY2tpbmcgaW4gYW55IGJsYW5rIHNwYWNlCi1pbiB0aGUgRGVzaWduIHZpZXcgYW5kIHNlbGVjdGluZyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgUG9ydFR5cGU8L3NwYW4+LiBBcyBhCi1jb252ZW5pZW5jZSB5b3UgY2FuIGFsc28gYWRkIGEgcG9ydCB0eXBlIHZpYSBhIGJpbmRpbmcuIFRoaXMgYWxsb3dzIHlvdSB0bwotY3JlYXRlIGEgcG9ydCB0eXBlIGFuZCBtb2RpZnkgdGhlIGJpbmRpbmcgdG8gcmVmZXJlbmNlIHRoZSBuZXcgcG9ydCB0eXBlIGluCi1vbmUgYWN0aW9uLiBZb3UgY2FuIGVpdGhlciBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcsIHJlLXVzZQotYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQgb25lLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImNyZWF0ZXBvcnR0eXBlIj48YSBuYW1lPSJjcmVhdGVwb3J0dHlwZSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5DcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCBjb21wbGV0ZQotdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayA8c3Ryb25nPlNldCBQb3J0VHlwZSAmZ3Q7IE5ldyBQb3J0VHlwZTwvc3Ryb25nPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgdGhlIG5hbWUgb2YgdGhlIHBvcnQgdHlwZSBpbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkIGFuZCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+Ljwvc3Bhbj4KLSBUaGUgbmFtZSBzaG91bGQgYmUgdW5pcXVlIG5hbWUgYW1vbmcgYWxsIHBvcnQgdHlwZXMgZGVmaW5lZCB3aXRoaW4gaW4KLXRoZSBlbmNsb3NpbmcgV1NETCBkb2N1bWVudC4gVG8gc2VsZWN0IHRoZSBuZXcgcG9ydCB0eXBlLCBjbGljayB0aGUgcG9ydCB0eXBlCi1vYmplY3QuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCB0eXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB0eXBlCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+IDxkaXYgY2xhc3M9InRpcCI+PHNwYW4gY2xhc3M9InRpcHRpdGxlIj5UaXA6PC9zcGFuPiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nCi11c2luZyB0aGUgT3V0bGluZSB2aWV3LjwvZGl2PgotPHA+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgcG9ydCB0eXBlLCB5b3UgY2FuCi1hZGQgb3BlcmF0aW9ucyB0byBpdCwgd2hpY2ggY2FuIHNlbmQgYW5kIHJlY2VpdmUgbWVzc2FnZXMuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9InJldXNlcG9ydHR5cGUiPjxhIG5hbWU9InJldXNlcG9ydHR5cGUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UmV1c2UgYSBwb3J0IHR5cGUgZm9yIGEgYmluZGluZzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5JZiB5b3Ugd2FudCB0byByZXVzZSBhIHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCBjb21wbGV0ZSB0aGUKLWZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgb24gYSBiaW5kaW5nIG9iamVjdCAobm90ZSB0aGF0Ci1wb3J0IG11c3QgcmVmZXJlbmNlIGEgYmluZGluZykgYW5kIGNsaWNrICA8c3Ryb25nPlNldCBQb3J0IFR5cGUgJmd0OyBFeGlzdGluZyBQb3J0VHlwZTwvc3Ryb25nPi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHN0cm9uZz5PcHRpb25hbDogPC9zdHJvbmc+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcKLXRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5Zb3UgY2FuIGNoYW5nZSB0aGUgc2NvcGUgb2YgdGhlIGxpc3QgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCi1vcHRpb25zOjwvc3Bhbj4KLTx1bD4KLTxsaT48c3Ryb25nPldvcmtzcGFjZTwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkVuY2xvc2luZyBQcm9qZWN0PC9zdHJvbmc+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkN1cnJlbnQgUmVzb3VyY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQKLWZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+V29ya2luZyBTZXRzPC9zdHJvbmc+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQKLXNldCBvZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8c3Ryb25nPkNob29zZTwvc3Ryb25nPi4gWW91IGNhbiBzZWxlY3QKLWZpbGVzIGZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlCi1zZWxlY3RlZCB0aGUgZmlsZXMsIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC91bD4KLQotPC9saT4KLQotPGxpPjxzcGFuPlRoZSBleGlzdGluZyBwb3J0IHR5cGVzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImltcG9ydHBvcnR0eXBlIj48YSBuYW1lPSJpbXBvcnRwb3J0dHlwZSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5JbXBvcnQgYSBwb3J0IHR5cGUgZm9yIGEgYmluZGluZzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5JZiB5b3Ugd2FudCB0byBpbXBvcnQgYW4gZXhpc3RpbmcgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcsCi1jb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgIDxzdHJvbmc+U2V0IFBvcnQgVHlwZSAmZ3Q7IEV4aXN0aW5nIFBvcnRUeXBlLjwvc3Ryb25nPjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZwotdG8gZmlsdGVyIHRoZSBsaXN0IG9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPllvdSBjYW4gaW1wb3J0IGEgcG9ydCB0eXBlIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvc3Bhbj4KLTx1bD4KLTxsaT48c3Ryb25nPldvcmtzcGFjZTwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkVuY2xvc2luZyBQcm9qZWN0PC9zdHJvbmc+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPldvcmtpbmcgU2V0czwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkCi1zZXQgb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgcG9ydCB0eXBlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi4KLUluIHRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIHBvcnQgdHlwZSBvYmplY3QuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCB0eXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB0eXBlCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c2RsX2J1aWxkX3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c2RsX2J1aWxkX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDIxNzIxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3NkbF9idWlsZF90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgbWFwIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIE1hcC8vRU4iDQotICJtYXAuZHRkIj4NCi08bWFwIGlkPSJ3c2RsYnVpbGRtYXAiIHRpdGxlPSJVc2VkIG9ubHkgdG8gYnVpbGQgcGx1Z2luIC0gbm90IHVzZWQgaW4gcHJvZHVjdCI+DQotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgZWRpdG9yIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90aW1wd3NkbC5kaXRhIiBuYXZ0aXRsZT0iSW1wb3J0aW5nIFdTREwgZmlsZXMiPjwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RjcnR3c2RsLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBXU0RMIGZpbGVzIj48L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NkbGVkLmRpdGEiIG5hdnRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGVkaXRvciI+DQotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RlZHR3c2RsLmRpdGEiIG5hdnRpdGxlPSJFZGl0aW5nIFdTREwgZmlsZXMiPg0KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkc3J2Yy5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgc2VydmljZSI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZHBvcnQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90c2V0cHJ0dC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iU2V0dGluZyBhIHBvcnQgdHlwZSI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idGFza3MvdHNldGJpbmQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IlNldHRpbmcgYSBiaW5kaW5nIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkb3Blci5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGFuIG9wZXJhdGlvbiI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZG1lc3MuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhIG1lc3NhZ2UiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRwYXJ0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idGFza3MvdGNydGltcHQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RjcnR0eXBlLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSI+DQotPC90b3BpY3JlZj4NCi08L3RvcGljcmVmPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5kaXRhIg0KLW5hdnRpdGxlPSJFeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBzY29wZT0icGVlciI+PC90b3BpY3JlZj4NCi08L21hcD4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzZGxfYnVpbGRfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3NkbF9idWlsZF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDlmZTZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3NkbF9idWlsZF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsYWJlbD0iVXNlZCBvbmx5IHRvIGJ1aWxkIHBsdWdpbiAtIG5vdCB1c2VkIGluIHByb2R1Y3QiIHRvcGljPSJjb25jZXB0cy9jd3NkbGVkLmh0bWwiPgotPHRvcGljIGxhYmVsPSJFZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3IiIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJJbXBvcnRpbmcgYSBXU0RMIGZpbGUiIGhyZWY9InRhc2tzL3RpbXB3c2RsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlIiBocmVmPSJ0YXNrcy90Y3J0d3NkbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvciIgaHJlZj0iY29uY2VwdHMvY3dzZGxlZC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iRWRpdGluZyBXU0RMIGZpbGVzIiBocmVmPSJ0YXNrcy90ZWR0d3NkbC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgc2VydmljZSIgaHJlZj0idGFza3MvdGFkZHNydmMuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIgaHJlZj0idGFza3MvdGFkZHBvcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJTZXR0aW5nIGEgcG9ydCB0eXBlIiBocmVmPSJ0YXNrcy90c2V0cHJ0dC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlNldHRpbmcgYSBiaW5kaW5nIiBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhbiBvcGVyYXRpb24iIGhyZWY9InRhc2tzL3RhZGRvcGVyLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgbWVzc2FnZSIgaHJlZj0idGFza3MvdGFkZG1lc3MuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIgaHJlZj0idGFza3MvdGFkZHBhcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50IiBocmVmPSJ0YXNrcy90Y3J0aW1wdC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIiBocmVmPSJ0YXNrcy90Y3J0dHlwZS5odG1sIi8+Ci08L3RvcGljPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iRXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWwiLz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGJmMWYyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgbWFwIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIE1hcC8vRU4iCi0gIm1hcC5kdGQiPgotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwI3dzd3NkbGVkaXRvcmMiCi1pZD0id3N3c2RsZWRpdG9yYyIgdGl0bGU9Indzd3NkbGVkaXRvcmMiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgZWRpdG9yIj4KLTwvdG9waWNyZWY+Ci08L21hcD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhODI2YjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGlua190bz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbCN3c3dzZGxlZGl0b3JjIiBsYWJlbD0id3N3c2RsZWRpdG9yYyIgdG9waWM9ImNvbmNlcHRzL2N3c2RsZWQuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvciIgaHJlZj0iY29uY2VwdHMvY3dzZGxlZC5odG1sIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3MGE1Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3N3c2RsZWRpdG9ydCIKLWlkPSJ3c3dzZGxlZGl0b3J0IiB0aXRsZT0id3N3c2RsZWRpdG9ydCI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGltcHdzZGwuZGl0YSIgbmF2dGl0bGU9IkltcG9ydGluZyBXU0RMIGZpbGVzIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RjcnR3c2RsLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBXU0RMIGZpbGVzIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgZWRpdG9yIj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90ZWR0d3NkbC5kaXRhIiBuYXZ0aXRsZT0iRWRpdGluZyBXU0RMIGZpbGVzIj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkc3J2Yy5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgc2VydmljZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRwb3J0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RzZXRwcnR0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJTZXR0aW5nIGEgcG9ydCB0eXBlIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHNldGJpbmQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IlNldHRpbmcgYSBiaW5kaW5nIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZG9wZXIuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhbiBvcGVyYXRpb24iPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkbWVzcy5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgbWVzc2FnZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRwYXJ0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RjcnRpbXB0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGNydHR5cGUuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuZGl0YSIKLW5hdnRpdGxlPSJFeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBzY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTwvbWFwPgotPD9QdWIgKjAwMDAwMDE3MTM/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk4NGUwOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGlua190bz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbCN3c3dzZGxlZGl0b3J0IiBsYWJlbD0id3N3c2RsZWRpdG9ydCIgdG9waWM9InRhc2tzL3RpbXB3c2RsLmh0bWwiPgotPHRvcGljIGxhYmVsPSJJbXBvcnRpbmcgYSBXU0RMIGZpbGUiIGhyZWY9InRhc2tzL3RpbXB3c2RsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlIiBocmVmPSJ0YXNrcy90Y3J0d3NkbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvciIgaHJlZj0iY29uY2VwdHMvY3dzZGxlZC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iRWRpdGluZyBXU0RMIGZpbGVzIiBocmVmPSJ0YXNrcy90ZWR0d3NkbC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgc2VydmljZSIgaHJlZj0idGFza3MvdGFkZHNydmMuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIgaHJlZj0idGFza3MvdGFkZHBvcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJTZXR0aW5nIGEgcG9ydCB0eXBlIiBocmVmPSJ0YXNrcy90c2V0cHJ0dC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlNldHRpbmcgYSBiaW5kaW5nIiBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhbiBvcGVyYXRpb24iIGhyZWY9InRhc2tzL3RhZGRvcGVyLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgbWVzc2FnZSIgaHJlZj0idGFza3MvdGFkZG1lc3MuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIgaHJlZj0idGFza3MvdGFkZHBhcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50IiBocmVmPSJ0YXNrcy90Y3J0aW1wdC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIiBocmVmPSJ0YXNrcy90Y3J0dHlwZS5odG1sIi8+Ci08L3RvcGljPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iRXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWwiLz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg1YTY5Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcl8xLjAuMC5qYXIKLWJhawotdGVtcApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDdjNDZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTczN2M5YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIE1heSAwNyAyMzowOToxMCBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc2ODAwMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tIAotCi0JVGhpcyBzY3JpcHQgYnVpbGQgdGhlIEhlbHAgcGx1Zy1pbiBieSB0cmFuc2Zvcm1pbmcgdGhlIERJVEEgc291cmNlIGZpbGVzIGludG8gSFRNTC4KLQkKLQlUbyB1c2UgdGhpcyBzY3JpcHQsIHlvdSBtdXN0IGluc3RhbGwgRElUQS1PVCBvbiB5b3VyIG1hY2hpbmUgaW4gdGhlIGRpcmVjdG9yeQotCWRlZmluZWQgYnkgdGhlIGRpdGEub3QuZGlyIHByb3BlcnR5LgotCQotCVJ1biB0aGUgZGVmYXVsdCB0YXJnZXQgYWZ0ZXIgeW91IGVkaXQgdGhlIERJVEEgc291cmNlIGZpbGVzIHRvIHJlZ2VuZXJhdGUgdGhlIEhUTUwuCi0JCi0JVG8gY3VzdG9taXplIHRoaXMgc2NyaXB0IGZvciBvdGhlciBIZWxwIHBsdWctaW5zLCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBhcmdzLmlucHV0IHByb3BlcnR5Ci0JdG8gYmUgdGhlIERJVEEgbWFwIGZpbGUgZm9yIHRoZSBwbHVnLWluLgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBsaW5rcyB0byBzaWJsaW5nIEhlbHAgcGx1Zy1pbnMgaGF2ZSBzY29wZT0icGVlciIsIG90aGVyd2lzZSB0aGUKLQlvdXRwdXQgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aWxsIGJlIHNoaWZ0ZWQgaW5jb3JyZWN0bHkuCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IHlvdSBoYW5kIGNvZGUgeW91ciBwbHVnaW4ueG1sIGZpbGUgaW4gbXlwbHVnaW4ueG1sLiBUaGlzIGZpbGUKLQl3aWxsIGJlIGNvcGllZCBvdmVyIHRoZSBnZW5lcmF0ZWQgcGx1Z2luLnhtbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGJlaW5nIGdlbmVyYXRlZCBjb3JyZWN0bHkKLQlieSBESVRBLU9ULgotCQotCUNoYW5nZUxvZzoKLQkyMDA2LTA0LTA1IEFydGh1ciBSeW1hbiA8cnltYW5AY2EuaWJtLmNvbT4KLQktIENyZWF0ZWQuCi0JMjAwOC0wNS0wNSBLYXRlIFByaWNlIDxrYXRlcEBjYS5pYm0uY29tPgotCS0gbW9kaWZpZWQgdG8gYWRkIGdlbmVyYXRpb24gb2YgcHJlLWJ1aWx0IGhlbHAgaW5kZXguIAotCS0gTXVzdCBkZWxldGUgL2luZGV4IGZvbGRlciBiZWZvcmUgcnVubmluZyBidWlsZAotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIxLjUuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3N3c2l0ZXN0X3RvYy5kaXRhbWFwIiAvPiAgICAJCQotCQkJPHByb3BlcnR5IG5hbWU9ImNsZWFuLnRlbXAiIHZhbHVlPSJ0cnVlIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEuZXh0bmFtZSIgdmFsdWU9Ii5kaXRhIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEudGVtcC5kaXIiIGxvY2F0aW9uPSJ0ZW1wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC5kaXIiIGxvY2F0aW9uPSIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJidWlsZC5pbmRleCIgZGVzY3JpcHRpb249IkJ1aWxkcyBzZWFyY2ggaW5kZXggZm9yIHRoZSBwbHVnLWluIiBpZj0iZWNsaXBzZS5ydW5uaW5nIj4KLQkgICAgIDxoZWxwLmJ1aWxkSGVscEluZGV4IG1hbmlmZXN0PSJwbHVnaW4ueG1sIiBkZXN0aW5hdGlvbj0iLiIvPgotCTwvdGFyZ2V0PgkKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAzYjc1YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAxLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZWIxN2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGltYWdlcy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgd3N3c2l0ZXN0X3RvYy54bWwsXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICB0YXNrcy8qLmRpdGEKLWJpbi5leGNsdWRlcyA9IERvY0J1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICBteVBsdWdpbioueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3RyYWZmaWMuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy90cmFmZmljLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMxZWE0YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3RyYWZmaWMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy93c2l2YWxpY28uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy93c2l2YWxpY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmNhZDg0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbWFnZXMvd3NpdmFsaWNvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9fMy5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvXzMuY2ZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA5N2QzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9fMy5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzZjQ3MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MDMyMzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMTc6MzQ6MjMgRURUIDIwMDgNCi1vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyPW9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJcbjEuMC4yMDMucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWZhMDlkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMTQgMTc6MzQ6MjMgRURUIDIwMDgNCi1sdWNlbmU9MS45LjEudjIwMDgwMzA2MTgxMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4zLjEwMC52MjAwODA0MjU/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzA4ZGRmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDE0IDE3OjM0OjIzIEVEVCAyMDA4DQotL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YjU3OTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3OTZhY2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUaGlzIGlzIHRoZSBwbHVnaW4gZm9yIGRlY2xhcmluZyB0aGUgaGVscCAgICAgICAgIC0tPgotPCEtLSBjb250cmlidXRpb25zIGZvciB1c2luZyB0aGUgdG9vbC4gICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgPHRvYyBmaWxlPSJ3c3dzaXRlc3RfdG9jLnhtbCIvPiAKLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+ICAKLTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci5tYXBsaXN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIubWFwbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q1OGEyNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzaXRlc3RfdG9jLmRpdGFtYXAiLz4KLSAgPC9uYXY+Ci0gIDxsaW5rPgotICAgIDxtYXAgZmlsZT0id3N3c2l0ZXN0X3RvYy5kaXRhbWFwIi8+Ci0gIDwvbGluaz4KLTwvbWFwbGlzdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMmQ0YjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGluZGV4PgotICA8ZW50cnkga2V5d29yZD0iV1NETCBmaWxlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2RsdmFsLmh0bWwjdHdzZGx2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIFdTREwgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0idmFsaWRhdGluZyBXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NkbHZhbC5odG1sI3R3c2RsdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXU0RMIGZpbGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyB0cmFmZmljIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sI3Rtb25pdG9yIiB0aXRsZT0iVXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciIgdGl0bGU9IlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImludGVyb3BlcmFiaWxpdHkiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmciPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzaXZhbC5odG1sI3R3c2l2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJ2YWxpZGF0aW5nIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJpbnRlcm9wZXJhYmlsaXR5Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iVENQL0lQIE1vbml0b3IiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0ZXN0aW5nIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciIgdGl0bGU9IlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkzNmZlYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSAgICAgPSBXUy1JIFZhbGlkYXRpb24gRG9jdW1lbnRhdGlvbgotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc5NmFjZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUaGlzIGlzIHRoZSBwbHVnaW4gZm9yIGRlY2xhcmluZyB0aGUgaGVscCAgICAgICAgIC0tPgotPCEtLSBjb250cmlidXRpb25zIGZvciB1c2luZyB0aGUgdG9vbC4gICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgPHRvYyBmaWxlPSJ3c3dzaXRlc3RfdG9jLnhtbCIvPiAKLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+ICAKLTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDZmNmU5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRtb25pdG9yIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlVzaW5nIHRoZSBUQ1AvSVAgb3IgU09BUCBtb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSBhbmQgV2ViIHNlcnZpY2UgY2xpZW50LAoteW91IGNhbiBtb25pdG9yIHRoZSBXZWIgc2VydmljZSdzIFNPQVAgdHJhZmZpYyB1c2luZyB0aGUgVENQL0lQIE1vbml0b3IuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtIGtleXJlZj0idG1vbml0b3J8MXxUQ1AvSVBNb25pdG9ydGVzdGluZ1dlYnNlcnZpY2VzIiBzdGF0dXM9InVuY2hhbmdlZCI+VENQL0lQCi1Nb25pdG9yPGluZGV4dGVybT50ZXN0aW5nIFdlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0ga2V5cmVmPSJ0bW9uaXRvcnwyfFdlYnNlcnZpY2VzdGVzdGluZ3RyYWZmaWMiCi1zdGF0dXM9InVuY2hhbmdlZCI+V2ViIHNlcnZpY2VzPGluZGV4dGVybT50ZXN0aW5nIHRyYWZmaWM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0ga2V5cmVmPSJ0bW9uaXRvcnwzfFdlYnNlcnZpY2VzbW9uaXRvcmluZ1RDUC9JUHRyYWZmaWMiIHN0YXR1cz0idW5jaGFuZ2VkIj5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5tb25pdG9yaW5nIFRDUC9JUCB0cmFmZmljPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPjxwPiBQcmVyZXF1aXNpdGVzOiA8L3A+PHVsPgotPGxpPkdlbmVyYXRlIGEgV2ViIHNlcnZpY2U8L2xpPgotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uPC9saT4KLTwvdWw+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBzZXJ2aWNlIG9yIFdlYiBzZXJ2aWNlCi1jbGllbnQgd2l6YXJkcywgeW91IGNhbiBzZWxlY3QgdG8gc2V0IHVwIGFuZCBydW4gdGhlIFRDUC9JUCBNb25pdG9yIGF1dG9tYXRpY2FsbHkuCi1BbHRlcm5hdGVseSwgeW91IGNhbiBzZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yIG1hbnVhbGx5IGJ5IGNvbXBsZXRpbmcgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIHNhbXBsZSBhcHBsaWNhdGlvbiwgaW52b2tlIHRoZSBnZXRFbmRQb2ludCBtZXRob2QuIFJlY29yZAotdGhpcyBlbmRwb2ludC4gVGhlIGRlZmF1bHQgZW5kcG9pbnQgZm9yIGEgV2ViIHNlcnZpY2UgaXM6IGh0dHA6Ly9sb2NhbGhvc3Q6Jmx0O3BvcnQ+LyZsdDt3ZWIKLW1vZHVsZSBjb250ZXh0IHJvb3Q+L3NlcnZpY2VzLyZsdDtwb3J0PjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q3JlYXRlIGEgc2VydmVyIHRvIGFjdCBhcyB0aGUgVENQL0lQIE1vbml0b3I6PC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPkZyb20gdGhlIFdpbmRvdyBtZW51LCBzZWxlY3QgPHVpY29udHJvbD5QcmVmZXJlbmNlczwvdWljb250cm9sPi4gPC9jbWQ+Ci08L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPkluIHRoZSBQcmVmZXJlbmNlcyB3aW5kb3csIGV4cGFuZCA8dWljb250cm9sPlJ1bi9EZWJ1ZzwvdWljb250cm9sPiwKLWFuZCB0aGVuIHNlbGVjdCA8dWljb250cm9sPlRDUC9JUCBNb25pdG9yPC91aWNvbnRyb2w+LiA8L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCB0aGUgPHVpY29udHJvbD5TaG93IFRDUC9JUCBNb25pdG9yIFZpZXcgd2hlbiB0aGVyZSBpcwotYWN0aXZpdHk8L3VpY29udHJvbD4gY2hlY2sgYm94LiA8L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlVuZGVyIHRoZSBUQ1AvSVAgTW9uaXRvcnMgbGlzdHMsIGNsaWNrIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LgotQSBOZXcgTW9uaXRvciBkaWFsb2cgb3BlbnMuPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5TcGVjaWZ5IHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6IDwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08Y2hvaWNldGFibGU+Ci08Y2hoZWFkPjxjaG9wdGlvbmhkPk9wdGlvbjwvY2hvcHRpb25oZD48Y2hkZXNjaGQ+RGVzY3JpcHRpb248L2NoZGVzY2hkPjwvY2hoZWFkPgotPGNocm93PjxjaG9wdGlvbj5Mb2NhbCBtb25pdG9yaW5nIHBvcnQ8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSBhIHVuaXF1ZQotcG9ydCBudW1iZXIgb24geW91ciBsb2NhbCBtYWNoaW5lLjwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPkhvc3QgbmFtZTwvY2hvcHRpb24+PGNoZGVzYz5TcGVjaWZ5IHRoZSBob3N0IG5hbWUgb3IgSVAgYWRkcmVzcwotb2YgdGhlIG1hY2hpbmUgd2hlcmUgdGhlIHNlcnZlciBpcyBydW5uaW5nLjwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPlBvcnQ8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHJlbW90ZQotc2VydmVyLjwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPlR5cGU8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSB3aGV0aGVyIHRoZSByZXF1ZXN0IHR5cGUgZnJvbQotdGhlIFdlYiBicm93c2VyIGFyZSBzZW50IGJ5IEhUVFAgb3IgVENQL0lQLiBJZiB0aGUgSFRUUCBvcHRpb24gaXMgc2VsZWN0ZWQKLXRoZSByZXF1ZXN0cyBmcm9tIHRoZSBXZWIgYnJvd3NlciBhcmUgbW9kaWZpZWQgc28gdGhhdCB0aGUgSFRUUCBoZWFkZXIgcG9pbnRzCi10byB0aGUgcmVtb3RlIG1hY2hpbmUgYW5kIHNlcGFyYXRlZCBpZiBtdWx0aXBsZSBIVFRQIHJlcXVlc3RzIGFyZSByZWNlaXZlZAotaW4gdGhlIHNhbWUgY29ubmVjdGlvbi4gSWYgdGhlIFRDUC9JUCBvcHRpb24gaXMgc2VsZWN0ZWQsIGFsbCB0aGUgcmVxdWVzdHMKLWFyZSBzZW50IGJ5dGUgZm9yIGJ5dGUuIDwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPlRpbWVvdXQ8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSBob3cgbG9uZyB5b3Ugd291bGQgbGlrZQotdGhlIG1vbml0b3IgdG8gd2FpdCBiZWZvcmUgYXR0ZW1wdGluZyB0byBjb25uZWN0IGFnYWluLjwvY2hkZXNjPjwvY2hyb3c+Ci08L2Nob2ljZXRhYmxlPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5JbiBvcmRlciB0byByb3V0ZSB0aGUgV2ViIHNlcnZpY2UgdGhyb3VnaCB0aGUgbW9uaXRvciwgdGhlIGVuZHBvaW50Ci1vZiB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IG11c3QgYmUgY2hhbmdlZC4gVGhlIFRDUC9JUCBNb25pdG9yIGxpc3RlbnMgb24gcG9ydAotOTA4MS4gSW4gdGhlIFdlYiBicm93c2VyIHdpbmRvdyB1c2VkIGluIHN0ZXAgMSwgaW52b2tlIHRoZSBzZXRFbmRQb2ludCBtZXRob2QsCi1hbmQgY2hhbmdlIHRoZSBlbmRwb2ludCBzbyB0aGF0IGl0IGRpcmVjdHMgdG8gcG9ydCA5MDgxLiBGb3IgZXhhbXBsZSwgdGhlCi1kZWZhdWx0IHdvdWxkIGJlOiA8Y29kZXBoPmh0dHA6Ly9sb2NhbGhvc3Q6OTA4MS93ZWJfbW9kdWxlX2NvbnRleHRfcm9vdC9zZXJ2bGV0L3JwY3JvdXRlcjwvY29kZXBoPiBJbnZva2UKLXRoZSBnZXRFbmRQb2ludCBtZXRob2QgYWdhaW4gdG8gZW5zdXJlIHRoYXQgeW91ciBjaGFuZ2UgaGFzIGJlZW4gaW1wbGVtZW50ZWQuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCBhIFdlYiBzZXJ2aWNlIG1ldGhvZCBpbiB0aGUgTWV0aG9kcyBwYW5lLiBJbnZva2UgdGhpcyBtZXRob2QuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNoYW5nZSB0byB0aGUgVENQL0lQIE1vbml0b3IgdmlldyBieSBzZWxlY3RpbmcgdGhlIFRDUC9JUCBNb25pdG9yCi10YWIgaW4gdGhlIFNlcnZlcnMgdmlldy4gVGhpcyB3aWxsIGRpc3BsYXkgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcGFpcnMgdGhhdAotYXJlIGJlaW5nIHJvdXRlZCB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci4gSXQgd2lsbCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZwotcGljdHVyZTogIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRyYWZmaWMiIGhyZWY9Ii4uL2ltYWdlcy90cmFmZmljLmdpZiIKLXBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBlbnN1cmUgdGhhdCB5b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwKLXlvdSBjYW4gZ2VuZXJhdGUgYSBsb2cgZmlsZSBieSBjbGlja2luZyB0aGUgIDxpbWFnZSBhbHQ9IldTLUkgdmFsaWRhdGlvbiBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL3dzaXZhbGljby5naWYiPjwvaW1hZ2U+IGljb24uIEluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsCi1zZWxlY3QgYSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgYW5kIHNwZWNpZnkgd2hlcmUgeW91IHdhbnQgaXQgdG8gYmUgc3RvcmVkLiA8L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PlRoaXMgbG9nIGZpbGUgd2lsbCBiZSB2YWxpZGF0ZWQgZm9yIFdTLUkgY29tcGxpYW5jZS4gWW91IGNhbiBvcGVuCi10aGUgbG9nIGZpbGUgaW4gYW4gWE1MIGVkaXRvciB0byBleGFtaW5lIGl0cyBjb250ZW50cy48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PlNPQVA8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1MtSTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhMDM1NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJVc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCwgeW91IGNhbiBtb25pdG9yIHRoZSBXZWIgc2VydmljZSdzIFNPQVAgdHJhZmZpYyB1c2luZyB0aGUgVENQL0lQIE1vbml0b3IuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQsIHlvdSBjYW4gbW9uaXRvciB0aGUgV2ViIHNlcnZpY2UncyBTT0FQIHRyYWZmaWMgdXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlRDUC9JUCBNb25pdG9yLCB0ZXN0aW5nIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCB0ZXN0aW5nIHRyYWZmaWMsIFdlYiBzZXJ2aWNlcywgbW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlRDUC9JUCBNb25pdG9yLCB0ZXN0aW5nIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCB0ZXN0aW5nIHRyYWZmaWMsIFdlYiBzZXJ2aWNlcywgbW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0bW9uaXRvciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlVzaW5nIHRoZSBUQ1AvSVAgb3IgU09BUCBtb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0bW9uaXRvciI+PGEgbmFtZT0idG1vbml0b3IiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCwKLXlvdSBjYW4gbW9uaXRvciB0aGUgV2ViIHNlcnZpY2UncyBTT0FQIHRyYWZmaWMgdXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PHA+IFByZXJlcXVpc2l0ZXM6IDwvcD4KLTx1bD4KLTxsaT5HZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlPC9saT4KLQotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBzZXJ2aWNlIG9yIFdlYiBzZXJ2aWNlCi1jbGllbnQgd2l6YXJkcywgeW91IGNhbiBzZWxlY3QgdG8gc2V0IHVwIGFuZCBydW4gdGhlIFRDUC9JUCBNb25pdG9yIGF1dG9tYXRpY2FsbHkuCi1BbHRlcm5hdGVseSwgeW91IGNhbiBzZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yIG1hbnVhbGx5IGJ5IGNvbXBsZXRpbmcgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgc2FtcGxlIGFwcGxpY2F0aW9uLCBpbnZva2UgdGhlIGdldEVuZFBvaW50IG1ldGhvZC4gUmVjb3JkCi10aGlzIGVuZHBvaW50LiBUaGUgZGVmYXVsdCBlbmRwb2ludCBmb3IgYSBXZWIgc2VydmljZSBpczogaHR0cDovL2xvY2FsaG9zdDombHQ7cG9ydCZndDsvJmx0O3dlYgotbW9kdWxlIGNvbnRleHQgcm9vdCZndDsvc2VydmljZXMvJmx0O3BvcnQmZ3Q7PC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DcmVhdGUgYSBzZXJ2ZXIgdG8gYWN0IGFzIHRoZSBUQ1AvSVAgTW9uaXRvcjo8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+RnJvbSB0aGUgV2luZG93IG1lbnUsIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5QcmVmZXJlbmNlczwvc3Bhbj4uIDwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgUHJlZmVyZW5jZXMgd2luZG93LCBleHBhbmQgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuL0RlYnVnPC9zcGFuPiwKLWFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5UQ1AvSVAgTW9uaXRvcjwvc3Bhbj4uIDwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TaG93IFRDUC9JUCBNb25pdG9yIFZpZXcgd2hlbiB0aGVyZSBpcwotYWN0aXZpdHk8L3NwYW4+IGNoZWNrIGJveC4gPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5VbmRlciB0aGUgVENQL0lQIE1vbml0b3JzIGxpc3RzLCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+LgotQSBOZXcgTW9uaXRvciBkaWFsb2cgb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TcGVjaWZ5IHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6IDwvc3Bhbj48L2xpPgotCi08L29sPgotCi0KLTx0YWJsZSBjbGFzcz0iY2hvaWNldGFibGVib3JkZXIiIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0IiBydWxlcz0icm93cyIgZnJhbWU9ImhzaWRlcyIgYm9yZGVyPSIxIj4KLTx0aGVhZD48dHI+PHRoIHZhbGlnbj0iYm90dG9tIiBpZD0iTjEwMEY0LW9wdGlvbiI+T3B0aW9uPC90aD4KLTx0aCB2YWxpZ249ImJvdHRvbSIgaWQ9Ik4xMDBGNC1kZXNjIj5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPgotPHRib2R5PgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRjQtb3B0aW9uIiBpZD0iTjEwMTBEIj48c3Ryb25nPkxvY2FsIG1vbml0b3JpbmcgcG9ydDwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBGNC1kZXNjIE4xMDEwRCI+U3BlY2lmeSBhIHVuaXF1ZQotcG9ydCBudW1iZXIgb24geW91ciBsb2NhbCBtYWNoaW5lLjwvdGQ+Ci08L3RyPgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRjQtb3B0aW9uIiBpZD0iTjEwMTFDIj48c3Ryb25nPkhvc3QgbmFtZTwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBGNC1kZXNjIE4xMDExQyI+U3BlY2lmeSB0aGUgaG9zdCBuYW1lIG9yIElQIGFkZHJlc3MKLW9mIHRoZSBtYWNoaW5lIHdoZXJlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZy48L3RkPgotPC90cj4KLQotPHRyPjx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEY0LW9wdGlvbiIgaWQ9Ik4xMDEyQiI+PHN0cm9uZz5Qb3J0PC9zdHJvbmc+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEY0LWRlc2MgTjEwMTJCIj5TcGVjaWZ5IHRoZSBwb3J0IG51bWJlciBvZiB0aGUgcmVtb3RlCi1zZXJ2ZXIuPC90ZD4KLTwvdHI+Ci0KLTx0cj48dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBGNC1vcHRpb24iIGlkPSJOMTAxM0EiPjxzdHJvbmc+VHlwZTwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBGNC1kZXNjIE4xMDEzQSI+U3BlY2lmeSB3aGV0aGVyIHRoZSByZXF1ZXN0IHR5cGUgZnJvbQotdGhlIFdlYiBicm93c2VyIGFyZSBzZW50IGJ5IEhUVFAgb3IgVENQL0lQLiBJZiB0aGUgSFRUUCBvcHRpb24gaXMgc2VsZWN0ZWQKLXRoZSByZXF1ZXN0cyBmcm9tIHRoZSBXZWIgYnJvd3NlciBhcmUgbW9kaWZpZWQgc28gdGhhdCB0aGUgSFRUUCBoZWFkZXIgcG9pbnRzCi10byB0aGUgcmVtb3RlIG1hY2hpbmUgYW5kIHNlcGFyYXRlZCBpZiBtdWx0aXBsZSBIVFRQIHJlcXVlc3RzIGFyZSByZWNlaXZlZAotaW4gdGhlIHNhbWUgY29ubmVjdGlvbi4gSWYgdGhlIFRDUC9JUCBvcHRpb24gaXMgc2VsZWN0ZWQsIGFsbCB0aGUgcmVxdWVzdHMKLWFyZSBzZW50IGJ5dGUgZm9yIGJ5dGUuIDwvdGQ+Ci08L3RyPgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRjQtb3B0aW9uIiBpZD0iTjEwMTQ5Ij48c3Ryb25nPlRpbWVvdXQ8L3N0cm9uZz48L3RkPgotPHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRjQtZGVzYyBOMTAxNDkiPlNwZWNpZnkgaG93IGxvbmcgeW91IHdvdWxkIGxpa2UKLXRoZSBtb25pdG9yIHRvIHdhaXQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY29ubmVjdCBhZ2Fpbi48L3RkPgotPC90cj4KLQotPC90Ym9keT48L3RhYmxlPgotCi08L2xpPgotCi08bGk+PHNwYW4+SW4gb3JkZXIgdG8gcm91dGUgdGhlIFdlYiBzZXJ2aWNlIHRocm91Z2ggdGhlIG1vbml0b3IsIHRoZSBlbmRwb2ludAotb2YgdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCBtdXN0IGJlIGNoYW5nZWQuIFRoZSBUQ1AvSVAgTW9uaXRvciBsaXN0ZW5zIG9uIHBvcnQKLTkwODEuIEluIHRoZSBXZWIgYnJvd3NlciB3aW5kb3cgdXNlZCBpbiBzdGVwIDEsIGludm9rZSB0aGUgc2V0RW5kUG9pbnQgbWV0aG9kLAotYW5kIGNoYW5nZSB0aGUgZW5kcG9pbnQgc28gdGhhdCBpdCBkaXJlY3RzIHRvIHBvcnQgOTA4MS4gRm9yIGV4YW1wbGUsIHRoZQotZGVmYXVsdCB3b3VsZCBiZTogPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL2xvY2FsaG9zdDo5MDgxL3dlYl9tb2R1bGVfY29udGV4dF9yb290L3NlcnZsZXQvcnBjcm91dGVyPC9zYW1wPiBJbnZva2UKLXRoZSBnZXRFbmRQb2ludCBtZXRob2QgYWdhaW4gdG8gZW5zdXJlIHRoYXQgeW91ciBjaGFuZ2UgaGFzIGJlZW4gaW1wbGVtZW50ZWQuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCBhIFdlYiBzZXJ2aWNlIG1ldGhvZCBpbiB0aGUgTWV0aG9kcyBwYW5lLiBJbnZva2UgdGhpcyBtZXRob2QuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkNoYW5nZSB0byB0aGUgVENQL0lQIE1vbml0b3IgdmlldyBieSBzZWxlY3RpbmcgdGhlIFRDUC9JUCBNb25pdG9yCi10YWIgaW4gdGhlIFNlcnZlcnMgdmlldy4gVGhpcyB3aWxsIGRpc3BsYXkgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcGFpcnMgdGhhdAotYXJlIGJlaW5nIHJvdXRlZCB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci4gSXQgd2lsbCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZwotcGljdHVyZTogIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvdHJhZmZpYy5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgdHJhZmZpYyIgLz48YnIgLz48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlRvIGVuc3VyZSB0aGF0IHlvdXIgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIGlzIFdTLUkgY29tcGxpYW50LAoteW91IGNhbiBnZW5lcmF0ZSBhIGxvZyBmaWxlIGJ5IGNsaWNraW5nIHRoZSAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2l2YWxpY28uZ2lmIiBhbHQ9IldTLUkgdmFsaWRhdGlvbiBpY29uIiAvPiBpY29uLiBJbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLAotc2VsZWN0IGEgbmFtZSBmb3IgdGhlIGxvZyBmaWxlIGFuZCBzcGVjaWZ5IHdoZXJlIHlvdSB3YW50IGl0IHRvIGJlIHN0b3JlZC4gPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhpcyBsb2cgZmlsZSB3aWxsIGJlIHZhbGlkYXRlZCBmb3IgV1MtSSBjb21wbGlhbmNlLiBZb3UgY2FuIG9wZW4KLXRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbCI+U09BUDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiPldTLUk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5kaXRhIj5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjJiMzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHdzZGx2YWwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5JZiB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlIHRocm91Z2ggdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQKLXRoZSBXU0RMIHRoYXQgaXMgZ2VuZXJhdGVkIHNob3VsZCBiZSB2YWxpZC4gSG93ZXZlciwgaWYgeW91IGhhdmUgaW1wb3J0ZWQKLWEgV1NETCBmaWxlLCBvciBpZiB5b3UgYXJlIGNyZWF0aW5nIGEgV1NETCBmaWxlLCB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSBXU0RMCi10byBlbnN1cmUgaXQgaXMgdmFsaWQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtIGtleXJlZj0idHdzZGx2YWx8MXxXU0RMdmFsaWRhdGluZyIgc3RhdHVzPSJ1bmNoYW5nZWQiPldTREwKLWZpbGVzPGluZGV4dGVybT52YWxpZGF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybSBrZXlyZWY9InR3c2RsdmFsfDJ8V2Vic2VydmljZXN2YWxpZGF0aW5nV1NETCIKLXN0YXR1cz0idW5jaGFuZ2VkIj5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnZhbGlkYXRpbmcgV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5JZiB5b3UgaGF2ZSBzZWxlY3RlZCBSZXF1aXJlIG9yIFN1Z2dlc3QgV1MtSSBDb21wbGlhbmNlIG9uIHRoZQotV1MtSSBDb21wbGlhbmNlIHByZWZlcmVuY2UgcGFnZSwgdGhlIHZhbGlkYXRpb24gYWxzbyBjaGVja3MgV1MtSSBjb21wbGlhbmNlLgotSWYgeW91IGhhdmUgc2VsZWN0ZWQgSWdub3JlIFdTLUkgQ29tcGxpYW5jZSB0aGUgdmFsaWRhdG9yIHdpbGwgb25seSBjaGVjawotdGhlIHZhbGlkaXR5IG9mIHRoZSBXU0RMLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIFdTLUkgY29tcGxpYW5jZQotbGV2ZWxzLCByZWZlciB0bzogIDx4cmVmIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcnNlcnZwb2xwcmVmLmRpdGEiCi1zY29wZT0icGVlciI+IFNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwveHJlZj4uPC9wPjxwPlRoZSBXU0RMCi1WYWxpZGF0b3IgY29tcGFyZXMgdGhlIFdTREwgZmlsZSBpbiB5b3VyIHByb2plY3QgdG8gdGhlIFczQyAgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgc2NvcGU9ImV4dGVybmFsIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24KLUxhbmd1YWdlIChXU0RMKSAxLjE8L3hyZWY+IHNwZWNpZmljYXRpb25zLCBhbmQgdGhlIFdTLUkgY29tcGxpYW5jZSBzZXR0aW5ncwotdGhhdCB5b3UgaGF2ZSBzZWxlY3RlZC48L3A+PHA+VG8gdmFsaWRhdGUgeW91ciBXU0RMLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5TZWxlY3QgYSBXU0RMIGZpbGUgaW4gdGhlICA8Yj5Qcm9qZWN0IE5hdmlnYXRvcjwvYj4gdmlldy48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+UmlnaHQtY2xpY2sgdGhlIFdTREwgZmlsZSwgYW5kIHNlbGVjdCAgPGI+VmFsaWRhdGU8L2I+PC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+QW55IHByb2JsZW1zIGVuY291bnRlcmVkIHdoaWxlIHZhbGlkYXRpbmcgdGhlIGZpbGUgd2lsbCBiZSBzaG93biBpbgotdGhlICA8Yj5UYXNrczwvYj4gdmlldy48cD5XaGVuIHlvdSByZWJ1aWxkIGEgcHJvamVjdCBvciBzYXZlIGEgcmVzb3VyY2UsIHRoZQotV1NETCBWYWxpZGF0b3IgY2FuIGJlIHNldCB0byBydW4gYXV0b21hdGljYWxseS4gVG8gZG8gdGhpcywgZnJvbSB0aGUgV2luZG93Ci1tZW51LCBzZWxlY3QgIDxiPlByZWZlcmVuY2VzPC9iPiA+ICA8Yj5WYWxpZGF0aW9uPC9iPi4gRW5zdXJlIHRoYXQgdGhlIFdTREwKLVZhbGlkYXRvciBjaGVjayBib3ggaW4gdGhlIEJ1aWxkIGNvbHVtbiBpcyBzZWxlY3RlZC48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTLUk8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PlNldHRpbmcgV1MtSSBjb21wbGlhbmNlPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjliMzVkNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlZhbGlkYXRpbmcgV1NETCBmaWxlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJJZiB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlIHRocm91Z2ggdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdGhlIFdTREwgdGhhdCBpcyBnZW5lcmF0ZWQgc2hvdWxkIGJlIHZhbGlkLiBIb3dldmVyLCBpZiB5b3UgaGF2ZSBpbXBvcnRlZCBhIFdTREwgZmlsZSwgb3IgaWYgeW91IGFyZSBjcmVhdGluZyBhIFdTREwgZmlsZSwgeW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgV1NETCB0byBlbnN1cmUgaXQgaXMgdmFsaWQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IklmIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCB0aGUgV1NETCB0aGF0IGlzIGdlbmVyYXRlZCBzaG91bGQgYmUgdmFsaWQuIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGltcG9ydGVkIGEgV1NETCBmaWxlLCBvciBpZiB5b3UgYXJlIGNyZWF0aW5nIGEgV1NETCBmaWxlLCB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSBXU0RMIHRvIGVuc3VyZSBpdCBpcyB2YWxpZC4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMIGZpbGVzLCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwgZmlsZXMsIHZhbGlkYXRpbmcsIFdlYiBzZXJ2aWNlcywgdmFsaWRhdGluZyBXU0RMIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2RsdmFsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0d3NkbHZhbCI+PGEgbmFtZT0idHdzZGx2YWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlZhbGlkYXRpbmcgV1NETCBmaWxlczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+SWYgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkCi10aGUgV1NETCB0aGF0IGlzIGdlbmVyYXRlZCBzaG91bGQgYmUgdmFsaWQuIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGltcG9ydGVkCi1hIFdTREwgZmlsZSwgb3IgaWYgeW91IGFyZSBjcmVhdGluZyBhIFdTREwgZmlsZSwgeW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgV1NETAotdG8gZW5zdXJlIGl0IGlzIHZhbGlkLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IGhhdmUgc2VsZWN0ZWQgUmVxdWlyZSBvciBTdWdnZXN0IFdTLUkgQ29tcGxpYW5jZSBvbiB0aGUKLVdTLUkgQ29tcGxpYW5jZSBwcmVmZXJlbmNlIHBhZ2UsIHRoZSB2YWxpZGF0aW9uIGFsc28gY2hlY2tzIFdTLUkgY29tcGxpYW5jZS4KLUlmIHlvdSBoYXZlIHNlbGVjdGVkIElnbm9yZSBXUy1JIENvbXBsaWFuY2UgdGhlIHZhbGlkYXRvciB3aWxsIG9ubHkgY2hlY2sKLXRoZSB2YWxpZGl0eSBvZiB0aGUgV1NETC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyBXUy1JIGNvbXBsaWFuY2UKLWxldmVscywgcmVmZXIgdG86ICA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIj5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2E+LjwvcD4KLTxwPlRoZSBXU0RMCi1WYWxpZGF0b3IgY29tcGFyZXMgdGhlIFdTREwgZmlsZSBpbiB5b3VyIHByb2plY3QgdG8gdGhlIFczQyAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgMS4xPC9hPiBzcGVjaWZpY2F0aW9ucywgYW5kIHRoZSBXUy1JIGNvbXBsaWFuY2Ugc2V0dGluZ3MKLXRoYXQgeW91IGhhdmUgc2VsZWN0ZWQuPC9wPgotPHA+VG8gdmFsaWRhdGUgeW91ciBXU0RMLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPlNlbGVjdCBhIFdTREwgZmlsZSBpbiB0aGUgIDxzdHJvbmc+UHJvamVjdCBOYXZpZ2F0b3I8L3N0cm9uZz4gdmlldy48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+UmlnaHQtY2xpY2sgdGhlIFdTREwgZmlsZSwgYW5kIHNlbGVjdCAgPHN0cm9uZz5WYWxpZGF0ZTwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5BbnkgcHJvYmxlbXMgZW5jb3VudGVyZWQgd2hpbGUgdmFsaWRhdGluZyB0aGUgZmlsZSB3aWxsIGJlIHNob3duIGluCi10aGUgIDxzdHJvbmc+VGFza3M8L3N0cm9uZz4gdmlldy48cD5XaGVuIHlvdSByZWJ1aWxkIGEgcHJvamVjdCBvciBzYXZlIGEgcmVzb3VyY2UsIHRoZQotV1NETCBWYWxpZGF0b3IgY2FuIGJlIHNldCB0byBydW4gYXV0b21hdGljYWxseS4gVG8gZG8gdGhpcywgZnJvbSB0aGUgV2luZG93Ci1tZW51LCBzZWxlY3QgIDxzdHJvbmc+UHJlZmVyZW5jZXM8L3N0cm9uZz4gJmd0OyAgPHN0cm9uZz5WYWxpZGF0aW9uPC9zdHJvbmc+LiBFbnN1cmUgdGhhdCB0aGUgV1NETAotVmFsaWRhdG9yIGNoZWNrIGJveCBpbiB0aGUgQnVpbGQgY29sdW1uIGlzIHNlbGVjdGVkLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiPldTLUk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5kaXRhIj5TZXR0aW5nIFdTLUkgY29tcGxpYW5jZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NmM4YTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0d3NpdmFsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5WYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5BcyB3ZWxsIGFzIHNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBkdXJpbmcgV2ViIHNlcnZpY2VzCi1jcmVhdGlvbiwgeW91IGNhbiB2YWxpZGF0ZSBXUy1JIGNvbXBsaWFuY2Ugb2YgdGhlIFNPQVAgdHJhZmZpYyBhIFdlYiBzZXJ2aWNlCi1wcm9kdWNlcyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0ga2V5cmVmPSJ0d3NpdmFsfDF8V1MtSXZhbGlkYXRpbmciIHN0YXR1cz0idW5jaGFuZ2VkIj5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5pbnRlcm9wZXJhYmlsaXR5PGluZGV4dGVybT52YWxpZGF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtIGtleXJlZj0idHdzaXZhbHwyfFdlYnNlcnZpY2VzdmFsaWRhdGluZ1dTLUljb21wbGlhbmNlaW50ZXJvcGVyYWJpbGl0eXZhbGlkYXRpbmciCi1zdGF0dXM9InVuY2hhbmdlZCI+V2ViIHNlcnZpY2VzPGluZGV4dGVybT52YWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZTxpbmRleHRlcm0+aW50ZXJvcGVyYWJpbGl0eTxpbmRleHRlcm0+dmFsaWRhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtCi0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPiBQcmVyZXF1aXNpdGVzOiBCZWZvcmUgeW91IGNhbiB1c2UgdGhlIHZhbGlkYXRpb24gdG9vbCB0byBlbnN1cmUgdGhhdAoteW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsIHlvdSBtdXN0IGhhdmUgY29tcGxldGVkIHRoZQotZm9sbG93aW5nIHN0ZXBzOjx1bD4KLTxsaT5HZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InR3c2RsdmFsLmRpdGEiPlZhbGlkYXRlIHRoZSBXU0RMIHRoYXQgaXMgcHJvZHVjZWQuPC94cmVmPiA8L2xpPgotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0bW9uaXRvci5kaXRhIj5TZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yLjwveHJlZj4gRW5zdXJlIHRoYXQKLXlvdXIgV2ViIHNlcnZpY2Ugc2FtcGxlIGFwcGxpY2F0aW9uIHRyYWZmaWMgaXMgZGlyZWN0ZWQgdGhyb3VnaCB0aGUgVENQL0lQCi1Nb25pdG9yLjwvbGk+Ci08L3VsPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+VG8gdmFsaWRhdGUgeW91ciBXZWIgc2VydmljZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbnZva2UgYSBtZXRob2QgaW4geW91ciBXZWIgc2VydmljZSBzYW1wbGUgYXBwbGljYXRpb24gdG8gZ2VuZXJhdGUKLXRyYWZmaWMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBlbnN1cmUgdGhhdCB5b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwKLXlvdSBjYW4gZ2VuZXJhdGUgYSBsb2cgZmlsZSBieSBjbGlja2luZyB0aGUgIDxpbWFnZSBhbHQ9IlZhbGlkYXRlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2l2YWxpY28uZ2lmIj4KLTwvaW1hZ2U+IGljb24uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QgYSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgYW5kCi1zcGVjaWZ5IHdoZXJlIHlvdSB3YW50IGl0IHRvIGJlIHN0b3JlZC48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD4gVGhpcyBsb2cgZmlsZSB3aWxsIHNob3cgd2hldGhlciBvciBub3QgbWVzc2FnZXMgc2VudCB0byBhbmQgZnJvbQoteW91ciBXZWIgc2VydmljZSBhcmUgV1MtSSBjb21wbGlhbnQsIGFuZCBsaXN0IGFueSBub24tY29tcGxpYW50IGVsZW1lbnRzLgotWW91IGNhbiBvcGVuIHRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1MtSTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JzZXJ2cG9scHJlZi5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMmEwYzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQXMgd2VsbCBhcyBzZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgZHVyaW5nIFdlYiBzZXJ2aWNlcyBjcmVhdGlvbiwgeW91IGNhbiB2YWxpZGF0ZSBXUy1JIGNvbXBsaWFuY2Ugb2YgdGhlIFNPQVAgdHJhZmZpYyBhIFdlYiBzZXJ2aWNlIHByb2R1Y2VzIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcyB3ZWxsIGFzIHNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBkdXJpbmcgV2ViIHNlcnZpY2VzIGNyZWF0aW9uLCB5b3UgY2FuIHZhbGlkYXRlIFdTLUkgY29tcGxpYW5jZSBvZiB0aGUgU09BUCB0cmFmZmljIGEgV2ViIHNlcnZpY2UgcHJvZHVjZXMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBpbnRlcm9wZXJhYmlsaXR5LCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBpbnRlcm9wZXJhYmlsaXR5LCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHdzaXZhbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR3c2l2YWwiPjxhIG5hbWU9InR3c2l2YWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L2gxPgotCi0KLQotCi08ZGl2PjxwPkFzIHdlbGwgYXMgc2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGR1cmluZyBXZWIgc2VydmljZXMKLWNyZWF0aW9uLCB5b3UgY2FuIHZhbGlkYXRlIFdTLUkgY29tcGxpYW5jZSBvZiB0aGUgU09BUCB0cmFmZmljIGEgV2ViIHNlcnZpY2UKLXByb2R1Y2VzIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+IFByZXJlcXVpc2l0ZXM6IEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgdmFsaWRhdGlvbiB0b29sIHRvIGVuc3VyZSB0aGF0Ci15b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwgeW91IG11c3QgaGF2ZSBjb21wbGV0ZWQgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PHVsPgotPGxpPkdlbmVyYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0d3NkbHZhbC5odG1sIj5WYWxpZGF0ZSB0aGUgV1NETCB0aGF0IGlzIHByb2R1Y2VkLjwvYT4gPC9saT4KLQotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InRtb25pdG9yLmh0bWwiPlNldCB1cCB0aGUgVENQL0lQIE1vbml0b3IuPC9hPiBFbnN1cmUgdGhhdAoteW91ciBXZWIgc2VydmljZSBzYW1wbGUgYXBwbGljYXRpb24gdHJhZmZpYyBpcyBkaXJlY3RlZCB0aHJvdWdoIHRoZSBUQ1AvSVAKLU1vbml0b3IuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyB2YWxpZGF0ZSB5b3VyIFdlYiBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW52b2tlIGEgbWV0aG9kIGluIHlvdXIgV2ViIHNlcnZpY2Ugc2FtcGxlIGFwcGxpY2F0aW9uIHRvIGdlbmVyYXRlCi10cmFmZmljIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+VG8gZW5zdXJlIHRoYXQgeW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsCi15b3UgY2FuIGdlbmVyYXRlIGEgbG9nIGZpbGUgYnkgY2xpY2tpbmcgdGhlICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzaXZhbGljby5naWYiIGFsdD0iVmFsaWRhdGUgaWNvbiIgLz4gaWNvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdCBhIG5hbWUgZm9yIHRoZSBsb2cgZmlsZSBhbmQKLXNwZWNpZnkgd2hlcmUgeW91IHdhbnQgaXQgdG8gYmUgc3RvcmVkLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj4gVGhpcyBsb2cgZmlsZSB3aWxsIHNob3cgd2hldGhlciBvciBub3QgbWVzc2FnZXMgc2VudCB0byBhbmQgZnJvbQoteW91ciBXZWIgc2VydmljZSBhcmUgV1MtSSBjb21wbGlhbnQsIGFuZCBsaXN0IGFueSBub24tY29tcGxpYW50IGVsZW1lbnRzLgotWW91IGNhbiBvcGVuIHRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCI+V1MtSTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcnNlcnZwb2xwcmVmLmRpdGEiPlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTgyYzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIiAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3N3c2l0ZXN0IgotaWQ9Indzd3NpdGVzdCIgdGl0bGU9Indzd3NpdGVzdCI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHdzZGx2YWwuZGl0YSIgbmF2dGl0bGU9IlZhbGlkYXRpbmcgV1NETCI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90bW9uaXRvci5kaXRhIiBuYXZ0aXRsZT0iVGVzdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgVENQL0lQIE1vbml0b3IiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90d3NpdmFsLmRpdGEiIG5hdnRpdGxlPSJWYWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZSBvZiBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMiPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTAyMGFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzd3NpdGVzdCIgbGFiZWw9Indzd3NpdGVzdCIgdG9waWM9InRhc2tzL3R3c2RsdmFsLmh0bWwiPgotPHRvcGljIGxhYmVsPSJWYWxpZGF0aW5nIFdTREwgZmlsZXMiIGhyZWY9InRhc2tzL3R3c2RsdmFsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iVXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzIiBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCIvPgotPC90b2M+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVmZmE3OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY0NDgwYi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc5YmUzMC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgQ29yZQotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBXZWIgU2VydmljZXMgY29yZS4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZDdiYzIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjMuMC40LnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c193c2RsMTQuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxyZXF1aXJlcz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UucGxhdGZvcm0iIHZlcnNpb249IjMuNC4wIi8+Ci0gICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIgdmVyc2lvbj0iMi40LjAiLz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiIgdmVyc2lvbj0iMi40LjAiLz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UueHNkIiB2ZXJzaW9uPSIyLjQuMCIvPgotICAgPC9yZXF1aXJlcz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24iCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS4wLjQucXVhbGlmaWVyIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5sb2c0aiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIxLjIuMTMucXVhbGlmaWVyIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS53c2lsNGoiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcudWRkaTRqIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmRpc2NvdmVyeSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgueG1sLnJwYyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgueG1sLnNvYXAiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuYXhpcyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgubWFpbCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9ImphdmF4LmFjdGl2YXRpb24iCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWJmYjQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTgxZDQ2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPGgzPlNvdXJjZSBDb2RlPC9oMz4KLTxwPlRoaXMgcGx1Zy1pbiBjb250YWlucyBzb3VyY2UgY29kZSB6aXAgZmlsZXMgKCZxdW90O1NvdXJjZSBaaXBzJnF1b3Q7KSB0aGF0IGNvcnJlc3BvbmQgdG8gYmluYXJ5IGNvbnRlbnQgaW4gb3RoZXIgcGx1Zy1pbnMuIFRoZXNlIFNvdXJjZSBaaXBzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBkaWZmZXJlbnQgbGljZW5zZQotYWdyZWVtZW50cyBhbmQvb3Igbm90aWNlcy4gRGV0YWlscyBhYm91dCB0aGVzZSBsaWNlbnNlIGFncmVlbWVudHMgYW5kIG5vdGljZXMgYXJlIGNvbnRhaW5lZCBpbiAmcXVvdDthYm91dC5odG1sJnF1b3Q7IGZpbGVzICgmcXVvdDtBYm91dHMmcXVvdDspIGxvY2F0ZWQgaW4gc3ViLWRpcmVjdG9yaWVzIGluIHRoZQotc3JjLyBkaXJlY3Rvcnkgb2YgdGhpcyBwbHVnLWluLiBTdWNoIEFib3V0cyBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIFNvdXJjZSBaaXBzIGluIHRoYXQgZGlyZWN0b3J5LCBub3QgdGhlIEVQTC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTVhNDAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjgzOTBhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MGRhODUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIENvcmVcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi0oYykgQ29weXJpZ2h0IEVjbGlwc2UgY29udHJpYnV0b3JzIGFuZCBvdGhlcnMgMjAwNS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cCi1WaXNpdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFkNTEyZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsIGFib3V0LmluaSwgYWJvdXQubWFwcGluZ3MsIGFib3V0LnByb3BlcnRpZXMsIHd0cF9wcm9kMzIucG5nLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTM5ZDBmLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotcGx1Z2luTmFtZT1XZWIgU3RhbmRhcmQgVG9vbHMgLSBXZWIgU2VydmljZSBDb3JlIFNvdXJjZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIuZ2lmIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLnBuZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ5ZTlmLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID1cCi1lcGwtdjEwLmh0bWwsXAotZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi1mZWF0dXJlLnhtbCxcCi1mZWF0dXJlLnByb3BlcnRpZXMsXAotbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJhZDI5Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhOTRkNS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV1MgQ29yZSBEZXZlbG9wZXIgUmVzb3VyY2VzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgemlwcyBmb3IgV1NUIFdTIGNvcmUuCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNGE0OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkp1bmUgMDYsIDIwMDc8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotICAgCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCi0gICAKLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUwotICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0gICAKLTx1bD4KLQk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLQk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4gICAKLSAKLTxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCi1JbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgotCi08dWw+Ci0JPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+Ci0JPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KLQk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+Ci0JPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KLQk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Ci08L3VsPgotCQkKLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKLWluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgotdGhhdCBkaXJlY3RvcnkuPC9wPgotCi08cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+Ci0KLTx1bD4KLQk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgotCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKLQk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4MWQ0Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotCi08UD5KdW5lLCAyMDA4PC9QPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTxoMz5Tb3VyY2UgQ29kZTwvaDM+Ci08cD5UaGlzIHBsdWctaW4gY29udGFpbnMgc291cmNlIGNvZGUgemlwIGZpbGVzICgmcXVvdDtTb3VyY2UgWmlwcyZxdW90OykgdGhhdCBjb3JyZXNwb25kIHRvIGJpbmFyeSBjb250ZW50IGluIG90aGVyIHBsdWctaW5zLiBUaGVzZSBTb3VyY2UgWmlwcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UKLWFncmVlbWVudHMgYW5kL29yIG5vdGljZXMuIERldGFpbHMgYWJvdXQgdGhlc2UgbGljZW5zZSBhZ3JlZW1lbnRzIGFuZCBub3RpY2VzIGFyZSBjb250YWluZWQgaW4gJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyBmaWxlcyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KSBsb2NhdGVkIGluIHN1Yi1kaXJlY3RvcmllcyBpbiB0aGUKLXNyYy8gZGlyZWN0b3J5IG9mIHRoaXMgcGx1Zy1pbi4gU3VjaCBBYm91dHMgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBTb3VyY2UgWmlwcyBpbiB0aGF0IGRpcmVjdG9yeSwgbm90IHRoZSBFUEwuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE1YTQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT13dHBfcHJvZDMyLnBuZwotCi0jIFByb3BlcnR5ICJhYm91dEltYWdlIiBjb250YWlucyBwYXRoIHRvIHByb2R1Y3QgaW1hZ2UgKDUwMHgzMzAgb3IgMTE1eDE2NCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiYXBwTmFtZSIgY29udGFpbnMgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gKG5vdCB0cmFuc2xhdGVkKQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGFnZSIgY29udGFpbnMgcGF0aCB0byB3ZWxjb21lIHBhZ2UgKHNwZWNpYWwgWE1MLWJhc2VkIGZvcm1hdCkKLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBlcnNwZWN0aXZlIiBjb250YWlucyB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIGluIHdoaWNoIHRoZQotIyB3ZWxjb21lIHBhZ2UgaXMgdG8gYmUgb3BlbmVkLgotIyBvcHRpb25hbAotCi0KLQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmYjczNS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzDQotIyBjb250YWlucyBmaWxsLWlucyBmb3IgYWJvdXQucHJvcGVydGllcw0KLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykNCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuDQotDQotMD1AYnVpbGRADQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTBkYTg1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1XZWIgU3RhbmRhcmQgVG9vbHMgLSBXZWIgU2VydmljZSBDb3JlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDUuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZDUxMmQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzOWQwZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXBsdWdpbk5hbWU9V2ViIFN0YW5kYXJkIFRvb2xzIC0gV2ViIFNlcnZpY2UgQ29yZSBTb3VyY2UKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZmI0NGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmNlYWIzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODY2NzFkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1idWlsZC54bWwKLWZlYXR1cmVzCi1wbHVnaW5zCi1vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmVfMS4wLjAuYmluLmRpc3QuemlwCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZWJlZTcuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2ZjgwZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwotCi1nZW5lcmF0ZS5mZWF0dXJlQG9yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLnNvdXJjZT1vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZSwgZmVhdHVyZUBvcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLnNvdXJjZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MDVjMjYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgUGx1Zy1pbiBEZXZlbG9wZXIgUmVzb3VyY2VzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgemlwcyBmb3IgdGhlIFdTVCBXZWIgc2VydmljZXMgdG9vbHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNjM2I5Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuNC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLnNvdXJjZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuYXBpLmRvYyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmRvYy5pc3YiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0NTk4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmQ1NmU0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmVfMS4wLjAuYmluLmRpc3QuemlwCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWUyMzU0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNiMzNhZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOGU2OGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFdlYiBTZXJ2aWNlcyBUZXN0cwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBXZWIgc2VydmljZXMgdGVzdHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyOGFjMi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjMuMC4xMDEucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9ImxpY2Vuc2UuaHRtbCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTQ0ODdjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwM2E4YjAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ3Njk0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2MDBlMC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV2ViIFNlcnZpY2VzIFVJCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249V2ViIFNlcnZpY2VzIFVJIHRvb2xzLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzA1OGE0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4wLjQucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sX3VpLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLnBsYXRmb3JtIiB2ZXJzaW9uPSIzLjQuMC52MjAwODA1MjgtOUk5NkVodEVtLVRfNUM0OHM2UVNlbndrSjNjSElua1JIM25UVCIvPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5nZWYiIHZlcnNpb249IjMuNC4wLnYyMDA4MDExNS02NzctODA4MkE1Njk2SDI3NDgiLz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuZW1mLmVkaXQiIHZlcnNpb249IjIuNC4wLnYyMDA4MDYwMjE2NDMiLz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuZW1mLmVkaXQudWkiIHZlcnNpb249IjIuNC4wLnYyMDA4MDYwMjE2NDMiLz4KLSAgIDwvcmVxdWlyZXM+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaS51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0NTk4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODFkNDYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPGgzPlNvdXJjZSBDb2RlPC9oMz4KLTxwPlRoaXMgcGx1Zy1pbiBjb250YWlucyBzb3VyY2UgY29kZSB6aXAgZmlsZXMgKCZxdW90O1NvdXJjZSBaaXBzJnF1b3Q7KSB0aGF0IGNvcnJlc3BvbmQgdG8gYmluYXJ5IGNvbnRlbnQgaW4gb3RoZXIgcGx1Zy1pbnMuIFRoZXNlIFNvdXJjZSBaaXBzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBkaWZmZXJlbnQgbGljZW5zZQotYWdyZWVtZW50cyBhbmQvb3Igbm90aWNlcy4gRGV0YWlscyBhYm91dCB0aGVzZSBsaWNlbnNlIGFncmVlbWVudHMgYW5kIG5vdGljZXMgYXJlIGNvbnRhaW5lZCBpbiAmcXVvdDthYm91dC5odG1sJnF1b3Q7IGZpbGVzICgmcXVvdDtBYm91dHMmcXVvdDspIGxvY2F0ZWQgaW4gc3ViLWRpcmVjdG9yaWVzIGluIHRoZQotc3JjLyBkaXJlY3Rvcnkgb2YgdGhpcyBwbHVnLWluLiBTdWNoIEFib3V0cyBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIFNvdXJjZSBaaXBzIGluIHRoYXQgZGlyZWN0b3J5LCBub3QgdGhlIEVQTC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM5Nzg3YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIFVJXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDUuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsIGFib3V0LmluaSwgYWJvdXQubWFwcGluZ3MsIGFib3V0LnByb3BlcnRpZXMsIHd0cF9wcm9kMzIucG5nLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTY1NDUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotcGx1Z2luTmFtZT1XZWIgU3RhbmRhcmQgVG9vbHMgLSBXZWIgU2VydmljZSBVSSBTb3VyY2UKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5naWYgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIucG5nIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2MyMjkyLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9XAotZXBsLXYxMC5odG1sLFwKLWVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotZmVhdHVyZS54bWwsXAotZmVhdHVyZS5wcm9wZXJ0aWVzLFwKLWxpY2Vuc2UuaHRtbAotCi1nZW5lcmF0ZS5mZWF0dXJlQG9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUuc291cmNlID0gb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmFkMjkuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTUzMjIzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV1MgVUkgRGV2ZWxvcGVyIFJlc291cmNlcwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVNvdXJjZSBjb2RlIHppcHMgZm9yIFdTVCBXUyBVSS4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzRhNDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KLTxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgotPHA+SnVuZSAwNiwgMjAwNzwvcD4KLQotPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgotCi08cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKLSAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCi0gICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgotICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+Ci0gICAKLTxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKLSAgIAotPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAotICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLSAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCi0gICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KLSAgIAotPHVsPgotCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+Ci0JPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgotCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucwotICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+Ci0JPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Ci08L3VsPiAgIAotIAotPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKLUluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+Ci0KLTx1bD4KLQk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KLQk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgotCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KLQk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgotCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KLTwvdWw+Ci0JCQotPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCi10aGF0IGRpcmVjdG9yeS48L3A+Ci0KLTxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KLQotPHVsPgotCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+Ci0JPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQotCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci0KLTxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCi1jb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KLQotPGgzPkNyeXB0b2dyYXBoeTwvaDM+Ci0KLTxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KLSAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAotICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+Ci0gICAKLTxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODFkNDYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPGgzPlNvdXJjZSBDb2RlPC9oMz4KLTxwPlRoaXMgcGx1Zy1pbiBjb250YWlucyBzb3VyY2UgY29kZSB6aXAgZmlsZXMgKCZxdW90O1NvdXJjZSBaaXBzJnF1b3Q7KSB0aGF0IGNvcnJlc3BvbmQgdG8gYmluYXJ5IGNvbnRlbnQgaW4gb3RoZXIgcGx1Zy1pbnMuIFRoZXNlIFNvdXJjZSBaaXBzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBkaWZmZXJlbnQgbGljZW5zZQotYWdyZWVtZW50cyBhbmQvb3Igbm90aWNlcy4gRGV0YWlscyBhYm91dCB0aGVzZSBsaWNlbnNlIGFncmVlbWVudHMgYW5kIG5vdGljZXMgYXJlIGNvbnRhaW5lZCBpbiAmcXVvdDthYm91dC5odG1sJnF1b3Q7IGZpbGVzICgmcXVvdDtBYm91dHMmcXVvdDspIGxvY2F0ZWQgaW4gc3ViLWRpcmVjdG9yaWVzIGluIHRoZQotc3JjLyBkaXJlY3Rvcnkgb2YgdGhpcyBwbHVnLWluLiBTdWNoIEFib3V0cyBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIFNvdXJjZSBaaXBzIGluIHRoYXQgZGlyZWN0b3J5LCBub3QgdGhlIEVQTC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZmI3MzUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MNCi0jIGNvbnRhaW5zIGZpbGwtaW5zIGZvciBhYm91dC5wcm9wZXJ0aWVzDQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQ0KLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4NCi0NCi0wPUBidWlsZEANCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM5Nzg3YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIFVJXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDUuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsIGFib3V0LmluaSwgYWJvdXQubWFwcGluZ3MsIGFib3V0LnByb3BlcnRpZXMsIHd0cF9wcm9kMzIucG5nLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTY1NDUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotcGx1Z2luTmFtZT1XZWIgU3RhbmRhcmQgVG9vbHMgLSBXZWIgU2VydmljZSBVSSBTb3VyY2UKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZWZmNTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmVfMS4wLjAuamFyCi1vcmcuZWNsaXBzZS53c3QueG1sX3VzZXJkb2MuZmVhdHVyZV8xLjAuMC5qYXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDU2NzVlLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ3Njk0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhNTg1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgVXNlciBEb2N1bWVudGF0aW9uCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249V1NUIFdlYiBzZXJ2aWNlcyB1c2VyIGRvY3VtZW50YXRpb24KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTkxMWMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4wLjEucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9ImxpY2Vuc2UuaHRtbCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDQ1OTguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIwNTBjOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUzODZmNy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIERlYyAxNyAxNzozNjo1OSBFU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjUwMjYwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlhYzJlYi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NETCAxLjUgRmVhdHVyZQotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTREwgMS41IEZlYXR1cmUKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSwgMjAwOFxuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDk0YWU5Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIxLjUuMi5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgaW1hZ2U9ImVjbGlwc2VfdXBkYXRlXzEyMC5qcGciPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJqYXZheC53c2RsIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjEuNS4xLnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWJmYjQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyODk4Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzc2M2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi10ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJlN2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZGIxMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jVGh1IE1heSAzMSAxNDoyODozMyBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWluc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzcwNDAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjM5IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMDczMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4xMDIucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS5qc3Qud3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0LmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmVhYzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZGF0YS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdC5qYXIKLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3QuamFyCi1vdXRwdXQudGVzdC5qYXIgPSBiaW4vCi1zb3VyY2UudGVzdC5qYXIgPSB0ZXN0cy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVByb3h5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VQcm94eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjdhNDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVByb3h5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBcmVhU2VydmljZVByb3h5IGltcGxlbWVudHMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgewotICBwcml2YXRlIFN0cmluZyBfZW5kcG9pbnQgPSBudWxsOwotICBwcml2YXRlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGFyZWFTZXJ2aWNlX1BvcnRUeXBlID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBBcmVhU2VydmljZVByb3h5KCkgewotICAgIF9pbml0QXJlYVNlcnZpY2VQcm94eSgpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgX2luaXRBcmVhU2VydmljZVByb3h5KCkgewotICAgIHRyeSB7Ci0gICAgICBhcmVhU2VydmljZV9Qb3J0VHlwZSA9IChuZXcgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IoKSkuZ2V0QXJlYVNlcnZpY2VTT0FQKCk7Ci0gICAgICBpZiAoYXJlYVNlcnZpY2VfUG9ydFR5cGUgIT0gbnVsbCkgewotICAgICAgICBpZiAoX2VuZHBvaW50ICE9IG51bGwpCi0gICAgICAgICAgKChqYXZheC54bWwucnBjLlN0dWIpYXJlYVNlcnZpY2VfUG9ydFR5cGUpLl9zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiLCBfZW5kcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgX2VuZHBvaW50ID0gKFN0cmluZykoKGphdmF4LnhtbC5ycGMuU3R1YilhcmVhU2VydmljZV9Qb3J0VHlwZSkuX2dldFByb3BlcnR5KCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzcyIpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIGNhdGNoIChqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gc2VydmljZUV4Y2VwdGlvbikge30KLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpIHsKLSAgICByZXR1cm4gX2VuZHBvaW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChTdHJpbmcgZW5kcG9pbnQpIHsKLSAgICBfZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAgICBpZiAoYXJlYVNlcnZpY2VfUG9ydFR5cGUgIT0gbnVsbCkKLSAgICAgICgoamF2YXgueG1sLnJwYy5TdHViKWFyZWFTZXJ2aWNlX1BvcnRUeXBlKS5fc2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIiwgX2VuZHBvaW50KTsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlX1BvcnRUeXBlKCkgewotICAgIGlmIChhcmVhU2VydmljZV9Qb3J0VHlwZSA9PSBudWxsKQotICAgICAgX2luaXRBcmVhU2VydmljZVByb3h5KCk7Ci0gICAgcmV0dXJuIGFyZWFTZXJ2aWNlX1BvcnRUeXBlOwotICB9Ci0gIAotICBwdWJsaWMgZmxvYXQgY2FsY3VsYXRlUmVjdEFyZWEob3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuRGltZW5zaW9ucyBwYXJhbWV0ZXJzKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uewotICAgIGlmIChhcmVhU2VydmljZV9Qb3J0VHlwZSA9PSBudWxsKQotICAgICAgX2luaXRBcmVhU2VydmljZVByb3h5KCk7Ci0gICAgcmV0dXJuIGFyZWFTZXJ2aWNlX1BvcnRUeXBlLmNhbGN1bGF0ZVJlY3RBcmVhKHBhcmFtZXRlcnMpOwotICB9Ci0gIAotICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VTT0FQU3R1Yi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlU09BUFN0dWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFlYjkyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VTT0FQU3R1Yi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBBcmVhU2VydmljZVNPQVBTdHViLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgQXJlYVNlcnZpY2VTT0FQU3R1YiBleHRlbmRzIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1YiBpbXBsZW1lbnRzIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIHsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyQ2xhc3NlcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlclFOYW1lcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlckZhY3RvcmllcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZERlc2VyRmFjdG9yaWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLQotICAgIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzYyBbXSBfb3BlcmF0aW9uczsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIF9vcGVyYXRpb25zID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjWzFdOwotICAgICAgICBfaW5pdE9wZXJhdGlvbkRlc2MxKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBfaW5pdE9wZXJhdGlvbkRlc2MxKCl7Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjIG9wZXI7Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjIHBhcmFtOwotICAgICAgICBvcGVyID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjKCk7Ci0gICAgICAgIG9wZXIuc2V0TmFtZSgiQ2FsY3VsYXRlUmVjdEFyZWEiKTsKLSAgICAgICAgcGFyYW0gPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAicGFyYW1ldGVycyIpLCBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYy5JTiwgbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiZGltZW5zaW9ucyIpLCBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zLmNsYXNzLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBvcGVyLmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuQ2xhc3MoZmxvYXQuY2xhc3MpOwotICAgICAgICBvcGVyLnNldFJldHVyblFOYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgImFyZWEiKSk7Ci0gICAgICAgIG9wZXIuc2V0U3R5bGUob3JnLmFwYWNoZS5heGlzLmNvbnN0YW50cy5TdHlsZS5ET0NVTUVOVCk7Ci0gICAgICAgIG9wZXIuc2V0VXNlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuVXNlLkxJVEVSQUwpOwotICAgICAgICBfb3BlcmF0aW9uc1swXSA9IG9wZXI7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VTT0FQU3R1YigpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgIHRoaXMobnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlU09BUFN0dWIoamF2YS5uZXQuVVJMIGVuZHBvaW50VVJMLCBqYXZheC54bWwucnBjLlNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICAgdGhpcyhzZXJ2aWNlKTsKLSAgICAgICAgIHN1cGVyLmNhY2hlZEVuZHBvaW50ID0gZW5kcG9pbnRVUkw7Ci0gICAgfQotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlU09BUFN0dWIoamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgc3VwZXIuc2VydmljZSA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UgPSBzZXJ2aWNlOwotICAgICAgICB9Ci0gICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlKXN1cGVyLnNlcnZpY2UpLnNldFR5cGVNYXBwaW5nVmVyc2lvbigiMS4yIik7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgY2xzOwotICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxTmFtZTsKLSAgICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcU5hbWUyOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGJlYW5zZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQmVhblNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGJlYW5kZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQmVhbkRlc2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgZW51bXNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5FbnVtU2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgZW51bWRmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5FbnVtRGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBhcnJheXNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5BcnJheVNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGFycmF5ZGYgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkFycmF5RGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBzaW1wbGVzZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuU2ltcGxlU2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlZGYgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLlNpbXBsZURlc2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlbGlzdHNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5TaW1wbGVMaXN0U2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlbGlzdGRmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5TaW1wbGVMaXN0RGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIHFOYW1lID0gbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgY2FjaGVkU2VyUU5hbWVzLmFkZChxTmFtZSk7Ci0gICAgICAgICAgICBjbHMgPSBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zLmNsYXNzOwotICAgICAgICAgICAgY2FjaGVkU2VyQ2xhc3Nlcy5hZGQoY2xzKTsKLSAgICAgICAgICAgIGNhY2hlZFNlckZhY3Rvcmllcy5hZGQoYmVhbnNmKTsKLSAgICAgICAgICAgIGNhY2hlZERlc2VyRmFjdG9yaWVzLmFkZChiZWFuZGYpOwotCi0gICAgfQotCi0gICAgcHJvdGVjdGVkIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBjcmVhdGVDYWxsKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBzdXBlci5fY3JlYXRlQ2FsbCgpOwotICAgICAgICAgICAgaWYgKHN1cGVyLm1haW50YWluU2Vzc2lvblNldCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldE1haW50YWluU2Vzc2lvbihzdXBlci5tYWludGFpblNlc3Npb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFVzZXJuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRVc2VybmFtZShzdXBlci5jYWNoZWRVc2VybmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkUGFzc3dvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFBhc3N3b3JkKHN1cGVyLmNhY2hlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHN1cGVyLmNhY2hlZEVuZHBvaW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRUaW1lb3V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRUaW1lb3V0KHN1cGVyLmNhY2hlZFRpbWVvdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFBvcnROYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQb3J0TmFtZShzdXBlci5jYWNoZWRQb3J0TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24ga2V5cyA9IHN1cGVyLmNhY2hlZFByb3BlcnRpZXMua2V5cygpOwotICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSA9IChqYXZhLmxhbmcuU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkoa2V5LCBzdXBlci5jYWNoZWRQcm9wZXJ0aWVzLmdldChrZXkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEFsbCB0aGUgdHlwZSBtYXBwaW5nIGluZm9ybWF0aW9uIGlzIHJlZ2lzdGVyZWQKLSAgICAgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IGNhbGwgaXMgbWFkZS4KLSAgICAgICAgICAgIC8vIFRoZSB0eXBlIG1hcHBpbmcgaW5mb3JtYXRpb24gaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCBpbgotICAgICAgICAgICAgLy8gdGhlIFR5cGVNYXBwaW5nUmVnaXN0cnkgb2YgdGhlIHNlcnZpY2UsIHdoaWNoCi0gICAgICAgICAgICAvLyBpcyB0aGUgcmVhc29uIHdoeSByZWdpc3RyYXRpb24gaXMgb25seSBuZWVkZWQgZm9yIHRoZSBmaXJzdCBjYWxsLgotICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2FsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG11c3Qgc2V0IGVuY29kaW5nIHN0eWxlIGJlZm9yZSByZWdpc3RlcmluZyBzZXJpYWxpemVycwotICAgICAgICAgICAgICAgICAgICBfY2FsbC5zZXRFbmNvZGluZ1N0eWxlKG51bGwpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhY2hlZFNlckZhY3Rvcmllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGNscyA9IChqYXZhLmxhbmcuQ2xhc3MpIGNhY2hlZFNlckNsYXNzZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSBjYWNoZWRTZXJRTmFtZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCB4ID0gY2FjaGVkU2VyRmFjdG9yaWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4IGluc3RhbmNlb2YgQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2YgPSAoamF2YS5sYW5nLkNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkU2VyRmFjdG9yaWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgZGYgPSAoamF2YS5sYW5nLkNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkRGVzZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWxsLnJlZ2lzdGVyVHlwZU1hcHBpbmcoY2xzLCBxTmFtZSwgc2YsIGRmLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4IGluc3RhbmNlb2YgamF2YXgueG1sLnJwYy5lbmNvZGluZy5TZXJpYWxpemVyRmFjdG9yeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5TZXJpYWxpemVyRmFjdG9yeSBzZiA9IChvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuU2VyaWFsaXplckZhY3RvcnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRTZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5EZXNlcmlhbGl6ZXJGYWN0b3J5IGRmID0gKG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5EZXNlcmlhbGl6ZXJGYWN0b3J5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkRGVzZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWxsLnJlZ2lzdGVyVHlwZU1hcHBpbmcoY2xzLCBxTmFtZSwgc2YsIGRmLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gX2NhbGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubGFuZy5UaHJvd2FibGUgX3QpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0KCJGYWlsdXJlIHRyeWluZyB0byBnZXQgdGhlIENhbGwgb2JqZWN0IiwgX3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZsb2F0IGNhbGN1bGF0ZVJlY3RBcmVhKG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkRpbWVuc2lvbnMgcGFyYW1ldGVycykgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgb3JnLmFwYWNoZS5heGlzLk5vRW5kUG9pbnRFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBjcmVhdGVDYWxsKCk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbihfb3BlcmF0aW9uc1swXSk7Ci0gICAgICAgIF9jYWxsLnNldFVzZVNPQVBBY3Rpb24odHJ1ZSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBBY3Rpb25VUkkoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS9OZXdPcGVyYXRpb24iKTsKLSAgICAgICAgX2NhbGwuc2V0RW5jb2RpbmdTdHlsZShudWxsKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsLlNFTkRfVFlQRV9BVFRSLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLkF4aXNFbmdpbmUuUFJPUF9ET01VTFRJUkVGUywgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBWZXJzaW9uKG9yZy5hcGFjaGUuYXhpcy5zb2FwLlNPQVBDb25zdGFudHMuU09BUDExX0NPTlNUQU5UUyk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbk5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoIiIsICJDYWxjdWxhdGVSZWN0QXJlYSIpKTsKLQotICAgICAgICBzZXRSZXF1ZXN0SGVhZGVycyhfY2FsbCk7Ci0gICAgICAgIHNldEF0dGFjaG1lbnRzKF9jYWxsKTsKLSB0cnkgeyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBfcmVzcCA9IF9jYWxsLmludm9rZShuZXcgamF2YS5sYW5nLk9iamVjdFtdIHtwYXJhbWV0ZXJzfSk7Ci0KLSAgICAgICAgaWYgKF9yZXNwIGluc3RhbmNlb2YgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyAoamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKV9yZXNwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZXh0cmFjdEF0dGFjaG1lbnRzKF9jYWxsKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBfcmVzcCkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBfZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBvcmcuYXBhY2hlLmF4aXMudXRpbHMuSmF2YVV0aWxzLmNvbnZlcnQoX3Jlc3AsIGZsb2F0LmNsYXNzKSkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gIH0gY2F0Y2ggKG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgYXhpc0ZhdWx0RXhjZXB0aW9uKSB7Ci0gIHRocm93IGF4aXNGYXVsdEV4Y2VwdGlvbjsKLX0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9Qb3J0VHlwZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1BvcnRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjVmNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1BvcnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQXJlYVNlcnZpY2VfUG9ydFR5cGUuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQXJlYVNlcnZpY2VfUG9ydFR5cGUgZXh0ZW5kcyBqYXZhLnJtaS5SZW1vdGUgewotICAgIHB1YmxpYyBmbG9hdCBjYWxjdWxhdGVSZWN0QXJlYShvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zIHBhcmFtZXRlcnMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwOTMyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIEFyZWFTZXJ2aWNlX1NlcnZpY2UuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQXJlYVNlcnZpY2VfU2VydmljZSBleHRlbmRzIGphdmF4LnhtbC5ycGMuU2VydmljZSB7Ci0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0QXJlYVNlcnZpY2VTT0FQQWRkcmVzcygpOwotCi0gICAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlU09BUCgpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb247Ci0KLSAgICBwdWJsaWMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgZ2V0QXJlYVNlcnZpY2VTT0FQKGphdmEubmV0LlVSTCBwb3J0QWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZGZjMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIEFyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IgZXh0ZW5kcyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UgaW1wbGVtZW50cyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9TZXJ2aWNlIHsKLQotICAgIHB1YmxpYyBBcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvcigpIHsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBBcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvcihvcmcuYXBhY2hlLmF4aXMuRW5naW5lQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgc3VwZXIoY29uZmlnKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IoamF2YS5sYW5nLlN0cmluZyB3c2RsTG9jLCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHNOYW1lKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIod3NkbExvYywgc05hbWUpOwotICAgIH0KLQotICAgIC8vIFVzZSB0byBnZXQgYSBwcm94eSBjbGFzcyBmb3IgQXJlYVNlcnZpY2VTT0FQCi0gICAgcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9BcmVhUHJvai9zZXJ2aWNlcy9BcmVhU2VydmljZVNPQVAiOwotCi0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0QXJlYVNlcnZpY2VTT0FQQWRkcmVzcygpIHsKLSAgICAgICAgcmV0dXJuIEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzOwotICAgIH0KLQotICAgIC8vIFRoZSBXU0REIHNlcnZpY2UgbmFtZSBkZWZhdWx0cyB0byB0aGUgcG9ydCBuYW1lLgotICAgIHByaXZhdGUgamF2YS5sYW5nLlN0cmluZyBBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUgPSAiQXJlYVNlcnZpY2VTT0FQIjsKLQotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB7Ci0gICAgICAgIEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlU09BUCgpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgIGphdmEubmV0LlVSTCBlbmRwb2ludDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGVuZHBvaW50ID0gbmV3IGphdmEubmV0LlVSTChBcmVhU2VydmljZVNPQVBfYWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBnZXRBcmVhU2VydmljZVNPQVAoZW5kcG9pbnQpOwotICAgIH0KLQotICAgIHB1YmxpYyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSBnZXRBcmVhU2VydmljZVNPQVAoamF2YS5uZXQuVVJMIHBvcnRBZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlU09BUFN0dWIgX3N0dWIgPSBuZXcgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VTT0FQU3R1Yihwb3J0QWRkcmVzcywgdGhpcyk7Ci0gICAgICAgICAgICBfc3R1Yi5zZXRQb3J0TmFtZShnZXRBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgZSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBcmVhU2VydmljZVNPQVBFbmRwb2ludEFkZHJlc3MoamF2YS5sYW5nLlN0cmluZyBhZGRyZXNzKSB7Ci0gICAgICAgIEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzID0gYWRkcmVzczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdGhlIGdpdmVuIGludGVyZmFjZSwgZ2V0IHRoZSBzdHViIGltcGxlbWVudGF0aW9uLgotICAgICAqIElmIHRoaXMgc2VydmljZSBoYXMgbm8gcG9ydCBmb3IgdGhlIGdpdmVuIGludGVyZmFjZSwKLSAgICAgKiB0aGVuIFNlcnZpY2VFeGNlcHRpb24gaXMgdGhyb3duLgotICAgICAqLwotICAgIHB1YmxpYyBqYXZhLnJtaS5SZW1vdGUgZ2V0UG9ydChDbGFzcyBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKSkgewotICAgICAgICAgICAgICAgIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlU09BUFN0dWIgX3N0dWIgPSBuZXcgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VTT0FQU3R1YihuZXcgamF2YS5uZXQuVVJMKEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgX3N0dWIuc2V0UG9ydE5hbWUoZ2V0QXJlYVNlcnZpY2VTT0FQV1NERFNlcnZpY2VOYW1lKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5sYW5nLlRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKHQpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24oIlRoZXJlIGlzIG5vIHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBpbnRlcmZhY2U6ICAiICsgKHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSA9PSBudWxsID8gIm51bGwiIDogc2VydmljZUVuZHBvaW50SW50ZXJmYWNlLmdldE5hbWUoKSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLCBnZXQgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24uCi0gICAgICogSWYgdGhpcyBzZXJ2aWNlIGhhcyBubyBwb3J0IGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLAotICAgICAqIHRoZW4gU2VydmljZUV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICovCi0gICAgcHVibGljIGphdmEucm1pLlJlbW90ZSBnZXRQb3J0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcG9ydE5hbWUsIENsYXNzIHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChwb3J0TmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0UG9ydChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpOwotICAgICAgICB9Ci0gICAgICAgIGphdmEubGFuZy5TdHJpbmcgaW5wdXRQb3J0TmFtZSA9IHBvcnROYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICBpZiAoIkFyZWFTZXJ2aWNlU09BUCIuZXF1YWxzKGlucHV0UG9ydE5hbWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0QXJlYVNlcnZpY2VTT0FQKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgewotICAgICAgICAgICAgamF2YS5ybWkuUmVtb3RlIF9zdHViID0gZ2V0UG9ydChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpOwotICAgICAgICAgICAgKChvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlN0dWIpIF9zdHViKS5zZXRQb3J0TmFtZShwb3J0TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBnZXRTZXJ2aWNlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgIkFyZWFTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuSGFzaFNldCBwb3J0cyA9IG51bGw7Ci0KLSAgICBwdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIGdldFBvcnRzKCkgewotICAgICAgICBpZiAocG9ydHMgPT0gbnVsbCkgewotICAgICAgICAgICAgcG9ydHMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKLSAgICAgICAgICAgIHBvcnRzLmFkZChuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJBcmVhU2VydmljZVNPQVAiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXQgdGhlIGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgcG9ydCBuYW1lLgotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRBZGRyZXNzKGphdmEubGFuZy5TdHJpbmcgcG9ydE5hbWUsIGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAotaWYgKCJBcmVhU2VydmljZVNPQVAiLmVxdWFscyhwb3J0TmFtZSkpIHsKLSAgICAgICAgICAgIHNldEFyZWFTZXJ2aWNlU09BUEVuZHBvaW50QWRkcmVzcyhhZGRyZXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAoteyAvLyBVbmtub3duIFBvcnQgTmFtZQotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbigiIENhbm5vdCBzZXQgRW5kcG9pbnQgQWRkcmVzcyBmb3IgVW5rbm93biBQb3J0IiArIHBvcnROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0IHRoZSBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIHBvcnQgbmFtZS4KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50QWRkcmVzcyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzZXRFbmRwb2ludEFkZHJlc3MocG9ydE5hbWUuZ2V0TG9jYWxQYXJ0KCksIGFkZHJlc3MpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0RpbWVuc2lvbnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9EaW1lbnNpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMTBmOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0RpbWVuc2lvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogRGltZW5zaW9ucy5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSBvcmcudGVtcHVyaS5BcmVhU2VydmljZTsKLQotcHVibGljIGNsYXNzIERpbWVuc2lvbnMgIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIHByaXZhdGUgZmxvYXQgd2lkdGg7Ci0gICAgcHJpdmF0ZSBmbG9hdCBoZWlnaHQ7Ci0KLSAgICBwdWJsaWMgRGltZW5zaW9ucygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGltZW5zaW9ucygKLSAgICAgICAgICAgZmxvYXQgd2lkdGgsCi0gICAgICAgICAgIGZsb2F0IGhlaWdodCkgewotICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgd2lkdGggdmFsdWUgZm9yIHRoaXMgRGltZW5zaW9ucy4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIHdpZHRoCi0gICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldFdpZHRoKCkgewotICAgICAgICByZXR1cm4gd2lkdGg7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB3aWR0aCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEBwYXJhbSB3aWR0aAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7Ci0gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGhlaWdodCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEByZXR1cm4gaGVpZ2h0Ci0gICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldEhlaWdodCgpIHsKLSAgICAgICAgcmV0dXJuIGhlaWdodDsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhlaWdodCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEBwYXJhbSBoZWlnaHQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRIZWlnaHQoZmxvYXQgaGVpZ2h0KSB7Ci0gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIH0KLQotICAgIHByaXZhdGUgamF2YS5sYW5nLk9iamVjdCBfX2VxdWFsc0NhbGMgPSBudWxsOwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCBvYmopIHsKLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRGltZW5zaW9ucykpIHJldHVybiBmYWxzZTsKLSAgICAgICAgRGltZW5zaW9ucyBvdGhlciA9IChEaW1lbnNpb25zKSBvYmo7Ci0gICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodGhpcyA9PSBvYmopIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoX19lcXVhbHNDYWxjICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoX19lcXVhbHNDYWxjID09IG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgX19lcXVhbHNDYWxjID0gb2JqOwotICAgICAgICBib29sZWFuIF9lcXVhbHM7Ci0gICAgICAgIF9lcXVhbHMgPSB0cnVlICYmIAotICAgICAgICAgICAgdGhpcy53aWR0aCA9PSBvdGhlci5nZXRXaWR0aCgpICYmCi0gICAgICAgICAgICB0aGlzLmhlaWdodCA9PSBvdGhlci5nZXRIZWlnaHQoKTsKLSAgICAgICAgX19lcXVhbHNDYWxjID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIF9lcXVhbHM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIF9faGFzaENvZGVDYWxjID0gZmFsc2U7Ci0gICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICAgIGlmIChfX2hhc2hDb2RlQ2FsYykgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgX19oYXNoQ29kZUNhbGMgPSB0cnVlOwotICAgICAgICBpbnQgX2hhc2hDb2RlID0gMTsKLSAgICAgICAgX2hhc2hDb2RlICs9IG5ldyBGbG9hdChnZXRXaWR0aCgpKS5oYXNoQ29kZSgpOwotICAgICAgICBfaGFzaENvZGUgKz0gbmV3IEZsb2F0KGdldEhlaWdodCgpKS5oYXNoQ29kZSgpOwotICAgICAgICBfX2hhc2hDb2RlQ2FsYyA9IGZhbHNlOwotICAgICAgICByZXR1cm4gX2hhc2hDb2RlOwotICAgIH0KLQotICAgIC8vIFR5cGUgbWV0YWRhdGEKLSAgICBwcml2YXRlIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uVHlwZURlc2MgdHlwZURlc2MgPQotICAgICAgICBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlR5cGVEZXNjKERpbWVuc2lvbnMuY2xhc3MsIHRydWUpOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgdHlwZURlc2Muc2V0WG1sVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJkaW1lbnNpb25zIikpOwotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uRWxlbWVudERlc2MgZWxlbUZpZWxkID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5FbGVtZW50RGVzYygpOwotICAgICAgICBlbGVtRmllbGQuc2V0RmllbGROYW1lKCJ3aWR0aCIpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiIiwgIndpZHRoIikpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXROaWxsYWJsZShmYWxzZSk7Ci0gICAgICAgIHR5cGVEZXNjLmFkZEZpZWxkRGVzYyhlbGVtRmllbGQpOwotICAgICAgICBlbGVtRmllbGQgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLkVsZW1lbnREZXNjKCk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXRGaWVsZE5hbWUoImhlaWdodCIpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiIiwgImhlaWdodCIpKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldFhtbFR5cGUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IikpOwotICAgICAgICBlbGVtRmllbGQuc2V0TmlsbGFibGUoZmFsc2UpOwotICAgICAgICB0eXBlRGVzYy5hZGRGaWVsZERlc2MoZWxlbUZpZWxkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdHlwZSBtZXRhZGF0YSBvYmplY3QKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5UeXBlRGVzYyBnZXRUeXBlRGVzYygpIHsKLSAgICAgICAgcmV0dXJuIHR5cGVEZXNjOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBDdXN0b20gU2VyaWFsaXplcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLlNlcmlhbGl6ZXIgZ2V0U2VyaWFsaXplcigKLSAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBtZWNoVHlwZSwgCi0gICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBfamF2YVR5cGUsICAKLSAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBfeG1sVHlwZSkgewotICAgICAgICByZXR1cm4gCi0gICAgICAgICAgbmV3ICBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkJlYW5TZXJpYWxpemVyKAotICAgICAgICAgICAgX2phdmFUeXBlLCBfeG1sVHlwZSwgdHlwZURlc2MpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBDdXN0b20gRGVzZXJpYWxpemVyCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuRGVzZXJpYWxpemVyIGdldERlc2VyaWFsaXplcigKLSAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBtZWNoVHlwZSwgCi0gICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBfamF2YVR5cGUsICAKLSAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBfeG1sVHlwZSkgewotICAgICAgICByZXR1cm4gCi0gICAgICAgICAgbmV3ICBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkJlYW5EZXNlcmlhbGl6ZXIoCi0gICAgICAgICAgICBfamF2YVR5cGUsIF94bWxUeXBlLCB0eXBlRGVzYyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhN2Q0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIENvbnZlcnRlci5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSB3dHA7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ29udmVydGVyIGV4dGVuZHMgamF2YS5ybWkuUmVtb3RlIHsKLSAgICBwdWJsaWMgZmxvYXQgY2Vsc2l1c1RvRmFyZW5oZWl0KGZsb2F0IGNlbHNpdXMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgcHVibGljIGZsb2F0IGZhcmVuaGVpdFRvQ2Vsc2l1cyhmbG9hdCBmYXJlbmhlaXQpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclByb3h5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclByb3h5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYTdjNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJQcm94eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGNsYXNzIENvbnZlcnRlclByb3h5IGltcGxlbWVudHMgd3RwLkNvbnZlcnRlciB7Ci0gIHByaXZhdGUgU3RyaW5nIF9lbmRwb2ludCA9IG51bGw7Ci0gIHByaXZhdGUgd3RwLkNvbnZlcnRlciBjb252ZXJ0ZXIgPSBudWxsOwotICAKLSAgcHVibGljIENvbnZlcnRlclByb3h5KCkgewotICAgIF9pbml0Q29udmVydGVyUHJveHkoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIF9pbml0Q29udmVydGVyUHJveHkoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGNvbnZlcnRlciA9IChuZXcgd3RwLkNvbnZlcnRlclNlcnZpY2VMb2NhdG9yKCkpLmdldENvbnZlcnRlcigpOwotICAgICAgaWYgKGNvbnZlcnRlciAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChfZW5kcG9pbnQgIT0gbnVsbCkKLSAgICAgICAgICAoKGphdmF4LnhtbC5ycGMuU3R1Yiljb252ZXJ0ZXIpLl9zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiLCBfZW5kcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgX2VuZHBvaW50ID0gKFN0cmluZykoKGphdmF4LnhtbC5ycGMuU3R1Yiljb252ZXJ0ZXIpLl9nZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiKTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHNlcnZpY2VFeGNlcHRpb24pIHt9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kcG9pbnQoKSB7Ci0gICAgcmV0dXJuIF9lbmRwb2ludDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoU3RyaW5nIGVuZHBvaW50KSB7Ci0gICAgX2VuZHBvaW50ID0gZW5kcG9pbnQ7Ci0gICAgaWYgKGNvbnZlcnRlciAhPSBudWxsKQotICAgICAgKChqYXZheC54bWwucnBjLlN0dWIpY29udmVydGVyKS5fc2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIiwgX2VuZHBvaW50KTsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIHd0cC5Db252ZXJ0ZXIgZ2V0Q29udmVydGVyKCkgewotICAgIGlmIChjb252ZXJ0ZXIgPT0gbnVsbCkKLSAgICAgIF9pbml0Q29udmVydGVyUHJveHkoKTsKLSAgICByZXR1cm4gY29udmVydGVyOwotICB9Ci0gIAotICBwdWJsaWMgZmxvYXQgY2Vsc2l1c1RvRmFyZW5oZWl0KGZsb2F0IGNlbHNpdXMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb257Ci0gICAgaWYgKGNvbnZlcnRlciA9PSBudWxsKQotICAgICAgX2luaXRDb252ZXJ0ZXJQcm94eSgpOwotICAgIHJldHVybiBjb252ZXJ0ZXIuY2Vsc2l1c1RvRmFyZW5oZWl0KGNlbHNpdXMpOwotICB9Ci0gIAotICBwdWJsaWMgZmxvYXQgZmFyZW5oZWl0VG9DZWxzaXVzKGZsb2F0IGZhcmVuaGVpdCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbnsKLSAgICBpZiAoY29udmVydGVyID09IG51bGwpCi0gICAgICBfaW5pdENvbnZlcnRlclByb3h5KCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlci5mYXJlbmhlaXRUb0NlbHNpdXMoZmFyZW5oZWl0KTsKLSAgfQotICAKLSAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTZXJ2aWNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRhYWZlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBDb252ZXJ0ZXJTZXJ2aWNlLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGludGVyZmFjZSBDb252ZXJ0ZXJTZXJ2aWNlIGV4dGVuZHMgamF2YXgueG1sLnJwYy5TZXJ2aWNlIHsKLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDb252ZXJ0ZXJBZGRyZXNzKCk7Ci0KLSAgICBwdWJsaWMgd3RwLkNvbnZlcnRlciBnZXRDb252ZXJ0ZXIoKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uOwotCi0gICAgcHVibGljIHd0cC5Db252ZXJ0ZXIgZ2V0Q29udmVydGVyKGphdmEubmV0LlVSTCBwb3J0QWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZUxvY2F0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZUxvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FmNWNkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2VMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGNsYXNzIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yIGV4dGVuZHMgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlIGltcGxlbWVudHMgd3RwLkNvbnZlcnRlclNlcnZpY2UgewotCi0gICAgcHVibGljIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yKCkgewotICAgIH0KLQotCi0gICAgcHVibGljIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yKG9yZy5hcGFjaGUuYXhpcy5FbmdpbmVDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgICAgICBzdXBlcihjb25maWcpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTZXJ2aWNlTG9jYXRvcihqYXZhLmxhbmcuU3RyaW5nIHdzZGxMb2MsIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgc05hbWUpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzdXBlcih3c2RsTG9jLCBzTmFtZSk7Ci0gICAgfQotCi0gICAgLy8gVXNlIHRvIGdldCBhIHByb3h5IGNsYXNzIGZvciBDb252ZXJ0ZXIKLSAgICBwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgQ29udmVydGVyX2FkZHJlc3MgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0NvbnZlcnRlclByb2ovc2VydmljZXMvQ29udmVydGVyIjsKLQotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldENvbnZlcnRlckFkZHJlc3MoKSB7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXJfYWRkcmVzczsKLSAgICB9Ci0KLSAgICAvLyBUaGUgV1NERCBzZXJ2aWNlIG5hbWUgZGVmYXVsdHMgdG8gdGhlIHBvcnQgbmFtZS4KLSAgICBwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgQ29udmVydGVyV1NERFNlcnZpY2VOYW1lID0gIkNvbnZlcnRlciI7Ci0KLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXJXU0REU2VydmljZU5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29udmVydGVyV1NERFNlcnZpY2VOYW1lKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgewotICAgICAgICBDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB3dHAuQ29udmVydGVyIGdldENvbnZlcnRlcigpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgIGphdmEubmV0LlVSTCBlbmRwb2ludDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGVuZHBvaW50ID0gbmV3IGphdmEubmV0LlVSTChDb252ZXJ0ZXJfYWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBnZXRDb252ZXJ0ZXIoZW5kcG9pbnQpOwotICAgIH0KLQotICAgIHB1YmxpYyB3dHAuQ29udmVydGVyIGdldENvbnZlcnRlcihqYXZhLm5ldC5VUkwgcG9ydEFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgd3RwLkNvbnZlcnRlclNvYXBCaW5kaW5nU3R1YiBfc3R1YiA9IG5ldyB3dHAuQ29udmVydGVyU29hcEJpbmRpbmdTdHViKHBvcnRBZGRyZXNzLCB0aGlzKTsKLSAgICAgICAgICAgIF9zdHViLnNldFBvcnROYW1lKGdldENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbnZlcnRlckVuZHBvaW50QWRkcmVzcyhqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHsKLSAgICAgICAgQ29udmVydGVyX2FkZHJlc3MgPSBhZGRyZXNzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLCBnZXQgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24uCi0gICAgICogSWYgdGhpcyBzZXJ2aWNlIGhhcyBubyBwb3J0IGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLAotICAgICAqIHRoZW4gU2VydmljZUV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICovCi0gICAgcHVibGljIGphdmEucm1pLlJlbW90ZSBnZXRQb3J0KENsYXNzIHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAod3RwLkNvbnZlcnRlci5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkpIHsKLSAgICAgICAgICAgICAgICB3dHAuQ29udmVydGVyU29hcEJpbmRpbmdTdHViIF9zdHViID0gbmV3IHd0cC5Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIobmV3IGphdmEubmV0LlVSTChDb252ZXJ0ZXJfYWRkcmVzcyksIHRoaXMpOwotICAgICAgICAgICAgICAgIF9zdHViLnNldFBvcnROYW1lKGdldENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubGFuZy5UaHJvd2FibGUgdCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbih0KTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBzdHViIGltcGxlbWVudGF0aW9uIGZvciB0aGUgaW50ZXJmYWNlOiAgIiArIChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UgPT0gbnVsbCA/ICJudWxsIiA6IHNlcnZpY2VFbmRwb2ludEludGVyZmFjZS5nZXROYW1lKCkpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdGhlIGdpdmVuIGludGVyZmFjZSwgZ2V0IHRoZSBzdHViIGltcGxlbWVudGF0aW9uLgotICAgICAqIElmIHRoaXMgc2VydmljZSBoYXMgbm8gcG9ydCBmb3IgdGhlIGdpdmVuIGludGVyZmFjZSwKLSAgICAgKiB0aGVuIFNlcnZpY2VFeGNlcHRpb24gaXMgdGhyb3duLgotICAgICAqLwotICAgIHB1YmxpYyBqYXZhLnJtaS5SZW1vdGUgZ2V0UG9ydChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBDbGFzcyBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBpZiAocG9ydE5hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFBvcnQoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKTsKLSAgICAgICAgfQotICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGlucHV0UG9ydE5hbWUgPSBwb3J0TmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgaWYgKCJDb252ZXJ0ZXIiLmVxdWFscyhpbnB1dFBvcnROYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIGdldENvbnZlcnRlcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgIHsKLSAgICAgICAgICAgIGphdmEucm1pLlJlbW90ZSBfc3R1YiA9IGdldFBvcnQoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKTsKLSAgICAgICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViKSBfc3R1Yikuc2V0UG9ydE5hbWUocG9ydE5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIF9zdHViOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgZ2V0U2VydmljZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJDb252ZXJ0ZXJTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuSGFzaFNldCBwb3J0cyA9IG51bGw7Ci0KLSAgICBwdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIGdldFBvcnRzKCkgewotICAgICAgICBpZiAocG9ydHMgPT0gbnVsbCkgewotICAgICAgICAgICAgcG9ydHMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKLSAgICAgICAgICAgIHBvcnRzLmFkZChuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJDb252ZXJ0ZXIiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXQgdGhlIGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgcG9ydCBuYW1lLgotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRBZGRyZXNzKGphdmEubGFuZy5TdHJpbmcgcG9ydE5hbWUsIGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAotaWYgKCJDb252ZXJ0ZXIiLmVxdWFscyhwb3J0TmFtZSkpIHsKLSAgICAgICAgICAgIHNldENvbnZlcnRlckVuZHBvaW50QWRkcmVzcyhhZGRyZXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAoteyAvLyBVbmtub3duIFBvcnQgTmFtZQotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbigiIENhbm5vdCBzZXQgRW5kcG9pbnQgQWRkcmVzcyBmb3IgVW5rbm93biBQb3J0IiArIHBvcnROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0IHRoZSBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIHBvcnQgbmFtZS4KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50QWRkcmVzcyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzZXRFbmRwb2ludEFkZHJlc3MocG9ydE5hbWUuZ2V0TG9jYWxQYXJ0KCksIGFkZHJlc3MpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU29hcEJpbmRpbmdTdHViLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOTdhYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQ29udmVydGVyU29hcEJpbmRpbmdTdHViLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGNsYXNzIENvbnZlcnRlclNvYXBCaW5kaW5nU3R1YiBleHRlbmRzIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1YiBpbXBsZW1lbnRzIHd0cC5Db252ZXJ0ZXIgewotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWRTZXJDbGFzc2VzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyUU5hbWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyRmFjdG9yaWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkRGVzZXJGYWN0b3JpZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotCi0gICAgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjIFtdIF9vcGVyYXRpb25zOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgX29wZXJhdGlvbnMgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2NbMl07Ci0gICAgICAgIF9pbml0T3BlcmF0aW9uRGVzYzEoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIF9pbml0T3BlcmF0aW9uRGVzYzEoKXsKLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2Mgb3BlcjsKLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MgcGFyYW07Ci0gICAgICAgIG9wZXIgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2MoKTsKLSAgICAgICAgb3Blci5zZXROYW1lKCJjZWxzaXVzVG9GYXJlbmhlaXQiKTsKLSAgICAgICAgcGFyYW0gPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiY2Vsc2l1cyIpLCBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYy5JTiwgbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IiksIGZsb2F0LmNsYXNzLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBvcGVyLmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuQ2xhc3MoZmxvYXQuY2xhc3MpOwotICAgICAgICBvcGVyLnNldFJldHVyblFOYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImNlbHNpdXNUb0ZhcmVuaGVpdFJldHVybiIpKTsKLSAgICAgICAgb3Blci5zZXRTdHlsZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlN0eWxlLldSQVBQRUQpOwotICAgICAgICBvcGVyLnNldFVzZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlVzZS5MSVRFUkFMKTsKLSAgICAgICAgX29wZXJhdGlvbnNbMF0gPSBvcGVyOwotCi0gICAgICAgIG9wZXIgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2MoKTsKLSAgICAgICAgb3Blci5zZXROYW1lKCJmYXJlbmhlaXRUb0NlbHNpdXMiKTsKLSAgICAgICAgcGFyYW0gPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiZmFyZW5oZWl0IiksIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjLklOLCBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSwgZmxvYXQuY2xhc3MsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG9wZXIuYWRkUGFyYW1ldGVyKHBhcmFtKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5UeXBlKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5DbGFzcyhmbG9hdC5jbGFzcyk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuUU5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiZmFyZW5oZWl0VG9DZWxzaXVzUmV0dXJuIikpOwotICAgICAgICBvcGVyLnNldFN0eWxlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuU3R5bGUuV1JBUFBFRCk7Ci0gICAgICAgIG9wZXIuc2V0VXNlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuVXNlLkxJVEVSQUwpOwotICAgICAgICBfb3BlcmF0aW9uc1sxXSA9IG9wZXI7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udmVydGVyU29hcEJpbmRpbmdTdHViKCkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICAgdGhpcyhudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udmVydGVyU29hcEJpbmRpbmdTdHViKGphdmEubmV0LlVSTCBlbmRwb2ludFVSTCwgamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgIHRoaXMoc2VydmljZSk7Ci0gICAgICAgICBzdXBlci5jYWNoZWRFbmRwb2ludCA9IGVuZHBvaW50VVJMOwotICAgIH0KLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIoamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgc3VwZXIuc2VydmljZSA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UgPSBzZXJ2aWNlOwotICAgICAgICB9Ci0gICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlKXN1cGVyLnNlcnZpY2UpLnNldFR5cGVNYXBwaW5nVmVyc2lvbigiMS4yIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBjcmVhdGVDYWxsKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBzdXBlci5fY3JlYXRlQ2FsbCgpOwotICAgICAgICAgICAgaWYgKHN1cGVyLm1haW50YWluU2Vzc2lvblNldCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldE1haW50YWluU2Vzc2lvbihzdXBlci5tYWludGFpblNlc3Npb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFVzZXJuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRVc2VybmFtZShzdXBlci5jYWNoZWRVc2VybmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkUGFzc3dvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFBhc3N3b3JkKHN1cGVyLmNhY2hlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHN1cGVyLmNhY2hlZEVuZHBvaW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRUaW1lb3V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRUaW1lb3V0KHN1cGVyLmNhY2hlZFRpbWVvdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFBvcnROYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQb3J0TmFtZShzdXBlci5jYWNoZWRQb3J0TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24ga2V5cyA9IHN1cGVyLmNhY2hlZFByb3BlcnRpZXMua2V5cygpOwotICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSA9IChqYXZhLmxhbmcuU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkoa2V5LCBzdXBlci5jYWNoZWRQcm9wZXJ0aWVzLmdldChrZXkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBfY2FsbDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5sYW5nLlRocm93YWJsZSBfdCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQoIkZhaWx1cmUgdHJ5aW5nIHRvIGdldCB0aGUgQ2FsbCBvYmplY3QiLCBfdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgZmxvYXQgY2Vsc2l1c1RvRmFyZW5oZWl0KGZsb2F0IGNlbHNpdXMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gewotICAgICAgICBpZiAoc3VwZXIuY2FjaGVkRW5kcG9pbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IG9yZy5hcGFjaGUuYXhpcy5Ob0VuZFBvaW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsIF9jYWxsID0gY3JlYXRlQ2FsbCgpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb24oX29wZXJhdGlvbnNbMF0pOwotICAgICAgICBfY2FsbC5zZXRVc2VTT0FQQWN0aW9uKHRydWUpOwotICAgICAgICBfY2FsbC5zZXRTT0FQQWN0aW9uVVJJKCIiKTsKLSAgICAgICAgX2NhbGwuc2V0RW5jb2RpbmdTdHlsZShudWxsKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsLlNFTkRfVFlQRV9BVFRSLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLkF4aXNFbmdpbmUuUFJPUF9ET01VTFRJUkVGUywgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBWZXJzaW9uKG9yZy5hcGFjaGUuYXhpcy5zb2FwLlNPQVBDb25zdGFudHMuU09BUDExX0NPTlNUQU5UUyk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbk5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiY2Vsc2l1c1RvRmFyZW5oZWl0IikpOwotCi0gICAgICAgIHNldFJlcXVlc3RIZWFkZXJzKF9jYWxsKTsKLSAgICAgICAgc2V0QXR0YWNobWVudHMoX2NhbGwpOwotIHRyeSB7ICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IF9yZXNwID0gX2NhbGwuaW52b2tlKG5ldyBqYXZhLmxhbmcuT2JqZWN0W10ge25ldyBqYXZhLmxhbmcuRmxvYXQoY2Vsc2l1cyl9KTsKLQotICAgICAgICBpZiAoX3Jlc3AgaW5zdGFuY2VvZiBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93IChqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pX3Jlc3A7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBleHRyYWN0QXR0YWNobWVudHMoX2NhbGwpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIF9yZXNwKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIF9leGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIG9yZy5hcGFjaGUuYXhpcy51dGlscy5KYXZhVXRpbHMuY29udmVydChfcmVzcCwgZmxvYXQuY2xhc3MpKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgfSBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBheGlzRmF1bHRFeGNlcHRpb24pIHsKLSAgdGhyb3cgYXhpc0ZhdWx0RXhjZXB0aW9uOwotfQotICAgIH0KLQotICAgIHB1YmxpYyBmbG9hdCBmYXJlbmhlaXRUb0NlbHNpdXMoZmxvYXQgZmFyZW5oZWl0KSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHN1cGVyLmNhY2hlZEVuZHBvaW50ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBvcmcuYXBhY2hlLmF4aXMuTm9FbmRQb2ludEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBfY2FsbCA9IGNyZWF0ZUNhbGwoKTsKLSAgICAgICAgX2NhbGwuc2V0T3BlcmF0aW9uKF9vcGVyYXRpb25zWzFdKTsKLSAgICAgICAgX2NhbGwuc2V0VXNlU09BUEFjdGlvbih0cnVlKTsKLSAgICAgICAgX2NhbGwuc2V0U09BUEFjdGlvblVSSSgiIik7Ci0gICAgICAgIF9jYWxsLnNldEVuY29kaW5nU3R5bGUobnVsbCk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbC5TRU5EX1RZUEVfQVRUUiwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5BeGlzRW5naW5lLlBST1BfRE9NVUxUSVJFRlMsIEJvb2xlYW4uRkFMU0UpOwotICAgICAgICBfY2FsbC5zZXRTT0FQVmVyc2lvbihvcmcuYXBhY2hlLmF4aXMuc29hcC5TT0FQQ29uc3RhbnRzLlNPQVAxMV9DT05TVEFOVFMpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb25OYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImZhcmVuaGVpdFRvQ2Vsc2l1cyIpKTsKLQotICAgICAgICBzZXRSZXF1ZXN0SGVhZGVycyhfY2FsbCk7Ci0gICAgICAgIHNldEF0dGFjaG1lbnRzKF9jYWxsKTsKLSB0cnkgeyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBfcmVzcCA9IF9jYWxsLmludm9rZShuZXcgamF2YS5sYW5nLk9iamVjdFtdIHtuZXcgamF2YS5sYW5nLkZsb2F0KGZhcmVuaGVpdCl9KTsKLQotICAgICAgICBpZiAoX3Jlc3AgaW5zdGFuY2VvZiBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93IChqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pX3Jlc3A7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBleHRyYWN0QXR0YWNobWVudHMoX2NhbGwpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIF9yZXNwKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIF9leGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIG9yZy5hcGFjaGUuYXhpcy51dGlscy5KYXZhVXRpbHMuY29udmVydChfcmVzcCwgZmxvYXQuY2xhc3MpKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgfSBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBheGlzRmF1bHRFeGNlcHRpb24pIHsKLSAgdGhyb3cgYXhpc0ZhdWx0RXhjZXB0aW9uOwotfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZWY2YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDQyNCAgIDEzODA2MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1KU1QgV2ViIFNlcnZpY2VzIEF4aXMgQ29uc3VtcHRpb24gQ29yZSBUZXN0Ci1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91bml0dGVzdC9Mb2NhdG9yVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91bml0dGVzdC9Mb2NhdG9yVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3YTYwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdW5pdHRlc3QvTG9jYXRvclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbC5KYXZhRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbC5TdGRvdXRQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsLlV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUphdmFDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlRmluZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotCi1wdWJsaWMgY2xhc3MgTG9jYXRvclRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUgKCkKLQl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKExvY2F0b3JUZXN0cy5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9BeGlzQ2xpZW50TG9jYXRvciAoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTiB0ZXN0X0F4aXNDbGllbnRMb2NhdG9yIik7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSBuZXcgU3RyaW5nW10geyJKYXZhMSIsIkphdmEyIiwiSmF2YTMifTsKLQkJCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdE5hbWVzLmxlbmd0aF07Ci0JCQlmb3IgKGludCB4PTA7IHg8cHJvamVjdE5hbWVzLmxlbmd0aDsgeCsrKQotCQkJewotCQkJCXByb2plY3RzW3hdID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1t4XSk7Ci0JCQl9Ci0JCQlVdGlsLmluaXQoKTsKLQkJCXRyeQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IFV0aWwuY3JlYXRlSmF2YVByb2plY3QocHJvamVjdE5hbWVzW2ldKTsKLQkJCQkJVXRpbC5hZGRSZXF1aXJlZEphcnNUb0phdmFQcm9qZWN0KGphdmFQcm9qZWN0KTsKLQkJCQkJVXRpbC5jb3B5RXhhbXBsZXNUb0phdmFQcm9qZWN0KGphdmFQcm9qZWN0LG5ldyBKYXZhRmlsdGVyKCkpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChUaHJvd2FibGUgdCkKLQkJCXsKLQkJCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCWZhaWwoIkZhaWxlZCB0byBhY2Nlc3Mgb3IgY3JlYXRlIHByZXJlcXVpc2l0ZSBwcm9qZWN0cyIpOwotCQkJfQotCQkJV2ViU2VydmljZUZpbmRlciBmaW5kZXIgPSBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCk7Ci0JCQlTdHJpbmdbXSBjYXRlZ29yeUlkcyA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2F0ZWdvcnlJZHMoKTsKLQkJCWludCBuID0gLTE7Ci0JCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgPSBuZXcgU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCQlmb3IgKGludCBpPTA7IGk8Y2F0ZWdvcnlJZHMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYXRlZ29yeSBJRCA9IFsiK2NhdGVnb3J5SWRzW2ldKyJdIik7Ci0JCQkJaWYgKGNhdGVnb3J5SWRzW2ldLmVxdWFscygib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmNhdGVnb3J5LmF4aXMiKSkKLQkJCQl7Ci0JCQkJCW4gPSBpOwotCQkJCQlJdGVyYXRvciBpdGVyID0gZmluZGVyLmdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWRzW2ldLG1vbml0b3IpOwotCQkJCQlhc3NlcnRGb3VuZENsaWVudHMoaXRlciw2KTsKLQkJCQkJaXRlciA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkc1tpXSxwcm9qZWN0cyxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsNik7Ci0JCQkJCWl0ZXIgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZHNbaV0sbmV3IElQcm9qZWN0W10ge3Byb2plY3RzWzBdfSxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsMik7Ci0JCQkJCWl0ZXIgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZHNbaV0sbmV3IElQcm9qZWN0W10ge3Byb2plY3RzWzFdLHByb2plY3RzWzJdfSxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsNCk7Ci0JCQkJCUlQcm9qZWN0IG5vU3VjaFByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoIm5vU3VjaFByb2plY3QiKTsKLQkJCQkJaXRlciA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkc1tpXSxuZXcgSVByb2plY3RbXSB7bm9TdWNoUHJvamVjdH0sbW9uaXRvcik7Ci0JCQkJCWFzc2VydEZvdW5kQ2xpZW50cyhpdGVyLDApOwotCQkJCX0KLQkJCX0KLQkJCWFzc2VydFRydWUoIkF4aXMgbG9jYXRvciBleHRlbnNpb24gbWlzc2luZy4iLG4gPj0gMCk7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVOREVEIHRlc3RfQXhpc0NsaWVudExvY2F0b3IiKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgYXNzZXJ0Rm91bmRDbGllbnRzICggSXRlcmF0b3IgaXRlciwgaW50IHggKQotCXsKLQkJaW50IHAgPSAwOwotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0JCXsKLQkJCU9iamVjdCBvYmogPSBpdGVyLm5leHQoKTsKLQkJCWFzc2VydFRydWUoIkZpbmRlciByZXR1cm5lZCBhICIrb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpKyIgaW5zdGVhZCBvZiBhIFdlYlNlcnZpY2VDbGllbnRJbmZvLiIsb2JqIGluc3RhbmNlb2YgV2ViU2VydmljZUNsaWVudEluZm8pOwotCQkJcCsrOwotCQkJV2ViU2VydmljZUNsaWVudEluZm8gd3NjSW5mbyA9IChXZWJTZXJ2aWNlQ2xpZW50SW5mbylvYmo7Ci0JCQlTdHJpbmcgcHJveHlDbGFzc1VSTCA9IHdzY0luZm8uZ2V0SW1wbFVSTCgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBeGlzIGNsaWVudCBwcm94eSBjbGFzcyA9IFsiK3Byb3h5Q2xhc3NVUkwrIl0iKTsKLQkJCWlmICh3c2NJbmZvIGluc3RhbmNlb2YgV2ViU2VydmljZUphdmFDbGllbnRJbmZvKQotCQkJewotCQkJCVdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbyB3c2NKSW5mbyA9IChXZWJTZXJ2aWNlSmF2YUNsaWVudEluZm8pd3NjSW5mbzsKLQkJCQlhc3NlcnROb3ROdWxsKCJGb3VuZCBhbiB1bmV4cGVjdGVkIG51bGwgSVR5cGUiLHdzY0pJbmZvLmdldFR5cGUoKSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJBeGlzIGNsaWVudCBwcm94eSBJVHlwZSA9IFsiK3dzY0pJbmZvLmdldFR5cGUoKSsiXSIpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoIkZvdW5kICIrcCsiIHByb3hpZXMgaW5zdGVhZCBvZiB0aGUgZXhwZWN0ZWQgIit4KyIuIixwID09IHgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0ZpbHRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNmMwNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzExICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsOwotCi1wdWJsaWMgaW50ZXJmYWNlIEZpbHRlcgotewotCXB1YmxpYyBib29sZWFuIGFjY2VwdCAoIE9iamVjdCBvYmplY3QgKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0phdmFGaWx0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0phdmFGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc2MjA2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9KYXZhRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzExICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsOwotCi1wdWJsaWMgY2xhc3MgSmF2YUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQgKCBPYmplY3Qgb2JqZWN0ICkKLQl7Ci0JCXJldHVybiBvYmplY3QudG9TdHJpbmcoKS5lbmRzV2l0aCgiLmphdmEiKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1N0ZG91dFByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODhiMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLQotcHVibGljIGNsYXNzIFN0ZG91dFByb2dyZXNzTW9uaXRvciBleHRlbmRzIE51bGxQcm9ncmVzc01vbml0b3IKLXsKLQotCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgbmFtZSwgaW50IHRvdGFsV29yaykKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiW1Byb2dyZXNzXSAiK25hbWUrIiwgIit0b3RhbFdvcmsrIiB1bml0KHMpIHJlbWFpbmluZykuIik7Ci0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gRG9uZS4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiW1Byb2dyZXNzXSAiK25hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN1YlRhc2soU3RyaW5nIG5hbWUpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gIituYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gIit3b3JrKyIgdW5pdChzKSBjb21wbGV0ZWQuIik7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzkwMjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1V0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYxMjExICAgMTYyMjg4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3b3Jrc3BhY2UgcGF0aHMgd2l0aCBzcGFjZXMgYnJlYWsgSmF2YSBFZGl0b3IgTGF1bmNoCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBVdGlsCi17Ci0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdGhpcyB0ZXN0c3VpdGUuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGluaXQgKCkKLQl7Ci0JCVN0cmluZyB3b3Jrc3BhY2VPU1BhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJXb3Jrc3BhY2UgPSBbIit3b3Jrc3BhY2VPU1BhdGgrIl0iKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlIGEgSmF2YSBwcm9qZWN0IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0byBjcmVhdGUuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBwcm9qZWN0IGNvdWxkIG5vdCBiZSBjcmVhdGVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUphdmFQcm9qZWN0IGNyZWF0ZUphdmFQcm9qZWN0ICggU3RyaW5nIG5hbWUgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSByb290LmdldFByb2plY3QobmFtZSk7Ci0JCWlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBwcm9qZWN0IFsiK25hbWUrIl0iKTsKLQkJCXByb2plY3QuY3JlYXRlKG51bGwpOwotCQkJcHJvamVjdC5vcGVuKG51bGwpOwotCSAgICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpOwotCSAgICAgICAgZGVzYy5zZXROYXR1cmVJZHMobmV3IFN0cmluZ1tdIHtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLQkgICAgICAgIElDb21tYW5kIGNtZCA9IGRlc2MubmV3Q29tbWFuZCgpOwotCSAgICAgICAgY21kLnNldEJ1aWxkZXJOYW1lKEphdmFDb3JlLkJVSUxERVJfSUQpOwotCSAgICAgICAgZGVzYy5zZXRCdWlsZFNwZWMobmV3IElDb21tYW5kW10ge2NtZH0pOwotCSAgICAgICAgcHJvamVjdC5zZXREZXNjcmlwdGlvbihkZXNjLG51bGwpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgSmF2YSBwcm9qZWN0IFsiK25hbWUrIl0iKTsKLQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQlqYXZhUHJvamVjdC5vcGVuKG51bGwpOwotCQlyZXR1cm4gamF2YVByb2plY3Q7Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgQXhpcyBqYXJzIGFuZCB0aGUgSlJFIHRvIHRoZSBjbGFzc3BhdGggb2YgdGhlIGdpdmVuIHByb2plY3QuCi0JICogQHBhcmFtIGphdmFQcm9qZWN0IFRoZSBwcm9qZWN0IHRvIGFkZCBheGlzLmphciB0by4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgamFyIGNvdWxkIG5vdCBiZSBhZGRlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkUmVxdWlyZWRKYXJzVG9KYXZhUHJvamVjdCAoIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCS8vIEdldCB0aGUgY3VycmVudCBjbGFzc3BhdGggYXMgYSBsaXN0LgotCQlJQ2xhc3NwYXRoRW50cnlbXSBjbGFzc3BhdGggPSBqYXZhUHJvamVjdC5nZXRSYXdDbGFzc3BhdGgoKTsKLQkJTGlzdCBsaXN0ID0gbmV3IExpbmtlZExpc3QoamF2YS51dGlsLkFycmF5cy5hc0xpc3QoY2xhc3NwYXRoKSk7Ci0JCQotCQkvLyBBZGQgdGhlIEpSRSB0byB0aGUgbGlzdC4KLQkJSUNsYXNzcGF0aEVudHJ5IGNvbiA9IEphdmFDb3JlLm5ld0NvbnRhaW5lckVudHJ5KG5ldyBQYXRoKCJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiKSk7Ci0JCWxpc3QuYWRkKGNvbik7Ci0JCQotCQkvLyBBZGQgdGhlIEF4aXMgamFycyB0byB0aGUgbGlzdC4KLQkJU3RyaW5nW10gamFycyA9IG5ldyBTdHJpbmdbXSB7Ci0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsImF4aXMuamFyIiwKLQkJCQkib3JnLmFwYWNoZS5heGlzIiwiY29tbW9ucy1kaXNjb3ZlcnktMC4yLmphciIsCi0JCQkJIm9yZy5hcGFjaGUuY29tbW9uc19sb2dnaW5nIiwiY29tbW9ucy1sb2dnaW5nLTEuMC40LmphciIsCi0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsImpheHJwYy5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmpha2FydGFfbG9nNGoiLCJsb2c0ai0xLjIuOC5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmF4aXMiLCJzYWFqLmphciIsCi0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsIndzZGw0ai0xLjUuMS5qYXIiCi0JCX07Ci0JCQotCQlmb3IgKGludCBpPTA7IGk8amFycy5sZW5ndGg7IGkrPTIpCi0JCXsKLQkJCUlQYXRoIGphciA9IGdldEF4aXNQbHVnaW5KYXJQYXRoKGphcnNbaV0samFyc1tpKzFdKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQWRkaW5nIGphciBbIitqYXIudG9TdHJpbmcoKSsiXSIpOwotCQkJSUNsYXNzcGF0aEVudHJ5IGphckVudHJ5ID0gSmF2YUNvcmUubmV3TGlicmFyeUVudHJ5KGphcixudWxsLG51bGwpOwotCQkJbGlzdC5hZGQoamFyRW50cnkpOwotCQl9Ci0JCQotCQkvLyBVcGRhdGUgdGhlIGN1cnJlbnQgY2xhc3NwYXRoIGZyb20gdGhlIGxpc3QuCi0JCUlDbGFzc3BhdGhFbnRyeVtdIG5ld0NsYXNzcGF0aCA9IChJQ2xhc3NwYXRoRW50cnlbXSlsaXN0LnRvQXJyYXkobmV3IElDbGFzc3BhdGhFbnRyeVswXSk7Ci0JCWphdmFQcm9qZWN0LnNldFJhd0NsYXNzcGF0aChuZXdDbGFzc3BhdGgsbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgbmFtZWQgamFyIGluIHRoZSBBeGlzIHBsdWdpbi4KLQkgKiBAcmV0dXJuIFRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIG5hbWVkIGphciBpbiB0aGUgQXhpcyBwbHVnaW4uCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBwYXRoIGNvdWxkIG5vdCBiZSBjb21wdXRlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEF4aXNQbHVnaW5KYXJQYXRoICggU3RyaW5nIHBsdWdpbk5hbWUsIFN0cmluZyBqYXJOYW1lICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5OYW1lKTsKLQkJaWYgKGJ1bmRsZSA9PSBudWxsKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnaW4gb3JnLmFwYWNoZS5heGlzIixudWxsKSk7Ci0JCX0KLQkJVVJMIGF4aXNVUkwgPSBGaWxlTG9jYXRvci5maW5kKGJ1bmRsZSxuZXcgUGF0aCgibGliLyIramFyTmFtZSksbnVsbCk7Ci0JCXRyeQotCQl7Ci0JCQlVUkwgbG9jYWxBeGlzVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKGF4aXNVUkwpOwotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUobmV3IFVSSShVUklFbmNvZGVyLmVuY29kZShsb2NhbEF4aXNVUkwudG9TdHJpbmcoKSwgIlVURi04IikpKTsKLQkJCXJldHVybiBuZXcgUGF0aChmaWxlLnRvU3RyaW5nKCkpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIlVuYWJsZSB0byBlbmNvZGUgamFyIHBhdGggZm9yIHBsdWdpbiBvcmcuYXBhY2hlLmF4aXMiLHVlZSkpOwkJCQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJVbmFibGUgdG8gbG9jYXRlIHBsdWdpbiBvcmcuYXBhY2hlLmF4aXMiLGlvZSkpOwotCQl9Ci0JCWNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gdXNlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnaW4gb3JnLmFwYWNoZS5heGlzIix1c2UpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBDb3BpZXMgZXhhbXBsZXMgdG8gdGhlIGdpdmVuIEphdmEgcHJvamVjdC4KLQkgKiBAcGFyYW0gamF2YVByb2plY3QgVGhlIHByb2plY3QgdG8gY29weSB0aGUgZXhhbXBsZXMgdG8uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlFeGFtcGxlc1RvSmF2YVByb2plY3QgKCBJSmF2YVByb2plY3QgamF2YVByb2plY3QsIEZpbHRlciBmaWx0ZXIgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUHJvamVjdCBwcm9qZWN0ID0gamF2YVByb2plY3QuZ2V0UHJvamVjdCgpOwotCQlTdHJpbmcgc291cmNlUGF0aCA9IHByb2plY3QuZ2V0TmFtZSgpOwotCQljb3B5RXhhbXBsZSgib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cyIsImRhdGEvYXhpc1NvdXJjZTEiLHNvdXJjZVBhdGgsZmlsdGVyKTsKLQkJY29weUV4YW1wbGUoIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMiLCJkYXRhL2F4aXNTb3VyY2UyIixzb3VyY2VQYXRoLGZpbHRlcik7Ci0JCXByb2plY3QuYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5GVUxMX0JVSUxELG51bGwpOwotCQl0cnkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBidWlsZCB0byBjb21wbGV0ZSIpOwotCQkJUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELG51bGwpOwotCQl9Ci0JCWNhdGNoIChUaHJvd2FibGUgdCkKLQkJewotCQkJLy9EbyBub3RoaW5nLgotCQl9Ci0JfQotCQotCS8qKgotCSAqIFJlY3Vyc2l2ZWx5IGNvcGllcyBmaWxlcyBmcm9tIGEgcGx1Z2luIHRvIHRoZSB3b3Jrc3BhY2UuCi0JICogQHBhcmFtIHNvdXJjZVBsdWdpbiBUaGUgcGx1Z2luIHRvIGNvcHkgZnJvbS4KLQkgKiBAcGFyYW0gc291cmNlUm9vdCBUaGUgcGx1Z2luLXJlbGF0ZWQgcGF0aCB0byBjb3B5IGZyb20uCi0JICogQHBhcmFtIHRhcmdldFdvcmtzcGFjZVBhdGggVGhlIHdvcmtzcGFjZSBwYXRoIHRvIGNvcHkgdG8uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlFeGFtcGxlICggU3RyaW5nIHNvdXJjZVBsdWdpbiwgU3RyaW5nIHNvdXJjZVJvb3QsIFN0cmluZyB0YXJnZXRXb3Jrc3BhY2VQYXRoLCBGaWx0ZXIgZmlsdGVyICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShzb3VyY2VQbHVnaW4pOwotCQlpZiAoYnVuZGxlID09IG51bGwpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJVbmFibGUgdG8gbG9jYXRlIHBsdWdpbiAiK3NvdXJjZVBsdWdpbixudWxsKSk7Ci0JCX0KLQkJRW51bWVyYXRpb24gZSA9IGJ1bmRsZS5nZXRFbnRyeVBhdGhzKHNvdXJjZVJvb3QpOwotCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJewotCQkJU3RyaW5nIHBhdGggPSBlLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVuZGxlIHBhdGggPSBbIitwYXRoKyJdIik7Ci0JCQljb3B5RXhhbXBsZUZpbGUoYnVuZGxlLHBhdGgsbmV3IFBhdGgoc291cmNlUm9vdCkuc2VnbWVudENvdW50KCksdGFyZ2V0V29ya3NwYWNlUGF0aCxmaWx0ZXIpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RXhhbXBsZUZpbGUgKCBCdW5kbGUgYnVuZGxlLCBTdHJpbmcgcGF0aCwgaW50IG9mZnNldCwgU3RyaW5nIHRhcmdldFdvcmtzcGFjZVBhdGgsIEZpbHRlciBmaWx0ZXIgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUGF0aCByZWR1Y2VkUGF0aCA9IG5ldyBQYXRoKHBhdGgpLnJlbW92ZUZpcnN0U2VnbWVudHMob2Zmc2V0KTsKLQkJSVBhdGggdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKHRhcmdldFdvcmtzcGFjZVBhdGgpLmFwcGVuZChyZWR1Y2VkUGF0aCk7Ci0JCWlmIChwYXRoLmVuZHNXaXRoKCIvIikpCi0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRm9sZGVyID0gWyIrcGF0aCsiXSBUYXJnZXQgPSBbIit0YXJnZXRQYXRoKyJdIik7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKHRhcmdldFBhdGgpOwotCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpCi0JCQl7Ci0JCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLHRydWUsbnVsbCk7Ci0JCQl9Ci0JCQlFbnVtZXJhdGlvbiBlID0gYnVuZGxlLmdldEVudHJ5UGF0aHMocGF0aCk7Ci0JCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJCXsKLQkJCQlTdHJpbmcgc3VicGF0aCA9IGUubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJCWNvcHlFeGFtcGxlRmlsZShidW5kbGUsc3VicGF0aCxvZmZzZXQsdGFyZ2V0V29ya3NwYWNlUGF0aCxmaWx0ZXIpOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGaWxlID0gWyIrcGF0aCsiXSBUYXJnZXQgPSBbIit0YXJnZXRQYXRoKyJdIik7Ci0JCQlpZiAoZmlsdGVyLmFjY2VwdChwYXRoKSkKLQkJCXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcGllZCBbIitwYXRoKyJdIik7Ci0JCQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeShwYXRoKTsKLQkJCQljb3B5RmlsZSh1cmwsdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlGaWxlICggVVJMIHVybCwgSVBhdGggdGFyZ2V0UGF0aCApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUodGFyZ2V0UGF0aCk7Ci0JCXRyeQotCQl7Ci0JCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSB1cmwub3BlblN0cmVhbSgpOwotCQkJZmlsZS5jcmVhdGUoc3RyZWFtLHRydWUsbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIklPRXhjZXB0aW9uIGNvcHlpbmcgZmlsZSIsaW9lKSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDgxMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotYXhpc1BlcmZtc3IuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4OGUxYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjZlOGU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jVGh1IE1heSAzMSAxNDoyODowNSBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWluc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDYzY2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6NTQgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MWQ3YTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2U7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDIucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBwZXJmdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UucGx1Z2luLlBlcmZvcm1hbmNlUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zciwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnBsdWdpbiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmpzdC53cywKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWwsCi0gb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudCwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LAotIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzMi5jb3JlCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODQ4NGRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgcGVyZnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBiaW4vCi1qYXJzLmNvbXBpbGUub3JkZXIgPSBwZXJmdGVzdHMuamFyCi1zb3VyY2UucGVyZnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5wZXJmdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWQ4OWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDQyNCAgIDEzODA2MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1KU1QgV2ViIFNlcnZpY2VzIFBlcmZvcm1hbmNlIFBsdWctaW4KLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckJVSmF2YUF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQlVKYXZhQXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0YzFiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQlVKYXZhQXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgCi0gKiAyMDA3MDUwOSAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBCb3R0b20gdXAgcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzIGFuZCBUb21jYXQgdjUuMAotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGVyZm1zckJVSmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCS8vIENvbnN0YW50cwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7IAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuQlVfUFJPSkVDVF9OQU1FOwotICAgIAotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmsgc3BhY2UgCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCSAgICAKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsJCQotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsZm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotCQkvLyBFbnN1cmUgdGhhdCBFY2hvLmNsYXNzIGlzIGJ1aWx0IGluOgotCQkvLyA8V2ViIFByb2plY3Q+L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzL2Zvby9FY2hvLmNsYXNzCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICh3ZWJQcm9qZWN0PT1udWxsIHx8ICF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShQUk9KRUNUX05BTUUsIFBST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLCBTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCA1LjAKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsJCi0JCUpVbml0VXRpbHMuc2V0U2VydmljZVNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQkKLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLyAgCi0JcHVibGljIHZvaWQgdGVzdEJVSmF2YUF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkgIAlJU3RhdHVzW10gc3RhdHVzOwotCSAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JICAgIEpVbml0VXRpbHMuZGlzYWJsZVdTSURpYWxvZyh3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0JICAgIEpVbml0VXRpbHMuc2V0UnVudGltZVByZWZlcmVuY2UoIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiKTsKLQotCSAgICAKLQkgICAgUGVyZm9ybWFuY2UgcGVyZj0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOwotCSAgICBQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcihwZXJmLmdldERlZmF1bHRTY2VuYXJpb0lkKHRoaXMpKTsJICAgIAotCSAgICB0cnkgewotICAgIAotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLQkgICAgICBzdGF0dXMgPSBQZXJmb3JtYW5jZUpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQk9UVE9NX1VQLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0KLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotCSAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0JICAgIH0KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAocGVyZm9ybWFuY2VNZXRlcj09bnVsbCkKLQkgICAgCQlwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLQkgCX0KLQkJCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCQkKLQl9Ci0JCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotCQlJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAKLSAgICAgICAgSUZvbGRlciB3c2RsRm9sZGVyID0gd2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKTsKLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJYXNzZXJ0VHJ1ZSh3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLSAgICAKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCS8vc2hvdyBlcnJvcnMKLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQlVKYXZhIEVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUocy5sZW5ndGggPT0gMCk7Ci0JfQotCQotICAvKioKLSAgICogQ2xlYXIgd29ya3NwYWNlIGlmIG5lY2Vzc2FyeQotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkvLyBSZW1vdmUgdGhlIEVBUiBmcm9tIHRoZSBzZXJ2ZXIuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJLy9KVW5pdFV0aWxzLnJlbW92ZU1vZHVsZUZyb21TZXJ2ZXIoc2VydmVyXyx3ZWJQcm9qZWN0LGVudl8pOwotCQkKLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLCBudWxsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2Uod2ViUHJvamVjdC5leGlzdHMoKSk7Ci0JCQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQ2xpZW50QXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzVEM1MC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDQ0NWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzVEM1MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAKLSAqIDIwMDcwNTA5ICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIENsaWVudCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmbXNyQ2xpZW50QXhpc1RDNTAgZXh0ZW5kcyBXU1dpemFyZFRvbWNhdDUwVGVzdCB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7Ci0gIAotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMSUVOVF9QUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLkNMSUVOVF9QUk9KRUNUX05BTUU7Ci0JCi0JcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQotICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKCF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShDTElFTlRfUFJPSkVDVF9OQU1FLCBDTElFTlRfUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAKLQkvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgSUZvbGRlciBkZXN0Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0gICAgICAgIEpVbml0VXRpbHMuY29weVRlc3REYXRhKCJUREphdmEiLGRlc3RGb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZGVzdEZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJFY2hvLndzZGwiKSk7CQkKLQotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQkJCi0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgNS4wICAgIAotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwotCQlKVW5pdFV0aWxzLnNldENsaWVudFNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHVibGljIHZvaWQgdGVzdENsaWVudEF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsJCi0JICAJSVN0YXR1c1tdIHN0YXR1czsKLQkgIAkKLQkJSlVuaXRVdGlscy5lbmFibGVQcm94eUdlbmVyYXRpb24odHJ1ZSk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCQlKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKCJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIik7Ci0JCi0JCVBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkJUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0NMSUVOVCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCSAgICAKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgCi0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgc3JjRm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwotICAgIAotCQkvL0lGb2xkZXIgc3JjRm9sZGVyID0gSlVuaXRVdGlscy5nZXRTb3VyY2VGb2xkZXJGb3JXZWJQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQlJRm9sZGVyIGZvbGRlciA9IHNyY0ZvbGRlci5nZXRGb2xkZXIoImZvbyIpOwotCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOyAgICAgICAKLQotCX0KLQkKLSAgLyoqCi0gICAqIFJlbW92ZSB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zclRESmF2YUF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAzODMyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgIAotICogMjAwNzA1MDkgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIFRvcCBkb3duIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGNsYXNzIFBlcmZtc3JUREphdmFBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLlREX1BST0pFQ1RfTkFNRTsKLSAgCi0gIHByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCSAgICBpZiAoIXdlYlByb2plY3QuZXhpc3RzKCkpewotCSAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKFBST0pFQ1RfTkFNRSwgUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksIFNFUlZFUlRZUEVJRF9UQzUwLCAiMTQiLCBlbnZfLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkgICAgfQotCSAgfQotCSAgCi0KLSAgLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7CQkKLQkJSUZvbGRlciBkZXN0Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuY29weVRlc3REYXRhKCJUREphdmEiLGRlc3RGb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZGVzdEZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJFY2hvLndzZGwiKSk7Ci0JCQotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IHY1LjAgc2VydmVyCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1MCk7CQotCQlKVW5pdFV0aWxzLnNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQotCX0KLQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RUREphdmFBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24gewotCSAgCi0JICAgIElTdGF0dXNbXSBzdGF0dXM7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCQlKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKCJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIik7Ci0JCQotCQlQZXJmb3JtYW5jZSBwZXJmPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7Ci0JCVBlcmZvcm1hbmNlTWV0ZXIgcGVyZm9ybWFuY2VNZXRlcj0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKHBlcmYuZ2V0RGVmYXVsdFNjZW5hcmlvSWQodGhpcykpOwkgICAgCi0JICAgIHRyeSB7Ci0gICAgCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdGFydCgpOwotCSAgICAgIHN0YXR1cyA9IFBlcmZvcm1hbmNlSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9UT1BfRE9XTixTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCSAgICAKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOyAgICAKLSAgICAgICAgSUZvbGRlciB3ZWJDb250ZW50Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7ICAgIAotICAgIAotCQkKLQkJSUZvbGRlciB3c2RsRm9sZGVyID0gd2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKTsKLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy8KLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVERKYXZhIEVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUocy5sZW5ndGggPT0gMCk7Ci0JfQotCQotICAvKioKLSAgICogQ2xlYXIgd29ya3NwYWNlIGlmIHJlcXVpcmVkCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSxudWxsKTsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTUvV1NXaXphcmRUb21jYXQ1NVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1NS9XU1dpemFyZFRvbWNhdDU1VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTY3MzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1NS9XU1dpemFyZFRvbWNhdDU1VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjU1OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMyLmNvcmUuY29udGV4dC5BeGlzMkVtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzMi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpczJDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5XU1dpemFyZFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTV2l6YXJkVG9tY2F0NTVUZXN0IGV4dGVuZHMgV1NXaXphcmRUZXN0IHsKLSAgCi0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSIpOwotCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgUlVOVElNRV9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5ydW50aW1lLmF4aXMyIik7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTUgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41NSI7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1NSA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSI7Ci0JICAKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS5ldG9vbHMud2Vic2VydmljZS53YXMudGVzdHMuV1NXaXphcmRUZXN0I2luc3RhbGxTZXJ2ZXJSdW50aW1lKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluc3RhbGxTZXJ2ZXJSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkvLyBjcmVhdGUgc2VydmVyIHJ1bnRpbWUKLSAgICBzZXJ2ZXJSdW50aW1lXyA9IEpVbml0VXRpbHMuY3JlYXRlU2VydmVyUnVudGltZShSVU5USU1FVFlQRUlEX1RDNTUsIFNFUlZFUl9JTlNUQUxMX1BBVEgpOwotICAgIAotICAgIC8vIHNldCBpbnN0YWxsIGxvY2F0aW9ucwotICAgIEF4aXMyRW1pdHRlckNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VBeGlzMkNvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotICAgIGlmIChjb250ZXh0LmdldEF4aXMyUnVudGltZUxvY2F0aW9uKCk9PW51bGwgfHwgY29udGV4dC5nZXRBeGlzMlJ1bnRpbWVMb2NhdGlvbigpLmVxdWFscygiIikpewotICAgIAlTdHJpbmcgcnVudGltZVBhdGggPSBSVU5USU1FX0lOU1RBTExfUEFUSDsKLSAgICAJaWYgKHJ1bnRpbWVQYXRoIT1udWxsKSB7Ci0gICAgCQkgY29udGV4dC5zZXRBeGlzMlJ1bnRpbWVMb2NhdGlvbihydW50aW1lUGF0aCk7Ci0gICAgCX0gICAgICAgIAotICAgIH0KLSAgfQotCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2Uud2FzLnRlc3RzLldTV2l6YXJkVGVzdCNpbnN0YWxsU2VydmVyKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluc3RhbGxTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgIHNlcnZlcl8gPSBKVW5pdFV0aWxzLmNyZWF0ZVNlcnZlcigiQXBhY2hlIFRvbWNhdCB2NTUiLCBTRVJWRVJUWVBFSURfVEM1NSwgc2VydmVyUnVudGltZV8sIGVudl8sIG51bGwgKTsKLSAgfQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JCVUphdmFBeGlzMlRDNTUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyQlVKYXZhQXhpczJUQzU1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxM2Y0NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JCVUphdmFBeGlzMlRDNTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTUuV1NXaXphcmRUb21jYXQ1NVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWwuUGVyZm9ybWFuY2VKVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdC5XU0pVbml0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlTWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogQm90dG9tIHVwIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpczIgYW5kIFRvbWNhdCB2NS41Ci0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBQZXJmbXNyQlVKYXZhQXhpczJUQzU1IGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1NVRlc3QgewotCS8vIENvbnN0YW50cwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVMyOyAKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiQlVBeGlzMldlYiI7Ci0gICAgCi0JcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLSAgLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLSAgICAKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsJCQotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsZm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotCQkvLyBFbnN1cmUgdGhhdCBFY2hvLmNsYXNzIGlzIGJ1aWx0IGluOgotCQkvLyA8V2ViIFByb2plY3Q+L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzL2Zvby9FY2hvLmNsYXNzCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkvL2Fzc2VydFRydWUoSlVuaXRVdGlscy5nZXRDbGFzc2VzRm9sZGVyRm9yV2ViUHJvamVjdChXRUJfUFJPSkVDVF9OQU1FKS5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5jbGFzcyIpKS5leGlzdHMoKSk7Ci0JCQotCQkKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICh3ZWJQcm9qZWN0PT1udWxsIHx8ICF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShQUk9KRUNUX05BTUUsIFBST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLCBTRVJWRVJUWVBFSURfVEM1NSwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQkKLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzMiBhbmQgVG9tY2F0IDUuNQotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTUpOwkJCi0JCUpVbml0VXRpbHMuc2V0U2VydmljZVNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQkKLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLyAgCi0JcHVibGljIHZvaWQgdGVzdEJVSmF2YUF4aXMyVEM1NSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICAJSVN0YXR1c1tdIHN0YXR1czsKLQkgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCSAgICBKVW5pdFV0aWxzLmRpc2FibGVXU0lEaWFsb2cod2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCSAgICBKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKFdTX0FYSVMyX1JVTlRJTUUpOwotCi0JICAgIAotCSAgICBQZXJmb3JtYW5jZSBwZXJmPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7Ci0JICAgIFBlcmZvcm1hbmNlTWV0ZXIgcGVyZm9ybWFuY2VNZXRlcj0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKHBlcmYuZ2V0RGVmYXVsdFNjZW5hcmlvSWQodGhpcykpOwkgICAgCi0JICAgIHRyeSB7Ci0gICAgCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdGFydCgpOwotCSAgICAgIHN0YXR1cyA9IFBlcmZvcm1hbmNlSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9CT1RUT01fVVAsU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0b3AoKTsKLQotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCQkKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0JCQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0JCUlGb2xkZXIgd2ViQ29udGVudEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgIAotICAgICAgICBJRm9sZGVyIHdlYkluZkZvbGRlciA9IHdlYkNvbnRlbnRGb2xkZXIuZ2V0Rm9sZGVyKCJXRUItSU5GIik7Ci0gICAgICAgIElGb2xkZXIgc2VydmljZXNGb2xkZXIgPSB3ZWJJbmZGb2xkZXIuZ2V0Rm9sZGVyKCJzZXJ2aWNlcyIpOwotCQlhc3NlcnRUcnVlKHNlcnZpY2VzRm9sZGVyLmV4aXN0cygpKTsKLQkJSUZvbGRlciB3c0ZvbGRlciA9IHNlcnZpY2VzRm9sZGVyLmdldEZvbGRlcigiRWNobyIpOwotCQlhc3NlcnRUcnVlKHdzRm9sZGVyLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZSh3c0ZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0gICAgCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvL3Nob3cgZXJyb3JzCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJVSmF2YSBFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOwotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gUmVtb3ZlIHRoZSBFQVIgZnJvbSB0aGUgc2VydmVyLgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCS8vSlVuaXRVdGlscy5yZW1vdmVNb2R1bGVGcm9tU2VydmVyKHNlcnZlcl8sd2ViUHJvamVjdCxlbnZfKTsKLQkJCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHdlYlByb2plY3QuZXhpc3RzKCkpOwotCQkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zckNsaWVudEF4aXMyVEM1NS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzMlRDNTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhYzNkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zckNsaWVudEF4aXMyVEM1NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpczIudG9tY2F0LnY1NS5wZXJmbXNyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1NS5XU1dpemFyZFRvbWNhdDU1VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBDbGllbnQgcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzMiBhbmQgVG9tY2F0IHY1LjUKLSAqLwotcHVibGljIGNsYXNzIFBlcmZtc3JDbGllbnRBeGlzMlRDNTUgZXh0ZW5kcyBXU1dpemFyZFRvbWNhdDU1VGVzdCB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVMyOwotICAKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTElFTlRfUFJPSkVDVF9OQU1FID0gIkNsaWVudEF4aXMyV2ViIjsKLQkKLQlwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBpZiAoIXdlYlByb2plY3QuZXhpc3RzKCkpewotICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKENMSUVOVF9QUk9KRUNUX05BTUUsIENMSUVOVF9QUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSxTRVJWRVJUWVBFSURfVEM1NSwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotCS8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsJCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCA1LjUgICAKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzU1KTsKLQkJSlVuaXRVdGlscy5zZXRDbGllbnRTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbGllbnRBeGlzMlRDNTUoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewkKLQkgIAlJU3RhdHVzW10gc3RhdHVzOwotCSAgCQotCQlKVW5pdFV0aWxzLmVuYWJsZVByb3h5R2VuZXJhdGlvbih0cnVlKTsKLQkJSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0JCUpVbml0VXRpbHMuc2V0UnVudGltZVByZWZlcmVuY2UoV1NfQVhJUzJfUlVOVElNRSk7Ci0KLQkJCi0JCVBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkJUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0NMSUVOVCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCSAgICAKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgCi0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgc3JjRm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwotICAgIAotCQkvL0lGb2xkZXIgc3JjRm9sZGVyID0gSlVuaXRVdGlscy5nZXRTb3VyY2VGb2xkZXJGb3JXZWJQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQlJRm9sZGVyIGZvbGRlciA9IHNyY0ZvbGRlci5nZXRGb2xkZXIoImZvbyIpOwotCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOyAgICAgICAKLQotCX0KLQkKLSAgLyoqCi0gICAqIFJlbW92ZSB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JUREphdmFBeGlzMlRDNTUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpczJUQzU1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MzJkMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JUREphdmFBeGlzMlRDNTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjU1LldTV2l6YXJkVG9tY2F0NTVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIFRvcCBkb3duIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpczIgYW5kIFRvbWNhdCB2NS41Ci0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmbXNyVERKYXZhQXhpczJUQzU1IGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1NVRlc3QgewotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzI7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVERBeGlzMldlYiI7Ci0gIAotICBwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgaWYgKCF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLQkgICAgCUpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKFBST0pFQ1RfTkFNRSwgUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksIFNFUlZFUlRZUEVJRF9UQzU1LCAiMTQiLCBlbnZfLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkgICAgfQotCSAgfQotCSAgCSAgCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwkJCi0JCUlGb2xkZXIgZGVzdEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiVERKYXZhIixkZXN0Rm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGRlc3RGb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiRWNoby53c2RsIikpOwotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IHY1LjUgc2VydmVyCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1NSk7CQotCQlKVW5pdFV0aWxzLnNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQotCX0KLQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RUREphdmFBeGlzMlRDNTUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgIAotCSAgICBJU3RhdHVzW10gc3RhdHVzOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLQkJSlVuaXRVdGlscy5zZXRSdW50aW1lUHJlZmVyZW5jZShXU19BWElTMl9SVU5USU1FKTsKLQotCQkKLQkJUGVyZm9ybWFuY2UgcGVyZj0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOwotCQlQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcihwZXJmLmdldERlZmF1bHRTY2VuYXJpb0lkKHRoaXMpKTsJICAgIAotCSAgICB0cnkgewotICAgIAotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLQkgICAgICBzdGF0dXMgPSBQZXJmb3JtYW5jZUpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfVE9QX0RPV04sU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0b3AoKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotCSAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0JICAgIH0KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAocGVyZm9ybWFuY2VNZXRlcj09bnVsbCkKLQkgICAgCQlwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLQkgCX0KLQkgICAgCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0KLQl9Ci0KLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0JCUlGb2xkZXIgd2ViQ29udGVudEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgIAotICAgICAgICBJRm9sZGVyIHdlYkluZkZvbGRlciA9IHdlYkNvbnRlbnRGb2xkZXIuZ2V0Rm9sZGVyKCJXRUItSU5GIik7Ci0gICAgICAgIElGb2xkZXIgc2VydmljZXNGb2xkZXIgPSB3ZWJJbmZGb2xkZXIuZ2V0Rm9sZGVyKCJzZXJ2aWNlcyIpOwotCQlhc3NlcnRUcnVlKHNlcnZpY2VzRm9sZGVyLmV4aXN0cygpKTsKLQkJSUZvbGRlciB3c0ZvbGRlciA9IHNlcnZpY2VzRm9sZGVyLmdldEZvbGRlcigiRWNob1NlcnZpY2UiKTsKLQkJYXNzZXJ0VHJ1ZSh3c0ZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUod3NGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJUREphdmEgRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgcmVxdWlyZWQKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFBlcmZvcm1hbmNlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFBlcmZvcm1hbmNlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEyNjkxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9BbGxQZXJmb3JtYW5jZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQlVKYXZhQXhpc1RDNTA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JDbGllbnRBeGlzVEM1MDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zclRESmF2YUF4aXNUQzUwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzMi50b21jYXQudjU1LnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXMyVEM1NTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpczIudG9tY2F0LnY1NS5wZXJmbXNyLlBlcmZtc3JDbGllbnRBeGlzMlRDNTU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpczJUQzU1OwotCi1wdWJsaWMgY2xhc3MgQWxsUGVyZm9ybWFuY2VUZXN0cyB7Ci0JCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJUZXN0IGZvciBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UiKTsKLSAgICAvLyRKVW5pdC1CRUdJTiQKLSAgICAKLSAgICAvLyBDaGVjayBmb3IgVG9tY2F0IDUuMCBzZXJ2ZXIKLQlTdHJpbmcgcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLQlpZiAocz09bnVsbCl7Ci0JCXMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRvbWNhdDUwRGlyIik7Ci0JfQotCi0JaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkgewotCSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyZm1zckJVSmF2YUF4aXNUQzUwLmNsYXNzKTsKLQkgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFBlcmZtc3JUREphdmFBeGlzVEM1MC5jbGFzcyk7Ci0JICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQZXJmbXNyQ2xpZW50QXhpc1RDNTAuY2xhc3MpOwotCX0gZWxzZSB7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiV2FybmluZzogVG9tY2F0IDUuMCBub3QgZm91bmQgLSBwZXJmb3JtYW5jZSB0ZXN0cyBza2lwcGVkIik7Ci0JfQotCi0JLy8gQ2hlY2sgZm9yIFRvbWNhdCA1LjUgc2VydmVyCi0JcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTUiKTsKLQlpZiAocz09bnVsbCl7Ci0JCXMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRvbWNhdDU1RGlyIik7Ci0JfQotCQotCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFBlcmZtc3JCVUphdmFBeGlzMlRDNTUuY2xhc3MpOwotCSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyZm1zclRESmF2YUF4aXMyVEM1NS5jbGFzcyk7Ci0JICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQZXJmbXNyQ2xpZW50QXhpczJUQzU1LmNsYXNzKTsKLQl9IGVsc2UgewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIldhcm5pbmc6IFRvbWNhdCA1LjUgbm90IGZvdW5kIC0gcGVyZm9ybWFuY2UgdGVzdHMgc2tpcHBlZCIpOwotCX0KLQkKLSAgICAvLyRKVW5pdC1FTkQkCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9wbHVnaW4vUGVyZm9ybWFuY2VQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3BsdWdpbi9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODI2MmI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3BsdWdpbi9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgUGVyZm9ybWFuY2VQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgUGVyZm9ybWFuY2VQbHVnaW4gcGx1Z2luOwotCi0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBQZXJmb3JtYW5jZVBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBQZXJmb3JtYW5jZVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9FY2xpcHNlUGVyZm9ybWFuY2VMb2cuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvRWNsaXBzZVBlcmZvcm1hbmNlTG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OGYxYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9FY2xpcHNlUGVyZm9ybWFuY2VMb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotcHVibGljIGNsYXNzIEVjbGlwc2VQZXJmb3JtYW5jZUxvZyBpbXBsZW1lbnRzIElMb2cgewotCi0gIHByaXZhdGUgYm9vbGVhbiBydW5TdGF0ZSA9IGZhbHNlOwotICBQZXJmb3JtYW5jZSBwZXJmID0gbnVsbDsgICAgICAKLSAgUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBudWxsOyAgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZChTdHJpbmcgb3B0aW9uKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIFRocm93YWJsZSB0aHJvd2FibGUpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIFN0cmluZyBvcHRpb24sIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBUaHJvd2FibGUgdGhyb3dhYmxlKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2coaW50IHNldmVyaXR5LCBpbnQgbWVzc2FnZU51bSwgT2JqZWN0IGNhbGxlciwgU3RyaW5nIG1ldGhvZCwgSVN0YXR1cyBzdGF0dXMpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIFN0cmluZyBvcHRpb24sIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBJU3RhdHVzIHN0YXR1cykgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIE9iamVjdCBvYmplY3QpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIFN0cmluZyBvcHRpb24sIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBPYmplY3Qgb2JqZWN0KSB7Ci0gICAgCi0gICAgaWYgKG1ldGhvZC5lcXVhbHMoInJ1bkNvbW1hbmQiKSkgewotCi0gICAgICB0cnkgewotICAgICAgICBpZiAoIXJ1blN0YXRlKSB7Ci0gICAgICAgICAgLy8gYmVnaW4gcGVyZm9ybWFuY2UgcmVjb3JkaW5nCi0gICAgICAgICAgcGVyZiA9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsgICAgICAKLSAgICAgICAgICBwZXJmb3JtYW5jZU1ldGVyID0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKCgoU3RyaW5nKW9iamVjdCkudG9TdHJpbmcoKSk7ICAgICAgICAgIAotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLSAgICAgICAgICBydW5TdGF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgLy8gZW5kIHBlcmZvcm1hbmNlIHJlY29yZGluZwotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0gICAgICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLSAgICAgICAgICBwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLSAgICAgICAgICBydW5TdGF0ZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAvLyBoYW5kbGUgZXhjZXB0aW9uCi0gICAgICB9ICAgICAgICAKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9QZXJmb3JtYW5jZUpVbml0VXRpbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZDM4MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9QZXJmb3JtYW5jZUpVbml0VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMyMSAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTA5ICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkR5bmFtaWNQb3B1cEpVbml0V2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLQotcHVibGljIGNsYXNzIFBlcmZvcm1hbmNlSlVuaXRVdGlscyB7Ci0gIAotCXByaXZhdGUgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hXaXphcmQoU3RyaW5nIHBsdWdpbk5TLFN0cmluZyB3aXphcmRJZCxTdHJpbmcgb2JqZWN0Q2xhc3NJZCxJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKCk7Ci0KLSAgICAgICAgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNQb3B1cEpVbml0V2l6YXJkKHN0YXR1c0hhbmRsZXIpOwotICAgICAgICB3aXphcmQuc2V0SW5pdGlhbERhdGEod2l6YXJkSWQpOwotICAgICAgICBQcm9ncmVzc01vbml0b3JEaWFsb2cgbW9uaXRvciA9IG5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgCXdpemFyZC5ydW5IZWFkTGVzcyhpbml0aWFsU2VsZWN0aW9uLCBtb25pdG9yKTsKLSAgICAgICAgfSAKLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzdGF0dXNIYW5kbGVyLmdldEFsbFJlcG9ydHMoKTsKLQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hDcmVhdGlvbldpemFyZChTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGxhdW5jaFdpemFyZCgib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIix3aXphcmRJZCxvYmplY3RDbGFzc0lkLGluaXRpYWxTZWxlY3Rpb24pOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hDb25zdW1wdGlvbldpemFyZChTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGxhdW5jaFdpemFyZCgib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpIix3aXphcmRJZCxvYmplY3RDbGFzc0lkLGluaXRpYWxTZWxlY3Rpb24pOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQwYmFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icGVyZm9ybWFuY2UiIGJhc2VkaXI9Ii4iPgotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotICA8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQkKLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9InBlcmYtdGVzdHMtZmlsZSIgdmFsdWU9IiR7dGVzdERpcn0vcGVyZm9ybWFuY2UtdGVzdHMueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2UiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd29ya3NwYWNlX3dzX3BlcmZvcm1hbmNlIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9Ii1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA9JHt0ZXN0RGlyfS8ke3RvbWNhdDUwRGlyfSIvPgotICAgICAgCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlX3N1aXRlIj4KLSAgCQotICAJPCEtLSBJdGVyYXRpb24gMSAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLSAgCQotICAJPCEtLSBJdGVyYXRpb24gMiAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLQotICAJPCEtLSBJdGVyYXRpb24gMyAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLQotICAJPCEtLSBJdGVyYXRpb24gNCAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLQotICAJPCEtLSBJdGVyYXRpb24gNSAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLSAgCQotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgPCEtLSBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gIAotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSIgZGVwZW5kcz0iaW5pdCxwZXJmb3JtYW5jZV9zdWl0ZSxjbGVhbnVwIj4KLSAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIzZmJhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0idGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzYzZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODBkNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjk0MGFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jVGh1IE1heSAzMSAxNDoyNzozOSBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWluc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWEyYTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6NTggRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZTIyYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMi5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWksCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLAotIG9yZy5lY2xpcHNlLmpzdC53cywKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLAotIG9yZy5lY2xpcHNlLmplbS51dGlsLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLAotIG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcsCi0gb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLAotIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NTc2ZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBkYXRhLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHJlYWRtZS50eHQsXAotICAgICAgICAgICAgICAgdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGJpbi8KLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3RzLmphcgotc291cmNlLnRlc3RzLmphciA9IHRlc3RzLwotb3V0cHV0LnRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9jbGllbnQvRWNob1Byb3h5VGVzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9CVUphdmEvY2xpZW50L0VjaG9Qcm94eVRlc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjBlM2IzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9jbGllbnQvRWNob1Byb3h5VGVzdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEuaW8uKiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iZWNob1Byb3h5IiBjbGFzcz0iZm9vLkVjaG9Qcm94eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxodG1sPgotPCVAIGluY2x1ZGUgZmlsZSA9ICIvb3V0cHV0RmlsZVBhdGguanNwZiIgJT4KLTwlCi0gICAvLyBIVFRQL1BPU1QgcGFyYW1ldGVyOgotICAgLy8gdGVzdElucHV0IC0gdGhlIFN0cmluZyBhcmd1bWVudCB0byBjYWxsIHRoZSBwcm94eSB3aXRoLgotICAgU3RyaW5nIHRlc3RJbnB1dCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ0ZXN0SW5wdXQiKTsKLSAgIAotICAgLy8gRXhlY3V0ZSB0aGUgV2ViIHNlcnZpY2UuCi0gICBTdHJpbmcgcmVzdWx0ID0gZWNob1Byb3h5LmVjaG9TdHJpbmcodGVzdElucHV0KTsKLSAgIAotICAgLy8gV3JpdGUgdGhlIHJlc3VsdCB0byB0aGUgb3V0cHV0RmlsZVBhdGguCi0gICBQcmludFdyaXRlciBwdyA9IG51bGw7Ci0gICB0cnkKLSAgIHsKLSAgICAgcHcgPSBuZXcgUHJpbnRXcml0ZXIobmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0cHV0RmlsZVBhdGgpKTsKLSAgICAgcHcucHJpbnQocmVzdWx0KTsKLSAgICAgcHcuZmx1c2goKTsKLSAgIH0gICAKLSAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgIHsKLSAgIH0KLSAgIGZpbmFsbHkKLSAgIHsKLSAgICAgaWYgKHB3ICE9IG51bGwpCi0gICAgICAgcHcuY2xvc2UoKTsKLSAgIH0KLSU+Ci08L2JvZHk+Ci08cD4KLXRlc3RJbnB1dDogPCU9dGVzdElucHV0JT4KLTxwPgotb3V0cHV0RmlsZVBhdGg6IDwlPW91dHB1dEZpbGVQYXRoJT4KLTxwPgotVGhlIHJlc3VsdCBpcyA8JT1yZXN1bHQlPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9zcmMvZm9vL0VjaG8uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9zcmMvZm9vL0VjaG8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU4OTNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9CVUphdmEvc3JjL2Zvby9FY2hvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXBhY2thZ2UgZm9vOwotCi1wdWJsaWMgY2xhc3MgRWNobwotewotCXB1YmxpYyBTdHJpbmcgZWNob1N0cmluZyhTdHJpbmcgaW5wdXQpCi0JewotCQlyZXR1cm4gaW5wdXQ7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1RESmF2YS9FY2hvLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9UREphdmEvRWNoby53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmRmMzJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1RESmF2YS9FY2hvLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZm9vIiB4bWxuczppbXBsPSJodHRwOi8vZm9vIiB4bWxuczppbnRmPSJodHRwOi8vZm9vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2ZvbyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczppbXBsPSJodHRwOi8vZm9vIiB4bWxuczppbnRmPSJodHRwOi8vZm9vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICA8ZWxlbWVudCBuYW1lPSJlY2hvU3RyaW5nUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZWNob1N0cmluZ1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJpbnB1dCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NjaGVtYT4KLSA8L3dzZGw6dHlwZXM+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ1Jlc3BvbnNlIj4KLQotICAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbXBsOmVjaG9TdHJpbmdSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nUmVxdWVzdCI+Ci0KLSAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW1wbDplY2hvU3RyaW5nIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJFY2hvIj4KLQotICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotCi0gICAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbXBsOmVjaG9TdHJpbmdSZXF1ZXN0IiBuYW1lPSJlY2hvU3RyaW5nUmVxdWVzdCIvPgotCi0gICAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0iaW1wbDplY2hvU3RyaW5nUmVzcG9uc2UiIG5hbWU9ImVjaG9TdHJpbmdSZXNwb25zZSIvPgotCi0gICAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iRWNob1NvYXBCaW5kaW5nIiB0eXBlPSJpbXBsOkVjaG8iPgotCi0gICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLQotICAgICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLQotICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZWNob1N0cmluZ1JlcXVlc3QiPgotCi0gICAgICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgICAgPC93c2RsOmlucHV0PgotCi0gICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZWNob1N0cmluZ1Jlc3BvbnNlIj4KLQotICAgICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0KLSAgICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgIDwvd3NkbDpiaW5kaW5nPgotCi0gICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLQotICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbXBsOkVjaG9Tb2FwQmluZGluZyIgbmFtZT0iRWNobyI+Ci0KLSAgICAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwODAvVGVzdFdlYi9zZXJ2aWNlcy9FY2hvIi8+Ci0KLSAgICAgIDwvd3NkbDpwb3J0PgotCi0gICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NQZXJmUHJvamVjdHMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NQZXJmUHJvamVjdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWQ4MWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTUGVyZlByb2plY3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTVGVzdFByb2plY3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTVGVzdFByb2plY3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyZTllYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9XU1Rlc3RQcm9qZWN0cy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS93ZWJjbGllbnQvb3V0cHV0RmlsZVBhdGguanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL3dlYmNsaWVudC9vdXRwdXRGaWxlUGF0aC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGE3YWVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL3dlYmNsaWVudC9vdXRwdXRGaWxlUGF0aC5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPiAgCi08JQotICAgU3RyaW5nIG91dHB1dEZpbGVQYXRoID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIm91dHB1dEZpbGVQYXRoIik7Ci0lPiAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UzOTQ3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA0MjQgICAxMzgwNjAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9SmF2YSBXZWIgU2VydmljZXMgVG9vbHMgVGVzdHMKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1QT1BVUF9URVNUX1dTREw9VGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT049R2VuZXJhdGUgSmF2YSBiZWFuIHNrZWxldG9uCi1BQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWT1HZW5lcmF0ZSBDbGllbnQKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY0NTU5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0gICAgICAgIAotICAgICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluayIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1NLRUxFVE9OIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgICAgIAotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluayIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFkiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluayIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmFjdGlvbi5XU0RMRmlsZU1lbnUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgCi0gICAgICA8L2V4dGVuc2lvbj4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0ZXJzIj4KLSAgICAgICAgIDxmYWN0b3J5IAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLldTQ3VzdG9tQWRhcHRlckZhY3RvcnkiIAotICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIj4KLSAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIi8+Ci0gICAgICAgICA8L2ZhY3Rvcnk+Ci0gICAgICA8L2V4dGVuc2lvbj4KLQotICAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0ZXJzIj4KLSAgICAgICAgIDxmYWN0b3J5IAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLldTQ3VzdG9tQWRhcHRlckZhY3RvcnkiIAotICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIj4KLSAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9ImphdmEubGFuZy5TdHJpbmciLz4KLSAgICAgICAgIDwvZmFjdG9yeT4KLSAgICAgIDwvZXh0ZW5zaW9uPiAgCi0gICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9yZWFkbWUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMjk1NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIGluIGFyZTogCi0KLS1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA9RTpcXFRvbWNhdFxcVG9tY2F0NS4wCi0KLSwgd2hlcmUgIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIiBpcyB0aGUgaW5zdGFsbCBkaXJlY3Rvcnkgb2YgeW91ciBUb21jYXQgdjUuMCBzZXJ2ZXIuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTRjNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSA8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD0ke3Rlc3REaXJ9LyR7dG9tY2F0NTBEaXJ9Ii8+Ci0JCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgPGRlbGV0ZT4KLSAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImpzdC13cy1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanN0X3dzX2ZvbGRlciIvPgotICAgIDxkZWxldGUgZGlyPSIke2pzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7anN0LXdzLWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LkFsbFdTSlVuaXRUZXN0cyIgLz4KLSAgIAkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAJCi0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL1dTV2l6YXJkVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9XU1dpemFyZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRiOGUxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL1dTV2l6YXJkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzEyMTcgIDE4NzI4MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMjA3ICAyMTczNDYgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTV2l6YXJkVGVzdCBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50cwotewotCXByb3RlY3RlZCBJRW52aXJvbm1lbnQgZW52XzsKLQlwcm90ZWN0ZWQgSVJ1bnRpbWUgc2VydmVyUnVudGltZV87Ci0JcHJvdGVjdGVkIElTZXJ2ZXIgc2VydmVyXzsKLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbl87Ci0gIAotICBwdWJsaWMgU3RyaW5nIGRlZmF1bHRVUkxfID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8iOwotCQotCS8qKgotCSAqIFNldCB1cCB0aGUgd29ya3NwYWNlIGZvciB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkIEpVbml0IHRlc3QuIFNldHVwIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0JICogMSkgT2J0YWluIGFuIGluc3RhbmNlIG9mIHRoZSBlbnZpcm9ubWVudC4KLQkgKiAyKSBJbnN0YWxsIHRoZSBzZXJ2ZXIgcnVudGltZS4KLQkgKiAzKSBJbnN0YWxsIHRoZSBpbnB1dCBkYXRhLiBUaGlzIG1heSBpbmNsdWRlIHByb2plY3RzLCBzb3VyY2UgZmlsZXMgZXRjLgotCSAqIDQpIEluc3RhbGwgYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZlciBpZiByZXF1aXJlZC4gVGhpcyBtYXkgYWxzbyBpbmNsdWRlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGlucHV0IGRhdGEgb24gdGhlIHNlcnZlci4KLQkgKiA1KSBJbml0aWFsaXplIHRoZSBKMkVFLCBXZWIgU2VydmljZSBSdW50aW1lIGFuZCBTZXJ2ZXIgdHlwZSBkZWZhdWx0cyBmb3IgdGhlIFdlYiBTZXJ2aWNlIHdpemFyZCB0byB1c2UuCi0JICogNikgSW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gb2JqZWN0IHRvIHNldCB0aGUgY29udGV4dCBmb3IgdGhlIFdlYiBTZXJ2aWNlIHdpemFyZC4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gR2V0IGFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGVudmlyb25tZW50IHdpdGggdGhlIEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHRvIG1pbmltaXplIFVJIGRpYWxvZyBibG9ja3MuCi0JICAJUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0ID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotCQlFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKTsKLQkJRWNsaXBzZUVudmlyb25tZW50ICAgICAgICAgZW52aXJvbm1lbnQgICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgcmVzb3VyY2VDb250ZXh0LCBoYW5kbGVyICk7Ci0JICAKLQkJZW52XyA9IGVudmlyb25tZW50OyAKLQkJYXNzZXJ0VHJ1ZShlbnZfICE9IG51bGwpOwotCQkKLQkJc2VydmVyXyA9IG51bGw7Ci0JCUpVbml0VXRpbHMuaGlkZUFjdGlvbkRpYWxvZ3MoKTsKLQkJaW5zdGFsbFNlcnZlclJ1bnRpbWUoKTsKLQkJaW5zdGFsbFNlcnZlcigpOwotCQkKLQkJLy8gdW56aXAgcHJlLWNvbmZpZ3VyZWQgd29ya3NwYWNlIHByb2plY3RzCi0JCS8vaWYgKCFQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoV1NKVW5pdENvbnN0YW50cy5CVV9QUk9KRUNUX05BTUUpLmV4aXN0cygpKQotCQkJY3JlYXRlUHJvamVjdHMoKTsJCQotCQkKLQkJaW5zdGFsbElucHV0RGF0YSgpOwotCQlpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCk7Ci0JCWluaXRJbml0aWFsU2VsZWN0aW9uKCk7Ci0JfQotCQotCS8qKgotCSAqIEluc3RhbGwgdGhlIHNlcnZlciBydW50aW1lLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5zdGFsbFNlcnZlclJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluc3RhbGxzIHRoZSBpbnB1dCBkYXRhIGZyb20gYW4gYWdncmVnYXRvci4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGVudmlyb25tZW50LCBydW50aW1lCi0JICogYW5kIHNlcnZlciBhcmUgY29ycmVjdGx5IHNldCBvbiB0aGUgYWdncmVnYXRlIHNpbmNlIGl0cyBsaWZlY3ljbGUgbWV0aG9kcyBhcmUgbm90IG5lY2Vzc2FyaWx5Ci0JICogY2FsbGVkLgotCSAqIEBwYXJhbSBlbnYKLQkgKiBAcGFyYW0gc2VydmVyUnVudGltZQotCSAqIEBwYXJhbSBzZXJ2ZXIKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGluc3RhbGxJbnB1dERhdGEoSUVudmlyb25tZW50IGVudixJUnVudGltZSBzZXJ2ZXJSdW50aW1lLElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQllbnZfID0gZW52OwotCQlzZXJ2ZXJSdW50aW1lXyA9IHNlcnZlclJ1bnRpbWU7Ci0JCXNlcnZlcl8gPSBzZXJ2ZXI7Ci0JCS8vaW5zdGFsbElucHV0RGF0YSgpOwotCX0KLQkKLQkvLyBDcmVhdGVzIHByb2plY3RzIGZyb20gdGhlIHByb3ZpZGVkIFpJUCBmaWxlLgotLy8JcHVibGljIHN0YXRpYyBib29sZWFuIGNyZWF0ZVByb2plY3RzKCkgewotLy8JCUlQYXRoIGxvY2FsWmlwUGF0aCA9IGdldExvY2FsUGF0aCgpOwotLy8JCVByb2plY3RVbnppcFV0aWwgdXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsKGxvY2FsWmlwUGF0aCwgcGVyZl9wcm9qZWN0TmFtZXMpOwotLy8JCXJldHVybiB1dGlsLmNyZWF0ZVByb2plY3RzKCk7Ci0vLwl9Ci0JCi0vLwlwcml2YXRlIHN0YXRpYyBJUGF0aCBnZXRMb2NhbFBhdGgoKSB7Ci0vLwkJVVJMIHVybCA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5maW5kKHBlcmZfemlwRmlsZVBhdGgpOwotLy8JCXRyeSB7Ci0vLwkJCXVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodXJsKTsKLS8vCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotLy8JCXJldHVybiBuZXcgUGF0aCh1cmwuZ2V0UGF0aCgpKTsKLS8vCX0JCi0JCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIHRoZSBuZWNlc3NhcnkgcHJvamVjdHMgZm9yIHRoZSB0ZXN0cy4gIFRoaXMgY291bGQgYmUgV2ViLCBKYXZhLCBvciBvdGhlciBKMkVFIHByb2plY3RzLgotICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluc3RhbGwgdGhlIGlucHV0IGRhdGEgZm9yIHRoZSB0ZXN0LiBUaGlzIG1heSBpbmNsdWRlIHByb2plY3RzLCBzb3VyY2UgZmlsZXMgZXRjLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogSW5zdGFsbCBhbiBpbnN0YW5jZSBvZiB0aGUgc2VydmVyLiBUaGlzIG1heSBhbHNvIGNvbmZpZ3VyZSBpbnB1dCBkYXRhIG9uIHRoZSBzZXJ2ZXIuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbnN0YWxsU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBJbml0aWFsaXplIHRoZSBKMkVFIGxldmVsLCBXZWIgU2VydmljZSBydW50aW1lIHR5cGUgYW5kIFNlcnZlciBkZWZhdWx0cyBmb3IgdGhlIHRlc3QgY2FzZS4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluaXRpYWxpemUgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHdoaWNoIGRyaXZlcyB0aGUgV2ViIFNlcnZpY2Ugd2l6YXJkLiBUaGlzIGNvdWxkIGluY2x1ZGUgc291cmNlIEphdmEgZmlsZXMsCi0JICogV1NETCBVUkxzIGFuZCBldmVuIEVKQnMuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogQ2xlYW4gdXAgdGhlIHdvcmtzcGFjZS4gQ2xlYW51cCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzOgotCSAqIDEpIERlbGV0ZSB0aGUgaW5wdXQgZGF0YS4gVGhpcyBzaG91bGQgaW5jbHVkZSByZW1vdmFsIG9mIGNvbmZpZ3VyYXRpb24gZGF0YSBvbiB0aGUgc2VydmVyIGlmIG5lY2Vzc2FyeS4KLQkgKiAyKSBTdG9wIHRoZSBzZXJ2ZXIuCi0JICogMykgRGVsZXRlIHRoZSBzZXJ2ZXIuCi0JICogNCkgRGVsZXRlIHRoZSBzZXJ2ZXIgcnVudGltZS4KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXN0b3BTZXJ2ZXIoKTsKLS8vCQlkZWxldGVTZXJ2ZXIoKTsKLS8vICAgICAgZGVsZXRlSW5wdXREYXRhKCk7Ci0vLwkJZGVsZXRlU2VydmVyUnVudGltZSgpOwotCX0KLQkKLQkvKioKLQkgKiBEZWxldGUgdGhlIGlucHV0IGRhdGEuIFRoaXMgc2hvdWxkIGluY2x1ZGUgcmVtb3ZhbCBvZiBwcm9qZWN0cywgc3JjIGZpbGVzIGV0Yy4gYXMgd2VsbCBhcyByZW1vdmFsIG9mIGFueSBzZXJ2ZXIgY29uZmlndXJlZCBkYXRhLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBTdG9wIHRoZSBzZXJ2ZXIgaWYgaXQgaXMgcnVubmluZy4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHN0b3BTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlpZiAoc2VydmVyXyAhPSBudWxsICYmIHNlcnZlcl8uZ2V0U2VydmVyU3RhdGUoKSA9PSBJU2VydmVyLlNUQVRFX1NUQVJURUQpCi0JCQlzZXJ2ZXJfLnN0b3AodHJ1ZSk7Ci0JCWFzc2VydFRydWUoc2VydmVyXy5nZXRTZXJ2ZXJTdGF0ZSgpID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRCk7Ci0JfQotCQotCS8qKgotCSAqIERlbGV0ZSB0aGUgc2VydmVyLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaWYgKHNlcnZlcl8gIT0gbnVsbCkKLQkJCXNlcnZlcl8uZGVsZXRlKCk7Ci0JfQotCQotCS8qKgotCSAqIERlbGV0ZSB0aGUgc2VydmVyIHJ1bnRpbWUuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVTZXJ2ZXJSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaWYgKHNlcnZlclJ1bnRpbWVfICE9IG51bGwpCi0JCQlzZXJ2ZXJSdW50aW1lXy5kZWxldGUoKTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBkZWZhdWx0IFVSTCBpbiB0aGUgZm9ybSBvZjogaHR0cDovL2xvY2FsaG9zdDo5MDgwLzxjb250ZXh0Um9vdD4vPHBhdGg+Ci0JICogQHBhcmFtIHBhdGggLSBhIGZpbGUgb3IgVVJMIHJlbGF0aXZlIHBhdGguCi0JICogQHBhcmFtIGNvbnRleHRSb290IC0gdGhlIGNvbnRleHQgcm9vdCBvZiB0aGUgV2ViIG1vZHVsZSBmb3IgdGhpcyBVUkwuCi0JICogQHJldHVybgotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGVmYXVsdFVSTChTdHJpbmcgcGF0aCxTdHJpbmcgY29udGV4dFJvb3QpCi0JewotCQlTdHJpbmdCdWZmZXIgdXJsID0gbmV3IFN0cmluZ0J1ZmZlcihkZWZhdWx0VVJMXyk7Ci0JCXVybC5hcHBlbmQoY29udGV4dFJvb3QpOwotCQl1cmwuYXBwZW5kKCcvJyk7Ci0JCXVybC5hcHBlbmQocGF0aCk7Ci0JCXJldHVybiB1cmwudG9TdHJpbmcoKTsKLQl9CQotCQotCXByb3RlY3RlZCB2b2lkIGxvZ0JhZFN0YXR1cyhJU3RhdHVzIHN0YXR1cykKLQl7Ci0JCVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coU3RhdHVzVXRpbHMuaW5mb1N0YXR1cygiKioqIEpTVC5XUyBKVU5JVCBFUlJPUiAoU1RBUlQpICoqKiIpKTsKLQkJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhzdGF0dXMpOwotCQlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKFN0YXR1c1V0aWxzLmluZm9TdGF0dXMoIioqKiBKU1QuV1MgSlVOSVQgRVJST1IgKEVORCkgKioqIikpOwotCX0KLQkKLQkvKioKLQkgKiBTcGluIHRoZSBldmVudCBsb29wIGZvciBhd2hpbGUgdG8gZ2l2ZSBiYWNrZ3JvdW5kIGFjdGl2aXR5IGEgY2hhbmNlIHRvCi0JICogZGllIGRvd24uIFRoaXMgZGVjcmVhc2VzIHRoZSBjaGFuY2UgdGhhdCB1bnJlbGF0ZWQgYmFja2dyb3VuZCB3b3JrIHdpbGwKLQkgKiBhZmZlY3QgcmVzdWx0cyBmb3IgdGhlIHNjZW5hcmlvIGJlaW5nIHRlc3RlZC4KLQkgKiAKLQkgKiBAcGFyYW0gZHVyYXRpb24KLQkgKiAgICAgICAgICAgIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBzcGluIHRoZSBldmVudCBsb29wLgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHJ1bkV2ZW50TG9vcChmaW5hbCBpbnQgZHVyYXRpb24pIHsKLQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0JCVJ1bm5hYmxlIHVwZGF0ZSA9IG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQkJd2hpbGUgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQgPCBkdXJhdGlvbikgewotCQkJCQlpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpCi0JCQkJCQlkaXNwbGF5LnNsZWVwKCk7Ci0JCQkJfQotCQkJfQotCQl9OwotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgPT0gbnVsbCkKLQkJCWRpc3BsYXkuc3luY0V4ZWModXBkYXRlKTsKLQkJZWxzZQotCQkJdXBkYXRlLnJ1bigpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL1dTV2l6YXJkVG9tY2F0NTBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9XU1dpemFyZFRvbWNhdDUwVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjYyNmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL1dTV2l6YXJkVG9tY2F0NTBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5XU1dpemFyZFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NXaXphcmRUb21jYXQ1MFRlc3QgZXh0ZW5kcyBXU1dpemFyZFRlc3QgewotICAKLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41MCI7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCI7Ci0JICAKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS5ldG9vbHMud2Vic2VydmljZS53YXMudGVzdHMuV1NXaXphcmRUZXN0I2luc3RhbGxTZXJ2ZXJSdW50aW1lKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluc3RhbGxTZXJ2ZXJSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICBzZXJ2ZXJSdW50aW1lXyA9IEpVbml0VXRpbHMuY3JlYXRlU2VydmVyUnVudGltZShSVU5USU1FVFlQRUlEX1RDNTAsIFNFUlZFUl9JTlNUQUxMX1BBVEgpOwotICB9Ci0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS5ldG9vbHMud2Vic2VydmljZS53YXMudGVzdHMuV1NXaXphcmRUZXN0I2luc3RhbGxTZXJ2ZXIoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5zdGFsbFNlcnZlcigpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgc2VydmVyXyA9IEpVbml0VXRpbHMuY3JlYXRlU2VydmVyKCJBcGFjaGUgVG9tY2F0IHY1MCIsIFNFUlZFUlRZUEVJRF9UQzUwLCBzZXJ2ZXJSdW50aW1lXywgZW52XywgbnVsbCApOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGx1Z2luL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmM3Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW4iKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjA5ZTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDMxNCAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcxMDMwICAyMDgxMjQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMDMxICAyMDgxMjQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTE2ICAyMDgxMjQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0UmVzdWx0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdG8gcnVuIGFsbCB0aGUgdW5pdHRlc3QgdGVzdHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxXU0pVbml0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHMKLXsKLSAgLyoqCi0gICAqIE1ldGhvZCBwYXJzZUFyZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gYXJncwotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQXJncyhPYmplY3QgYXJncykKLSAgewotICAgIC8vIHR5cGljaWFsbHkgYXJncyBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLAotICAgIC8vIG5vdCBzdXJlIHdoZW4gaXQgd291bGRuJ3QgYmUuCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgbmV3IEFsbFdTSlVuaXRUZXN0cygpLnJ1bk1haW4oYXJncyk7Ci0gIH0KLQotICAKLSAgcHVibGljIE9iamVjdCBydW5NYWluKE9iamVjdCBhcmdzKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVGVzdFJ1bm5lciB0ZXN0UnVubmVyID0gbnVsbDsKLQotICAgICAgcGFyc2VBcmdzKGFyZ3MpOwotCi0gICAgICB0ZXN0UnVubmVyID0gbmV3IFRlc3RSdW5uZXIoU3lzdGVtLm91dCk7Ci0KLSAgICAgIFRlc3Qgc3VpdGUgPSBzdWl0ZSgpOwotICAgICAgVGVzdFJlc3VsdCB0ZXN0UmVzdWx0ID0gdGVzdFJ1bm5lci5kb1J1bihzdWl0ZSwgZmFsc2UpOwotICAgICAgcHJpbnRIZWFkZXIodGVzdFJlc3VsdCk7ICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0gICAgCi0gICAgVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5zdWl0ZSgpICk7Ci0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIEoyRUVVdGlsc1Rlc3RzLnN1aXRlKCkgKTsKLSAgIAotICAgIC8vIFRlc3RzIHdoaWNoIHJlcXVpcmUgYSBUb21jYXQgc2VydmVyCi0gICAgU3RyaW5nIHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0gICAgaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkgewotLy8gICAgICB0ZXN0U3VpdGUuYWRkVGVzdCggQlVKYXZhQXhpc1RDNTAuc3VpdGUoKSApOwotICAgICAgdGVzdFN1aXRlLmFkZFRlc3QoIFRESmF2YUF4aXNUQzUwLnN1aXRlKCkgKTsKLSAgICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBDbGllbnRBeGlzVEM1MC5zdWl0ZSgpICk7Ci0gICAgICB0ZXN0U3VpdGUuYWRkVGVzdCggU2VydmVyQ3JlYXRpb25UZXN0cy5zdWl0ZSgpKTsKLQotICAgIH0KLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggUmVzb3VyY2VVdGlsc1Rlc3RzLnN1aXRlKCkgKTsKLQotICAgIHJldHVybiB0ZXN0U3VpdGU7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnRzIHRoZSBoZWFkZXIgb2YgdGhlIHJlcG9ydAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJpbnRIZWFkZXIoVGVzdFJlc3VsdCByZXN1bHQpCi0gIHsKLSAgICBpZiAocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnQoIk9LIik7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAoIiArIHJlc3VsdC5ydW5Db3VudCgpICsgIiB0ZXN0cykiKTsKLQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxVUkVTISEhIik7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCi0gICAgICAgICJUZXN0cyBydW46ICIKLSAgICAgICAgICArIHJlc3VsdC5ydW5Db3VudCgpCi0gICAgICAgICAgKyAiLCAgRmFpbHVyZXM6ICIKLSAgICAgICAgICArIHJlc3VsdC5mYWlsdXJlQ291bnQoKQotICAgICAgICAgICsgIiwgIEVycm9yczogIgotICAgICAgICAgICsgcmVzdWx0LmVycm9yQ291bnQoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0JVSmF2YUF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0JVSmF2YUF4aXNUQzUwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzNiMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9CVUphdmFBeGlzVEM1MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTA5ICAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzExMTYgICAyMDgxMjQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTIxNyAgIDE4NzI4MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMjA3ICAgMjE3MzQ2IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDQyOSAgIDIyODk0NSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIEJvdHRvbSB1cCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBCVUphdmFBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQkvLyBDb25zdGFudHMKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTOyAKLQlwcml2YXRlIFN0cmluZyBQUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLkJVX1BST0pFQ1RfTkFNRTsKLSAgICAKLQlwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCQotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShCVUphdmFBeGlzVEM1MC5jbGFzcyk7Ci0JfQotCQotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsJCQotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsZm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotCQkvLyBFbnN1cmUgdGhhdCBFY2hvLmNsYXNzIGlzIGJ1aWx0IGluOgotCQkvLyA8V2ViIFByb2plY3Q+L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzL2Zvby9FY2hvLmNsYXNzCi0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkvL2Fzc2VydFRydWUoSlVuaXRVdGlscy5nZXRDbGFzc2VzRm9sZGVyRm9yV2ViUHJvamVjdChXRUJfUFJPSkVDVF9OQU1FKS5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5jbGFzcyIpKS5leGlzdHMoKSk7Ci0JCQotCQkKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICh3ZWJQcm9qZWN0PT1udWxsIHx8ICF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKFBST0pFQ1RfTkFNRSwgUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksIFNFUlZFUlRZUEVJRF9UQzUwLCAiMTQiLCBlbnZfLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgICAgfQotICAgICAgfQotCQotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCA1LjAKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsKLQkJSlVuaXRVdGlscy5zZXRTZXJ2aWNlU2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCX0KLQkKLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovICAKLQlwdWJsaWMgdm9pZCB0ZXN0QlVKYXZhQXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTjogQlVKYXZhQXhpc1RDNTAiKTsKLQkJCi0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgCi0JICAgIEpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LCBlbnZfLCBudWxsKTsKLQkgICAgSlVuaXRVdGlscy5kaXNhYmxlV1NJRGlhbG9nKHdlYlByb2plY3QpOwotCi0JICAgIElTdGF0dXNbXSBzdGF0dXMgPSBKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0JPVFRPTV9VUCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCi0gICAgICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0JCQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXRyeSB7Ci0JICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotCQkJSUZvbGRlciB3ZWJDb250ZW50Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0JICAgIAotCSAgICAgICAgSUZvbGRlciB3c2RsRm9sZGVyID0gd2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKTsKLQkgICAgICAgIGlmICghd3NkbEZvbGRlci5leGlzdHMoKSl7Ci0JICAgICAgICAJcnVuRXZlbnRMb29wKDYwMDApOyAgLy8gNiBzZWNvbmRzCi0JICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3Agd2hpbGUgd3NkbCBmb2xkZXIgaXMgY3JlYXRlZC4uLiIpOwotCSAgICAgICAgfQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBc3NlcnQgQlUgd3NkbCBmb2xkZXIgZXhpc3RzPyA9ICIrd3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JICAgICAgICBhc3NlcnRUcnVlKHdzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQkJCi0JCQlpZiAoISh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKSl7Ci0JCQkJcnVuRXZlbnRMb29wKDYwMDApOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBldmVudCBsb29wIHdoaWxlIGNvbnRlbnRzIG9mIHdzZGwgZm9sZXIgYXJlIGNyZWF0ZWQuLi4iKTsKLQkJCX0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQXNzZXJ0IEJVIHdzZGwgZmlsZSBleGlzdHMuICMgb2YgZmlsZXMgPSAiICsgKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKTsKLQkJCWFzc2VydFRydWUod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0JICAgIAotCQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkJYXNzZXJ0RXF1YWxzKCJBc3NlcnQgbnVtYmVyIG9mIGVycm9yIHJlcG9ydHMgaXMgemVybyIsIDAsIHMubGVuZ3RoKTsKLQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRU5EOiBCVUphdmFBeGlzVEM1MCIpOwotCQl9Ci0JCWZpbmFsbHl7Ci0JCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCQkvLwotCQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQkJbG9nQmFkU3RhdHVzKHNbaV0pOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFJlbW92ZSB0aGUgRUFSIGZyb20gdGhlIHNlcnZlci4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkvL0pVbml0VXRpbHMucmVtb3ZlTW9kdWxlRnJvbVNlcnZlcihzZXJ2ZXJfLHdlYlByb2plY3QsZW52Xyk7Ci0JCQotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsIG51bGwpOwotICAgICAgICBhc3NlcnRGYWxzZSh3ZWJQcm9qZWN0LmV4aXN0cygpKTsKLQkJCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9DbGllbnRBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9DbGllbnRBeGlzVEM1MC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDdjZGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ2xpZW50QXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDUwOSAgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMTE2ICAgMjA4MTI0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzEyMTcgICAxODcyODAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDIwNyAgIDIxNzM0NiBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODA0MjkgICAyMjg5NDUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAuV1NXaXphcmRUb21jYXQ1MFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBDbGllbnQgcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzIGFuZCBUb21jYXQgdjUuMAotICovCi1wdWJsaWMgY2xhc3MgQ2xpZW50QXhpc1RDNTAgZXh0ZW5kcyBXU1dpemFyZFRvbWNhdDUwVGVzdCB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7Ci0gIAotCXByaXZhdGUgU3RyaW5nIENMSUVOVF9QUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLkNMSUVOVF9QUk9KRUNUX05BTUU7Ci0JCi0JcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShDbGllbnRBeGlzVEM1MC5jbGFzcyk7Ci0JfQotCQotICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKCF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShDTElFTlRfUFJPSkVDVF9OQU1FLCBDTElFTlRfUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLQkvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgSUZvbGRlciBkZXN0Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0gICAgICAgIEpVbml0VXRpbHMuY29weVRlc3REYXRhKCJUREphdmEiLGRlc3RGb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZGVzdEZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJFY2hvLndzZGwiKSk7CQkKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JCQotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IDUuMCAgICAKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsKLQkJSlVuaXRVdGlscy5zZXRDbGllbnRTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbGllbnRBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24KLQl7CQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTjogQ2xpZW50QXhpc1RDNTAiKTsKLQkJCi0JCUpVbml0VXRpbHMuZW5hYmxlUHJveHlHZW5lcmF0aW9uKHRydWUpOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLSAgICAgICAgCi0JCUlTdGF0dXNbXSBzdGF0dXMgPSBKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0NMSUVOVCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0KLQl9Ci0JCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCXRyeSB7Ci0JICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCSAgICAKLQkgICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0JICAgICAgICBJRm9sZGVyIHNyY0ZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsKLQkgICAgCi0JCQkvL0lGb2xkZXIgc3JjRm9sZGVyID0gSlVuaXRVdGlscy5nZXRTb3VyY2VGb2xkZXJGb3JXZWJQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQkJSUZvbGRlciBmb2xkZXIgPSBzcmNGb2xkZXIuZ2V0Rm9sZGVyKCJmb28iKTsKLQkJCWlmICghZm9sZGVyLmV4aXN0cygpKXsKLQkJCQlydW5FdmVudExvb3AoNjAwMCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3Agd2hpbGUgc291cmNlIHBhY2thZ2UgaXMgY3JlYXRlZC4uLiIpOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBc3NlcnQgY2xpZW50IGphdmEgcGFja2FnZSBleGlzdHM/ID0gIitmb2xkZXIuZXhpc3RzKCkpOwotCQkJYXNzZXJ0VHJ1ZShmb2xkZXIuZXhpc3RzKCkpOwotCQotCQkJCi0JCQlpZiAoIShmb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKXsKLQkJCQlydW5FdmVudExvb3AoNjAwMCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3Agd2hpbGUgY29udGVudHMgb2Ygd3NkbCBmb2xlciBhcmUgY3JlYXRlZC4uLiIpOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQgSmF2YSBmaWxlcyBleGlzdHM/ID0gIisoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKSk7Ci0JCQlhc3NlcnRUcnVlKGZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0JCQkKLQkJCS8vIENoZWNrIHN0YXR1cyBoYW5kbGVyIGZvciBlcnJvcnMKLQkJCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJCWFzc2VydEVxdWFscygiQXNzZXJ0IG51bWJlciBvZiBjbGllbnQgZXJyb3IgcmVwb3J0cyBpcyB6ZXJvIiwgMCwgcy5sZW5ndGgpOwotCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFTkQ6IENsaWVudEF4aXNUQzUwIik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCQlsb2dCYWRTdGF0dXMoc1tpXSk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQkJfQotCQkJfSAgIAkJCQotCQl9Ci0JfQotCQotICAvKioKLSAgICogUmVtb3ZlIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLCBudWxsKTsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0NvbXBvbmVudENyZWF0aW9uVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjJiNzRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmV0b29scy5jb21tb24udGVzdC5hcGl0b29scy5Qcm9qZWN0VW56aXBVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci0KLS8qKgotICogVGVzdHMgdGhlIHZhcmlvdXMgQ29tcG9uZW50IGNyZWF0aW9uIGNvbW1hbmRzCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21wb25lbnRDcmVhdGlvblRlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShDb21wb25lbnRDcmVhdGlvblRlc3RzLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdlYkNvbXBvbmVudENyZWF0aW9uKCl7Ci0KLSAgICAgICAgY3JlYXRlU2VydmVyUnVudGltZSgpOwotICAgICAgICBjcmVhdGVEeW5hbWljV2ViTW9kdWxlKHByb2plY3ROYW1lcyk7Ci0gICAgICAgIC8vY3JlYXRlUHJvamVjdHMoKTsKLSAgICAgICAgLy9jcmVhdGVXZWJNb2R1bGUocHJvamVjdE5hbWUsIHByb2plY3ROYW1lLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCk7Ci0gICAgICAgIC8vY3JlYXRlV2ViTW9kdWxlKHByb2plY3QyTmFtZSwgcHJvamVjdDJOYW1lLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCk7Ci0KLQl9Ci0gIAotCS8vIENyZWF0ZXMgcHJvamVjdHMgZnJvbSB0aGUgcHJvdmlkZWQgWklQIGZpbGUuCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNyZWF0ZVByb2plY3RzKCkgewotCQlJUGF0aCBsb2NhbFppcFBhdGggPSBnZXRMb2NhbFBhdGgoKTsKLQkJUHJvamVjdFVuemlwVXRpbCB1dGlsID0gbmV3IFByb2plY3RVbnppcFV0aWwobG9jYWxaaXBQYXRoLCBwcm9qZWN0TmFtZXMpOwotCQlyZXR1cm4gdXRpbC5jcmVhdGVQcm9qZWN0cygpOwotCX0KLQkKLQotCXByaXZhdGUgc3RhdGljIElQYXRoIGdldExvY2FsUGF0aCgpIHsKLQkJVVJMIHVybCA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5maW5kKHppcEZpbGVQYXRoKTsKLQkJdHJ5IHsKLQkJCXVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodXJsKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbmV3IFBhdGgodXJsLmdldFBhdGgoKSk7Ci0JfQkKLSAgCi0gICAgcHVibGljIHZvaWQgY3JlYXRlU2VydmVyUnVudGltZSgpewotICAgICAgCi0gICAgICB0cnkgewotICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVNlcnZlclJ1bnRpbWUoUlVOVElNRVRZUEVJRF9UQzUwLCBTRVJWRVJfSU5TVEFMTF9QQVRIKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKXsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0gICAgICAKLSAgICAgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVEeW5hbWljV2ViTW9kdWxlKFN0cmluZ1tdIHByb2plY3ROYW1lcyl7Ci0gICAgCQotICAgICAgZm9yIChpbnQgaT0wO2k8cHJvamVjdE5hbWVzLmxlbmd0aDtpKyspIHsKLSAgICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShwcm9qZWN0TmFtZXNbaV0sIHByb2plY3ROYW1lc1tpXSwgbnVsbCwgU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIG51bGwsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCi0JICAgICAgSVByb2plY3QgcCA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWVzW2ldKTsKLQkgICAgICBhc3NlcnRUcnVlKHAuZXhpc3RzKCkpOwotICAgICAgfQotICAgIH0KLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0oyRUVVdGlsc1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0oyRUVVdGlsc1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhODkxNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9KMkVFVXRpbHNUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLS8qKgotICogQGF1dGhvciBzZW5ncGwKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBKMkVFVXRpbHNUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50c3sKLQotICAgIHByaXZhdGUgSVByb2plY3QgcHJvamVjdDEgPSBudWxsOwotICAgIHByaXZhdGUgSVByb2plY3QgcHJvamVjdDIgPSBudWxsOwotICAgIHByaXZhdGUgSVByb2plY3QgZWpiUHJvamVjdCA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29tcDEgPSB3ZWJDb21wb25lbnROYW1lOwotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCQotCQkvLyBQcm9qZWN0IGFuZCBjb21wb25lbnQgbmFtZXMgaW5pdGlhbGl6ZWQgaGVyZSEKLQkJcHJvamVjdDEgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlhc3NlcnROb3ROdWxsKHByb2plY3QxKTsKLQkJCi0JCXByb2plY3QyID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3QyTmFtZSk7Ci0JCWFzc2VydE5vdE51bGwocHJvamVjdDIpOwotICAgIAotICAgICAgICBlamJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVqYlByb2plY3ROYW1lKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChlamJQcm9qZWN0KTsKLQkJCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJLy8gVE9ETyBDbGVhciB0aGUgd29ya3NwYWNlCi0JCQotCX0KLQotCSBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotCSAgewotCSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShKMkVFVXRpbHNUZXN0cy5jbGFzcyk7Ci0JICB9Ci0JIAotCSAgcHVibGljIHZvaWQgdGVzdENvbXBvbmVudHNFeGlzdCgpewotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdENvbXBvbmVudEV4aXN0cyAuLi4iKTsKLQkJICBJVmlydHVhbENvbXBvbmVudCB2YzEgPSBKMkVFVXRpbHMuZ2V0VmlydHVhbENvbXBvbmVudChwcm9qZWN0MSk7Ci0JCSAgSVZpcnR1YWxDb21wb25lbnQgdmMyID0gSjJFRVV0aWxzLmdldFZpcnR1YWxDb21wb25lbnQocHJvamVjdDIuZ2V0TmFtZSgpKTsKLQkJICAKLQkJICBhc3NlcnRUcnVlKHZjMS5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShKMkVFVXRpbHMuZXhpc3RzKHByb2plY3QxKSk7Ci0JCSAgYXNzZXJ0VHJ1ZSh2YzIuZXhpc3RzKCkpOwotCQkgIGFzc2VydFRydWUoSjJFRVV0aWxzLmV4aXN0cyhwcm9qZWN0Mi5nZXROYW1lKCksIHByb2plY3QyTmFtZSkpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RDb21wb25lbnRFeGlzdHMgLi4uIik7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHRlc3RMb2NhdGlvbkdldHRlck1ldGhvZHMoKXsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RMb2NhdGlvbkdldHRlck1ldGhvZHMgLi4uIik7Ci0JCSAgSVBhdGggbG9jMSA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0MSk7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJXZWJDb250ZW50UGF0aCBvZiBwcm9qZWN0MSA9ICIrbG9jMSk7Ci0JCSAgSVJlc291cmNlIHJlcyA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIobG9jMSk7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMuZXhpc3RzKCkpOwotCQkgIGFzc2VydFRydWUocmVzLnRvU3RyaW5nKCkuZW5kc1dpdGgoIldlYkNvbnRlbnQiKSk7Ci0JCSAgCi0JCSAgSVBhdGggbG9jMiA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0Mik7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJXZWJDb250ZW50UGF0aCBvZiBwcm9qZWN0MiA9ICIrbG9jMik7Ci0JCSAgSVJlc291cmNlIHJlczIgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGxvYzIpOwotCQkgIGFzc2VydFRydWUocmVzMi5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMyLnRvU3RyaW5nKCkuZW5kc1dpdGgoIldlYkNvbnRlbnQiKSk7CQkgIAotCQkgIAotCQkgIElQYXRoIGxvYzMgPSBKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aChwcm9qZWN0MSk7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJXZWItSU5GIHBhdGggPSAiK2xvYzMpOwotCQkgIElSZXNvdXJjZSByZXMzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihsb2MzKTsKLQkJICBhc3NlcnRUcnVlKHJlczMuZXhpc3RzKCkpOwotCQkgIGFzc2VydFRydWUocmVzMy50b1N0cmluZygpLmVuZHNXaXRoKCJXRUItSU5GIikpOwotCQkgIAotCQkgIElDb250YWluZXIgY29udGFpbmVyID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIocHJvamVjdDIpOwotCQkgIElSZXNvdXJjZSByZXM0ID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihjb250YWluZXIuZ2V0RnVsbFBhdGgoKSk7Ci0JCSAgYXNzZXJ0RXF1YWxzKHJlczIsIHJlczQpOwotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RMb2NhdGlvbkdldHRlck1ldGhvZHMgLi4uIik7Ci0JCSAgCi0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHRlc3RKMkVFVmVyc2lvbk1ldGhvZHMoKXsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RKMkVFVmVyc2lvbk1ldGhvZHMgLi4uIik7Ci0JICAJCSAgCi0JCSAgU3RyaW5nIGozID0gSjJFRVV0aWxzLmdldEoyRUVWZXJzaW9uQXNTdHJpbmcocHJvamVjdDEpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiSjJFRVZlcnNpb24gcDEgYXMgU3RyaW5nOiAiK2ozKTsKLQkJICBhc3NlcnRFcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8yXzRfVEVYVCwgajMpOwotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjMiA9IEoyRUVVdGlscy5nZXRWaXJ0dWFsQ29tcG9uZW50KHByb2plY3QyKTsKLQkJICBpbnQgajIgPSBKMkVFVXRpbHMuZ2V0SjJFRVZlcnNpb24odmMyKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIkoyRUVWZXJzaW9ucyBwMTogIitqMik7CQkgIAotCQkgIGFzc2VydEVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5TRVJWTEVUXzJfNCwgajIpOwotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RKMkVFVmVyc2lvbk1ldGhvZHMgLi4uIik7Ci0JICB9Ci0KLQkgIHB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRHZXR0ZXJNZXRob2RzKCl7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0Q29tcG9uZW50R2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkJICAKLQkJICBJVmlydHVhbENvbXBvbmVudFtdIHZjcyA9IEoyRUVVdGlscy5nZXRBbGxDb21wb25lbnRzKCk7Ci0JCSAgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyh2Y3MpOwotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50W10gdmNzMiA9IEoyRUVVdGlscy5nZXRBbGxFQVJDb21wb25lbnRzKCk7Ci0JCSAgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyh2Y3MyKTsKLQkJICAKLQkJICBJVmlydHVhbENvbXBvbmVudFtdIHZjczMgPSBKMkVFVXRpbHMuZ2V0QWxsV2ViQ29tcG9uZW50cygpOwotCQkgIGNoZWNrVmlydHVhbENvbXBvbmVudHNFeGlzdHModmNzMyk7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnRbXSB2Y3M0ID0gSjJFRVV0aWxzLmdldFdlYkNvbXBvbmVudHMocHJvamVjdDEpOwotCQkgIGNoZWNrVmlydHVhbENvbXBvbmVudHNFeGlzdHModmNzNCk7Ci0JCSAgCi0JCSAgU3RyaW5nW10gbmFtZXMgPSBKMkVFVXRpbHMuZ2V0V2ViQ29tcG9uZW50TmFtZXMocHJvamVjdDIpOwotCQkgIHByaW50TmFtZVN0cmluZ3MobmFtZXMpOwotCQkgIAotCQkgIFN0cmluZ1tdIG5hbWVzMiA9IEoyRUVVdGlscy50b0NvbXBvbmVudE5hbWVzQXJyYXkoSjJFRVV0aWxzLmdldENvbXBvbmVudHNCeVR5cGUocHJvamVjdDEsIEoyRUVVdGlscy5XRUIgfCBKMkVFVXRpbHMuRUpCKSk7Ci0JCSAgcHJpbnROYW1lU3RyaW5ncyhuYW1lczIpOwotCQkgIAotCQkgIElQcm9qZWN0W10gcHJvamVjdHMgPSBKMkVFVXRpbHMuZ2V0QWxsRmxleGlibGVQcm9qZWN0cygpOwotCQkgIGZvciAoaW50IGk9MDtpPHByb2plY3RzLmxlbmd0aDtpKyspewotCQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIkZsZXggcHJvamVjdCAiK2krIiA9ICIrcHJvamVjdHNbaV0pOwotCQkgIH0KLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0Q29tcG9uZW50R2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkgIH0KLQkgIAotCSAgcHJpdmF0ZSB2b2lkIGNoZWNrVmlydHVhbENvbXBvbmVudHNFeGlzdHMoSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MpewotCQkgIGZvciAoaW50IGk9MDsgaTx2Y3MubGVuZ3RoO2krKyl7Ci0JCQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gdmNzW2ldOwotCQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIlZDOiBQcm9qZWN0ID0gIit2Yy5nZXRQcm9qZWN0KCkrIiBOYW1lID0gIit2Yy5nZXROYW1lKCkpOwotCQkJICBhc3NlcnRUcnVlKHZjLmV4aXN0cygpKTsKLQkJCSAgCi0JCSAgfQotCSAgfQotCSAgCi0JICBwcml2YXRlIHZvaWQgcHJpbnROYW1lU3RyaW5ncyhTdHJpbmdbXSBuYW1lcyl7Ci0JCSAgZm9yIChpbnQgaT0wO2k8bmFtZXMubGVuZ3RoO2krKyl7Ci0JCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiTmFtZSIraSsiID0gIituYW1lc1tpXSk7Ci0JCSAgfQotCSAgfQotCSAgCi0gICAgICBwdWJsaWMgdm9pZCBkdGVzdEFzc29jaWF0ZUNvbXBvbmVudENvbW1hbmQoKXsKLSAgICAgICAgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdEFzc29jaWF0ZUNvbXBvbmVudENvbW1hbmQgLi4uIik7Ci0gICAgICAgIAotICAgICAgICBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCBhbXdlID0gbmV3IEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kKCk7Ci0gICAgICAgIGFtd2Uuc2V0RWFyKGVhckNvbXBOYW1lKTsKLSAgICAgICAgYW13ZS5zZXRFQVJQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgYW13ZS5zZXRNb2R1bGUoY29tcDEpOwotICAgICAgICBhbXdlLnNldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBhbXdlLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0QXNzb2NpYXRlQ29tcG9uZW50Q29tbWFuZCAuLi4iKTsgICAgIAotICAgICAgfQotICAgIAotCSAgcHVibGljIHZvaWQgZHRlc3RSZWZlcmVuY2luZ0dldHRlck1ldGhvZHMoKXsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RSZWZlcmVuY2luZ0dldHRlck1ldGhvZHMgLi4uIik7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJpc0NvbXBvbmVudEFzc29jaWF0ZWQgLi4iKTsKLQkJICBKMkVFVXRpbHMuaXNDb21wb25lbnRBc3NvY2lhdGVkKHByb2plY3QxLCBwcm9qZWN0MSk7Ci0JCQotCQkgIFN0cmluZ1tdIG5hbWVzID0gSjJFRVV0aWxzLnRvQ29tcG9uZW50TmFtZXNBcnJheShKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdFQVJDb21wb25lbnRzKHByb2plY3QxKSk7Ci0JCSAgcHJpbnROYW1lU3RyaW5ncyhuYW1lcyk7Ci0JCSAgU3RyaW5nW10gbmFtZXMyID0gSjJFRVV0aWxzLnRvQ29tcG9uZW50TmFtZXNBcnJheShKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdFQVJDb21wb25lbnRzKHByb2plY3QyKSk7Ci0JCSAgcHJpbnROYW1lU3RyaW5ncyhuYW1lczIpOwotCQkgIAotCQkgIFN0cmluZ1tdIG5hbWVzMyA9IEoyRUVVdGlscy50b0NvbXBvbmVudE5hbWVzQXJyYXkoSjJFRVV0aWxzLmdldFJlZmVyZW5jaW5nV2ViQ29tcG9uZW50c0Zyb21FQVIocHJvamVjdDEpKTsKLQkJICBwcmludE5hbWVTdHJpbmdzKG5hbWVzMyk7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdFJlZmVyZW5jaW5nR2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgZHRlc3RJc0NvbXBvbmVudE1ldGhvZHMoKXsKLQkJCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0SXNDb21wb25lbnRNZXRob2RzIC4uLiIpOwotCQkgIAotCQkgIC8vYXNzZXJ0RmFsc2UoSjJFRVV0aWxzLmlzRUpCMjBDb21wb25lbnQoZWpiUHJvamVjdCwgZWpiQ29tcG9uZW50TmFtZSkpOwotCQkgIGFzc2VydFRydWUoSjJFRVV0aWxzLmlzRUpCMjBDb21wb25lbnQoZWpiUHJvamVjdCkpOwotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RJc0NvbXBvbmVudE1ldGhvZHMgLi4uIik7Ci0JICB9Ci0JICAKLQotCSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0xhdW5jaFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzJmNmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBsYXRmb3JtUnVubmFibGU7Ci0KLS8qKgotICogTWluaW1hbCBhcHAgdG8gcnVuIGFzIEVjbGlwc2UgImFwcGxpY2F0aW9uIgotICovCi1wdWJsaWMgY2xhc3MgTGF1bmNoVGVzdCBpbXBsZW1lbnRzIElQbGF0Zm9ybVJ1bm5hYmxlCi17Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZSNydW4oT2JqZWN0KQotICAgKi8KLSAgcHVibGljIE9iamVjdCBydW4oT2JqZWN0IGFyZ3MpIHRocm93cyBFeGNlcHRpb24KLSAgewotCi0gICAgT2JqZWN0IHJlc3VsdCA9IG5ldyBBbGxXU0pVbml0VGVzdHMoKS5ydW5NYWluKGFyZ3MpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBUaHJvd2FibGUpCi0gICAgICB7Ci0gICAgICAgICgoVGhyb3dhYmxlKSByZXN1bHQpLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RzIGRpZG4ndCByZXR1cm4gJ29rJyIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIElQbGF0Zm9ybVJ1bm5hYmxlLkVYSVRfT0s7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVzb3VyY2VVdGlsc1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Jlc291cmNlVXRpbHNUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWI4ZWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVzb3VyY2VVdGlsc1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLkNvbXBvbmVudENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLnV0aWwuSU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotCi0vKioKLSAqIEpVbml0IHRlc3RzIGZvciBzZWxlY3RpdmUgUmVzb3VyY2VVdGlscyBtZXRob2RzLiAgQ2FsbHMgd2hpY2ggcmV0dXJuIGEgc2ltcGxlIFN0cmluZyBvciByZWx5IG9uIGEgSVJlc291cmNlCi0gKiBBUEkgbmVlZCBub3QgYmUgdGVzdGVkLiAgVGhlIGZvY3VzIGlzIG1haW5seSB0byBleGVyY2lzZSBDb21wb25lbnQgYW5kIEZsZXhpYmxlIHByb2plY3QgQVBJcy4gCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFJlc291cmNlVXRpbHNUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50c3sKLQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFJlc291cmNlVXRpbHNUZXN0cy5jbGFzcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRUeXBlKCl7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlTdHJpbmcgY29tcG9uZW50VHlwZSA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50VHlwZShwcm9qZWN0KTsKLQkJYXNzZXJ0RXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUsIGNvbXBvbmVudFR5cGUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcG9uZW50T2YoKXsKLQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24ocHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgZm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0ID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgICAgICAgICAgRWNsaXBzZVN0YXR1c0hhbmRsZXIgICAgICAgaGFuZGxlciAgICAgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICAgICAgICBFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgICBlbnYgICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgcmVzb3VyY2VDb250ZXh0LCBoYW5kbGVyICk7Ci0KLSAgICAgICAgICAgIElGaWxlIGZpbGUgPSBmb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiZm9vL0VjaG8uamF2YSIpKTsKLSAgICAgICAgICAgIGlmICghZmlsZS5leGlzdHMoKSkgewotICAgICAgICAgICAgICBKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsIGZvbGRlciwgZW52LCBudWxsICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgIAlleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIElQYXRoIGphdmFGaWxlUGF0aCA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpLmdldEZ1bGxQYXRoKCk7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihqYXZhRmlsZVBhdGgpOwotICAgICAgICBhc3NlcnRUcnVlKHZjLmV4aXN0cygpKTsKLSAgICAgICAgCi0JCQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SmF2YVNvdXJjZUxvY2F0aW9uKCl7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlTdHJpbmcgamF2YVNvdXJjZUxvYyA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHByb2plY3QpLnRvU3RyaW5nKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSmF2YSBzb3VyY2UgbG9jYXRpb24gPSAiK2phdmFTb3VyY2VMb2MpOwotCQlhc3NlcnRUcnVlKGphdmFTb3VyY2VMb2MuZW5kc1dpdGgoInNyYyIpKTsKLQkJCi0JCS8vIGdldCBhbGwgdGhlIEphdmFTb3VyY2VMb2NhdGlvbnMgdmlhIHRoZSBWaXJ0dWFsQ29tcG9uZW50Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IHZjMSA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQlJVmlydHVhbENvbXBvbmVudCB2YzIgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MgPSBuZXcgSVZpcnR1YWxDb21wb25lbnRbXXt2YzEsIHZjMn07Ci0JCUlQYXRoW10gcGF0aHMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnModmNzKTsKLQkJCi0JCS8vIHZlcmlmeSBmaXJzdCBmb2xkZXIgZXhpc3RzCi0JCUlQYXRoIHBhdGgxID0gKElQYXRoKXBhdGhzWzBdOwotCQlJUmVzb3VyY2UgcmVzb3VyY2UgID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UocGF0aDEpOwotCQlpZiAocmVzb3VyY2UuZXhpc3RzKCkpewotCQkJYXNzZXJ0RXF1YWxzKElSZXNvdXJjZS5GT0xERVIsIHJlc291cmNlLmdldFR5cGUoKSk7Ci0JCX0KLQotCQkvLyB2ZXJpZnkgc2Vjb25kIGZvbGRlciBleGlzdHMKLQkJSVBhdGggcGF0aDIgPSAoSVBhdGgpcGF0aHNbMV07Ci0JCUlSZXNvdXJjZSByZXNvdXJjZTIgID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UocGF0aDIpOwotCQlpZiAocmVzb3VyY2UyLmV4aXN0cygpKXsKLQkJCWFzc2VydEVxdWFscyhJUmVzb3VyY2UuRk9MREVSLCByZXNvdXJjZTIuZ2V0VHlwZSgpKTsKLQkJfQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXZWJDb21wb25lbnRTZXJ2ZXJSb290KCkgewotCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZVV0aWxzLmdldFdlYkNvbXBvbmVudFNlcnZlclJvb3QocHJvamVjdCk7Ci0JCWFzc2VydFRydWUoZm9sZGVyLmV4aXN0cygpKTsKLQkKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1NlcnZlckNyZWF0aW9uVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvU2VydmVyQ3JlYXRpb25UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTNkMDRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvU2VydmVyQ3JlYXRpb25UZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydGlvbkZhaWxlZEVycm9yOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZVNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotcHVibGljIGNsYXNzIFNlcnZlckNyZWF0aW9uVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHN7Ci0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShTZXJ2ZXJDcmVhdGlvblRlc3RzLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaW5pdCgpewotCSAgICB0cnkgewotICAgICAgICAgIGFzc2VydE5vdE51bGwoU0VSVkVSX0lOU1RBTExfUEFUSCk7ICAgICAgICAgIAotCSAgICAgIEpVbml0VXRpbHMuY3JlYXRlU2VydmVyUnVudGltZShSVU5USU1FVFlQRUlEX1RDNTAsIFNFUlZFUl9JTlNUQUxMX1BBVEgpOwotCSAgICB9Ci0JICAgIGNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9IAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlVG9tY2F0djVTZXJ2ZXIoKXsKLQkJaW5pdCgpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBUb21jYXQgdjUgc2VydmVyLiIpOwotCQlDcmVhdGVTZXJ2ZXJDb21tYW5kIGNzYyA9IG5ldyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCk7Ci0JCWNzYy5zZXRTZXJ2ZXJGYWN0b3J5aWQoU0VSVkVSVFlQRUlEX1RDNTApOwotCQljc2MuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0JCQotCQlJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0JCVN0cmluZyBpbnN0SWQgPSBjc2MuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZlciBpbnN0YW5jZSBJZCA9ICIraW5zdElkKTsKLQkJaWYgKGluc3RJZCE9bnVsbCl7Ci0JCSAgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKGluc3RJZCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChzZXJ2ZXIpOwotCQkKLQkJdHJ5IHsKLQkJCXNlcnZlci5kZWxldGUoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSl7Ci0JCQluZXcgQXNzZXJ0aW9uRmFpbGVkRXJyb3IoKTsKLQkJfQotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGNyZWF0aW5nIFRvbWNhdCB2NSBzZXJ2ZXIuIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RSZWF0dGVtcHRDcmVhdGVUb21jYXR2NVNlcnZlcigpewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF0dGVtcHRpbmcgdG8gY3JlYXRlIDJuZCBUb21jYXQgdjUgc2VydmVyLiIpOwotCQlDcmVhdGVTZXJ2ZXJDb21tYW5kIGNzYyA9IG5ldyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCk7Ci0JCWNzYy5zZXRTZXJ2ZXJGYWN0b3J5aWQoU0VSVkVSVFlQRUlEX1RDNTApOwotCQljc2MuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0JCQotCQlJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0JCVN0cmluZyBpbnN0SWQgPSBjc2MuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlpZiAoaW5zdElkIT1udWxsKSB7Ci0JCSAgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKGluc3RJZCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChzZXJ2ZXIpOwotCQkKLQkJdHJ5IHsKLQkJCXNlcnZlci5kZWxldGUoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSl7Ci0JCQluZXcgQXNzZXJ0aW9uRmFpbGVkRXJyb3IoKTsKLQkJfQotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGF0dGVtcHRpbmcgMm5kIFRvbWNhdCB2NSBzZXJ2ZXIgY3JlYXRpb24uIik7CQkKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1RESmF2YUF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1RESmF2YUF4aXNUQzUwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZGM1MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9UREphdmFBeGlzVEM1MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTA5ICAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzExMTYgICAyMDgxMjQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTIxNyAgIDE4NzI4MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMjA3ICAgMjE3MzQ2IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDQyOSAgIDIyODk0NSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAuV1NXaXphcmRUb21jYXQ1MFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBUb3AgZG93biBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBUREphdmFBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7Ci0gIAotICBwcml2YXRlIFN0cmluZyBQUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLlREX1BST0pFQ1RfTkFNRTsKLSAgCi0gIHByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0JCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShUREphdmFBeGlzVEM1MC5jbGFzcyk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCSAgICBpZiAoIXdlYlByb2plY3QuZXhpc3RzKCkpewotCSAgICAJSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSwgU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwkgICAgCQotCSAgICB9Ci0JICB9Ci0JICAKLSAgLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7CQkKLQkJSUZvbGRlciBkZXN0Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuY29weVRlc3REYXRhKCJUREphdmEiLGRlc3RGb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZGVzdEZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJFY2hvLndzZGwiKSk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgdjUuMCBzZXJ2ZXIKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsJCi0JCUpVbml0VXRpbHMuc2V0U2VydmljZVNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCi0JfQotCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLyAgCi0JcHVibGljIHZvaWQgdGVzdFRESmF2YUF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAKLQkgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotCSAgU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTjogVERKYXZhQXhpc1RDNTAiKTsKLQkJCi0JICBJU3RhdHVzW10gc3RhdHVzID0gSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9UT1BfRE9XTixTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQl9Ci0KLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXRyeSB7Ci0JICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotCSAgICAgICAgSUZvbGRlciB3ZWJDb250ZW50Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7ICAgIAotCSAgICAKLQkJCQotCQkJSUZvbGRlciB3c2RsRm9sZGVyID0gd2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKTsKLQkgICAgICAgIGlmICghd3NkbEZvbGRlci5leGlzdHMoKSl7Ci0JICAgICAgICAJcnVuRXZlbnRMb29wKDYwMDApOwotCSAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBldmVudCBsb29wIHdoaWxlIHdzZGwgZm9sZGVyIGlzIGNyZWF0ZWQuLi4iKTsKLQkgICAgICAgIH0KLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXNzZXJ0IFREIHdzZGwgZm9sZGVyIGV4aXN0cyA9ICIrd3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQkJCQkKLQkJCWlmICghKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKXsKLQkJCQlydW5FdmVudExvb3AoNjAwMCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3Agd2hpbGUgY29udGVudHMgb2Ygd3NkbCBmb2xlciBhcmUgY3JlYXRlZC4uLiIpOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBc3NlcnQgVEQgd3NkbCBmaWxlIGV4aXN0cy4gICMgb2YgZmlsZXMgPSAiICsgKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKTsKLQkJCWFzc2VydFRydWUod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0JCQkKLQkKLQkJCS8vIENoZWNrIHN0YXR1cyBoYW5kbGVyIGZvciBlcnJvcnMKLQkJCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJCWFzc2VydEVxdWFscygiQXNzZXJ0IG51bWJlciBvZiBlcnJvciByZXBvcnRzIGlzIHplcm8iLCAwLCBzLmxlbmd0aCk7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRU5EOiBUREphdmFBeGlzVEM1MCIpOwotCQl9Ci0JCWZpbmFsbHl7Ci0JCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCQkvLwotCQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQkJbG9nQmFkU3RhdHVzKHNbaV0pOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJCX0KLQkJCX0gCi0JCX0KLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgcmVxdWlyZWQKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NjI0YmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgCi0gKiAyMDA3MTExNiAgMjA4MTI0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgV1NKVW5pdENvbnN0YW50cyB7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUlVOVElNRVRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTAiOwotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgV1NfUlVOVElNRUlEX0FYSVMgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgV1NfUlVOVElNRUlEX0FYSVMyID0gIm9yZy5lY2xpcHNlLmpzdC53cy5ydW50aW1lLmF4aXMyIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgV1NfQVhJUzJfUlVOVElNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpczIuY3JlYXRpb24uYXhpczJXZWJTZXJ2aWNlUlQiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYlByb2plY3ROYW1lID0gIldlYlByb2plY3QiOwotICAKLSAgLy8gZmxleGlibGUgcHJvamVjdCBzdHJ1Y3R1cmUgMQotICBwdWJsaWMgZmluYWwgU3RyaW5nIHByb2plY3ROYW1lID0gIkZsZXhQcm9qZWN0IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wb25lbnROYW1lID0gIndlYkNvbXBvbmVudCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcG9uZW50Mk5hbWUgPSAid2ViQ29tcDIiOwotCi0gIC8vIGZsZXhpYmxlIHByb2plY3Qgc3RydWN0dXJlIDIKLSAgcHVibGljIGZpbmFsIFN0cmluZyBwcm9qZWN0Mk5hbWUgPSAiRmxleFByb2plY3QyIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wM05hbWUgPSAid2ViQ29tcDMiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXA0TmFtZSA9ICJ3ZWJDb21wNCI7Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWpiUHJvamVjdE5hbWUgPSAiRmxleEVKQlByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGVqYkNvbXBvbmVudE5hbWUgPSAiZWpiQ29tcG9uZW50IjsKLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGFwcENsaWVudFByb2plY3ROYW1lID0gIkZsZXhBcHBDbGllbnRQcm9qZWN0IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBhcHBDbGllbnRDb21wTmFtZSA9ICJhcHBDbGllbnRDb21wb25lbnQiOyAgCi0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGVhckNvbXBOYW1lID0gIkVBUkNvbXBvbmVudCI7Ci0gIAotICBwdWJsaWMgZmluYWwgUGF0aCB6aXBGaWxlUGF0aCA9IG5ldyBQYXRoKCIvZGF0YS9XU1Rlc3RQcm9qZWN0cy56aXAiKTsKLSAgcHVibGljIGZpbmFsIFN0cmluZ1tdIHByb2plY3ROYW1lcyA9IG5ldyBTdHJpbmdbXXtwcm9qZWN0TmFtZSwgcHJvamVjdDJOYW1lfTsKLSAgCi0gIC8vIHBlcmZvcm1hbmNlIGNvbnN0YW50cwotICBwdWJsaWMgZmluYWwgU3RyaW5nIEJVX1BST0pFQ1RfTkFNRSA9ICJUZXN0V2ViIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBURF9QUk9KRUNUX05BTUUgPSAiVGVzdFREUHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgQ0xJRU5UX1BST0pFQ1RfTkFNRSA9ICJUZXN0V2ViQ2xpZW50IjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBQYXRoIHBlcmZfemlwRmlsZVBhdGggPSBuZXcgUGF0aCgiL2RhdGEvV1NQZXJmUHJvamVjdHMuemlwIik7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBwZXJmX3Byb2plY3ROYW1lcyA9IG5ldyBTdHJpbmdbXXtCVV9QUk9KRUNUX05BTUUsIFREX1BST0pFQ1RfTkFNRSwgQ0xJRU5UX1BST0pFQ1RfTkFNRX07Ci0gCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VSdW50aW1lVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvV2ViU2VydmljZVJ1bnRpbWVUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2FjMDRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvV2ViU2VydmljZVJ1bnRpbWVUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxOCAgIDEyNzE4OSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmpyZXMuSlJFc1VwZGF0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5JVk1JbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSVZNSW5zdGFsbDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5JVk1JbnN0YWxsVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkphdmFSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuVk1TdGFuZGluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wbHVnaW4uSUoyRUVNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLmludGVybmFsLklUb21jYXRSdW50aW1lV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLnZhbGlkYXRlLlZhbGlkYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LkZhY2V0TWF0Y2hDYWNoZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0vKioKLSAqIFdlYlNlcnZpY2VSdW50aW1lVGVzdHMgY29udGFpbnMgdGhlIEpVbml0IHRlc3RzIHdoaWNoIGNvdmVyIHByb2plY3QKLSAqIGNyZWF0aW9uLCBwcm9qZWN0IGZpbHRlcmluZywgYW5kIHByb2plY3QgdHlwZSBmaWx0ZXJpbmcgZm9yIHRoZSBBeGlzCi0gKiBXZWIgc2VydmljZSBydW50aW1lLiBJbiBvcmRlciBmb3IgdGhlIHRlc3QgdG8gcnVuIHN1Y2Nlc3NmdWxseToKLSAqIDxvbD4KLSAqIDxsaT5UaGUgRWNsaXBzZSB0ZXN0IGVudmlyb25tZW50IG11c3QgYmUgbGF1bmNoZWQgd2l0aCBKREsxLjQuMjwvbGk+Ci0gKiA8bGk+VGhlIGZvbGxvd2luZyBWTSBhcmd1bWVudHMgbXVzdCBiZSBzcGVjaWZpZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NTogdGhlIGluc3RhbGwgbG9jYXRpb24gb2YgYSBUb21jYXQgNS41IHNlcnZlciw8YnI+IAotICogICBmb3IgZXhhbXBsZSwgdXNlIC1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTU9ZDpcamFrYXJ0YS10b21jYXQtNS41LjkKLSAqICAgPGxpPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwOiB0aGUgaW5zdGFsbCBsb2NhdGlvbiBvZiBhIFRvbWNhdCA1LjAgc2VydmVyLDxicj4KLSAqICAgZm9yIGV4YW1wbGUsIHVzZSAtRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwPWQ6XGpha2FydGEtdG9tY2F0LTUuMC4yOCAgIAotICogICA8bGk+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDE6IHRoZSBpbnN0YWxsIGxvY2F0aW9uIG9mIGEgVG9tY2F0IDQuMSBzZXJ2ZXIsPGJyPgotICogICBmb3IgZXhhbXBsZSwgdXNlIC1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDE9ZDpcamFrYXJ0YS10b21jYXQtNC4xLjI5Ci0gKiAgIDxsaT5qYXZhLjE1Lmluc3RhbGwucGF0aDogdGhlIGluc3RhbGwgbG9jYXRpb24gb2YgYSBKYXZhIDEuNSBKREssPGJyPgotICogICBmb3IgZXhhbXBsZSwgdXNlIC1EamF2YS4xNS5pbnN0YWxsLnBhdGg9ZDpcamRrMS41LjBfMDIKLSAqIDwvdWw+PC9saT4KLSAqIDwvb2w+Ci0gKiAKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVJ1bnRpbWVUZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIAotICAvL1NlcnZlciBpbnN0YWxsIHBhdGhzCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM1NSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTUiKTsgIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTAgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7ICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSF9UQzQxID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MSIpOwotICAKLSAgLy9KREsgMS41IGluc3RhbGwgaW5mbwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBKQVZBMTVfVk1fSU5TVEFMTF9QQVRIID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLjE1Lmluc3RhbGwucGF0aCIpOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBKQVZBMTVfVk1fSU5TVEFMTF9UWVBFID0gIm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEpBVkExNV9WTV9JTlNUQUxMX05BTUUgPSAiSmF2YTE1IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSkFWQTE1X1ZNX0lOU1RBTExfSkFWQURPQyA9ICJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9hcGkvIjsKLSAgCi0gIC8vUnVudGltZSB0eXBlIGlkcyBhbnMgc2VydmVyIHR5cGUgaWRzCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM1NSA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjU1IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNTUgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41MCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRVRZUEVJRF9UQzQxID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNDEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM0MSA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MSI7ICAKLSAgCi0gIC8vUnVudGltZSBpZHMgZm9yIHJ1bnRpbWVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJVTlRJTUVJRF9UQzU1ID0gIlRvbWNhdDU1UnVudGltZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJVTlRJTUVJRF9UQzUwID0gIlRvbWNhdDUwUnVudGltZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJVTlRJTUVJRF9UQzQxID0gIlRvbWNhdDQxUnVudGltZSI7Ci0gIAotICAvL1dlYiBzZXJ2aWNlIHJ1bnRpbWUgZXh0ZW5zaW9uIGlkcyBmb3IgQXhpcwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBWElTX1JVTlRJTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZJQ0VfSU1QTF9KQVZBID0gIm9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEFYSVNfU0VSVklDRV9SVU5USU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmphdmEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDTElFTlRfSU1QTF9KQVZBID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jbGllbnQudHlwZS5qYXZhIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQVhJU19DTElFTlRfUlVOVElNRV9XRUIgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24ud2ViIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQVhJU19DTElFTlRfUlVOVElNRV9KQVZBID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmphdmEiOwotICAKLSAgLy9WYXJpb3VzIGNvbnN0YW50cyB1c2VkIGJ5IHRoZSB0ZXN0IGNhc2UgZm9yIGlkZW50aWZ5aW5nIHNlcnZpY2UvY2xpZW50IHNpZGUgYW5kIAotICAvL2ZvciBzZXR0aW5nIG5hbWVzIG9uIGNyZWF0ZWQgcHJvamVjdHMuCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZJQ0VfU0lERSA9ICJzIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xJRU5UX1NJREUgPSAiYyI7ICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FX1BSRUZJWCA9ICJ0YyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRV9TVUZGSVggPSAicHJvamVjdCI7Ci0gIAotICAvL0lQcm9qZWN0RmFjZXRWZXJzaW9ucyB1c2VkIGluIHRoZSBleHBlY3RlZCByZXN1bHRzCi0gIHByaXZhdGUgZmluYWwgSVByb2plY3RGYWNldFZlcnNpb24gV0VCMjMgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUpLmdldFZlcnNpb24oSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8yXzNfVEVYVCk7Ci0gIHByaXZhdGUgZmluYWwgSVByb2plY3RGYWNldFZlcnNpb24gV0VCMjQgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUpLmdldFZlcnNpb24oSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8yXzRfVEVYVCk7Ci0gIHByaXZhdGUgZmluYWwgSVByb2plY3RGYWNldFZlcnNpb24gSkFWQTE0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9KQVZBKS5nZXRWZXJzaW9uKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpOwotICBwcml2YXRlIGZpbmFsIElQcm9qZWN0RmFjZXRWZXJzaW9uIEpBVkE1MCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfSkFWQSkuZ2V0VmVyc2lvbigiNS4wIik7Ci0gIHByaXZhdGUgZmluYWwgSVByb2plY3RGYWNldFZlcnNpb24gVVRJTElUWTEwID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX01PRFVMRSkuZ2V0VmVyc2lvbihKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfMF9URVhUKTsgIAotICAKLSAgcHJpdmF0ZSBmaW5hbCBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSBURU1QTEFURV9XRUIgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZShJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFKTsKLSAgcHJpdmF0ZSBmaW5hbCBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSBURU1QTEFURV9VVElMSVRZID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfVEVNUExBVEUpOwotICAKLSAgcHJpdmF0ZSBpbnQgbXVsdGlwbGVzRm9yUHJvamVjdENyZWF0aW9uOwotICAKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFdlYlNlcnZpY2VSdW50aW1lVGVzdHMuY2xhc3MpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaW5pdCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBhc3NlcnROb3ROdWxsKFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM1NSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM1MCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM0MSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKEpBVkExNV9WTV9JTlNUQUxMX1BBVEgpOwotICAgICAgCi0gICAgICAvL0NyZWF0ZSBhIHNlcnZlciBydW50aW1lOiBUb21jYXQgNC4xIHdpdGggSkRLIDEuNC4yCi0gICAgICBjcmVhdGVUb21jYXRTZXJ2ZXJSdW50aW1lKFJVTlRJTUVJRF9UQzQxLCBSVU5USU1FVFlQRUlEX1RDNDEsIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM0MSk7Ci0gICAgICAKLSAgICAgIC8vQ3JlYXRlIGEgc2VydmVyIHJ1bnRpbWU6IFRvbWNhdCA1LjAgd2l0aCBKREsgMS40LjIKLSAgICAgIGNyZWF0ZVRvbWNhdFNlcnZlclJ1bnRpbWUoUlVOVElNRUlEX1RDNTAsIFJVTlRJTUVUWVBFSURfVEM1MCwgU0VSVkVSX0lOU1RBTExfUEFUSF9UQzUwKTsKLSAgICAgIAotICAgICAgLy9DcmVhdGUgYSBzZXJ2ZXIgcnVudGltZTogVG9tY2F0IDUuNSB3aXRoIEpESyAxLjUKLSAgICAgIGNyZWF0ZVRvbWNhdFNlcnZlclJ1bnRpbWUoUlVOVElNRUlEX1RDNTUsIFJVTlRJTUVUWVBFSURfVEM1NSwgU0VSVkVSX0lOU1RBTExfUEFUSF9UQzU1KTsKLSAgICAgIAotICAgICAgCi0gICAgICAKLSAgICAgIFN0cmluZyBtdWx0aXBsZXMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm11bHRpcGxlcyIpOyAvL3RoaXMgaXMgYW4gb3B0aW9uYWwgcHJvcGVyeSAtIGRlZmF1bHRlZCB0byAxCi0gICAgICBpZiAobXVsdGlwbGVzICE9IG51bGwgJiYgKEludGVnZXIucGFyc2VJbnQobXVsdGlwbGVzKSA+IDApKQotICAgICAgewotICAgICAgICBtdWx0aXBsZXNGb3JQcm9qZWN0Q3JlYXRpb24gPSBJbnRlZ2VyLnBhcnNlSW50KG11bHRpcGxlcyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG11bHRpcGxlc0ZvclByb2plY3RDcmVhdGlvbiA9IDE7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0KLSAgfSAgCi0gIAotICBwcml2YXRlIElSdW50aW1lIGNyZWF0ZVRvbWNhdFNlcnZlclJ1bnRpbWUoU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHJ1bnRpbWVUeXBlSWQsIFN0cmluZyBzZXJ2ZXJJbnN0YWxsUGF0aCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgSVJ1bnRpbWVUeXBlIHJ0ID0gU2VydmVyQ29yZS5maW5kUnVudGltZVR5cGUocnVudGltZVR5cGVJZCk7Ci0gICAgSVJ1bnRpbWVXb3JraW5nQ29weSB3YyA9IHJ0LmNyZWF0ZVJ1bnRpbWUocnVudGltZUlkLCBudWxsKTsKLSAgICB3Yy5zZXRMb2NhdGlvbihuZXcgUGF0aChzZXJ2ZXJJbnN0YWxsUGF0aCkpOwotICAgIElSdW50aW1lIHJ1bnRpbWUgPSB3Yy5zYXZlKHRydWUsIG51bGwpOwotICAgIAotICAgIGlmIChydW50aW1lVHlwZUlkLmVxdWFscyhSVU5USU1FVFlQRUlEX1RDNTUpKQotICAgIHsKLSAgICAgIC8vQ3JlYXRlIGEgbmV3IElWTUluc3RhbGwKLSAgICAgIElWTUluc3RhbGxUeXBlIHR5cGUgPSBKYXZhUnVudGltZS5nZXRWTUluc3RhbGxUeXBlKEpBVkExNV9WTV9JTlNUQUxMX1RZUEUpOwotICAgICAgSVZNSW5zdGFsbCBuZXdWTSA9IG5ldyBWTVN0YW5kaW4odHlwZSwgY3JlYXRlVW5pcXVlSWQodHlwZSkpOyAKLSAgICAgIG5ld1ZNLnNldEluc3RhbGxMb2NhdGlvbihuZXcgRmlsZShKQVZBMTVfVk1fSU5TVEFMTF9QQVRIKS5nZXRBYnNvbHV0ZUZpbGUoKSk7Ci0gICAgICBuZXdWTS5zZXROYW1lKEpBVkExNV9WTV9JTlNUQUxMX05BTUUpOwotICAgICAgbmV3Vk0uc2V0SmF2YWRvY0xvY2F0aW9uKG5ldyBVUkwoSkFWQTE1X1ZNX0lOU1RBTExfSkFWQURPQykpOwotICAgICAgaWYgKG5ld1ZNIGluc3RhbmNlb2YgSVZNSW5zdGFsbDIpCi0gICAgICB7Ci0gICAgICAgIElWTUluc3RhbGwyIG5ld1ZNMiA9IChJVk1JbnN0YWxsMikgbmV3Vk07Ci0gICAgICAgIG5ld1ZNMi5zZXRWTUFyZ3MobnVsbCk7Ci0gICAgICB9Ci0gICAgICBuZXdWTS5zZXRMaWJyYXJ5TG9jYXRpb25zKG51bGwpOyAgICAgIAotCi0gICAgICAvL0FkZCB0aGUgbmV3IElWTUluc3RhbGwgdG8gdGhlIG1hc3RlciBsaXN0LgotICAgICAgSVZNSW5zdGFsbFtdIHZtcyA9IG5ldyBJVk1JbnN0YWxsW117bmV3Vk19OwotICAgICAgLy9UT0RPIFJlcGxhY2UgdXNlIG9mIHRoZSBpbnRlcm5hbCBjbGFzcyBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkuanJlcy5KUkVzVXBkYXRlcgotICAgICAgLy93aXRoIHNvbWV0aGluZyBwdWJsaWMuIE5vdCBzdXJlIGlmIHNvbWV0aGluZyBwdWJsaWMgaXMgYXZhaWxhYmxlIGF0IHRoaXMgdGltZS4gTmVlZCB0byBjaGVjay4KLSAgICAgIEpSRXNVcGRhdGVyIHVwZGF0ZXIgPSBuZXcgSlJFc1VwZGF0ZXIoKTsKLSAgICAgIElWTUluc3RhbGwgZGVmYXVsdFZNID0gSmF2YVJ1bnRpbWUuZ2V0RGVmYXVsdFZNSW5zdGFsbCgpOwotICAgICAgdXBkYXRlci51cGRhdGVKUkVTZXR0aW5ncyh2bXMsIGRlZmF1bHRWTSk7Ci0gICAgICAKLSAgICAgIC8vR2V0IHRoZSBuZXcgSVZNSW5zdGFsbAotICAgICAgSVZNSW5zdGFsbFR5cGUgdm1UeXBlID0gSmF2YVJ1bnRpbWUuZ2V0Vk1JbnN0YWxsVHlwZShKQVZBMTVfVk1fSU5TVEFMTF9UWVBFKTsKLSAgICAgIElWTUluc3RhbGwgamF2YTE1Vk0gPSB2bVR5cGUuZmluZFZNSW5zdGFsbEJ5TmFtZShKQVZBMTVfVk1fSU5TVEFMTF9OQU1FKTsKLSAgICAKLSAgICAgIC8vU2V0IHRoZSB0b21jYXQgcnVudGltZSB0byB1c2UgdGhlIG5ldyBKYXZhIDE1IEpESy4KLSAgICAgIElSdW50aW1lV29ya2luZ0NvcHkgd2MyID0gcnVudGltZS5jcmVhdGVXb3JraW5nQ29weSgpOwotICAgICAgLy9UT0RPIFJlcGxhY2UgdXNlIG9mIHRoZSBpbnRlcm5hbCBjbGFzcyAKLSAgICAgIC8vb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS5pbnRlcm5hbC5JVG9tY2F0UnVudGltZVdvcmtpbmdDb3B5Ci0gICAgICAvL3dpdGggc29tZXRoaW5nIHB1YmxpYy4gRW5oYW5jZW1lbnQgMTI3ODg0IGhhcyBiZWVuIG9wZW5lZCB0byByZXF1ZXN0IEFQSQotICAgICAgLy9mb3IgdGhpcy4KLSAgICAgIElUb21jYXRSdW50aW1lV29ya2luZ0NvcHkgdGN3YyA9IChJVG9tY2F0UnVudGltZVdvcmtpbmdDb3B5KXdjMi5sb2FkQWRhcHRlcihJVG9tY2F0UnVudGltZVdvcmtpbmdDb3B5LmNsYXNzLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgIHRjd2Muc2V0Vk1JbnN0YWxsKGphdmExNVZNKTsKLSAgICAgIHdjMi5zYXZlKHRydWUsIG51bGwpOyAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU2VydmVyQ29yZS5maW5kUnVudGltZShydW50aW1lSWQpOwotICB9ICAKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZVVuaXF1ZUlkKElWTUluc3RhbGxUeXBlIHZtVHlwZSkKLSAgewotICAgIFN0cmluZyBpZCA9IG51bGw7Ci0gICAgZG8KLSAgICB7Ci0gICAgICBpZCA9IFN0cmluZy52YWx1ZU9mKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKLSAgICB9IHdoaWxlICh2bVR5cGUuZmluZFZNSW5zdGFsbChpZCkgIT0gbnVsbCk7Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdHMgcHJvamVjdCBjcmVhdGlvbiBhbmQgZmlsdGVyaW5nIGZvciB0aGUgQXhpcyBXZWIgc2VydmljZQotICAgKiBydW50aW1lLiBUZXN0cyBjb3ZlciBhbGwgdmFsaWQgY29tYmluYXRpb25zIG9mIFNlcnZpY2VSdW50aW1lcywgCi0gICAqIFRvbWNhdCBzZXJ2ZXJzLCBhbmQgSjJFRSBwcm9qZWN0IHR5cGVzIGFuZCB3ZWxsIGFzIGFsbCB2YWxpZCAgCi0gICAqIGNvbWJpbmF0aW9ucyBvZiBDbGllbnRSdW50aW1lcywgVG9tY2F0IHNlcnZlcnMsIGFuZCBKMkVFIHByb2plY3QgdHlwZXMuCi0gICAqLyAgCi0gIHB1YmxpYyB2b2lkIHRlc3RQcm9qZWN0Q3JlYXRpb25BbmRGaWx0ZXJpbmcoKQotICB7Ci0gICAgaW5pdCgpOwotICAgIAotICAgIFN0cmluZ1tdIHRlbXBsYXRlSWRzID0gbmV3IFN0cmluZ1tde0lKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfVEVNUExBVEV9OwotICAgIFN0cmluZ1tdIHNjZW5hcmlvcyA9IG5ldyBTdHJpbmdbXXtTRVJWSUNFX1NJREUsCi0gICAgICAgIFNFUlZJQ0VfU0lERSwKLSAgICAgICAgU0VSVklDRV9TSURFLAotICAgICAgICBDTElFTlRfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFLAotICAgICAgICBDTElFTlRfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFfTsKLSAgICBTdHJpbmdbXSBzZXJ2aWNlQ2xpZW50UnVudGltZUlkcyA9IG5ldyBTdHJpbmdbXXtBWElTX1NFUlZJQ0VfUlVOVElNRSwKLSAgICAgICAgQVhJU19TRVJWSUNFX1JVTlRJTUUsCi0gICAgICAgIEFYSVNfU0VSVklDRV9SVU5USU1FLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX1dFQiwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9XRUIsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX0pBVkEsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQSwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9KQVZBfTsKLSAgICBTdHJpbmdbXSBzZXJ2ZXJUeXBlcyA9IG5ldyBTdHJpbmdbXXtTRVJWRVJUWVBFSURfVEM0MSwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNTAsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzU1LAotICAgICAgICBTRVJWRVJUWVBFSURfVEM0MSwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNTAsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzU1LAotICAgICAgICBTRVJWRVJUWVBFSURfVEM0MSwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNTAsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzU1fTsKLSAgICAKLSAgICAKLSAgICAvL0V4cGVjdGVkIFJlc3VsdHM6Ci0gICAgCi0gICAgSVByb2plY3RGYWNldFZlcnNpb25bXVtdIGV4cGVjdGVkRmFjZXRzID0gbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW11bXXsgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjMsIEpBVkExNH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjI0LCBKQVZBMTR9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyNCwgSkFWQTUwfSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjMsIEpBVkExNH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjI0LCBKQVZBMTR9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyNCwgSkFWQTUwfSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117VVRJTElUWTEwLCBKQVZBMTR9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtVVElMSVRZMTAsIEpBVkExNH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1VUSUxJVFkxMCwgSkFWQTUwfSwKLSAgICB9OwotICAgIAotICAgIFN0cmluZ1tdIGV4cGVjdGVkUnVudGltZXMgPSBuZXcgU3RyaW5nW10ge1JVTlRJTUVJRF9UQzQxLAotICAgICAgICBSVU5USU1FSURfVEM1MCwKLSAgICAgICAgUlVOVElNRUlEX1RDNTUsCi0gICAgICAgIFJVTlRJTUVJRF9UQzQxLAotICAgICAgICBSVU5USU1FSURfVEM1MCwKLSAgICAgICAgUlVOVElNRUlEX1RDNTUsCi0gICAgICAgIFJVTlRJTUVJRF9UQzQxLAotICAgICAgICBSVU5USU1FSURfVEM1MCwKLSAgICAgICAgUlVOVElNRUlEX1RDNTUgICAgICAgIAotICAgIH07Ci0gICAgCi0gICAgU3RyaW5nIGJpZ1ByZWZpeCA9IFBST0pFQ1RfTkFNRV9QUkVGSVgrIjAiK1BST0pFQ1RfTkFNRV9TVUZGSVg7Ci0gICAgU3RyaW5nW10gZXhwZWN0ZWRQcm9qZWN0c0ZvckF4aXNTZXJ2aWNlID0gbmV3IFN0cmluZ1tdIHsgYmlnUHJlZml4KyIwIiwgCi0gICAgICAgIGJpZ1ByZWZpeCsiMSIsCi0gICAgICAgIGJpZ1ByZWZpeCsiMiIsCi0gICAgICAgIGJpZ1ByZWZpeCsiMyIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNCIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNSIgICAgICAgIAotICAgIH07Ci0gICAgCi0gICAgU3RyaW5nW10gZXhwZWN0ZWRQcm9qZWN0c0ZvckF4aXNDbGllbnQgPSBuZXcgU3RyaW5nW10geyBiaWdQcmVmaXgrIjAiLCAKLSAgICAgICAgYmlnUHJlZml4KyIxIiwKLSAgICAgICAgYmlnUHJlZml4KyIyIiwKLSAgICAgICAgYmlnUHJlZml4KyIzIiwKLSAgICAgICAgYmlnUHJlZml4KyI0IiwKLSAgICAgICAgYmlnUHJlZml4KyI1IiwKLSAgICAgICAgYmlnUHJlZml4KyI2IiwKLSAgICAgICAgYmlnUHJlZml4KyI3IiwKLSAgICAgICAgYmlnUHJlZml4KyI4IiwKLSAgICB9OwotICAgIAotICAgIGJvb2xlYW5bXSBleHBlY3RlZEJvb2xlYW5zRm9yQXhpc1NlcnZpY2UgPSBuZXcgYm9vbGVhbltdIHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKLSAgICBib29sZWFuW10gZXhwZWN0ZWRCb29sZWFuc0ZvckF4aXNDbGllbnRXZWIgPSBuZXcgYm9vbGVhbltdIHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKLSAgICBib29sZWFuW10gZXhwZWN0ZWRCb29sZWFuc0ZvckF4aXNDbGllbnRKYXZhID0gbmV3IGJvb2xlYW5bXSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07Ci0gICAgCi0gICAgCi0gICAgLy9UdXJuIGF1dG8tYnVpbGQgb2ZmCi0gICAgVmFsaWRhdGlvbk1hbmFnZXIgbWFuYWdlciA9IG5ldyBWYWxpZGF0aW9uTWFuYWdlcigpOwotICAgIG1hbmFnZXIuZGlzYWJsZUF1dG9CdWlsZCgpOwotICAgIAotICAgIC8vQ3JlYXRlIHRoZSBwcm9qZWN0cwotICAgIGZvciAoaW50IGk9MDsgaTxtdWx0aXBsZXNGb3JQcm9qZWN0Q3JlYXRpb247IGkrKykKLSAgICB7Ci0gICAgICBjcmVhdGVQcm9qZWN0cyh0ZW1wbGF0ZUlkcywgc2NlbmFyaW9zLCBzZXJ2aWNlQ2xpZW50UnVudGltZUlkcywgc2VydmVyVHlwZXMsIFBST0pFQ1RfTkFNRV9QUkVGSVgraSk7Ci0gICAgfSAgCi0gICAgCi0gICAgLy9SZXN0b3JlIGF1dG8tYnVpbGQKLSAgICBtYW5hZ2VyLnJlc3RvcmVBdXRvQnVpbGQoKTsKLSAgICAKLSAgICAvL0NoZWNrIEV4cGVjdGVkIFJlc3VsdHM6Ci0gICAgCi0gICAgLy9DaGVjayBmYWNldHMgYW5kIHJ1bnRpbWUgb24gdGhlIGZpcnN0ICIwInRoIHNldCBvZiBjcmVhdGVkIHByb2plY3RzLiBJZ25vcmUgaGlnaGVyIG11bHRpcGxlcyBzaW5jZSB0aGV5Ci0gICAgLy9hcmUgZHVwbGljYXRlcy4gICAgCi0gICAgZm9yIChpbnQgaj0wOyBqPGV4cGVjdGVkRmFjZXRzLmxlbmd0aDsgaisrKQotICAgIHsKLSAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IGJpZ1ByZWZpeCtqOwotICAgICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHByb2plY3QpOwotICAgICAgYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZlByb2plY3QpOwotCi0gICAgICAgIC8vQ2hlY2sgZmFjZXRzCi0gICAgICAgIC8vYmVnaW4gZGVidWcKLSAgICAgICAgSXRlcmF0b3IgcGZhY2V0cyA9IGZQcm9qZWN0LmdldFByb2plY3RGYWNldHMoKS5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAocGZhY2V0cy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgCUlQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbilwZmFjZXRzLm5leHQoKTsKLSAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiZmFjZXQ9IitwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKSsiLCB2ZXJzaW9uPSIrcGZ2LmdldFZlcnNpb25TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGs9MDsgazxleHBlY3RlZEZhY2V0c1tqXS5sZW5ndGg7IGsrKykKLSAgICAgICAgewotICAgICAgICAgIGFzc2VydFRydWUoZlByb2plY3QuaGFzUHJvamVjdEZhY2V0KGV4cGVjdGVkRmFjZXRzW2pdW2tdKSk7Ci0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vQ2hlY2sgcnVudGltZQotICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gZlByb2plY3QuZ2V0UnVudGltZSgpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGZSdW50aW1lKTsKLSAgICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoc1J1bnRpbWUpOwotICAgICAgICBhc3NlcnRUcnVlKHNSdW50aW1lLmdldElkKCkuZXF1YWxzKGV4cGVjdGVkUnVudGltZXNbal0pKTsKLSAgICAgICAgCi0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgICAgICBmYWlsKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9DaGVjayB0aGF0IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFByb2plY3RzRm9yU2VydmljZVR5cGVBbmRSdW50aW1lKC4uKSByZXR1cm5zCi0gICAgLy90aGUgcmlnaHQgc2V0IG9mIHByb2plY3RzCi0gICAgU3RyaW5nIHNlcnZpY2VUeXBlID0gU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKSArICIvIiArIFNFUlZJQ0VfSU1QTF9KQVZBOwotICAgIFN0cmluZ1tdIHByb2plY3RzRm9yQXhpc1NlcnZpY2UgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRQcm9qZWN0c0ZvclNlcnZpY2VUeXBlQW5kUnVudGltZShzZXJ2aWNlVHlwZSwgQVhJU19SVU5USU1FKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRQcm9qZWN0c0ZvckF4aXNTZXJ2aWNlLmxlbmd0aCwgcHJvamVjdHNGb3JBeGlzU2VydmljZS5sZW5ndGgpOwotICAgIExpc3QgcHJvamVjdHNGb3JBeGlzU2VydmljZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHByb2plY3RzRm9yQXhpc1NlcnZpY2UubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcHJvamVjdHNGb3JBeGlzU2VydmljZUxpc3QuYWRkKHByb2plY3RzRm9yQXhpc1NlcnZpY2VbaV0pOyAgICAgIAotICAgIH0KLSAgICBmb3IgKGludCBpPTA7IGk8ZXhwZWN0ZWRQcm9qZWN0c0ZvckF4aXNTZXJ2aWNlLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGFzc2VydFRydWUocHJvamVjdHNGb3JBeGlzU2VydmljZUxpc3QuY29udGFpbnMoZXhwZWN0ZWRQcm9qZWN0c0ZvckF4aXNTZXJ2aWNlW2ldKSk7Ci0gICAgfQotICAgIAotICAgIC8vQ2hlY2sgdGhhdCBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRQcm9qZWN0c0ZvckNsaWVudFR5cGVBbmRSdW50aW1lKC4uKSByZXR1cm5zCi0gICAgLy90aGUgcmlnaHQgc2V0IG9mIHByb2plY3RzICAgIAotICAgIFN0cmluZ1tdIHByb2plY3RzRm9yQXhpc0NsaWVudCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFByb2plY3RzRm9yQ2xpZW50VHlwZUFuZFJ1bnRpbWUoQ0xJRU5UX0lNUExfSkFWQSwgQVhJU19SVU5USU1FKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRQcm9qZWN0c0ZvckF4aXNDbGllbnQubGVuZ3RoLCBwcm9qZWN0c0ZvckF4aXNDbGllbnQubGVuZ3RoKTsKLSAgICBMaXN0IHByb2plY3RzRm9yQXhpc0NsaWVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHByb2plY3RzRm9yQXhpc0NsaWVudC5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBwcm9qZWN0c0ZvckF4aXNDbGllbnRMaXN0LmFkZChwcm9qZWN0c0ZvckF4aXNDbGllbnRbaV0pOyAgICAgIAotICAgIH0KLSAgICBmb3IgKGludCBpPTA7IGk8ZXhwZWN0ZWRQcm9qZWN0c0ZvckF4aXNDbGllbnQubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYXNzZXJ0VHJ1ZShwcm9qZWN0c0ZvckF4aXNDbGllbnRMaXN0LmNvbnRhaW5zKGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzQ2xpZW50W2ldKSk7Ci0gICAgfSAgICAKLSAgICAKLSAgICAvL0NoZWNrIHRoYXQgdGhlIEF4aXMgc2VydmljZSBhbmQgY2xpZW50IHJ1bnRpbWVzJyBwcm9qZWN0IGNvbXBhdGliaWxpdHkgY2hlY2tpbmcgaXMgd29ya2luZwotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZEJvb2xlYW5zRm9yQXhpc1NlcnZpY2UubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gYmlnUHJlZml4K2k7ICAgICAgCi0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRCb29sZWFuc0ZvckF4aXNTZXJ2aWNlW2ldLCBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0UHJvamVjdChBWElTX1NFUlZJQ0VfUlVOVElNRSwgcHJvamVjdE5hbWUpKTsgICAgCi0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRCb29sZWFuc0ZvckF4aXNDbGllbnRXZWJbaV0sIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFByb2plY3QoQVhJU19DTElFTlRfUlVOVElNRV9XRUIsIHByb2plY3ROYW1lKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRCb29sZWFuc0ZvckF4aXNDbGllbnRKYXZhW2ldLCBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRQcm9qZWN0KEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQSwgcHJvamVjdE5hbWUpKTsKLSAgICB9IAotICAgIAotICAgIC8vVHVybiBhdXRvLWJ1aWxkIG9mZgotICAgIG1hbmFnZXIuZGlzYWJsZUF1dG9CdWlsZCgpOwotICAgICAgICAKLSAgICAvL0RlbGV0ZSB0aGUgcHJvamVjdHMKLSAgICBmb3IgKGludCBpPTA7IGk8bXVsdGlwbGVzRm9yUHJvamVjdENyZWF0aW9uOyBpKyspCi0gICAgewotICAgICAgZGVsZXRlUHJvamVjdHModGVtcGxhdGVJZHMubGVuZ3RoLCBQUk9KRUNUX05BTUVfUFJFRklYK2kpOwotICAgIH0gICAgICAKLQotICAgIC8vUmVzdG9yZSBhdXRvLWJ1aWxkCi0gICAgbWFuYWdlci5yZXN0b3JlQXV0b0J1aWxkKCk7ICAgIAotICB9ICAKLSAgCi0gIHByaXZhdGUgdm9pZCBkZWxldGVQcm9qZWN0cyhpbnQgbiwgU3RyaW5nIG5hbWVQcmVmaXgpCi0gIHsKLSAgICBmb3IgKGludCBpPTA7IGk8bjsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gbmFtZVByZWZpeCArIFBST0pFQ1RfTkFNRV9TVUZGSVggKyBpOwotICAgICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChuYW1lKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBwcm9qZWN0LmRlbGV0ZSh0cnVlLCBudWxsKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgICAgICAvL0Rvbid0IGZhaWwgdGhlIHRlc3QgY2FzZSBpZiBwcm9qZWN0IGRlbGV0aW9uIGZhaWxzLgotICAgICAgfQotICAgIH0KLSAgfSAgCi0gIAotICBwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdHMoU3RyaW5nW10gdGVtcGxhdGVJZHMsIFN0cmluZ1tdIHNjZW5hcmlvcywgU3RyaW5nW10gc2VydmljZUNsaWVudFJ1bnRpbWVJZHMsIFN0cmluZ1tdIHNlcnZlclR5cGVzLCBTdHJpbmcgbmFtZVByZWZpeCApCi0gIHsKLSAgICBpbnQgbiA9IHRlbXBsYXRlSWRzLmxlbmd0aDsKLSAgICBmb3IgKGludCBpPTA7IGk8bjsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gbmFtZVByZWZpeCArIFBST0pFQ1RfTkFNRV9TVUZGSVggKyBpOwotICAgICAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnZzID0gbnVsbDsKLSAgICAgIGlmIChzY2VuYXJpb3NbaV0uZXF1YWxzKENMSUVOVF9TSURFKSkKLSAgICAgIHsKLQotICAgICAgICAgIHJmdnMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZUNsaWVudFJ1bnRpbWVJZHNbaV0pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKHNjZW5hcmlvc1tpXS5lcXVhbHMoU0VSVklDRV9TSURFKSkKLSAgICAgICAgewotICAgICAgICAgIHJmdnMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VDbGllbnRSdW50aW1lSWRzW2ldKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZnZzID0gbmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uWzBdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjb21tYW5kID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotICAgICAgY29tbWFuZC5zZXRQcm9qZWN0TmFtZShuYW1lKTsKLSAgICAgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZCh0ZW1wbGF0ZUlkc1tpXSk7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGNvbW1hbmQuc2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKHJmdnMpOyAgICAgICAgICAgCi0gICAgICBjb21tYW5kLnNldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJUeXBlc1tpXSk7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSwgbnVsbCApOyAgICAKLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICB7Ci0gICAgICAgIGZhaWwoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChuYW1lKTsKLSAgICAgIEZhY2V0VXRpbHMuYWRkUmVxdWlyZWRGYWNldHNUb1Byb2plY3QocHJvamVjdCwgcmZ2cywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgfSAgICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogVGVzdHMgcHJvamVjdCB0eXBlIGZpbHRlcmluZyBmb3IgdGhlIEF4aXMgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogVGVzdHMgY292ZXIgYWxsIFNlcnZpY2VSdW50aW1lcyBhbmQgQ2xpZW50UnVudGltZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UHJvamVjdFR5cGVGaWx0ZXJpbmcoKQotICB7ICAKLSAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZVtdIGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc1NlcnZpY2UgPSBuZXcgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSB7VEVNUExBVEVfV0VCfTsKLSAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZVtdIGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYiA9IG5ldyBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZVtdIHtURU1QTEFURV9XRUJ9OwotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10gZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YSA9IG5ldyBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZVtdIHtURU1QTEFURV9VVElMSVRZfTsKLSAgICAKLSAgICBTZXQgdGVtcGxhdGVzRm9yQXhpc1NlcnZpY2UgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JTZXJ2aWNlUnVudGltZShBWElTX1NFUlZJQ0VfUlVOVElNRSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc1NlcnZpY2UubGVuZ3RoLHRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlLnNpemUoKSk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc1NlcnZpY2UubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYXNzZXJ0VHJ1ZSh0ZW1wbGF0ZXNGb3JBeGlzU2VydmljZS5jb250YWlucyhleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlW2ldKSk7Ci0gICAgfQotICAgIFNldCB0ZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0VGVtcGxhdGVzRm9yQ2xpZW50UnVudGltZShBWElTX0NMSUVOVF9SVU5USU1FX1dFQik7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYi5sZW5ndGgsIHRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpPTA7IGk8ZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGFzc2VydFRydWUodGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYi5jb250YWlucyhleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWJbaV0pKTsKLSAgICB9ICAgIAotICAgIFNldCB0ZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoQVhJU19DTElFTlRfUlVOVElNRV9KQVZBKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YS5sZW5ndGgsIHRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhLnNpemUoKSk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYXNzZXJ0VHJ1ZSh0ZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YS5jb250YWlucyhleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhW2ldKSk7Ci0gICAgfQotICAgIAotICAgIAotICB9ICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9EeW5hbWljUG9wdXBKVW5pdFdpemFyZC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0R5bmFtaWNQb3B1cEpVbml0V2l6YXJkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNzJmNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0R5bmFtaWNQb3B1cEpVbml0V2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MDkgICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLklFY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi1wdWJsaWMgY2xhc3MgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQgZXh0ZW5kcyBEeW5hbWljUG9wdXBXaXphcmQgewotCXByaXZhdGUgSUVjbGlwc2VTdGF0dXNIYW5kbGVyIGhhbmRsZXJfOwotICAgIHByaXZhdGUgSUxvZyBsb2dfOwotCXB1YmxpYyBEeW5hbWljUG9wdXBKVW5pdFdpemFyZChJRWNsaXBzZVN0YXR1c0hhbmRsZXIgaGFuZGxlcikKLQl7Ci0JCWhhbmRsZXJfID0gaGFuZGxlcjsKLQl9Ci0gIAotICAgIHB1YmxpYyBEeW5hbWljUG9wdXBKVW5pdFdpemFyZChJRWNsaXBzZVN0YXR1c0hhbmRsZXIgaGFuZGxlciwgSUxvZyBsb2cpCi0gICAgewotICAgICAgICBoYW5kbGVyXyA9IGhhbmRsZXI7Ci0gICAgICAgIGxvZ18gPSBsb2c7Ci0gICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHJ1bkhlYWRMZXNzKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbixJUnVubmFibGVDb250ZXh0IGNvbnRleHQpIHsKLQkJCi0JCVBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQkJRWNsaXBzZUVudmlyb25tZW50ICAgICAgICAgZW52aXJvbm1lbnQgICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgcmVzb3VyY2VDb250ZXh0LCBoYW5kbGVyXyApOwotCQlpZiAobG9nXyE9bnVsbCkKLSAgICAgICAgICBlbnZpcm9ubWVudC5zZXRMb2cobG9nXyk7Ci0gICAgCi0JCURhdGFNYXBwaW5nUmVnaXN0cnlJbXBsICAgIGRhdGFSZWdpc3RyeV8gICA9IG5ldyBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCgpOwkgICAgCi0JCURhdGFGbG93TWFuYWdlciAgICAgICAgICAgIGRhdGFNYW5hZ2VyICAgICA9IG5ldyBEYXRhRmxvd01hbmFnZXIoIGRhdGFSZWdpc3RyeV8sIGVudmlyb25tZW50ICk7Ci0JCVNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyIG1hbmFnZXIgICAgICAgICA9IG5ldyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcihlbnZpcm9ubWVudCwgZGF0YU1hbmFnZXIpOwotCQkgIAotCSAgICB0cnkKLQkgICAgewotCSAgICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXyA9IChDb21tYW5kV2lkZ2V0QmluZGluZyl3aXphcmRFbGVtZW50Xy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCAiY2xhc3MiICk7Ci0JICAgIH0KLQkgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLQkgICAgewotCSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICAKLQkJY29tbWFuZFdpZGdldEJpbmRpbmdfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhUmVnaXN0cnlfICk7Ci0JCQotCQlDb21tYW5kRnJhZ21lbnQgICAgICAgICAgICByb290RnJhZ21lbnQgICAgPSBnZXRSb290RnJhZ21lbnQoIHNlbGVjdGlvbiwgbnVsbCApOwotCQltYW5hZ2VyLnNldFJvb3RGcmFnbWVudCggcm9vdEZyYWdtZW50ICk7Ci0JCW1hbmFnZXIucnVuRm9yd2FyZFRvTmV4dFN0b3AoIGNvbnRleHQgKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvSlVuaXRVdGlscy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0pVbml0VXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJmNDA0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvSlVuaXRVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzAzMTQgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwMiAgMTg1MjA4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA1MDkgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgCi0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzExMTYgIDIwODEyNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uV2FpdEZvckF1dG9CdWlsZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRW52aXJvbm1lbnRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5vcGVyYXRpb25zLlZhbGlkYXRvck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLQotcHVibGljIGNsYXNzIEpVbml0VXRpbHMgewotCS8vIEJlZ2luIFNlcnZlciBVdGlsaXRpZXMKLQlwdWJsaWMgc3RhdGljIElSdW50aW1lIGNyZWF0ZVNlcnZlclJ1bnRpbWUoU3RyaW5nIHJ1bnRpbWVUeXBlSWQsU3RyaW5nIHNlcnZlckluc3RhbGxQYXRoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlJUnVudGltZVR5cGUgcnQgPSBTZXJ2ZXJDb3JlLmZpbmRSdW50aW1lVHlwZShydW50aW1lVHlwZUlkKTsKLQkJU3RyaW5nIHRjdmVyc2lvbiA9IHJ1bnRpbWVUeXBlSWQuc3Vic3RyaW5nKHJ1bnRpbWVUeXBlSWQubGFzdEluZGV4T2YoIi4iKSsxKTsKLQkJSVJ1bnRpbWVXb3JraW5nQ29weSB3YyA9IHJ0LmNyZWF0ZVJ1bnRpbWUodGN2ZXJzaW9uKyJSdW50aW1lIiwgbnVsbCk7Ci0JCXdjLnNldExvY2F0aW9uKG5ldyBQYXRoKHNlcnZlckluc3RhbGxQYXRoKSk7Ci0JCQotCQlyZXR1cm4gd2Muc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElTZXJ2ZXIgY3JlYXRlU2VydmVyKFN0cmluZyBuYW1lLFN0cmluZyBzZXJ2ZXJUeXBlSWQsSVJ1bnRpbWUgcnVudGltZSxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCSAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLSAgICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7IAotICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmVycy5sZW5ndGg7aSsrKXsKLSAgICAgICAgaWYoc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKS5lcXVhbHMoc2VydmVyVHlwZS5nZXRJZCgpKSl7Ci0gICAgICAgICAgcmV0dXJuIHNlcnZlcnNbaV07ICAKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyV2MgPSBzZXJ2ZXJUeXBlLmNyZWF0ZVNlcnZlcihzZXJ2ZXJUeXBlSWQsbnVsbCwgbW9uaXRvciApOwotCSAgc2VydmVyV2Muc2V0TmFtZShuYW1lKTsKLQkgIHNlcnZlcldjLnNldFJ1bnRpbWUocnVudGltZSk7Ci0gICAgICBJU2VydmVyIHNlcnZlciA9IHNlcnZlcldjLnNhdmVBbGwodHJ1ZSwgbW9uaXRvciApOwotICAgICAgcmV0dXJuIHNlcnZlcjsKLQl9CQotCQotCS8qKgotCSAqIGNyZWF0ZVNlcnZlciBhbmQgaW5zdGFsbCBKUkUgZm9yIFNlcnZlcnMgcmVxdWlyaW5nIGEgc3BlY2lmaWMgSlJFCi0JICogQHBhcmFtIGphdmFSdW50aW1lUGF0aCBKUkUgaW5zdGFsbCBsb2NhdGlvbjsgaS5lLiBFOlxcSmF2YTE0MQotCSAqIEBwYXJhbSBqcmVJRCBKUkUgaWQ7IGkuZS4gamF2YTE0MQotCSAqIEBwYXJhbSBuYW1lIHNlcnZlciBuYW1lCi0JICogQHBhcmFtIHNlcnZlclR5cGVJZCBzZXJ2ZXIgdHlwZSBpZAotCSAqIEBwYXJhbSBydW50aW1lIElSdW50aW1lCi0JICogQHBhcmFtIGVudiBJRW52aXJvbm1lbnQKLQkgKiBAcmV0dXJuICBzZXJ2ZXIgSVNlcnZlcgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElTZXJ2ZXIgY3JlYXRlU2VydmVyKFN0cmluZyBqYXZhUnVudGltZVBhdGgsIFN0cmluZyBqcmVJRCwgU3RyaW5nIG5hbWUsU3RyaW5nIHNlcnZlclR5cGVJZCxJUnVudGltZSBydW50aW1lLElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlclR5cGVJZCk7Ci0gICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsgCi0gICAgZm9yIChpbnQgaT0wO2k8c2VydmVycy5sZW5ndGg7aSsrKXsKLSAgICAgIGlmKHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHNlcnZlclR5cGUuZ2V0SWQoKSkpewotICAgICAgICByZXR1cm4gc2VydmVyc1tpXTsgIAotICAgICAgfQotICAgIH0KLQotCQlJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyV2MgPSBzZXJ2ZXJUeXBlLmNyZWF0ZVNlcnZlcihzZXJ2ZXJUeXBlSWQsbnVsbCwgbW9uaXRvciApOwotCQlzZXJ2ZXJXYy5zZXROYW1lKG5hbWUpOwotCQlzZXJ2ZXJXYy5zZXRSdW50aW1lKHJ1bnRpbWUpOwotCQkKLQkJSVNlcnZlciBzZXJ2ZXIgPSBzZXJ2ZXJXYy5zYXZlQWxsKHRydWUsIG1vbml0b3IgKTsKLQkJCi0JCXJldHVybiBzZXJ2ZXI7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydFNlcnZlcihJU2VydmVyIHNlcnZlcixJRW52aXJvbm1lbnQgZW52KSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlmaW5hbCBJU2VydmVyIGN1cnJlbnRTZXJ2ZXIgPSBzZXJ2ZXI7Ci0JCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBydW5uYWJsZSA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJICBjdXJyZW50U2VydmVyLnN0YXJ0KElMYXVuY2hNYW5hZ2VyLlJVTl9NT0RFLCBtb25pdG9yICk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQlJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB3cmFwcGVyID0gbmV3IEludGVycnVwdGVkRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJCQkJd3JhcHBlci5zZXRTdGFja1RyYWNlKGUuZ2V0U3RhY2tUcmFjZSgpKTsKLQkJCQkJdGhyb3cgd3JhcHBlcjsKLQkJCQl9Ci0JCQl9Ci0JCX07Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCkucnVuKHRydWUsZmFsc2UscnVubmFibGUpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVtb3ZlRUFSRnJvbVNlcnZlcihJU2VydmVyIHNlcnZlcixJUHJvamVjdCBlYXJQcm9qZWN0LElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWludCBudW1iZXJPZk1vZHVsZXMgPSBzZXJ2ZXIuZ2V0TW9kdWxlcygpLmxlbmd0aDsKLQkJaWYgKHNlcnZlciAhPSBudWxsKQotCQl7Ci0gICAgICBmaW5hbCBJTW9kdWxlIGVhclByb2plY3RNb2R1bGUgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZShlYXJQcm9qZWN0KTsKLSAgICAgIGZpbmFsIElNb2R1bGVbXSBtb2R1bGVzID0ge2VhclByb2plY3RNb2R1bGV9OwotCQkJbmV3IFNlcnZlclV0aWxzKCkubW9kaWZ5TW9kdWxlcyhlbnYsIHNlcnZlcixlYXJQcm9qZWN0TW9kdWxlLGZhbHNlLCBtb25pdG9yICk7Ci0JCSAgCWZpbmFsIElTZXJ2ZXIgY3VycmVudFNlcnZlciA9IHNlcnZlcjsKLQkJICAJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0JCQl7Ci0JCSAgCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLQkJCQl7Ci0JCSAgCQkgIAlmb3IgKGludCBpPTA7aTwxMDAwO2krKykKLQkJICAJCSAgCXsKLQkJICAJCSAgCQlpbnQgbW9kdWxlU3RhdGUgPSBjdXJyZW50U2VydmVyLmdldE1vZHVsZVN0YXRlKG1vZHVsZXMpOwotCQkgIAkJICAJCWlmIChtb2R1bGVTdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1NUQVJURUQgfHwgbW9kdWxlU3RhdGUgPT0gSVNlcnZlci5TVEFURV9TVE9QUElORykKLQkJICAJCSAgCQl7Ci0JCSAgCQkgIAkJICB0cnkKLQkJICAJCQkJICB7Ci0JCSAgCQkgIAkJICAgIFRocmVhZC5zbGVlcCgzMDApOwotCQkgIAkJCQkgIH0KLQkJICAJCSAgCQkgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotCQkgIAkJCQkgIHsKLQkJICAJCSAgCQkgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKLQkJICAJCQkJICB9Ci0JCSAgCQkgIAkJfQotCQkgIAkJICAJCWVsc2UKLQkJICAJCSAgCQkJYnJlYWs7Ci0JCSAgCQkgIAl9ICAJCQkgIAkJCQotCQkJCX0gIAkJCi0JCQl9OwotCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSxmYWxzZSxydW5uYWJsZSk7Ci0JCQlyZXR1cm4gKHNlcnZlci5nZXRNb2R1bGVzKCkubGVuZ3RoID09IChudW1iZXJPZk1vZHVsZXMtMSkpOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIHJlbW92ZU1vZHVsZUZyb21TZXJ2ZXIoSVNlcnZlciBzZXJ2ZXIsIElQcm9qZWN0IHdlYlByb2plY3QsIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24gewotCSAgCi0JICBpbnQgbnVtYmVyT2ZNb2R1bGVzID0gc2VydmVyLmdldE1vZHVsZXMoKS5sZW5ndGg7Ci0JCWlmIChzZXJ2ZXIgIT0gbnVsbCkKLQkJewotICAgICAgZmluYWwgSU1vZHVsZSB3ZWJQcm9qZWN0TW9kdWxlID0gU2VydmVyVXRpbC5nZXRNb2R1bGUod2ViUHJvamVjdCk7Ci0gICAgICBmaW5hbCBJTW9kdWxlW10gbW9kdWxlcyA9IHt3ZWJQcm9qZWN0TW9kdWxlfTsKLQotCQkJbmV3IFNlcnZlclV0aWxzKCkubW9kaWZ5TW9kdWxlcyhlbnYsIHNlcnZlcix3ZWJQcm9qZWN0TW9kdWxlLGZhbHNlLCBtb25pdG9yICk7Ci0JCSAgCWZpbmFsIElTZXJ2ZXIgY3VycmVudFNlcnZlciA9IHNlcnZlcjsKLQkJICAJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0JCQl7Ci0JCSAgCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLQkJCQl7Ci0JCSAgCQkgIAlmb3IgKGludCBpPTA7aTwxMDAwO2krKykKLQkJICAJCSAgCXsKLQkJICAJCSAgCQlpbnQgbW9kdWxlU3RhdGUgPSBjdXJyZW50U2VydmVyLmdldE1vZHVsZVN0YXRlKG1vZHVsZXMpOwotCQkgIAkJICAJCWlmIChtb2R1bGVTdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1NUQVJURUQgfHwgbW9kdWxlU3RhdGUgPT0gSVNlcnZlci5TVEFURV9TVE9QUElORykKLQkJICAJCSAgCQl7Ci0JCSAgCQkgIAkJICB0cnkKLQkJICAJCQkJICB7Ci0JCSAgCQkgIAkJICAgIFRocmVhZC5zbGVlcCgzMDApOwotCQkgIAkJCQkgIH0KLQkJICAJCSAgCQkgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotCQkgIAkJCQkgIHsKLQkJICAJCSAgCQkgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKLQkJICAJCQkJICB9Ci0JCSAgCQkgIAkJfQotCQkgIAkJICAJCWVsc2UKLQkJICAJCSAgCQkJYnJlYWs7Ci0JCSAgCQkgIAl9ICAJCQkgIAkJCQotCQkJCX0gIAkJCi0JCQl9OwotCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSxmYWxzZSxydW5uYWJsZSk7Ci0JCQkvL1RocmVhZC5zbGVlcCg2MDAwKTsKLQkJCXJldHVybiAoc2VydmVyLmdldE1vZHVsZXMoKS5sZW5ndGggPT0gKG51bWJlck9mTW9kdWxlcy0xKSk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQkvLyBCZWdpbjogR2VuZXJhbCBFY2xpcHNlIFV0aWxpdGllcwotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzeW5jQnVpbGRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcHJvamVjdC5idWlsZChJbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyLkZVTExfQlVJTEQsIG1vbml0b3IgKTsKLQkJV2FpdEZvckF1dG9CdWlsZENvbW1hbmQgY21kID0gbmV3IFdhaXRGb3JBdXRvQnVpbGRDb21tYW5kKCk7Ci0gICAgY21kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkJY21kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb3B5VGVzdEZpbGVzKFN0cmluZyBwYXRoU3RyaW5nLGludCByb290U2VnbWVudExlbmd0aCxJRm9sZGVyIGRlc3RGb2xkZXIsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJRW51bWVyYXRpb24gZSA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeVBhdGhzKHBhdGhTdHJpbmcpOwotCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJewotCQkJU3RyaW5nIGZpbGVQYXRoID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0JCQlpZiAoZmlsZVBhdGguZW5kc1dpdGgoIi8iKSkKLQkJCQljb3B5VGVzdEZpbGVzKGZpbGVQYXRoLHJvb3RTZWdtZW50TGVuZ3RoLGRlc3RGb2xkZXIsZW52LCBtb25pdG9yICk7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJSVBhdGggZmlsZUlQYXRoID0gbmV3IFBhdGgoZmlsZVBhdGgpOwotCQkJCUZpbGVSZXNvdXJjZVV0aWxzLmNvcHlGaWxlKEVudmlyb25tZW50VXRpbHMuZ2V0UmVzb3VyY2VDb250ZXh0KGVudiksCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLAotCQkJCQkJCQkJCSAgIGZpbGVJUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoZmlsZUlQYXRoLnNlZ21lbnRDb3VudCgpLXJvb3RTZWdtZW50TGVuZ3RoKSwgLy8gL2RhdGEvPHN1YmRpcj4KLQkJCQkJCQkJCQkgICAobmV3IFBhdGgoZmlsZVBhdGgpKS5yZW1vdmVGaXJzdFNlZ21lbnRzKHJvb3RTZWdtZW50TGVuZ3RoKSwgLy8gZmlsZXMgYWZ0ZXIgL2RhdGEvPHN1YmRpcj4KLQkJCQkJCQkJCQkgICBkZXN0Rm9sZGVyLmdldEZ1bGxQYXRoKCksCi0JCQkJCQkJCQkJICAgbW9uaXRvciwKLQkJCQkJCQkJCQkgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weVRlc3REYXRhKFN0cmluZyBkYXRhU3ViZGlyZWN0b3J5LElGb2xkZXIgZGVzdEZvbGRlcixJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgcGF0aFN0cmluZyA9ICIvZGF0YS8iK2RhdGFTdWJkaXJlY3Rvcnk7Ci0JCWNvcHlUZXN0RmlsZXMocGF0aFN0cmluZyxuZXcgUGF0aChwYXRoU3RyaW5nKS5zZWdtZW50Q291bnQoKSxkZXN0Rm9sZGVyLGVudiwgbW9uaXRvcik7Ci0JCQotCX0KLQkKLQkvLyBCZWdpbjogV2ViIFNlcnZpY2VzIFV0aWxpdGllcwotCXB1YmxpYyBzdGF0aWMgdm9pZCBoaWRlQWN0aW9uRGlhbG9ncygpCi0JewotCQlQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgYWN0aW9uRGlhbG9nc0N0eCA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotCQlBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVtdIGFjdGlvbkRpYWxvZ1ByZWZzICA9IGFjdGlvbkRpYWxvZ3NDdHguZ2V0RGlhbG9ncygpOwotCQlmb3IgKGludCBpPTA7aTxhY3Rpb25EaWFsb2dQcmVmcy5sZW5ndGg7aSsrKQotCQkJYWN0aW9uRGlhbG9nc0N0eC5zZXRBY3Rpb25EaWFsb2dFbmFibGVkKGFjdGlvbkRpYWxvZ1ByZWZzW2ldLmdldElkKCksdHJ1ZSk7CQkKLQl9Ci0JCi0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZW5hYmxlUHJveHlHZW5lcmF0aW9uKGJvb2xlYW4gZW5hYmxlKQotCXsKLQkJU2NlbmFyaW9Db250ZXh0IGN0eCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLQkJYm9vbGVhbiBwcmV2aW91c1NldHRpbmcgPSBjdHguZ2V0R2VuZXJhdGVQcm94eSgpOwotCQljdHguc2V0R2VuZXJhdGVQcm94eShlbmFibGUpOwotCQlyZXR1cm4gcHJldmlvdXNTZXR0aW5nOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZW5hYmxlT3ZlcndyaXRlKGJvb2xlYW4gZW5hYmxlKQotCXsKLQkJUmVzb3VyY2VDb250ZXh0IGN0eCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLQkJYm9vbGVhbiBwcmV2aW91c1NldHRpbmcgPSBjdHguaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKTsKLQkJY3R4LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChlbmFibGUpOwotCQlyZXR1cm4gcHJldmlvdXNTZXR0aW5nOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0UnVudGltZVByZWZlcmVuY2UoU3RyaW5nIHJ0KXsKLQkJUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0JCWNvbnRleHQuc2V0UnVudGltZUlkKHJ0KTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGRpc2FibGVXU0lEaWFsb2coSVByb2plY3QgcHJvamVjdCl7Ci0JICAKLQkgIFBlcnNpc3RlbnRXU0lDb250ZXh0IGN0eCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJQVBDb250ZXh0KCk7Ci0JICBjdHgudXBkYXRlUHJvamVjdFdTSUNvbXBsaWFuY2VzKHByb2plY3QsIFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgIAotCSAgUGVyc2lzdGVudFdTSUNvbnRleHQgY3R4MiA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLQkgIGN0eDIudXBkYXRlUHJvamVjdFdTSUNvbXBsaWFuY2VzKHByb2plY3QsIFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgIAotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0V1NSdW50aW1lU2VydmVyKFN0cmluZyB3c1J1bnRpbWVJZCxTdHJpbmcgc2VydmVyVHlwZUlkKQotCXsKLQkJUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IHNlcnZlclJ1bnRpbWVDdHggPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0JCXNlcnZlclJ1bnRpbWVDdHguc2V0UnVudGltZUlkKHdzUnVudGltZUlkKTsKLQkJc2VydmVyUnVudGltZUN0eC5zZXRTZXJ2ZXJGYWN0b3J5SWQoc2VydmVyVHlwZUlkKTsJCQotCX0KLQkKLQotCXByaXZhdGUgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hXaXphcmQoU3RyaW5nIHBsdWdpbk5TLFN0cmluZyB3aXphcmRJZCxTdHJpbmcgb2JqZWN0Q2xhc3NJZCxJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKCk7Ci0KLSAgICAgICAgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNQb3B1cEpVbml0V2l6YXJkKHN0YXR1c0hhbmRsZXIpOwotICAgICAgICB3aXphcmQuc2V0SW5pdGlhbERhdGEod2l6YXJkSWQpOwotICAgICAgICBQcm9ncmVzc01vbml0b3JEaWFsb2cgbW9uaXRvciA9IG5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgCXdpemFyZC5ydW5IZWFkTGVzcyhpbml0aWFsU2VsZWN0aW9uLCBtb25pdG9yKTsKLSAgICAgICAgfSAKLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIAlyZXR1cm4gbmV3IElTdGF0dXNbXXtTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlKX07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXR1c0hhbmRsZXIuZ2V0QWxsUmVwb3J0cygpOwotCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgSVN0YXR1c1tdIGxhdW5jaENyZWF0aW9uV2l6YXJkKFN0cmluZyB3aXphcmRJZCxTdHJpbmcgb2JqZWN0Q2xhc3NJZCxJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gbGF1bmNoV2l6YXJkKCJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiLHdpemFyZElkLG9iamVjdENsYXNzSWQsaW5pdGlhbFNlbGVjdGlvbik7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgSVN0YXR1c1tdIGxhdW5jaENvbnN1bXB0aW9uV2l6YXJkKFN0cmluZyB3aXphcmRJZCxTdHJpbmcgb2JqZWN0Q2xhc3NJZCxJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gbGF1bmNoV2l6YXJkKCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkiLHdpemFyZElkLG9iamVjdENsYXNzSWQsaW5pdGlhbFNlbGVjdGlvbik7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgSVN0YXR1cyBjcmVhdGVXZWJNb2R1bGUoU3RyaW5nIHdlYlByb2plY3ROYW1lLCBTdHJpbmcgbW9kdWxlTmFtZSwgU3RyaW5nIHNlcnZlckluc3RhbmNlSUQsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIFN0cmluZyBqMmVlVmVyc2lvbiwgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICl7Ci0KLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIHRyeXsKLQkgICAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNyZWF0ZVdlYiA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKLQkgICAgY3JlYXRlV2ViLnNldFByb2plY3ROYW1lKHdlYlByb2plY3ROYW1lKTsKLSAgICAgICAgY3JlYXRlV2ViLnNldFByb2plY3ROYW1lKG1vZHVsZU5hbWUpOwotICAgICAgICBjcmVhdGVXZWIuc2V0VGVtcGxhdGVJZCgidGVtcGxhdGUuanN0LndlYiIpOwotCSAgICBjcmVhdGVXZWIuc2V0U2VydmVyRmFjdG9yeUlkKHNlcnZlckZhY3RvcnlJZCk7Ci0JICAgIGNyZWF0ZVdlYi5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZlckluc3RhbmNlSUQpOwotCSAgICBjcmVhdGVXZWIuc2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvblswXSk7Ci0gICAgICAgIGNyZWF0ZVdlYi5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0JICAgIHJldHVybiBjcmVhdGVXZWIuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotCSAgfQotCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIGUgKTsKLQkgIH0KLQkgIHJldHVybiBzdGF0dXM7Ci0JICAKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGRpc2FibGVWYWxpZGF0aW9uKElQcm9qZWN0IHByb2plY3QpewotCQkKLSAgICAJLy8gZGlzYWJsZSB2YWxpZGF0b3JzIGZvciBwcm9qZWN0Ci0JCXRyeQotCQl7Ci0JCQlWYWxpZGF0b3JNYW5hZ2VyIHZtID0gVmFsaWRhdG9yTWFuYWdlci5nZXRNYW5hZ2VyKCk7Ci0JCQl2bS5kaXNhYmxlQWxsVmFsaWRhdG9ycyhwcm9qZWN0LCBudWxsKTsJCQkKLQkJCQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgdG8gc2V0IFZhbGlkYXRvcnMuLi4iKTsKLQkJfQotCQkKLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRTZXJ2aWNlU2NlbmFyaW9EZWZhdWx0KCkgewotCQlQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSAoUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dClXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0JICAgICAgY29udGV4dC5zZXRHZW5lcmF0ZVByb3h5KCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0SW5zdGFsbFdlYlNlcnZpY2UoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRJbnN0YWxsQ2xpZW50KCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0U3RhcnRXZWJTZXJ2aWNlKCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0VGVzdFdlYlNlcnZpY2UoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRNb25pdG9yV2ViU2VydmljZShmYWxzZSk7Ci0JICAgICAgY29udGV4dC5zZXRHZW5lcmF0ZVdlYlNlcnZpY2UoU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1ApOyAgICAKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldENsaWVudFNjZW5hcmlvRGVmYXVsdCgpIHsKLQkJUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gKFBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQpV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotCSAgICAgIGNvbnRleHQuc2V0R2VuZXJhdGVQcm94eSggdHJ1ZSApOwotCSAgICAgIGNvbnRleHQuc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0SW5zdGFsbFdlYlNlcnZpY2UoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRJbnN0YWxsQ2xpZW50KCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0U3RhcnRXZWJTZXJ2aWNlKCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0VGVzdFdlYlNlcnZpY2UoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRNb25pdG9yV2ViU2VydmljZShmYWxzZSk7Ci0JICAgICAgY29udGV4dC5zZXRHZW5lcmF0ZUNsaWVudChTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUCk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL1NjZW5hcmlvQ29uc3RhbnRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvU2NlbmFyaW9Db25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE5ZTViZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvU2NlbmFyaW9Db25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbDsKLQotcHVibGljIGNsYXNzIFNjZW5hcmlvQ29uc3RhbnRzIHsKLQkvLyBCb3R0b20gdXAgSmF2YSBvciBFSkIgdG8gV2ViIFNlcnZpY2Ugd2l6YXJkIElELgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdJWkFSRElEX0JPVFRPTV9VUCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI7Ci0JCi0JLy8gVG9wIGRvd24gV1NETCB0byBTa2VsZXRvbiBXZWIgU2VydmljZSB3aXphcmQgSUQuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0laQVJESURfVE9QX0RPV04gPSAib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiOwotCQotCS8vIFdlYiBTZXJ2aWNlIGNsaWVudCB3aXphcmQgSUQuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0laQVJESURfQ0xJRU5UID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI7CQotCQotCS8vIE9iamVjdCBjbGFzcyBmb3I6Ci0JLy8gMSkgSmF2YSBzb3VyY2UgKGJvdHRvbS11cCkKLQkvLyAyKSBXU0RMIG9yIFdTSUwgKHRvcC1kb3duIG9yIGNsaWVudCkuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX0NMQVNTX0lEX0lGSUxFID0gIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIjsKLQkKLQkvLyBPYmplY3QgY2xhc3MgZm9yIEphdmEgY29tcGlsYXRpb24gdW5pdHMgKGkuZS4gSmF2YSBjbGFzc2VzIHNlbGVjdGVkIGluIHRoZSBKYXZhIHBlcnNwZWN0aXZlKS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfQ09NUElMQVRJT05VTklUID0gIm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkNvbXBpbGF0aW9uVW5pdCI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBhIHNlcnZpY2Ugc2VsZWN0ZWQgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUgKHRvcC1kb3duIG9yIGNsaWVudCkuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX0NMQVNTX0lEX1NFUlZJQ0VJTVBMID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UiOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgYSBXU0RMUmVzb3VyY2VJbXBsICh0b3AtZG93biBvciBjbGllbnQpLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9XU0RMU0VSVklDRUlNUEwgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIjsKLQkKLQkvLyBPYmplY3QgY2xhc3MgZm9yIGEgU2VydmljZVJlZiAodG9wLWRvd24gb3IgY2xpZW50KS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfU0VSVklDRVJFRiA9ICJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWYiOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgYSBTZXJ2aWNlSW1wbEJlYW4gKGJvdHRvbS11cCkuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX0NMQVNTX0lEX1NFUlZJQ0VJTVBMQkVBTiA9ICJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmljZUltcGxCZWFuIjsKLQkKLQkvLyBPYmplY3QgY2xhc3MgZm9yIGEgQmVhbkxpbmsgKGJvdHRvbS11cCkuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX0NMQVNTX0lEX0JFQU5MSU5LID0gIm9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5CZWFuTGluayI7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvV1NDdXN0b21BZGFwdGVyRmFjdG9yeS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL1dTQ3VzdG9tQWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFiODRlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvV1NDdXN0b21BZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmljZUltcGxCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5XZWJTZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotCi0vKioKLSAqIFRoZSBXU0N1c3RvbUFkYXB0ZXJGYWN0b3J5IGlzIGFuIEFkYXB0ZXJGYWN0b3J5IHNpbWlsYXIgdG8gb25lIGFuIGFkb3B0ZXIgd291bGQgcHJvdmlkZSB0byBhZGFwdCBhIGN1c3RvbSBvYmplY3QgCi0gKiB0byBhIFdTREwgdXJpIHRoYXQgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGFuZCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdvdWxkIHRha2UgYXMgaW5wdXQuICBUaGUgU2VydmxldCBMaW5rLCAKLSAqIHJlcHJlc2VudGluZyB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB1bmRlciB0aGUgSlNSLTEwOSBXZWIgc2VydmljZXMgYnJhbmNoIG9mIHRoZSBKMkVFIFByb2plY3QgRXhwbG9yZXIsIGlzIAotICogdXNlZCBhcyB0aGUgImN1c3RvbSBvYmplY3QiIGluIHRoaXMgdGVzdC4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0N1c3RvbUFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgSUFkYXB0ZXJGYWN0b3J5IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIENsYXNzW10gdHlwZXMgPSB7Ci0JCUlGaWxlLmNsYXNzLCBTdHJpbmcuY2xhc3MKLQl9OwotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuQ2xhc3MpCi0JICovCi0JcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKSB7Ci0JCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2bGV0TGluayAmJiAoKGFkYXB0ZXJUeXBlID09IElGaWxlLmNsYXNzICkgfHwgKGFkYXB0ZXJUeXBlID09IFN0cmluZy5jbGFzcykpKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oImdldEFkYXB0ZXIgb24gIithZGFwdGFibGVPYmplY3QudG9TdHJpbmcoKSk7Ci0JCQlTZXJ2bGV0TGluayBiZWFuTGluayA9IChTZXJ2bGV0TGluaykgYWRhcHRhYmxlT2JqZWN0OwotCi0JCQlJRmlsZSB3c2RsRmlsZSA9IGdldFdTRExGaWxlKGJlYW5MaW5rKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigid3NkbEZpbGUgPSAiK3dzZGxGaWxlKTsKLQkJCWlmIChhZGFwdGVyVHlwZSA9PSBJRmlsZS5jbGFzcykgewotCQkJCXJldHVybiB3c2RsRmlsZTsKLQkJCX0gZWxzZSAKLQkJCQlpZiAoYWRhcHRlclR5cGUgPT0gU3RyaW5nLmNsYXNzKSB7Ci0JCQkJCVVSSSB3c2RsVXJpID0gd3NkbEZpbGUuZ2V0TG9jYXRpb25VUkkoKTsKLQkJCQkJU3RyaW5nIHdzZGxGaWxlU3RyaW5nID0gbnVsbDsKLQkJCQkJaWYgKHdzZGxVcmkgIT0gbnVsbCkgewotCQkJCQkJd3NkbEZpbGVTdHJpbmcgPSB3c2RsVXJpLnRvU3RyaW5nKCk7Ci0JCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIndzZGxGaWxlU3RyaW5nID0gIit3c2RsRmlsZVN0cmluZyk7Ci0JCQkJCX0KLQkJCQkJcmV0dXJuIHdzZGxGaWxlU3RyaW5nOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyTGlzdCgpCi0JICovCi0JcHVibGljIENsYXNzW10gZ2V0QWRhcHRlckxpc3QoKSB7Ci0JCXJldHVybiB0eXBlczsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIGJlYW4gVGhlIFNlcnZpY2VJbXBsQmVhbgotCSAqIEByZXR1cm4gVGhlIElGaWxlIHJlcHJlc2VudGluZyB0aGUgV1NETCBmaWxlIGZvciB0aGlzIFNlcnZpY2VJbXBsQmVhbi4KLQkgKi8KLQlwcml2YXRlIElGaWxlIGdldFdTRExGaWxlKFNlcnZpY2VJbXBsQmVhbiBiZWFuKSB7Ci0JCSAgRU9iamVjdCBlT2JqZWN0ID0gYmVhbi5lQ29udGFpbmVyKCk7Ci0JCSAgaWYgKGVPYmplY3QgPT0gbnVsbCkKLQkJCSAgcmV0dXJuIG51bGw7Ci0JICAgICAgICAgIAotCQkgIGVPYmplY3QgPSBlT2JqZWN0LmVDb250YWluZXIoKTsKLQkgICAgICAKLQkJICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFdlYlNlcnZpY2VEZXNjcmlwdGlvbikgewotCQkJICBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gd3NkID0gKFdlYlNlcnZpY2VEZXNjcmlwdGlvbikgZU9iamVjdDsKLQkJCSAgCi0JCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qod3NkKTsgICAgCSAgCi0JICAgIAkgIAotCQkJICBJUGF0aCBwYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHByb2plY3QpOyAgICAJIAotCQkJICBwYXRoID0gcGF0aC5hcHBlbmQod3NkLmdldFdzZGxGaWxlKCkpOyAKLQkJCSAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGUocGF0aCk7IAkgIAotCQkJICAgICAgCSAgICAKLQkJICB9Ci0JCSAgcmV0dXJuIG51bGw7Ci0JICB9Ci0JICAKLQkgIC8qKgotCSAqIEBwYXJhbSBsaW5rIFRoZSBTZXJ2bGV0TGluawotCSAqIEByZXR1cm4gVGhlIElGaWxlIHJlcHJlc2VudGluZyB0aGUgV1NETCBmaWxlIGZvciB0aGlzIFNlcnZsZXRMaW5rCi0JICovCi0JcHJpdmF0ZSBJRmlsZSBnZXRXU0RMRmlsZShTZXJ2bGV0TGluayBsaW5rKSB7Ci0JCSAgRU9iamVjdCBlT2JqZWN0ID0gbGluay5lQ29udGFpbmVyKCk7Ci0JCSAgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW4pCi0JCQkgIHJldHVybiBnZXRXU0RMRmlsZSgoU2VydmljZUltcGxCZWFuKSBlT2JqZWN0KTsKLQkJICByZXR1cm4gbnVsbDsKLQkgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0Ly5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MmVlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0Ly5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjNlMWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE1NmEzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LlNlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvcgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdDQsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS53c3Qud3MsCi0gb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucywKLSBvcmcuZWNsaXBzZS51aQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYWZiNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGY0M2M3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zcmMuaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzcmMvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmYyOTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9U2VydmljZSBwb2xpY3kKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MjE4M2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAKLSAgPCEtLSBXZSBuZWVkIHRoaXMgcGx1Z2luIHRvIGJlIGxvYWRlZCBhdCBzdGFydHVwIHRpbWUgc28gdGhhdCB0aGUKLSAgICAgICBTZXJ2aWNlUG9saWN5UHJvcGVydHlUZXN0ZXIgY2xhc3Mgd2lsbCBhbHdheXMgYmUgbG9hZGVkLiAgSWYgdGhpcyBpcwotICAgICAgIG5vdCBkb25lIHRoZW4gdGhlIFNlcnZpY2UgUG9saWN5IHByb2plY3QgcHJvcGVydHkgcGFnZSB3aWxsIGFwcGVhcgotICAgICAgIG9uIGFsbCBwcm9qZWN0IHByb3BlcnR5IHBhZ2VzIHVudGlsIHRoZSBwbHVnaW4gaGFzIGJlZW4gbG9hZGVkLiAKLSAgICAgICAtLT4KLSAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCIvPgotICAKLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMucHJvcGVydHlUZXN0ZXJzIj4KLSAgICA8cHJvcGVydHlUZXN0ZXIKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5zZXJ2aWNlLndzLnNlcnZpY2UucG9saWN5LmZvbyIKLSAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0IgotICAgICAgbmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5zZXJ2aWNlLndzLnNlcnZpY2UucG9saWN5LmZvbyIKLSAgICAgIHByb3BlcnRpZXM9InByb2plY3RIYXNGT09maWxlcyIKLSAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5pbnRlcm5hbC5wcm9wZXJ0aWVzLkZPT0ZpbGVQcm9wZXJ0eVRlc3RlciI+Ci0gICAgPC9wcm9wZXJ0eVRlc3Rlcj4KLSAJPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuc2VydmljZXBvbGljeSI+Ci0gICAgIDxzZXJ2aWNlUG9saWN5PgotICAgICAgPGVuYWJsZW1lbnQ+Ci0gICAgICAgICA8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Quc2VydmljZS53cy5zZXJ2aWNlLnBvbGljeS5mb28ucHJvamVjdEhhc0ZPT2ZpbGVzIi8+Ci0gICAgICAgPC9lbmFibGVtZW50PiAKLSAgICAgICA8cG9saWN5IHBhcmVudFBvbGljeUlkPSJzb21lcGFyZW50IiBpZD0iaWQxIiBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIgbXV0YWJsZT0idHJ1ZSI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkMSBzaG9ydE5hbWUiIGRlc2NyaXB0aW9uPSJpZDEgZGVzY3JpcHRpb24iLz4KLSAgICAgICAgIDxyZWxhdGlvbnNoaXAgZW51bUxpc3Q9Im9yZy5lY2xpcHNlLndzdC53YXJuIG9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9ImlkMiIKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4gb3JnLmVjbGlwc2Uud3N0LmVycm9yIi8+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9ImlkMyIKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4iLz4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQ0IgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiLz4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQyMiIKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4yIG9yZy5lY2xpcHNlLndzdC5lcnJvcjIiLz4KLSAgCQkJPHRhcmdldFBvbGljeSBpZD0iaWRfYm9vbGVhbjIiCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5mYWxzZSIvPiAgCi0gICAgICAgICA8L3JlbGF0aW9uc2hpcD4KLSAgICAgICAgIAotICAgICAgICAgPHJlbGF0aW9uc2hpcCBlbnVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZSI+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9ImlkMyIKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4gb3JnLmVjbGlwc2Uud3N0LmVycm9yIi8+Ci0gICAgICAgICA8L3JlbGF0aW9uc2hpcD4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJzb21lcGFyZW50Ij4KLSAgICAgICAgIDxkZXNjcmlwdG9yIGxvbmdOYW1lPSJwYXJlbnQgbG9uZ25hbWUiIC8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWQyIiBwYXJlbnRQb2xpY3lJZD0ic29tZXBhcmVudCIgCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC53YXJuIgotICAgICAgICAgICAgICAgICAgICAgICAgbXV0YWJsZT0idHJ1ZSI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkMiBzaG9ydG5hbWUiIGNvbnRleHRIZWxwSWQ9InNvbWVjb250ZXh0aWQuQTAwMSIvPgotICAgICAgICAgPHN0YXRlIGtleT0iaWQyX2tleSIgdmFsdWU9ImlkMl92YWx1ZSIgLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJpZDMiIHBhcmVudFBvbGljeUlkPSJpZDIiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDMgc2hvcnQgbmFtZSIvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9ImlkNSIgcGFyZW50UG9saWN5SWQ9ImlkMyIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkNSBzaG9ydCBuYW1lIi8+Ci0gICAgICAgICA8cmVsYXRpb25zaGlwIGVudW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiI+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9ImlkMiIgCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUiLz4KLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPiAgCi0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPHBvbGljeSBpZD0iaWQ2IiBwYXJlbnRQb2xpY3lJZD0iaWQ1IiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQ2IHNob3J0IG5hbWUiLz4KLSAgICAgICA8L3BvbGljeT4KLQotICAgICAgIDxwb2xpY3kgaWQ9ImlkMTAiIHBhcmVudFBvbGljeUlkPSJpZDIyIiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQxMCBzaG9ydCBuYW1lIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPHBvbGljeSBpZD0iaWQxMSIgcGFyZW50UG9saWN5SWQ9ImlkMTAiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDExIHNob3J0IG5hbWUiLz4KLSAgICAgICAgIDxyZWxhdGlvbnNoaXAgZW51bUxpc3Q9Im9yZy5lY2xpcHNlLndzdC53YXJuIj4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQyIiAKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZSIvPgotICAgICAgICAgPC9yZWxhdGlvbnNoaXA+ICAKLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJpZDEyIiBwYXJlbnRQb2xpY3lJZD0iaWQxMSIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkMTIgc2hvcnQgbmFtZSIvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9ImlkNyIgcGFyZW50UG9saWN5SWQ9ImlkMiIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkNyBzaG9ydCBuYW1lIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPHBvbGljeSBpZD0iaWQ4IiBwYXJlbnRQb2xpY3lJZD0iaWQ3IiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQ4IHNob3J0IG5hbWUiLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJpZDkiIHBhcmVudFBvbGljeUlkPSJpZDgiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDkgc2hvcnQgbmFtZSIvPgotICAgICAgICAgPHJlbGF0aW9uc2hpcCBlbnVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4iPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDIiIAotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3QuaWdub3JlIi8+Ci0gICAgICAgICA8L3JlbGF0aW9uc2hpcD4gIAotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9ImlkNCIgZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDQgc2hvcnQgbmFtZSIgbG9uZ05hbWU9ImlkNCBsb25nIG5hbWUiIC8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWQyMiIgcGFyZW50UG9saWN5SWQ9InNvbWVwYXJlbnQiIAotICAgICAgICAgICAgICAgICAgICAgICAgZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0yIgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQyMiBzaG9ydG5hbWUiIGNvbnRleHRIZWxwSWQ9InNvbWVjb250ZXh0aWQuQTAwMSIvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9ImlkX2Jvb2xlYW4xIiBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuYm9vbGVhbkVudW0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC50cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iYm9vbGVhbjEgc2hvcnQgbmFtZSIgbG9uZ05hbWU9ImJvb2xlYW4xIGxvbmcgbmFtZSIgLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJpZF9ib29sZWFuMiIgZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmJvb2xlYW5FbnVtIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QudHJ1ZSI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImJvb2xlYW4yIHNob3J0IG5hbWUiIGxvbmdOYW1lPSJib29sZWFuMiBsb25nIG5hbWUiIC8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bTIiIAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJvcmcuZWNsaXBzZS53c3QuaWdub3JlMiI+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZTIiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IklHTk9SRSBTSE9SVE5BTUUyIiBsb25nTmFtZT0iSUdOT1JFIExPTkdOQU1FMiIgLz4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3Qud2FybjIiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IldBUk4gU0hPUlROQU1FMiIgbG9uZ05hbWU9IldBUk4gTE9OR05BTUUyIiAvPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvcjIiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IkVSUk9SIFNIT1JUTkFNRTIiIGxvbmdOYW1lPSJFUlJPUiBMT05HTkFNRTIiIC8+Ci0gICAgICAgPC9lbnVtZXJhdGlvbj4gCi0gICAgICAgCi0gICAgIDwvc2VydmljZVBvbGljeT4gICAgICAKLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbGljeXVpIj4KLSAgICAgPHNlcnZpY2VQb2xpY3lVST4gCi0gICAgICAgPG9wZXJhdGlvbiBpZD0ic2VydmljZS51aS5vcGVyYXRpb24xIiBkZWZhdWx0ZGF0YT0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJpZDN8aWQyIiA+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTEgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTEgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIvPgotICAgICAgICAgPGVuYWJsZWQgbXVsdGlzZWxlY3Q9InRydWUiLz4KLSAgICAgICA8L29wZXJhdGlvbj4KLSAgICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLm9wZXJhdGlvbjIiIGRlZmF1bHRkYXRhPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkXGQuKiIgPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJVSSBwb2xpY3kyIHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3kyIGxvbmcgbmFtZSIgLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iLz4KLSAgICAgICAgIDxlbmFibGVkIG11bHRpc2VsZWN0PSJmYWxzZSIvPgotICAgICAgIDwvb3BlcmF0aW9uPiAKLSAgICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLm9wZXJhdGlvbjMiIGRlZmF1bHRkYXRhPSJmYWxzZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJpZDQiID4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5MyBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5MyBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIi8+Ci0gICAgICAgPC9vcGVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPG9wZXJhdGlvbiBpZD0ic2VydmljZS51aS5vcGVyYXRpb240IiBkZWZhdWx0ZGF0YT0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJpZDF8aWQyfGlkMyIgPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJVSSBwb2xpY3k0IHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3k0IGxvbmcgbmFtZSIgLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iLz4KLSAgICAgICA8L29wZXJhdGlvbj4KLSAgICAgCi0gICAgICAgPG9wZXJhdGlvbiBpZD0ic2VydmljZS51aS5vcGVyYXRpb241IiBkZWZhdWx0ZGF0YT0iZmFsc2UiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWQyMiIgd29ya3NwYWNlT25seT0idHJ1ZSI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTUgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTUgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bTIiLz4KLSAgICAgICA8L29wZXJhdGlvbj4gICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLmJvb2xlYW4ub3BlcmF0aW9uMSIgZGVmYXVsdGRhdGE9ImZhbHNlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkX2Jvb2wuKiIgd29ya3NwYWNlT25seT0idHJ1ZSI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTJiIGJvb2wgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTJiIGJvb2wgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPHNlbGVjdGlvbi8+Ci0gICAgICAgPC9vcGVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPG9wZXJhdGlvbiBpZD0ic2VydmljZS51aS5ib29sZWFuLm9wZXJhdGlvbjIiIGRlZmF1bHRkYXRhPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkX2Jvb2xlYW4yIiA+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTMgYm9vbCBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5MyBib29sIGxvbmcgbmFtZSIgLz4KLSAgICAgICAgIDxzZWxlY3Rpb24gaWNvbj0idHJ1ZSIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkuY29tcGxleC5vcGVyYXRpb24xIiBkZWZhdWx0ZGF0YT0iZmFsc2UiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0ic29tZXBhcmVudHwgaWQ0IiA+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTQgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTQgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPGNvbXBsZXggbGF1bmNoQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LlRlc3RMYXVuY2hDbGFzcyIvPgotICAgICAgICAgPGVuYWJsZWQgbXVsdGlzZWxlY3Q9InRydWUiCi0gICAgICAgICAgICAgICAgICBlbmFibGVkQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LlRlc3RFbmFibGVkQ2xhc3MiLz4KLSAgICAgICA8L29wZXJhdGlvbj4KLSAgICAgICAKLSAgICAgICA8cXVpY2tGaXggcGx1Z2luSWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0IgotICAgICAgICAgICAgICAgICBjb2RlPSIxIj4KLSAgICAgICAgICA8YWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5hY3Rpb24xIj4KLSAgICAgICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9InF1aWNrIGZpeCAxIGZvciBjb2RlIDEiLz4KLSAgICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgICA8YWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5hY3Rpb24yIj4KLSAgICAgICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9InF1aWNrIGZpeCAyIGZvciBjb2RlIDEiLz4KLSAgICAgICAgICA8L2FjdGlvbj4KLSAgICAgICA8L3F1aWNrRml4PgotICAgICAgIAotICAgICAgIDxxdWlja0ZpeCBwbHVnaW5JZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QiCi0gICAgICAgICAgICAgICAgIGNvZGU9IjIiPgotICAgICAgICAgIDxhY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LmFjdGlvbjMiPgotICAgICAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0icXVpY2sgZml4IDEgZm9yIGNvZGUgMiIvPgotICAgICAgICAgIDwvYWN0aW9uPgotICAgICAgIDwvcXVpY2tGaXg+Ci0gICAgIDwvc2VydmljZVBvbGljeVVJPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L01haW5UZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9NYWluVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYjkwM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L01haW5UZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lBUENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJU1NCUENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5RW51bWVyYXRpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5UmVsYXRpb25zaGlwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGVFbnVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjsKLQotQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikgLy8kTk9OLU5MUy0xJAotcHVibGljIGNsYXNzIE1haW5UZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZQoteyAgCi0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpb25zKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gIHBvbGljeUxpc3QgPSBwbGF0Zm9ybS5nZXRSb290U2VydmljZVBvbGljaWVzKCBudWxsICk7Ci0gICAgIAotICAgICBmb3IoIElTZXJ2aWNlUG9saWN5IHBvbGljeSA6IHBvbGljeUxpc3QgKQotICAgICB7Ci0gICAgICAgZGlzcGxheVBvbGljeU5vZGUoIHBvbGljeSApOwotICAgICB9ICAgCi0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PSBFbnVtZXJhdGlvbnM6IiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZXJyb3JXYXJuRW51bSA9IHBsYXRmb3JtLmdldFN0YXRlRW51bWVyYXRpb24oICJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRW51bSBpZDogIiArICJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIAotICAgICBmb3IoIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtIDogZXJyb3JXYXJuRW51bSApCi0gICAgIHsKLSAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGlkOiAiICsgaXRlbS5nZXRJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIHNob3J0bmFtZTogIiArIGl0ZW0uZ2V0U2hvcnROYW1lKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgbG9uZ25hbWU6ICIgKyBpdGVtLmdldExvbmdOYW1lKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgaXNEZWZhdWx0OiAiICsgaXRlbS5pc0RlZmF1bHQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiIiApOyAvLyROT04tTkxTLTEkCi0gICAgIH0KLSAgIH0KLSAgIAotICAgcHJpdmF0ZSB2b2lkIGRpc3BsYXlQb2xpY3lOb2RlKCBJU2VydmljZVBvbGljeSBwb2xpY3kgKQotICAgewotICAgICBJU2VydmljZVBvbGljeSBwYXJlbnRQb2xpY3kgPSBwb2xpY3kuZ2V0UGFyZW50UG9saWN5KCk7Ci0gICAgIElEZXNjcmlwdG9yICAgICBkZXNjcmlwdG9yICAgPSBwb2xpY3kuZ2V0RGVzY3JpcHRvcigpOwotICAgICAKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRm91bmQgcG9saWN5OiAiICsgcG9saWN5LmdldElkKCkgKyAiIHBhcmVudGlkOiIgKyAocGFyZW50UG9saWN5ID09IG51bGwgPyAibnVsbCIgOiBwYXJlbnRQb2xpY3kuZ2V0SWQoKSkgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgCi0gICAgIGZvciggSVNlcnZpY2VQb2xpY3kgY2hpbGQgOiBwb2xpY3kuZ2V0Q2hpbGRyZW4oKSApCi0gICAgIHsKLSAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGNoaWxkIGlkOiAiICsgY2hpbGQuZ2V0SWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIH0KLSAgICAgCi0gICAgIExpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcyA9IHBvbGljeS5nZXRSZWxhdGlvbnNoaXBzKCk7Ci0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICAiICByZWxhdGlvbnNoaXBzOiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgZm9yKCBJUG9saWN5UmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCA6IHJlbGF0aW9uc2hpcHMgKQotICAgICB7Ci0gICAgICAgSVBvbGljeUVudW1lcmF0aW9uTGlzdCAgICAgICBzb3VyY2VMaXN0ICAgICA9IHJlbGF0aW9uc2hpcC5nZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKTsKLSAgICAgICBMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+IHRhcmdldExpc3QgICAgID0gcmVsYXRpb25zaGlwLmdldFJlbGF0ZWRQb2xpY2llcygpOwotICAgICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiAgc291cmNlRW51bUxpc3QgPSBzb3VyY2VMaXN0LmdldEVudW1lcmF0aW9uTGlzdCgpOwotICAgICAgIAotICAgICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0gOiBzb3VyY2VFbnVtTGlzdCApCi0gICAgICAgewotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICIgKyBpdGVtLmdldElkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgIH0KLSAgICAgICAKLSAgICAgICBmb3IoIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgcG9saWN5RW51bUxpc3QgOiB0YXJnZXRMaXN0ICkKLSAgICAgICB7Ci0gICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgcG9saWN5SWQgICAgICAgPSBwb2xpY3lFbnVtTGlzdC5nZXRQb2xpY3koKS5nZXRJZCgpOwotICAgICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IHRhcmdldEVudW1MaXN0ID0gcG9saWN5RW51bUxpc3QuZ2V0RW51bWVyYXRpb25MaXN0KCk7Ci0gICAgICAgICAKLSAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICBwb2xpY3kgaWQ6ICIgKyBwb2xpY3lJZCApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAKLSAgICAgICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIHRhcmdldEl0ZW0gOiB0YXJnZXRFbnVtTGlzdCApCi0gICAgICAgICB7Ci0gICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgIHRhcmdldCBlbnVtIGlkOiAiICsgdGFyZ2V0SXRlbS5nZXRJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgIH0KLSAgICAgICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJEZXNjcmlwdG9yOiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIHNob3J0IG5hbWU6ICIgKyBkZXNjcmlwdG9yLmdldFNob3J0TmFtZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBsb25nIG5hbWU6ICIgKyBkZXNjcmlwdG9yLmdldExvbmdOYW1lKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGRlc2NyaXB0aW9uOiAiICsgZGVzY3JpcHRvci5nZXREZXNjcmlwdGlvbigpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBjb250ZXh0IGhlbHA6ICIgKyBkZXNjcmlwdG9yLmdldENvbnRleHRIZWxwSWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgaWNvbiBwYXRoOiAiICsgZGVzY3JpcHRvci5nZXRJY29uUGF0aCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBpY29uIHBhdGggYnVuZGxlIGlkOiAiICsgZGVzY3JpcHRvci5nZXRJY29uQnVuZGxlSWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIj09PSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGZvciggSVNlcnZpY2VQb2xpY3kgY2hpbGQgOiBwb2xpY3kuZ2V0Q2hpbGRyZW4oKSApCi0gICAgIHsKLSAgICAgICBkaXNwbGF5UG9saWN5Tm9kZSggY2hpbGQgKTsKLSAgICAgfSAgIAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0RW51bWVyYXRpb25zKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgaWQxICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgaWQyICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgaWQzICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5U3RhdGVFbnVtICAgICAgc3RhdGUxICAgID0gaWQxLmdldFBvbGljeVN0YXRlRW51bSgpOwotICAgICBJUG9saWN5U3RhdGVFbnVtICAgICAgc3RhdGUyICAgID0gaWQyLmdldFBvbGljeVN0YXRlRW51bSgpOwotICAgICBJUG9saWN5U3RhdGVFbnVtICAgICAgc3RhdGUzICAgID0gaWQzLmdldFBvbGljeVN0YXRlRW51bSgpOwotICAgICBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbTEgICAgID0gc3RhdGUxLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtMiAgICAgPSBzdGF0ZTIuZ2V0Q3VycmVudEl0ZW0oKTsKLSAgICAgSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0zICAgICA9IHN0YXRlMy5nZXRDdXJyZW50SXRlbSgpOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIlVuZXhwZWN0ZWQgc2hvcnRuYW1lOiIgKyBpdGVtMS5nZXRTaG9ydE5hbWUoKSwgaXRlbTEuZ2V0U2hvcnROYW1lKCkuZXF1YWxzKCAiaWdub3JlIikgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIGFzc2VydFRydWUoICJVbmV4cGVjdGVkIHNob3J0bmFtZToiICsgaXRlbTIuZ2V0U2hvcnROYW1lKCksIGl0ZW0yLmdldFNob3J0TmFtZSgpLmVxdWFscyggIndhcm4iKSApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgYXNzZXJ0VHJ1ZSggIlVuZXhwZWN0ZWQgc2hvcnRuYW1lOiIgKyBpdGVtMy5nZXRTaG9ydE5hbWUoKSwgaXRlbTMuZ2V0U2hvcnROYW1lKCkuZXF1YWxzKCAiZXJyb3IiKSApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiaWQxIHZhbHVlOiIgKyBpdGVtMS5nZXRTaG9ydE5hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImlkMiB2YWx1ZToiICsgaXRlbTIuZ2V0U2hvcnROYW1lKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0UG9saWN5U3RhdGUoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBpZDEgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQxIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lTdGF0ZUVudW0gICAgICBlbnVtU3RhdGUgPSBpZDEuZ2V0UG9saWN5U3RhdGVFbnVtKCk7Ci0gICAgIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBlbnVtSXRlbSAgPSBlbnVtU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKTsKLSAgICAgU3RyaW5nICAgICAgICAgICAgICAgIGlnbm9yZUlkICA9ICJvcmcuZWNsaXBzZS53c3QuaWdub3JlIjsgLy8kTk9OLU5MUy0xJAotICAgICBTdHJpbmcgICAgICAgICAgICAgICAgd2FybklkICAgID0gIm9yZy5lY2xpcHNlLndzdC53YXJuIjsgLy8kTk9OLU5MUy0xJAotICAgICBTdHJpbmcgICAgICAgICAgICAgICAgZXJyb3JJZCAgID0gIm9yZy5lY2xpcHNlLndzdC5lcnJvciI7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJEZWZhdWx0IGVudW0gbm90OiIgKyBpZ25vcmVJZCwgZW51bUl0ZW0uZ2V0SWQoKS5lcXVhbHMoIGlnbm9yZUlkICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgZW51bVN0YXRlLnNldEN1cnJlbnRJdGVtKCB3YXJuSWQgKTsKLSAgICAgZW51bUl0ZW0gPSBlbnVtU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJVcGRhdGVkIGVudW0gbm90OiIgKyB3YXJuSWQsIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCB3YXJuSWQgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwbGF0Zm9ybS5kaXNjYXJkQ2hhbmdlcygpOwotICAgICBlbnVtSXRlbSA9IGVudW1TdGF0ZS5nZXRDdXJyZW50SXRlbSgpOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkRpc2NhcmQgZW51bSBub3Q6IiArIGlnbm9yZUlkLCBlbnVtSXRlbS5nZXRJZCgpLmVxdWFscyggaWdub3JlSWQgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBlbnVtU3RhdGUuc2V0Q3VycmVudEl0ZW0oIGVycm9ySWQgKTsKLSAgICAgZW51bUl0ZW0gPSBlbnVtU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkVycm9yIGVudW0gbm90OiIgKyBlcnJvcklkLCBlbnVtSXRlbS5nZXRJZCgpLmVxdWFscyggZXJyb3JJZCApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBsYXRmb3JtLmNvbW1pdENoYW5nZXMoKTsKLSAgICAgZW51bUl0ZW0gPSBlbnVtU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkVycm9yIGVudW0gbm90OiIgKyBlcnJvcklkLCBlbnVtSXRlbS5nZXRJZCgpLmVxdWFscyggZXJyb3JJZCApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJvamVjdFByZWZlcmVuY2VzID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKCBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRCApOwotICAgICAKLSAgICAgdHJ5Ci0gICAgIHsKLSAgICAgICBTdHJpbmdbXSAgICAgICAgICAgIGtleXMgICAgICAgICAgICAgICA9IHByb2plY3RQcmVmZXJlbmNlcy5rZXlzKCk7Ci0gICAgIAotICAgICAgIGZvciggU3RyaW5nIGtleSA6IGtleXMgKQotICAgICAgIHsKLSAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIktleT0iICsga2V5ICsgIiB2YWx1ZT0iICsgcHJvamVjdFByZWZlcmVuY2VzLmdldCgga2V5LCAiIiApKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICB7Ci0gICAgICAgYXNzZXJ0VHJ1ZSggIkV4Y2VwdGlvbiB0aHJvd24iICsgZXhjLmdldE1lc3NhZ2UoKSwgZmFsc2UgKTsgLy8kTk9OLU5MUy0xJAotICAgICB9Ci0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RVbmlxdWVJZHMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBwb2xpY3kgICAgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBudWxsLCAic29tZWlkIiwgbnVsbCwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBhc3NlcnRUcnVlKCBwb2xpY3kuZ2V0SWQoKS5lcXVhbHMoICJzb21laWQiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcG9saWN5ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInNvbWVpZCIsIG51bGwsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCBwb2xpY3kuZ2V0SWQoKS5lcXVhbHMoICJzb21laWQxIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBvbGljeSA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJzb21laWQiLCBudWxsLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggcG9saWN5LmdldElkKCkuZXF1YWxzKCAic29tZWlkMiIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwb2xpY3kgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBudWxsLCAic29tZWlkMSIsIG51bGwsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCBwb2xpY3kuZ2V0SWQoKS5lcXVhbHMoICJzb21laWQzIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBvbGljeSA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJzb21lNTVpZDUiLCBudWxsLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggcG9saWN5LmdldElkKCkuZXF1YWxzKCAic29tZTU1aWQ1IiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBvbGljeSA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJzb21lNTVpZDUiLCBudWxsLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggcG9saWN5LmdldElkKCkuZXF1YWxzKCAic29tZTU1aWQxIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgIH0KLSAKLSAgIAotICBAU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKSAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyB2b2lkIHRlc3RPbGRXU0lDb250ZXh0KCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtICAgIHBsYXRmb3JtICAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgICBhcFBvbGljeSAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3NpYXAiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeVN0YXRlRW51bSAgICAgICAgIGFwU3RhdGUgICAgID0gYXBQb2xpY3kuZ2V0UG9saWN5U3RhdGVFbnVtKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgICBzc2JwUG9saWN5ICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3Npc3NicCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBQZXJzaXN0ZW50V1NJQVBDb250ZXh0ICAgYXBDb250ZXh0ICAgPSBuZXcgUGVyc2lzdGVudFdTSUFQQ29udGV4dCgpOwotICAgICBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQgc3NicENvbnRleHQgPSBuZXcgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0KCk7Ci0gICAgIElXb3Jrc3BhY2VSb290ICAgICAgICAgICByb290ICAgICAgICA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgIElQcm9qZWN0ICAgICAgICAgICAgICAgICBwcm9qZWN0ICAgICA9IHJvb3QuZ2V0UHJvamVjdCgiVGVzdFByb2plY3QiKTsgLy8kTk9OLU5MUy0xJAotICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgaXRlbSAgICAgICAgPSBudWxsOwotICAgICAKLSAgICAgdHJ5Ci0gICAgIHsKLSAgICAgICBwcm9qZWN0LmNyZWF0ZShuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgfQotICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgICB7Ci0gICAgICAgYXNzZXJ0VHJ1ZSggIkNvcmUgZXhjZXB0aW9uOiIgKyBleGMuZ2V0TWVzc2FnZSgpLCBmYWxzZSApOyAgIC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgICAKLSAgICAgSVBvbGljeVN0YXRlRW51bSAgYXBQcm9qU3RhdGUgICA9IGFwUG9saWN5LmdldFBvbGljeVN0YXRlRW51bSggcHJvamVjdCApOwotICAgICBJUG9saWN5U3RhdGVFbnVtICBzc2JwUHJvalN0YXRlID0gc3NicFBvbGljeS5nZXRQb2xpY3lTdGF0ZUVudW0oIHByb2plY3QgKTsKLSAgICAgCi0gICAgIC8vIEVuc3VyZSB0aGF0IHByb2plY3QgcHJlZmVyZW5jZXMgYXJlIGdvdHRlbiBmcm9tIHRoZSB3b3Jrc3BhY2UKLSAgICAgYXBTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIiApOyAvLyROT04tTkxTLTEkCi0gICAgIHBsYXRmb3JtLmNvbW1pdENoYW5nZXMoKTsKLSAgICAgYXBQcm9qU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3QiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgaXRlbSA9IGFwUHJvalN0YXRlLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIHZhbHVlIG5vdCBpZ25vcmUsIGJ1dCBnb3QgIiArIGl0ZW0sIGl0ZW0uZXF1YWxzKCJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIAotICAgICBhcFN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIiApOyAvLyROT04tTkxTLTEkCi0gICAgIHBsYXRmb3JtLmNvbW1pdENoYW5nZXMoKTsKLSAgICAgYXBQcm9qU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBpdGVtID0gYXBQcm9qU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKS5nZXRJZCgpOwotICAgICBhc3NlcnRUcnVlKCAiQXAgdmFsdWUgbm90IHJlcXVpcmUsIGJ1dCBnb3QgIiArIGl0ZW0sIGl0ZW0uZXF1YWxzKCJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAKLSAgICAgcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggcHJvamVjdCAsIHRydWUgKTsKLSAgICAgaXRlbSA9IGFwUHJvalN0YXRlLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIHZhbHVlIG5vdCBpbmdvcmUsIGJ1dCBnb3QgIiArIGl0ZW0sIGl0ZW0uZXF1YWxzKCJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIAotICAgICBwbGF0Zm9ybS5jb21taXRDaGFuZ2VzKCBwcm9qZWN0ICk7Ci0gICAgIGl0ZW0gPSBhcFByb2pTdGF0ZS5nZXRDdXJyZW50SXRlbSgpLmdldElkKCk7Ci0gICAgIGFzc2VydFRydWUoICJBcCB2YWx1ZSBub3QgaW5nb3JlLCBidXQgZ290ICIgKyBpdGVtLCBpdGVtLmVxdWFscygib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAKLSAgICAgU3RyaW5nIGFwQ29udGV4dFZhbHVlID0gYXBDb250ZXh0LmdldFByb2plY3RXU0lDb21wbGlhbmNlKCBwcm9qZWN0ICk7Ci0gICAgIGFzc2VydFRydWUoICJBcCBjb250ZXh0IG5vdCBpZ25vcmUsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBhcFN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0IiApOyAvLyROT04tTkxTLTEkCi0gICAgIHBsYXRmb3JtLmNvbW1pdENoYW5nZXMoKTsKLSAgICAgYXBDb250ZXh0VmFsdWUgPSBhcENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IGlnbm9yZSwgYnV0ICIgKyBhcENvbnRleHRWYWx1ZSwgYXBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIHByb2plY3QsIGZhbHNlICk7Ci0gICAgIGFwQ29udGV4dFZhbHVlID0gYXBDb250ZXh0LmdldFByb2plY3RXU0lDb21wbGlhbmNlKCBwcm9qZWN0ICk7Ci0gICAgIGFzc2VydFRydWUoICJBcCBjb250ZXh0IG5vdCBpZ25vcmUsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgYXBQcm9qU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcyggcHJvamVjdCApOwotICAgICBhcENvbnRleHRWYWx1ZSA9IGFwQ29udGV4dC5nZXRQcm9qZWN0V1NJQ29tcGxpYW5jZSggcHJvamVjdCApOwotICAgICBhc3NlcnRUcnVlKCAiQXAgY29udGV4dCBub3Qgc3VnZ2VzdCwgYnV0ICIgKyBhcENvbnRleHRWYWx1ZSwgYXBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBwcm9qZWN0LCB0cnVlICk7Ci0gICAgIGFwQ29udGV4dFZhbHVlID0gYXBDb250ZXh0LmdldFByb2plY3RXU0lDb21wbGlhbmNlKCBwcm9qZWN0ICk7Ci0gICAgIGFzc2VydFRydWUoICJBcCBjb250ZXh0IG5vdCByZXF1aXJlLCBidXQgIiArIGFwQ29udGV4dFZhbHVlLCBhcENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHNzYnBQcm9qU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3QiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIFN0cmluZyBzc2JwQ29udGV4dFZhbHVlID0gc3NicENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJBcCBjb250ZXh0IG5vdCByZXF1aXJlLCBidXQgIiArIGFwQ29udGV4dFZhbHVlLCBhcENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggIlNTQlAgY29udGV4dCBub3Qgc3VnZ2VzdCwgYnV0ICIgKyBzc2JwQ29udGV4dFZhbHVlLCBzc2JwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgc3NicFByb2pTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgc3NicENvbnRleHRWYWx1ZSA9IHNzYnBDb250ZXh0LmdldFByb2plY3RXU0lDb21wbGlhbmNlKCBwcm9qZWN0ICk7Ci0gICAgIGFzc2VydFRydWUoICJBcCBjb250ZXh0IG5vdCByZXF1aXJlLCBidXQgIiArIGFwQ29udGV4dFZhbHVlLCBhcENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggIlNTQlAgY29udGV4dCBub3QgcmVxdWlyZSwgYnV0ICIgKyBzc2JwQ29udGV4dFZhbHVlLCBzc2JwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdE11dGFibGUoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICAgcGxhdGZvcm0gICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgIGFwUG9saWN5ICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lhcCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgc3NicFBvbGljeSAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaXNzYnAiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgIHdzaVBvbGljeSAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIlJvb3Qgd3NpIHBvbGljeSBpcyBtdXRhYmxlIiwgIXdzaVBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpLmlzTXV0YWJsZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIHBvbGljeSBpcyBub3QgbXV0YWJsZSIsIGFwUG9saWN5LmdldFBvbGljeVN0YXRlKCkuaXNNdXRhYmxlKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCAiU1NCUCBwb2xpY3kgaXMgbm90IG11dGFibGUiLCBzc2JwUG9saWN5LmdldFBvbGljeVN0YXRlKCkuaXNNdXRhYmxlKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0Q2hpbGRDaGFuZ2VMaXN0ZW5lcnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgQ2hpbGRDaGFuZ2VMaXN0ZW5lciAgIGxpc3RlbmVyID0gbmV3IENoaWxkQ2hhbmdlTGlzdGVuZXIoKTsKLSAgICAgCi0gICAgIHBsYXRmb3JtLmFkZENoaWxkQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsIGZhbHNlICk7Ci0gICAgIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkID0gZmFsc2U7Ci0gICAgIGxpc3RlbmVyLmlzQWRkZWQgPSBmYWxzZTsKLSAgICAgCi0gICAgIElTZXJ2aWNlUG9saWN5IHBhcmVudCA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBjYWxsZWQiLCBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGFkZGVkIiwgbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICAKLSAgICAgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgPSBmYWxzZTsgICAKLSAgICAgbGlzdGVuZXIuaXNBZGRlZCA9IGZhbHNlOwotICAgICBJU2VydmljZVBvbGljeSBjaGlsZDEgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBwYXJlbnQsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBjYWxsZWQiLCBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGFkZGVkIiwgbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICAKLSAgICAgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgPSBmYWxzZTsgICAKLSAgICAgbGlzdGVuZXIuaXNBZGRlZCA9IGZhbHNlOwotICAgICBsaXN0ZW5lci5jb3VudCAgID0gMDsKLSAgICAgSVNlcnZpY2VQb2xpY3kgY2hpbGQyID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggY2hpbGQxLCAicGFyZW50X2lkMSIsIG51bGwsIG51bGwgKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgY2hpbGQzID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggY2hpbGQyLCAicGFyZW50X2lkMSIsIG51bGwsIG51bGwgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgY2FsbGVkIiwgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBhZGRlZCIsIGxpc3RlbmVyLmlzQWRkZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIGNvdW50IG5vdCAyIiwgbGlzdGVuZXIuY291bnQgPT0gMiApOwotICAgICAKLSAgICAgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgPSBmYWxzZTsgICAKLSAgICAgbGlzdGVuZXIuaXNBZGRlZCA9IHRydWU7Ci0gICAgIGxpc3RlbmVyLmNvdW50ICAgPSAwOwotICAgICAKLSAgICAgY2hpbGQyLnJlbW92ZUNoaWxkKCBjaGlsZDMgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgY2FsbGVkIiwgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCByZW1vdmVkIiwgIWxpc3RlbmVyLmlzQWRkZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIGNvdW50IG5vdCAxIiwgbGlzdGVuZXIuY291bnQgPT0gMSApOwotICAgICAKLSAgICAgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgPSBmYWxzZTsgICAKLSAgICAgbGlzdGVuZXIuaXNBZGRlZCA9IHRydWU7Ci0gICAgIGxpc3RlbmVyLmNvdW50ICAgPSAwOwotICAgICAKLSAgICAgLy8gU2hvdWxkIHJlbW92ZSBwYXJlbnQsIGNoaWxkMSwgYW5kIGNoaWxkMgotICAgICBwbGF0Zm9ybS5yZW1vdmVTZXJ2aWNlUG9saWN5KCBwYXJlbnQgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgY2FsbGVkIiwgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCByZW1vdmVkIiwgIWxpc3RlbmVyLmlzQWRkZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIGNvdW50IG5vdCAzIiwgbGlzdGVuZXIuY291bnQgPT0gMyApOwotICAgICAKLSAgICAgcGxhdGZvcm0ucmVtb3ZlQ2hpbGRDaGFuZ2VMaXN0ZW5lciggbGlzdGVuZXIsIGZhbHNlICk7Ci0gICAgIAotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOyAgIAotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gdHJ1ZTsKLSAgICAgbGlzdGVuZXIuY291bnQgICA9IDA7Ci0gICAgIAotICAgICBwYXJlbnQgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBudWxsLCAicGFyZW50X2lkMSIsIG51bGwsIG51bGwgKTsKLSAgICAgY2hpbGQxID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggcGFyZW50LCAicGFyZW50X2lkMSIsIG51bGwsIG51bGwgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBjYWxsZWQiLCAhbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIGlzYWRkZWQgY2hhbmdlZCIsIGxpc3RlbmVyLmlzQWRkZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIGNvdW50IG5vdCAwIiwgbGlzdGVuZXIuY291bnQgPT0gMCApOwotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGUoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIGlkMiAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMiIgKTsKLSAgICAgU3RyaW5nICAgICAgICAgICAgICAgIHZhbHVlICAgID0gaWQyLmdldFBvbGljeVN0YXRlKCkuZ2V0VmFsdWUoICJpZDJfa2V5IiApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkV4cGVjdGVkIHN0YXRlIHZhbHVlIHRvIGJlIGlkMl92YWx1ZS4iLCB2YWx1ZS5lcXVhbHMoICJpZDJfdmFsdWUiICkgKTsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBjbGFzcyBDaGlsZENoYW5nZUxpc3RlbmVyIGltcGxlbWVudHMgSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIKLSAgIHsKLSAgICAgcHVibGljIGJvb2xlYW4gY2hpbGRFdmVudE9jY3VyZWQgPSBmYWxzZTsKLSAgICAgcHVibGljIGJvb2xlYW4gaXNBZGRlZCA9IGZhbHNlOwotICAgICBwdWJsaWMgaW50ICAgICBjb3VudCA9IDA7OwotICAgICAKLSAgICAgcHVibGljIHZvaWQgY2hpbGRDaGFuZ2UoTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGRMaXN0LCBMaXN0PEJvb2xlYW4+IGFkZGVkTGlzdCkKLSAgICAgewotICAgICAgIGNoaWxkRXZlbnRPY2N1cmVkID0gdHJ1ZTsKLSAgICAgICBpc0FkZGVkID0gYWRkZWRMaXN0LmdldCgwKTsKLSAgICAgICBjb3VudCsrOwotICAgICB9Ci0gICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvTWFpblVJVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvTWFpblVJVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYWU1NTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L01haW5VSVRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHMuQWN0aXZpdHlVdGlsczsKLQotcHVibGljIGNsYXNzIE1haW5VSVRlc3RlciBleHRlbmRzIFRlc3RDYXNlCi17ICAKLSAgIAotICAgcHVibGljIHZvaWQgdGVzdEV4dGVuc2lvbnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSBwbGF0Zm9ybVVJICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5nZXRJbnN0YW5jZSgpOwotICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+ICBvcGVyYXRpb25zICAgPSBwbGF0Zm9ybVVJLmdldEFsbE9wZXJhdGlvbnMoKTsKLSAgICAgCi0gICAgIGZvciggSVBvbGljeU9wZXJhdGlvbiBvcGVyYXRpb24gOiBvcGVyYXRpb25zICkKLSAgICAgewotICAgICAgIGRpc3BsYXlPcGVyYXRpb24oIG9wZXJhdGlvbiApOwotICAgICB9ICAKLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdE9wZXJhdGlvbkNhY2hlKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtICAgcGxhdGZvcm0gICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSBwbGF0Zm9ybVVJID0gU2VydmljZVBvbGljeVBsYXRmb3JtVUkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQxICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQyICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQzICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDMiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQ0ICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AxX2lkMiAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDIsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AxX2lkMyAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDMsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AyX2lkMSAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDEsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AyX2lkMiAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDIsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AyX2lkMyAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDMsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AyX2lkNCAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDQsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AzX2lkNCAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDQsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjMiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3A0X2lkMSAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDEsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3A0X2lkMiAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDIsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3A0X2lkMyAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDMsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gbGlzdDEgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnMoIGlkMSwgdHJ1ZSApOwotICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGxpc3QyID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zKCBpZDIsIHRydWUgKTsKLSAgICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBsaXN0MyA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9ucyggaWQzLCB0cnVlICk7Ci0gICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gbGlzdDQgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnMoIGlkNCwgdHJ1ZSApOwotICAgICAKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiXG5EaXNwbGF5IGxpc3RzIiApOyAvLyROT04tTkxTLTEkCi0gICAgIGRpc3BsYXlMaXN0KCAiTGlzdDEiLCBsaXN0MSApOyAvLyROT04tTkxTLTEkCi0gICAgIGRpc3BsYXlMaXN0KCAiTGlzdDIiLCBsaXN0MiApOyAvLyROT04tTkxTLTEkCi0gICAgIGRpc3BsYXlMaXN0KCAiTGlzdDMiLCBsaXN0MyApOyAvLyROT04tTkxTLTEkCi0gICAgIGRpc3BsYXlMaXN0KCAiTGlzdDQiLCBsaXN0NCApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBjaGVja0NvbnRlbnRzKCAiTGlzdDEiLCBsaXN0MSwgbmV3IElQb2xpY3lPcGVyYXRpb25bXXsgb3AyX2lkMSwgb3A0X2lkMSB9ICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgY2hlY2tDb250ZW50cyggIkxpc3QyIiwgbGlzdDIsIG5ldyBJUG9saWN5T3BlcmF0aW9uW117IG9wMV9pZDIsIG9wMl9pZDIsIG9wNF9pZDIgfSApOyAvLyROT04tTkxTLTEkCi0gICAgIGNoZWNrQ29udGVudHMoICJMaXN0MyIsIGxpc3QzLCBuZXcgSVBvbGljeU9wZXJhdGlvbltdeyBvcDFfaWQzLCBvcDJfaWQzLCBvcDRfaWQzIH0gKTsgLy8kTk9OLU5MUy0xJAotICAgICBjaGVja0NvbnRlbnRzKCAiTGlzdDQiLCBsaXN0NCwgbmV3IElQb2xpY3lPcGVyYXRpb25bXXsgb3AyX2lkNCwgb3AzX2lkNCB9ICk7IC8vJE5PTi1OTFMtMSQKLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdEVuYWJsZWRPcGVyYXRpb25zKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtICAgcGxhdGZvcm0gICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgcGxhdGZvcm1VSSAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDEgICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQyICAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQyIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMyAgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDQgICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gICAgcG9saWN5TGlzdDEgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICBwb2xpY3lMaXN0MiA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMSAgICAgICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkNCwgInNlcnZpY2UudWkub3BlcmF0aW9uMyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcG9saWN5TGlzdDEuYWRkKCBpZDEgKTsKLSAgICAgcG9saWN5TGlzdDEuYWRkKCBpZDIgKTsKLSAgICAgcG9saWN5TGlzdDEuYWRkKCBpZDMgKTsKLSAgICAgcG9saWN5TGlzdDEuYWRkKCBpZDQgKTsKLSAgICAgcG9saWN5TGlzdDIuYWRkKCBpZDQgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJFeHBlY3RlZCBvcGVyYXRpb24gdG8gbm90IGJlIGVuYWJsZWQiLCAhb3AxLmlzRW5hYmxlZCggcG9saWN5TGlzdDEgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoICJFeHBlY3RlZCBvcGVyYXRpb24gdG8gYmUgZW5hYmxlZCIsIG9wMS5pc0VuYWJsZWQoIHBvbGljeUxpc3QyICkgKTsgLy8kTk9OLU5MUy0xJAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0UXVpY2tGaXhBY3Rpb25zKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtICAgICAgcGxhdGZvcm0gICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgICAgcGxhdGZvcm1VSSAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgICBpZDEgICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVN0YXR1cyAgICAgICAgICAgICAgICAgICAgc3RhdHVzMSAgICAgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QiLCAxLCAic29tZSBlcnJvciIsIG51bGwgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIElTdGF0dXMgICAgICAgICAgICAgICAgICAgIHN0YXR1czIgICAgID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0IiwgMiwgInNvbWUgZXJyb3IiLCBudWxsICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICBMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+ICBmaXhMaXN0MSAgICA9IHBsYXRmb3JtVUkuZ2V0UXVpY2tGaXhlcyggc3RhdHVzMSApOwotICAgICBMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+ICBmaXhMaXN0MiAgICA9IHBsYXRmb3JtVUkuZ2V0UXVpY2tGaXhlcyggc3RhdHVzMiApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkV4cGVjdGluZyB0d28gcXVpY2sgZml4ZXMiLCBmaXhMaXN0MS5zaXplKCkgPT0gMiApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoICJFeHBlY3Rpb24gb25lIHF1aWNrIGZpeCIsIGZpeExpc3QyLnNpemUoKSA9PSAxICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGZvciggSVF1aWNrRml4QWN0aW9uSW5mbyBhY3Rpb25JbmZvIDogZml4TGlzdDEgKQotICAgICB7Ci0gICAgICAgSVF1aWNrRml4QWN0aW9uIGFjdGlvbiA9IGFjdGlvbkluZm8uZ2V0QWN0aW9uKCk7Ci0gICAgICAgaWQxLnNldFN0YXR1cyggc3RhdHVzMSApOwotICAgICAgIAotICAgICAgIGFzc2VydFRydWUoICJTdGF0dXMgaXMgbm90IE9LIiwgIWlkMS5nZXRTdGF0dXMoKS5pc09LKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgIGFjdGlvbi5hY3Rpb24oIGlkMSApOwotICAgICAgIGFzc2VydFRydWUoICJTdGF0dXMgaXMgT2sgIiwgaWQxLmdldFN0YXR1cygpLmlzT0soKSApOyAvLyROT04tTkxTLTEkCi0gICAgIH0KLSAgICAgCi0gICAgIGZvciggSVF1aWNrRml4QWN0aW9uSW5mbyBhY3Rpb25JbmZvIDogZml4TGlzdDIgKQotICAgICB7Ci0gICAgICAgSVF1aWNrRml4QWN0aW9uIGFjdGlvbiA9IGFjdGlvbkluZm8uZ2V0QWN0aW9uKCk7Ci0gICAgICAgaWQxLnNldFN0YXR1cyggc3RhdHVzMiApOwotICAgICAgIAotICAgICAgIGFzc2VydFRydWUoICJTdGF0dXMgaXMgbm90IE9LIiwgIWlkMS5nZXRTdGF0dXMoKS5pc09LKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgIGFjdGlvbi5hY3Rpb24oIGlkMSApOwotICAgICAgIGFzc2VydFRydWUoICJTdGF0dXMgaXMgT2sgIiwgaWQxLmdldFN0YXR1cygpLmlzT0soKSApOyAvLyROT04tTkxTLTEkCi0gICAgIH0KLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdEFjdGl2aXRpZXNGaWx0ZXIoKQotICAgewotICAgICBJRmlsdGVyICAgICAgICAgICAgICAgICAgICBhY3Rpdml0aWVzRmlsdGVyID0gQWN0aXZpdHlVdGlscy5nZXRDdXJyZW50QWN0aXZpdGllc0ZpbHRlcigpOwotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICAgICBwbGF0Zm9ybSAgICAgICAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgICAgIHBvbGljeUxpc3QgICAgICAgPSBwbGF0Zm9ybS5nZXRSb290U2VydmljZVBvbGljaWVzKCBhY3Rpdml0aWVzRmlsdGVyICk7Ci0gICAgICAgICAKLSAgICAgZGlzcGxheVBvbGljaWVzKCBwb2xpY3lMaXN0ICk7Ci0gICB9Ci0gICAKLSAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwdWJsaWMgdm9pZCB0ZXN0R2V0T3BlcmF0aW9uc0xpc3QoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICBwbGF0Zm9ybSAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIHBsYXRmb3JtVUkgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDEgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDIgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDMgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDQgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDFfaWQyICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMiwgInNlcnZpY2UudWkub3BlcmF0aW9uMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDFfaWQzICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMywgInNlcnZpY2UudWkub3BlcmF0aW9uMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQxICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMSwgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQyICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMiwgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQzICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMywgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQ0ICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkNCwgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDNfaWQ0ICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkNCwgInNlcnZpY2UudWkub3BlcmF0aW9uMyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDRfaWQxICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMSwgInNlcnZpY2UudWkub3BlcmF0aW9uNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDRfaWQyICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMiwgInNlcnZpY2UudWkub3BlcmF0aW9uNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDRfaWQzICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMywgInNlcnZpY2UudWkub3BlcmF0aW9uNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICBpZExpc3QxICAgID0gbnVsbDsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gICAgaWRMaXN0MiAgICA9IG51bGw7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgIGlkTGlzdDMgICAgPSBudWxsOwotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICBpZExpc3Q0ICAgID0gbnVsbDsKLSAgICAgCi0gICAgIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gY2hlY2tMaXN0MSA9IG51bGw7Ci0gICAgIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gY2hlY2tMaXN0MiA9IG51bGw7Ci0gICAgIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gY2hlY2tMaXN0MyA9IG51bGw7Ci0gICAgIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gY2hlY2tMaXN0NCA9IG51bGw7Ci0gICAgIAotICAgICBjaGVja0xpc3QxID0gbGwoIGwob3AyX2lkMSksIGwob3A0X2lkMSkgKTsKLSAgICAgY2hlY2tMaXN0MiA9IGxsKCBsKG9wMV9pZDIpLCBsKG9wMl9pZDEsIG9wMl9pZDIpLCBsKG9wNF9pZDEsIG9wNF9pZDIpICk7Ci0gICAgIGNoZWNrTGlzdDMgPSBsbCggbChvcDFfaWQyLCBvcDFfaWQzKSwgbChvcDJfaWQxLCBvcDJfaWQyLCBvcDJfaWQzKSwgbChvcDRfaWQxLCBvcDRfaWQyLCBvcDRfaWQzKSApOwotICAgICBjaGVja0xpc3Q0ID0gbGwoIGwob3AxX2lkMiwgb3AxX2lkMyksIGwob3AyX2lkMSwgb3AyX2lkMiwgb3AyX2lkMywgb3AyX2lkNCksIGwob3AzX2lkNCksIGwob3A0X2lkMSwgb3A0X2lkMiwgb3A0X2lkMykgKTsKLSAgICAgCi0gICAgIGlkTGlzdDEgPSBBcnJheXMuYXNMaXN0KCBuZXcgSVNlcnZpY2VQb2xpY3lbXXsgaWQxIH0gKTsKLSAgICAgaWRMaXN0MiA9IEFycmF5cy5hc0xpc3QoIG5ldyBJU2VydmljZVBvbGljeVtdeyBpZDEsIGlkMiB9ICk7Ci0gICAgIGlkTGlzdDMgPSBBcnJheXMuYXNMaXN0KCBuZXcgSVNlcnZpY2VQb2xpY3lbXXsgaWQxLCBpZDIsIGlkMyB9ICk7Ci0gICAgIGlkTGlzdDQgPSBBcnJheXMuYXNMaXN0KCBuZXcgSVNlcnZpY2VQb2xpY3lbXXsgaWQxLCBpZDIsIGlkMywgaWQ0IH0gKTsKLSAgICAgCi0gICAgIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gb3BMaXN0MSA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uc0xpc3QoIGlkTGlzdDEsIHRydWUgKTsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBvcExpc3QyID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zTGlzdCggaWRMaXN0MiwgdHJ1ZSApOwotICAgICBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IG9wTGlzdDMgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnNMaXN0KCBpZExpc3QzLCB0cnVlICk7Ci0gICAgIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gb3BMaXN0NCA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uc0xpc3QoIGlkTGlzdDQsIHRydWUgKTsKLSAgICAgCi0gICAgIHZlcmlmeUxpc3RzKCAiTGlzdDEiLCBvcExpc3QxLCBjaGVja0xpc3QxICk7Ci0gICAgIHZlcmlmeUxpc3RzKCAiTGlzdDIiLCBvcExpc3QyLCBjaGVja0xpc3QyICk7Ci0gICAgIHZlcmlmeUxpc3RzKCAiTGlzdDMiLCBvcExpc3QzLCBjaGVja0xpc3QzICk7Ci0gICAgIHZlcmlmeUxpc3RzKCAiTGlzdDQiLCBvcExpc3Q0LCBjaGVja0xpc3Q0ICk7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBsbCggTGlzdDxJUG9saWN5T3BlcmF0aW9uPi4uLiBvcExpc3QgKQotICAgewotICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdCggb3BMaXN0ICk7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBsKCBJUG9saWN5T3BlcmF0aW9uLi4uIG9wTGlzdCApCi0gICB7Ci0gICAgIHJldHVybiBBcnJheXMuYXNMaXN0KCBvcExpc3QgKTsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSB2b2lkIHZlcmlmeUxpc3RzKCBTdHJpbmcgbGlzdE5hbWUsIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gbGlzdDEsIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gbGlzdDIgKQotICAgewotICAgICBhc3NlcnRUcnVlKCBsaXN0TmFtZSArICIgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplLiIsIGxpc3QxLnNpemUoKSA9PSBsaXN0Mi5zaXplKCkgKTsKLSAgICAgICAgICAgICAKLSAgICAgZm9yKCBpbnQgbGlzdEluZGV4ID0gMCA7IGxpc3RJbmRleCA8IGxpc3QxLnNpemUoKTsgbGlzdEluZGV4KysgKQotICAgICB7Ci0gICAgICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb2xpY3lMaXN0MSA9IGxpc3QxLmdldCggbGlzdEluZGV4ICk7Ci0gICAgICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb2xpY3lMaXN0MiA9IGZpbmRMaXN0KCBwb2xpY3lMaXN0MS5nZXQoMCkuZ2V0SWQoKSwgbGlzdDIgKTsKLSAgICAgICAKLSAgICAgICBhc3NlcnRUcnVlKCBsaXN0TmFtZSArICIgbmVzdGVkIGxpc3QgYXQgaW5kZXggIiArIGxpc3RJbmRleCArICIgaXMgbm90IHRoZSBzYW1lIHNpemUuIiwgcG9saWN5TGlzdDEuc2l6ZSgpID09IHBvbGljeUxpc3QyLnNpemUoKSApOwotICAgICAgIAotICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwb2xpY3lMaXN0MS5zaXplKCk7IGluZGV4KysgKQotICAgICAgIHsKLSAgICAgICAgIElQb2xpY3lPcGVyYXRpb24gb3AxID0gcG9saWN5TGlzdDEuZ2V0KCBpbmRleCApOwotICAgICAgICAgCi0gICAgICAgICBhc3NlcnRUcnVlKCBsaXN0TmFtZSArICIgb3BlcmF0aW9uIG5vdCBmb3VuZCIsIGZpbmRPcCggb3AxLCBwb2xpY3lMaXN0MiApICk7Ci0gICAgICAgfQotICAgICB9ICAKLSAgIH0KLSAgCi0gICBwcml2YXRlIGJvb2xlYW4gZmluZE9wKCBJUG9saWN5T3BlcmF0aW9uIG9wLCBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGxpc3QgKQotICAgewotICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgICAKLSAgICAgZm9yKCBJUG9saWN5T3BlcmF0aW9uIGZvdW5kT3AgOiBsaXN0ICkKLSAgICAgewotICAgICAgIGlmKCBvcCA9PSBmb3VuZE9wICkKLSAgICAgICB7Ci0gICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIAotICAgICByZXR1cm4gcmVzdWx0OwotICAgfQotICAgCi0gICBwcml2YXRlIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gZmluZExpc3QoIFN0cmluZyBpZCwgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBzZWFyY2hMaXN0ICkKLSAgIHsKLSAgICAgZm9yKCBMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeUxpc3QgOiBzZWFyY2hMaXN0ICkKLSAgICAgewotICAgICAgIGlmKCBwb2xpY3lMaXN0LmdldCgwKS5nZXRJZCgpLmVxdWFscyggaWQgKSApCi0gICAgICAgewotICAgICAgICAgcmV0dXJuIHBvbGljeUxpc3Q7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiTGlzdCBub3QgZm91bmQgZm9yIGlkIiArIGlkLCBmYWxzZSApOwotICAgICByZXR1cm4gbnVsbDsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSB2b2lkIGRpc3BsYXlQb2xpY2llcyggTGlzdDxJU2VydmljZVBvbGljeT4gcG9saWN5TGlzdCApCi0gICB7Ci0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkxpc3Rpbmcgc2VydmljZSBwb2xpY2llczoiICk7Ci0gICAgIGZvciggSVNlcnZpY2VQb2xpY3kgcG9saWN5IDogcG9saWN5TGlzdCApCi0gICAgIHsKLSAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICIgKyBwb2xpY3kuZ2V0SWQoKSApOwotICAgICB9Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBkaXNwbGF5TGlzdCggU3RyaW5nIHNldE5hbWUsIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gb3BlcmF0aW9uTGlzdCApCi0gICB7Ci0gICAgIFN5c3RlbS5vdXQucHJpbnQoIHNldE5hbWUgKyAiOiAiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGZvciggSVBvbGljeU9wZXJhdGlvbiBvcGVyYXRpb24gOiBvcGVyYXRpb25MaXN0ICkKLSAgICAgewotICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIG9wZXJhdGlvbi5nZXRJZCgpICsgIiwiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgICAKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiIiApOyAvLyROT04tTkxTLTEkCi0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBjaGVja0NvbnRlbnRzKCBTdHJpbmcgc2V0TmFtZSwgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBvcGVyYXRpb25TZXQsIElQb2xpY3lPcGVyYXRpb25bXSBvcGVyYXRpb25BcnJheSApCi0gICB7Ci0gICAgIGFzc2VydFRydWUoICJTZXQgYW5kIGFycmF5IHNpemVzIGRvbid0IG1hdGNoIGZvciAiICsgc2V0TmFtZSArICIuIiwgb3BlcmF0aW9uU2V0LnNpemUoKSA9PSBvcGVyYXRpb25BcnJheS5sZW5ndGggKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLSAgICAgZm9yKCBJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbiA6IG9wZXJhdGlvbkFycmF5ICkKLSAgICAgewotICAgICAgIGFzc2VydFRydWUoIHNldE5hbWUgKyAiIGRvZXMgbm90IGNvbnRhaW4gb3BlcmF0aW9uICIgKyBvcGVyYXRpb24uZ2V0SWQoKSArICIuIiwgb3BlcmF0aW9uU2V0LmNvbnRhaW5zKCBvcGVyYXRpb24gKSApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgfQotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgZGlzcGxheU9wZXJhdGlvbiggSVBvbGljeU9wZXJhdGlvbiBvcGVyYXRpb24gKQotICAgewotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiB6ZXJvUG9saWNpZXMgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiBtYW55UG9saWNpZXMgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKS5nZXRSb290U2VydmljZVBvbGljaWVzKCBudWxsICk7Ci0gICAgIElEZXNjcmlwdG9yICAgICAgICAgICBkZXNjcmlwdG9yICAgPSBvcGVyYXRpb24uZ2V0RGVzY3JpcHRvcigpOwotICAgICBTdHJpbmcgICAgICAgICAgICAgICBzaG9ydE5hbWUgICAgPSBkZXNjcmlwdG9yLmdldFNob3J0TmFtZSgpOwotICAgICBTdHJpbmcgICAgICAgICAgICAgICBsb25nTmFtZSAgICAgPSBkZXNjcmlwdG9yLmdldExvbmdOYW1lKCk7Ci0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJPcGVyYXRpb24gaWQ6ICIgKyBvcGVyYXRpb24uZ2V0SWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBzaG9ydCBuYW1lOiAiICsgc2hvcnROYW1lICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIGxvbmcgbmFtZTogIiArIGxvbmdOYW1lICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIHBhdHRlcm46ICIgKyBvcGVyYXRpb24uZ2V0UG9saWN5SWRQYXR0ZXJuKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgaXNFbmFibGVkIHplcm86ICIgKyBvcGVyYXRpb24uaXNFbmFibGVkKCB6ZXJvUG9saWNpZXMgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBpc0VuYWJsZWQgbWFueTogIiArIG9wZXJhdGlvbi5pc0VuYWJsZWQoIG1hbnlQb2xpY2llcyApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHN3aXRjaCggb3BlcmF0aW9uLmdldE9wZXJhdGlvbktpbmQoKSApCi0gICAgIHsKLSAgICAgICBjYXNlIHNlbGVjdGlvbjoKLSAgICAgICB7Ci0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgc2VsZWN0aW9uOiB0cnVlIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICBicmVhazsgIAotICAgICAgIH0KLSAgICAgICAKLSAgICAgICBjYXNlIGljb25TZWxlY3Rpb246Ci0gICAgICAgewotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIHNlbGVjdGlvbiBpY29uOiB0cnVlIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICBicmVhazsgIAotICAgICAgIH0KLSAgICAgICAKLSAgICAgICBjYXNlIGVudW1lcmF0aW9uOgotICAgICAgIHsgICAgICAKLSAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBlbnVtZXJhdGlvbiBpZDogIiArIG9wZXJhdGlvbi5nZXRFbnVtZXJhdGlvbklkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgYnJlYWs7ICAKLSAgICAgICB9Ci0gICAgICAgCi0gICAgICAgY2FzZSBjb21wbGV4OgotICAgICAgIHsKLSAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBjb21wbGV4OiB0cnVlIiApOyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgb3BlcmF0aW9uLmxhdW5jaE9wZXJhdGlvbiggemVyb1BvbGljaWVzICk7Ci0gICAgICAgICBicmVhazsgIAotICAgICAgIH0KLSAgICAgfQotICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1NlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1NlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmFmY2QwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9TZXJ2aWNlUG9saWN5dFRlc3RBY3RpdmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5dFRlc3RBY3RpdmF0b3IgZXh0ZW5kcyBQbHVnaW4gaW1wbGVtZW50cyBJU3RhcnR1cCB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kudGVzdCI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBTZXJ2aWNlUG9saWN5dFRlc3RBY3RpdmF0b3IgcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBTZXJ2aWNlUG9saWN5dFRlc3RBY3RpdmF0b3IoKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvciBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQkKLSAgcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4YyApCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsIFBMVUdJTl9JRCwgMCwgbWVzc2FnZSwgZXhjICk7Ci0gICAgCi0gICAgZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhzdGF0dXMpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBlYXJseVN0YXJ0dXAoKQotICB7Ci0gICAgLy8gRE8gbm90aGluZy4gIEFsbCB3ZSB3YW50IHRvIGRvIGlzIGdldCB0aGUgcGx1Z2luIGxvYWRlZCBhdCBVSSBzdGFydCB0aW1lLgotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvVGVzdEVuYWJsZWRDbGFzcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1Rlc3RFbmFibGVkQ2xhc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiOGQzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvVGVzdEVuYWJsZWRDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JRW5hYmxlT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdEVuYWJsZWRDbGFzcyBpbXBsZW1lbnRzIElFbmFibGVPcGVyYXRpb24KLXsKLQotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcykKLSAgewotICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBJcyBlbmFibGVkIG9wZXJhdGlvbiBjYWxsZWQuIiApOyAvLyROT04tTkxTLTEkCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9UZXN0TGF1bmNoQ2xhc3MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9UZXN0TGF1bmNoQ2xhc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc5NDViMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvVGVzdExhdW5jaENsYXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklMYXVuY2hPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TGF1bmNoQ2xhc3MgaW1wbGVtZW50cyBJTGF1bmNoT3BlcmF0aW9uCi17Ci0KLSAgcHVibGljIHZvaWQgbGF1bmNoKExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMpCi0gIHsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgTGF1bmNoIGNsYXNzIGNhbGxlZC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgfSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2FjdGlvbjEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjMzRhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTIwICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbjsKLQotcHVibGljIGNsYXNzIGFjdGlvbjEgaW1wbGVtZW50cyBJUXVpY2tGaXhBY3Rpb24KLXsKLQotICBwdWJsaWMgdm9pZCBhY3Rpb24oSVNlcnZpY2VQb2xpY3kgcG9saWN5KQotICB7Ci0gICAgcG9saWN5LnNldFN0YXR1cyggU3RhdHVzLk9LX1NUQVRVUyApOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2FjdGlvbjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkzZTg1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTIwICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbjsKLQotcHVibGljIGNsYXNzIGFjdGlvbjIgaW1wbGVtZW50cyBJUXVpY2tGaXhBY3Rpb24KLXsKLQotICBwdWJsaWMgdm9pZCBhY3Rpb24oSVNlcnZpY2VQb2xpY3kgcG9saWN5KQotICB7Ci0gICAgcG9saWN5LnNldFN0YXR1cyggU3RhdHVzLk9LX1NUQVRVUyApOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2FjdGlvbjMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRkOTc3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTIwICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbjsKLQotcHVibGljIGNsYXNzIGFjdGlvbjMgaW1wbGVtZW50cyBJUXVpY2tGaXhBY3Rpb24KLXsKLQotICBwdWJsaWMgdm9pZCBhY3Rpb24oSVNlcnZpY2VQb2xpY3kgcG9saWN5KQotICB7Ci0gICAgcG9saWN5LnNldFN0YXR1cyggU3RhdHVzLk9LX1NUQVRVUyApOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvaW50ZXJuYWwvcHJvcGVydGllcy9GT09GaWxlUHJvcGVydHlUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9pbnRlcm5hbC9wcm9wZXJ0aWVzL0ZPT0ZpbGVQcm9wZXJ0eVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTgzZWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9pbnRlcm5hbC9wcm9wZXJ0aWVzL0ZPT0ZpbGVQcm9wZXJ0eVRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5pbnRlcm5hbC5wcm9wZXJ0aWVzOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLlByb3BlcnR5VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgRk9PRmlsZVByb3BlcnR5VGVzdGVyIGV4dGVuZHMgUHJvcGVydHlUZXN0ZXIKLXsKLSAgcHVibGljIGJvb2xlYW4gdGVzdChPYmplY3QgcmVjZWl2ZXIsIFN0cmluZyBwcm9wZXJ0eSwgT2JqZWN0W10gYXJncywgT2JqZWN0IGV4cGVjdGVkVmFsdWUpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIAotICAgIGlmKCByZWNlaXZlciBpbnN0YW5jZW9mIElDb250YWluZXIpCi0gICAgewotICAgICAgcmVzdWx0ID0gaGFzRk9PZmlsZSggKElDb250YWluZXIpIHJlY2VpdmVyICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNGT09maWxlKCBJQ29udGFpbmVyIGNvbnRhaW5lciApCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCAgID0gZmFsc2U7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgSVJlc291cmNlW10gY2hpbGRyZW4gPSBjb250YWluZXIubWVtYmVycygpOwotICAgICAgCi0gICAgICBmb3IoIElSZXNvdXJjZSBjaGlsZCA6IGNoaWxkcmVuICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGNoaWxkIGluc3RhbmNlb2YgSUNvbnRhaW5lciApCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBoYXNGT09maWxlKCAoSUNvbnRhaW5lcikgY2hpbGQgKTsKLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBjaGlsZCBpbnN0YW5jZW9mIElGaWxlICkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGNoaWxkLmdldEZpbGVFeHRlbnNpb24oKS5lcXVhbHNJZ25vcmVDYXNlKCAiZm9vIiApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIHNpbmdsZSBmb28gZmlsZSB3ZSB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KLSAgICAgICAgaWYoIHJlc3VsdCApIGJyZWFrOwotICAgICAgfSAgICAKLSAgICB9Ci0gICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgZXhjZXB0aW9uIGFuZCByZXR1cm4gZmFsc2UuICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4OThjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0idGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OTY4YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotdGVzdHMuamFyCi1qYXZhQ29tcGlsZXIudGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmMmJjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3MudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZDEwNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjI5OjE0IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTg3YThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotI01vbiBBcHIgMjQgMTA6Mjc6NTQgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTEKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMWRkN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDEucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS53c3Qud3MsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZSwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbCwKLSBvcmcuZWNsaXBzZS5qZmFjZSwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXAsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLmRhdGEsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbiwKLSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3QsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzCi1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0cy5qYXIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzFiOTI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gZGF0YS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICByZWFkbWUudHh0LFwKLSAgICAgICAgICAgICAgIHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotamFycy5jb21waWxlLm9yZGVyID0gdGVzdHMuamFyCi1zb3VyY2UudGVzdHMuamFyID0gdGVzdHMvCi1vdXRwdXQudGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvbG9jYXRvci90ZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS9sb2NhdG9yL3Rlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJkMzFjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS9sb2NhdG9yL3Rlc3Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJBcmVhU2VydmljZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6ZmxvYXQiLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6ZGltZW5zaW9ucyIvPgotICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJkaW1lbnNpb25zIj4KLSAgICAgIAk8eHNkOnNlcXVlbmNlPgotICAgICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0id2lkdGgiIHR5cGU9InhzZDpmbG9hdCI+PC94c2Q6ZWxlbWVudD4KLSAgICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImhlaWdodCIgdHlwZT0ieHNkOmZsb2F0Ij48L3hzZDplbGVtZW50PgotICAgICAgCTwveHNkOnNlcXVlbmNlPgotICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJDYWxjdWxhdGVSZWN0QXJlYVJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczphcmVhIiBuYW1lPSJhcmVhIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IkNhbGN1bGF0ZVJlY3RBcmVhUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6cGFyYW1ldGVycyIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQXJlYVNlcnZpY2UiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJDYWxjdWxhdGVSZWN0QXJlYSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6Q2FsY3VsYXRlUmVjdEFyZWFSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOkNhbGN1bGF0ZVJlY3RBcmVhUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQXJlYVNlcnZpY2VTT0FQIiB0eXBlPSJ0bnM6QXJlYVNlcnZpY2UiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJDYWxjdWxhdGVSZWN0QXJlYSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFyZWFTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpBcmVhU2VydmljZVNPQVAiIG5hbWU9IkFyZWFTZXJ2aWNlU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmciLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMi8zL3Rlc3Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yLzMvdGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGQ2MmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yLzMvdGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIAotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnRlc3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdC8iCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3QvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dHhzZD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkIgotCXhtbG5zOnR4c2QyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QyIj4KLQotCTx3c2RsOnR5cGVzPgotCQk8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gCQkgICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZDIiCi0JCQkJc2NoZW1hTG9jYXRpb249Ii4uLy4uLzJhL3Rlc3QueHNkIiAvPgotCQkJPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vLi4vLi4vdGVzdC54c2QiIC8+Ci0JCTwvc2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9ImlucHV0IiBlbGVtZW50PSJ0eHNkOlRlc3RTdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Im91dHB1dCIgZWxlbWVudD0idHhzZDI6VGVzdFN0cmluZzIiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlRlc3RQb3J0VHlwZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idGVzdDpOZXdPcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idGVzdDpOZXdPcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJOZXdCaW5kaW5nIiB0eXBlPSJ0ZXN0OlRlc3RQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0L05ld09wZXJhdGlvbiIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS9zdGFydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3N0YXJ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNjI3YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3N0YXJ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc3RhcnQvIgkJCi0JeG1sbnM6dGVzdD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0LyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgkgCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCi0JPHdzZGw6aW1wb3J0IGxvY2F0aW9uPSIuLi8yLzMvdGVzdC53c2RsIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdC8iLz4KLQkKLQk8d3NkbDp0eXBlcz4KLQkJPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZCIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vLi4vdGVzdC54c2QiIC8+Ci0JCTwvc2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQkKLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlN0YXJ0Ij4KLQkJPHdzZGw6cG9ydCBuYW1lPSJOZXdQb3J0IiBiaW5kaW5nPSJ0ZXN0Ok5ld0JpbmRpbmciPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iPjwvc29hcDphZGRyZXNzPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLQkKLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS90ZXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS90ZXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2ZmZlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMmEvdGVzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIAotCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZDIiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgIDxlbGVtZW50IG5hbWU9IlRlc3RTdHJpbmcyIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci90ZXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvdGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZTY0NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci90ZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgCi0JeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkIiAKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPGVsZW1lbnQgbmFtZT0iVGVzdFN0cmluZyIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MjBmYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MzNlYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNDI0ICAgMTM4MDYwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdTVCBXZWIgU2VydmljZXMgVGVzdAotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDUyOWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cC5jb250cmlidXRpb24xIj4KLSAgICAgICAgIDxtZW51Ci0gICAgICAgICAgICAgICBsYWJlbD0iUG9wdXAgdGVzdCBtZW51IgotICAgICAgICAgICAgICAgcGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLm1lbnUxIj4KLSAgICAgICAgICAgIDxzZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgIG5hbWU9Imdyb3VwMSI+Ci0gICAgICAgICAgICA8L3NlcGFyYXRvcj4KLSAgICAgICAgIDwvbWVudT4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSJQb3B1cCB0ZXN0IGFjdGlvbiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cC5OZXdBY3Rpb24iCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXAubWVudTEvZ3JvdXAxIgotICAgICAgICAgICAgICAgZW5hYmxlc0Zvcj0iMSIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cC5uZXdBY3Rpb24iPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcmVhZG1lLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWRlMDM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1DdXJyZW50bHkgbm8gYXJndW1lbnRzIHRvIGJlIHBhc3NlZCBpbi4gIFNlZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMgZm9yIGFkZGluZwotYXJndW1lbnRzIHdoZW4gcnVubmluZyB0ZXN0IHN1aXRlIChpLmUuIHNlcnZlciBpbnN0YWxsIGxvY2F0aW9uLi4uKQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjkxYWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDwhLS0gY29tbWVudGVkIGZvciBub3cgdW50aWwgc3VjaCBhIHRpbWUgYXMgd2UgbmVlZCB0byBjYWxsIGEgc2VydmVyIGZvciB3c3QgdGVzdHMgLS0+Ci0gIDwhLS08cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSItRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwPSR7dGVzdERpcn0vJHt0b21jYXQ1MERpcn0iLz4gLS0+Ci0JCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgPGRlbGV0ZT4KLSAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9IndzdC13cy1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X3dzX2ZvbGRlciIvPgotICAgIDxkZWxldGUgZGlyPSIke3dzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LXdzLWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0LkFsbFdTSlVuaXRUZXN0cyIgLz4KLSAgIAkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci08IS0tICAgCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgCS0tPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0L3BvcHVwL05ld0FjdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0L3BvcHVwL05ld0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmExYmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdC9wb3B1cC9OZXdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU9iamVjdEFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgTmV3QWN0aW9uIGltcGxlbWVudHMgSU9iamVjdEFjdGlvbkRlbGVnYXRlIHsKLQotICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247Ci0gIAotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBY3Rpb24xLgotCSAqLwotCXB1YmxpYyBOZXdBY3Rpb24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJT2JqZWN0QWN0aW9uRGVsZWdhdGUjc2V0QWN0aXZlUGFydChJQWN0aW9uLCBJV29ya2JlbmNoUGFydCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBY3RpdmVQYXJ0KElBY3Rpb24gYWN0aW9uLCBJV29ya2JlbmNoUGFydCB0YXJnZXRQYXJ0KSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJQWN0aW9uRGVsZWdhdGUjcnVuKElBY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSAKLQl7Ci0JICBEeW5hbWljV2l6YXJkIHdpemFyZCA9IG5ldyBEeW5hbWljV2l6YXJkKCk7Ci0JICBXaXphcmREaWFsb2cgIGRpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coIG51bGwsIHdpemFyZCApOwotCSAgCi0JICB0cnkKLQkgIHsKLQkgICAgQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZSggIm9yZy5lY2xpcHNlLndzdC53cy50ZXN0cyIgKTsKLQkgICAgd2l6YXJkLnNldEluaXRpYWxEYXRhKCAib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiLCBidW5kbGUsICJpY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nIiwgIlBldGVyIHRpdGxlIiApOwotCSAgICB3aXphcmQuaW5pdCggUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKSwgc2VsZWN0aW9uICk7Ci0JICAgIAotCSAgICBkaWFsb2cub3BlbigpOwotCSAgfQotCSAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLQkgIHsKLQkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfQotCX0KLQotCS8qKgotCSAqIEBzZWUgSUFjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiwgSVNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgCi0JewotCSAgaWYoIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkKLSAgICB7Ci0gICAgICB0aGlzLnNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbiApIHNlbGVjdGlvbjsKLSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL2RhdGEvTG9jYXRvcldvcmtzcGFjZVNldHVwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL2RhdGEvTG9jYXRvcldvcmtzcGFjZVNldHVwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NTVmYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9kYXRhL0xvY2F0b3JXb3Jrc3BhY2VTZXR1cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLmRhdGE7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50cm8uSUludHJvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRyby5JSW50cm9QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW47Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKiAgU2V0cyB1cCBsb2NhdG9yIHRlc3QgZGF0YSAtIHVzZXMgc2FtZSBkYXRhIGZpbGUgYnV0IHJlbmFtZXMgaXQgZm9yIGVhY2ggdXNlCi0gKiAgV29ya3NwYWNlIHN0cnVjdHVyZSBjcmVhdGVkIGxvb2tzIGxpa2UgdGhpczoKLSAqICAKLSAqICByb290Ci0gKiAgLS1wcm9qZWN0MQotICogICAgfC0tLS1mb2xkZXIxCi0gKiAgICAgICAgIHwtLS0tLWZvbGRlcjIKLSAqICAgICAgICAgICAgICAgfC0tLS0tLW9uZS53c2RsCi0gKiAgICAgICAgIHwtLS0tLXR3by53c2RsCi0gKiAgICB8LS0tLWZvbGRlcjMKLSAqICAgICAgICAgfC0tLS0tdGhyZWUud3NkbAotICogICAgICAgICB8LS0tLS1mb3VyLndzZGwgCi0gKiAgLS1wcm9qZWN0MgotICogICAgfC0tLS1maXZlLndzZGwKLSAqICAgIHwtLS0tZm9sZGVyNAotICogICAgfC0tLS1mb2xkZXI1Ci0gKiAgICAgICAgIHwtLS0tLXNpeC53c2RsCi0gKiAgLS1wcm9qZWN0MwotICogICAgfC0tLS1vbmUueG1sCi0gKi8KLQotcHVibGljIGNsYXNzIExvY2F0b3JXb3Jrc3BhY2VTZXR1cCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPSkVDVDFfTkFNRSA9ICJQcm9qZWN0MSI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVIxX05BTUUgPSAiRm9sZGVyMSI7ICAvL2NvbnRhaW5zIFdTREwgZmlsZSBhbmQgb25lIGZvbGRlciAKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUjJfTkFNRSA9ICJGb2xkZXIyIjsgIC8vbmVzdGVkIGluIGZvbGRlciAxIGFuZCBjb250YWlucyBXU0RMIGZpbGUKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUjNfTkFNRSA9ICJGb2xkZXIzIjsgIC8vY29udGFpbnMgdHdvIFdTREwgZmlsZXMKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0pFQ1QyX05BTUUgPSAiUHJvamVjdDIiOyAvL2NvbnRhaW5zIFdTREwgZmlsZSBhbmQgdHdvIGZvbGRlcnMKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUjRfTkFNRSA9ICJGb2xkZXI0IjsgIC8vY29udGFpbnMgbm8gV1NETAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSNV9OQU1FID0gIkZvbGRlcjUiOyAgLy9jb250YWlucyBvbmUgV1NETCBmaWxlCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9KRUNUM19OQU1FID0gIlByb2plY3QzIjsgIC8vY29udGFpbnMgbm8gV1NETCBmaWxlcyBidXQgb25lIFhNTCBmaWxlCi0JICAKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX09ORSA9ICJvbmUud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9UV08gPSAidHdvLndzZGwiOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETEZJTEVfVEhSRUUgPSAidGhyZWUud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9GT1VSID0gImZvdXIud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9GSVZFID0gImZpdmUud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9TSVggPSAic2l4LndzZGwiOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgWE1MRklMRV9PTkUgPSAib25lLlhNTCI7Ci0JICAKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEFDVFVBTF9URVNURklMRVBBVEggPSAiZGF0YS9sb2NhdG9yL3Rlc3Qud3NkbCI7Ci0JICAJICAKLQkgIHByaXZhdGUgSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JICAKLQkgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0JICB7Ci0JICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKExvY2F0b3JXb3Jrc3BhY2VTZXR1cC5jbGFzcywgIkxvY2F0b3JXb3Jrc3BhY2VTZXR1cCIpOwotCSAgfQotCi0JICBwcm90ZWN0ZWQgdm9pZCBjbG9zZUludHJvKCkKLQkgIHsKLQkgICAgSUludHJvTWFuYWdlciBpbnRyb01hbmFnZXIgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEludHJvTWFuYWdlcigpOwotCSAgICBJSW50cm9QYXJ0IGludHJvUGFydCA9IGludHJvTWFuYWdlci5nZXRJbnRybygpOwotCSAgICBpZiAoaW50cm9QYXJ0ICE9IG51bGwpCi0JICAgICAgaW50cm9NYW5hZ2VyLmNsb3NlSW50cm8oaW50cm9QYXJ0KTsKLQkgIH0KLQotCSAgcHJvdGVjdGVkIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICB7Ci0JICAgIElQcm9qZWN0IHNpbXBsZVByb2plY3QgPSByb290LmdldFByb2plY3QobmFtZSk7Ci0JICAgIHNpbXBsZVByb2plY3QuY3JlYXRlKG51bGwpOwotCSAgICBzaW1wbGVQcm9qZWN0Lm9wZW4obnVsbCk7Ci0JICAgIHJldHVybiBzaW1wbGVQcm9qZWN0OwotCSAgfQotCi0JICBwcm90ZWN0ZWQgSUZvbGRlciBjcmVhdGVGb2xkZXIoSUNvbnRhaW5lciBwYXJlbnQsIFN0cmluZyBmb2xkZXJOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgewotCQlJRm9sZGVyIGZvbGRlcjEgPSBwYXJlbnQuZ2V0Rm9sZGVyKG5ldyBQYXRoKGZvbGRlck5hbWUpKTsKLSAgICAgICAgZm9sZGVyMS5jcmVhdGUoZmFsc2UsIHRydWUsIG51bGwpOwotCSAgICByZXR1cm4gZm9sZGVyMTsKLQkgIH0KLQotCSAgCi0JICBwcm90ZWN0ZWQgdm9pZCBjb3B5RmlsZShJQ29udGFpbmVyIHByb2plY3QsIFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZXN0KSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLQkgIHsKLQkJICAKLQkgICAgSUZpbGUgZmlsZSA9IHByb2plY3QuZ2V0RmlsZShuZXcgUGF0aChkZXN0KSk7Ci0JICAgIGZpbGUuY3JlYXRlKFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShzb3VyY2UpLm9wZW5TdHJlYW0oKSwgdHJ1ZSwgbnVsbCk7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKGZpbGUuZXhpc3RzKCkpOwotCSAgfQotCi0JICBwcm90ZWN0ZWQgdm9pZCBqb2luQXV0b0J1aWxkKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgIHsKLQkgICAgYm9vbGVhbiBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0JICAgIHdoaWxlIChpbnRlcnJ1cHRlZCkKLQkgICAgewotCSAgICAgIHRyeQotCSAgICAgIHsKLQkgICAgICAgIFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbnVsbCk7Ci0JICAgICAgICBpbnRlcnJ1cHRlZCA9IGZhbHNlOwotCSAgICAgIH0KLQkgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLQkgICAgICB7Ci0JICAgICAgICBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0KLQkgIHB1YmxpYyB2b2lkIHRlc3RTZXR1cCgpIHRocm93cyBFeGNlcHRpb24KLQkgIHsKLQkJICB0cnl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tIGxvY2F0b3IgZGF0YSBzZXR1cCBzdGFydGluZyIpOwotCSAgICBjbG9zZUludHJvKCk7Ci0KLQkgICAgSVByb2plY3QgcHJvamVjdDEgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KFBST0pFQ1QxX05BTUUpOwotCSAgICBJRm9sZGVyIGZvbGRlcjEgPSBjcmVhdGVGb2xkZXIocHJvamVjdDEsIEZPTERFUjFfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKGZvbGRlcjEsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX1RXTyk7Ci0JICAgIElGb2xkZXIgZm9sZGVyMiA9IGNyZWF0ZUZvbGRlcihmb2xkZXIxLCBGT0xERVIyX05BTUUpOwotCSAgICBjb3B5RmlsZShmb2xkZXIyLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9PTkUpOwotCSAgICBJRm9sZGVyIGZvbGRlcjMgPSBjcmVhdGVGb2xkZXIocHJvamVjdDEsIEZPTERFUjNfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKGZvbGRlcjMsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX1RIUkVFKTsKLQkgICAgY29weUZpbGUoZm9sZGVyMywgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfRk9VUik7Ci0JICAgIAotCSAgICBJUHJvamVjdCBwcm9qZWN0MiA9IGNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVDJfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKHByb2plY3QyLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9GSVZFKTsKLQkgICAgY3JlYXRlRm9sZGVyKHByb2plY3QyLCBGT0xERVI0X05BTUUpOyAgLy9mb2xkZXIgd2l0aCBubyBjb250ZW50Ci0JICAgIElGb2xkZXIgZm9sZGVyNSA9IGNyZWF0ZUZvbGRlcihwcm9qZWN0MiwgRk9MREVSNV9OQU1FKTsKLQkgICAgY29weUZpbGUoZm9sZGVyNSwgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfU0lYKTsKLQkgICAgSVByb2plY3QgcHJvamVjdDMgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KFBST0pFQ1QzX05BTUUpOwotCSAgICBjb3B5RmlsZShwcm9qZWN0MywgQUNUVUFMX1RFU1RGSUxFUEFUSCwgWE1MRklMRV9PTkUpOwotCQkgIH0KLQkJICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCSAgewotCQkJICBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkgIH0KLQkgCi0JCS8vY29kZSB0byBjaGVjayB3b3Jrc3BhY2Ugc2V0IHVwIC0gZGVidWcKLQkJLypEYXRhUmVzb3VyY2VWaXNpdG9yIHZpc2l0b3IgPSBuZXcgRGF0YVJlc291cmNlVmlzaXRvcigpOwotCSAgICByb290LmFjY2VwdCh2aXNpdG9yKTsKLQkgICAgdmlzaXRvci52aXNpdChyb290KTsqLwotCSAgICAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0gbG9jYXRvciBkYXRhIHNldHVwIGNvbXBsZXRlIik7Ci0JICB9Ci0JCi0JcHJvdGVjdGVkIGNsYXNzIERhdGFSZXNvdXJjZVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VWaXNpdG9yCi0JewotICAgIAlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2UgcmVzb3VyY2UpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLSAgICAJCWlmICgocmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgfHwgKHJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlcikpCi0gICAgCQl7Ci0gICAgCQkgIFN5c3RlbS5vdXQucHJpbnRsbigidmlzaXRpbmcgIiArIHJlc291cmNlLmdldE5hbWUoKSk7ICAgIAkJICAKLSAgICAJCX0KLSAgICAJCWVsc2UgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgCQl7Ci0gICAgCQkJU3lzdGVtLm91dC5wcmludGxuKCJmb3VuZCBmaWxlICIgKyByZXNvdXJjZS5nZXROYW1lKCkpOyAgICAJCQkKLSAgICAJCX0KLSAgICAJCXJldHVybiB0cnVlOwotICAgIAl9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvcGx1Z2luL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNTZiNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFRlc3RzUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGNjZGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5kYXRhLkxvY2F0b3JXb3Jrc3BhY2VTZXR1cDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFJlc3VsdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdG8gcnVuIGFsbCB0aGUgdW5pdHRlc3QgdGVzdHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxXU0pVbml0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAvKioKLSAgICogTWV0aG9kIHBhcnNlQXJncy4KLSAgICogCi0gICAqIEBwYXJhbSBhcmdzCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VBcmdzKE9iamVjdCBhcmdzKQotICB7Ci0gICAgLy8gdHlwaWNpYWxseSBhcmdzIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsCi0gICAgLy8gbm90IHN1cmUgd2hlbiBpdCB3b3VsZG4ndCBiZS4KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBuZXcgQWxsV1NKVW5pdFRlc3RzKCkucnVuTWFpbihhcmdzKTsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgcnVuTWFpbihPYmplY3QgYXJncykKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIFRlc3RSdW5uZXIgdGVzdFJ1bm5lciA9IG51bGw7Ci0KLSAgICAgIHBhcnNlQXJncyhhcmdzKTsKLQotICAgICAgdGVzdFJ1bm5lciA9IG5ldyBUZXN0UnVubmVyKFN5c3RlbS5vdXQpOwotIAotCi0gICAgICBUZXN0IHN1aXRlID0gc3VpdGUoKTsKLSAgICAgIFRlc3RSZXN1bHQgdGVzdFJlc3VsdCA9IHRlc3RSdW5uZXIuZG9SdW4oc3VpdGUsIGZhbHNlKTsKLSAgICAgIHByaW50SGVhZGVyKHRlc3RSZXN1bHQpOyAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gLy9hZGQgdW5pdCB0ZXN0cyB0byBzdWl0ZSBoZXJlLi4uCi0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIExvY2F0b3JXb3Jrc3BhY2VTZXR1cC5zdWl0ZSgpKTsKLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggV2ViU2VydmljZUZpbmRlclRlc3RzLnN1aXRlKCkpOwotICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBXU0RMQ29waWVyVGVzdHMuc3VpdGUoKSk7Ci0gICAgcmV0dXJuIHRlc3RTdWl0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludHMgdGhlIGhlYWRlciBvZiB0aGUgcmVwb3J0Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcmludEhlYWRlcihUZXN0UmVzdWx0IHJlc3VsdCkKLSAgewotICAgIGlmIChyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgU3lzdGVtLm91dC5wcmludCgiT0siKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICgiICsgcmVzdWx0LnJ1bkNvdW50KCkgKyAiIHRlc3RzKSIpOwotCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTFVSRVMhISEiKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgIlRlc3RzIHJ1bjogIgotICAgICAgICAgICsgcmVzdWx0LnJ1bkNvdW50KCkKLSAgICAgICAgICArICIsICBGYWlsdXJlczogIgotICAgICAgICAgICsgcmVzdWx0LmZhaWx1cmVDb3VudCgpCi0gICAgICAgICAgKyAiLCAgRXJyb3JzOiAiCi0gICAgICAgICAgKyByZXN1bHQuZXJyb3JDb3VudCgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNmVmZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZTsKLQotLyoqCi0gKiBNaW5pbWFsIGFwcCB0byBydW4gYXMgRWNsaXBzZSAiYXBwbGljYXRpb24iCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXVuY2hUZXN0IGltcGxlbWVudHMgSVBsYXRmb3JtUnVubmFibGUKLXsKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlI3J1bihPYmplY3QpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IHJ1bihPYmplY3QgYXJncykgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0KLSAgICBPYmplY3QgcmVzdWx0ID0gbmV3IEFsbFdTSlVuaXRUZXN0cygpLnJ1bk1haW4oYXJncyk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFRocm93YWJsZSkKLSAgICAgIHsKLSAgICAgICAgKChUaHJvd2FibGUpIHJlc3VsdCkucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdHMgZGlkbid0IHJldHVybiAnb2snIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gSVBsYXRmb3JtUnVubmFibGUuRVhJVF9PSzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9SZWdpc3RyeVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1JlZ2lzdHJ5VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhMzZlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1JlZ2lzdHJ5VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuUmVnaXN0cnlTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5VRERJUmVnaXN0cnlTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlUZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlICgpCi0JewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShSZWdpc3RyeVRlc3RzLmNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFRheG9ub215IG1vZGVsIGFuZCBwYXNzZXMgaXQgdG8KLQkgKiA8Y29kZT5SZWdpc3RyeVNlcnZpY2Uuc2F2ZVRheG9ub215KCk8L2NvZGU+Ci0JICogd2hlcmUgdGhlIG1vZGVsIGlzIHBlcnNpc3RlZCB0byBhIHBsYXRmb3JtCi0JICogc3BlY2lmaWVkIHRlbXBvcmFyeSBmaWxlc3lzdGVtIGxvY2F0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RfUmVnaXN0cnlTZXJ2aWNlX3NhdmVUYXhvbm9teSAoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVElORyB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlVGF4b25vbXkiKTsKLQkJdHJ5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgUmVnaXN0cnlTZXJ2aWNlIGFuZCBUYXhvbm9teSIpOwotCQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwkJCQotCQkJVGF4b25vbXkgdGF4b25vbXkgPSByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXkoKTsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJCdWlsZGluZyBhIHNpbXBsZSBUYXhvbm9teSBtb2RlbCIpOwotCQkJdGF4b25vbXkuc2V0SWQoIm15LnRheG9ub215Iik7Ci0JCQl0YXhvbm9teS5zZXROYW1lKCJNeSBUYXhvbm9teSIpOwotCQkJRUxpc3QgbGlzdCA9IHRheG9ub215LmdldENhdGVnb3J5KCk7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTEgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTEuc2V0TmFtZSgiTXkgZmlyc3QgY2F0ZWdvcnkiKTsKLQkJCWNhdGVnb3J5MS5zZXRDb2RlKCIxIik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTIgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTIuc2V0TmFtZSgiTXkgc2Vjb25kIGNhdGVnb3J5Iik7Ci0JCQljYXRlZ29yeTIuc2V0Q29kZSgiMiIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkzID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnkzLnNldE5hbWUoIk15IHRoaXJkIGNhdGVnb3J5Iik7Ci0JCQljYXRlZ29yeTMuc2V0Q29kZSgiMi4xIik7Ci0JCQljYXRlZ29yeTIuZ2V0Q2F0ZWdvcnkoKS5hZGQoY2F0ZWdvcnkzKTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5MSk7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTIpOwotCi0JCQlGaWxlIGZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ0YXhvbm9teS4iLCIueG1sIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNhdmluZyB0aGUgVGF4b25vbXkgbW9kZWwgdG8gIitmaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7Ci0JCQlyZWdpc3RyeVNlcnZpY2Uuc2F2ZVRheG9ub215KGZpbGUudG9VUkwoKSx0YXhvbm9teSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCi0JCXsKLQkJCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkJCWZhaWwoIlVuZXhwZWN0ZWQgVGhyb3dhYmxlIFsiK2V4Yy5nZXRNZXNzYWdlKCkrIl0iKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIRUQgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVRheG9ub215XG4iKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgVURESSBSZWdpc3RyeSBtb2RlbCBhbmQgcGFzc2VzIGl0IHRvCi0JICogPGNvZGU+UmVnaXN0cnlTZXJ2aWNlLnNhdmVSZWdpc3RyeSgpPC9jb2RlPgotCSAqIHdoZXJlIHRoZSBtb2RlbCBpcyBwZXJzaXN0ZWQgdG8gYSBwbGF0Zm9ybQotCSAqIHNwZWNpZmllZCB0ZW1wb3JhcnkgZmlsZXN5c3RlbSBsb2NhdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlUmVnaXN0cnkgKCkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlRJTkcgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVJlZ2lzdHJ5Iik7Ci0JCXRyeQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFJlZ2lzdHJ5U2VydmljZSwgVURESVJlZ2lzdHJ5U2VydmljZSBhbmQgUmVnaXN0cnkiKTsKLQkJCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJCVVERElSZWdpc3RyeVNlcnZpY2UgdWRkaVJlZ2lzdHJ5U2VydmljZSA9IFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsJCQkKLQkJCVVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSB1ZGRpUmVnaXN0cnlTZXJ2aWNlLm5ld1VERElSZWdpc3RyeSgpOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1aWxkaW5nIGEgc2ltcGxlIFJlZ2lzdHJ5IG1vZGVsIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0SWQoIm15LnJlZ2lzdHJ5Iik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0VmVyc2lvbigiMi4wIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0RGlzY292ZXJ5VVJMKCJodHRwOi8vc29tZS5kaXNjb3ZlcnkudXJsIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0UHVibGljYXRpb25VUkwoImh0dHA6Ly9zb21lLnB1YmxpY2F0aW9uLnVybCIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldERlZmF1bHRMb2dpbigiaG9ja2V5ZmFuYXRpYyIpOwotCQkJTmFtZSBuYW1lID0gUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOYW1lKCk7Ci0JCQluYW1lLnNldFZhbHVlKCJNeSBSZWdpc3RyeSIpOwotCQkJdWRkaVJlZ2lzdHJ5LmdldE5hbWUoKS5hZGQobmFtZSk7Ci0JCQlUYXhvbm9teSB0YXhvbm9teVJlZiA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teSgpOwotCQkJdGF4b25vbXlSZWYuc2V0UmVmKCJteS50YXhvbm9teSIpOwotCQkJVGF4b25vbWllcyB0ID0gdWRkaVJlZ2lzdHJ5LmdldFRheG9ub21pZXMoKTsKLQkJCWlmICh0ID09IG51bGwpCi0JCQl7Ci0JCQkJdCA9IFVERElSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRheG9ub21pZXMoKTsKLQkJCQl1ZGRpUmVnaXN0cnkuc2V0VGF4b25vbWllcyh0KTsKLQkJCX0KLQkJCUVMaXN0IGUgPSB0LmdldFRheG9ub215KCk7Ci0JCQllLmFkZCh0YXhvbm9teVJlZik7Ci0KLQkJCUZpbGUgZmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoInJlZ2lzdHJ5LiIsIi54bWwiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2F2aW5nIHRoZSBSZWdpc3RyeSBtb2RlbCB0byAiK2ZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKLQkJCXJlZ2lzdHJ5U2VydmljZS5zYXZlUmVnaXN0cnkoZmlsZS50b1VSTCgpLHVkZGlSZWdpc3RyeSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCi0JCXsKLQkJCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkJCWZhaWwoIlVuZXhwZWN0ZWQgVGhyb3dhYmxlIFsiK2V4Yy5nZXRNZXNzYWdlKCkrIl0iKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIRUQgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVJlZ2lzdHJ5XG4iKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgVURESSBSZWdpc3RyeSBtb2RlbCBhbmQgYSBuZXcgVGF4b25vbXkKLQkgKiBtb2RlbCwgYXNzb2NpYXRlcyB0aGUgbGF0dGVyIHdpdGggdGhlIGZvcm1lciwgYW5kCi0JICogZHJpdmVzIDxjb2RlPklSZWdpc3RyeU1hbmFnZXIuc2F2ZVJlZ2lzdHJ5KCk8L2NvZGU+Ci0JICogdG8gc2F2ZSB0aGUgbW9kZWxzIGFuZCB0aGUgaW5kZXggZG9jdW1lbnQgdG8gdGhlCi0JICogcHJlZmVycmVkIGxvY2F0aW9uIG9mIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5IG1hbmFnZXIuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdF9SZWdpc3RyeU1hbmFnZXJfc2F2ZVJlZ2lzdHJ5KCkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlRJTkcgdGVzdF9SZWdpc3RyeU1hbmFnZXJfc2F2ZVJlZ2lzdHJ5Iik7Ci0JCXRyeSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFJlZ2lzdHJ5U2VydmljZSBhbmQgR2V0dGluZyBSZWdpc3RyeU1hbmFnZXIiKTsJCi0JCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7CQotCQkJSVJlZ2lzdHJ5TWFuYWdlciByZWdNYW5hZ2VyID0gcmVnaXN0cnlTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGxvY2F0aW9uIG9mIHRoZSBkZWZhdWx0IGluZGV4IGlzICIgKyByZWdNYW5hZ2VyLmdldFVSTCgpKTsKLQotCQkJLy9idWlsZCB0aGUgaG9ja2V5IHRheG9ub215Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1aWxkaW5nIHRoZSBob2NrZXkgVGF4b25vbXkgbW9kZWwiKTsKLQkJCVRheG9ub215IGhvY2tleVRheG9ub215ID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215KCk7Ci0JCQlob2NrZXlUYXhvbm9teS5zZXRJZCgiaG9ja2V5LnRheG9ub215Iik7Ci0JCQlob2NrZXlUYXhvbm9teS5zZXROYW1lKCJob2NrZXkgVGF4b25vbXkiKTsKLQkJCUVMaXN0IGxpc3QgPSBob2NrZXlUYXhvbm9teS5nZXRDYXRlZ29yeSgpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkxID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnk0ID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnk0LnNldE5hbWUoIlBybyIpOwotCQkJY2F0ZWdvcnk0LnNldENvZGUoIjQiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5NSA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5NS5zZXROYW1lKCJBSEwiKTsKLQkJCWNhdGVnb3J5NS5zZXRDb2RlKCI0LjEiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5NiA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5Ni5zZXROYW1lKCJOSEwiKTsKLQkJCWNhdGVnb3J5Ni5zZXRDb2RlKCI0LjIiKTsKLQkJCWNhdGVnb3J5MS5zZXROYW1lKCJKdW5pb3IiKTsKLQkJCWNhdGVnb3J5MS5zZXRDb2RlKCIxIik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTIgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTIuc2V0TmFtZSgiTWlkZ2V0Iik7Ci0JCQljYXRlZ29yeTIuc2V0Q29kZSgiMiIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkzID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnkzLnNldE5hbWUoIkJhbnRhbSIpOwotCQkJY2F0ZWdvcnkzLnNldENvZGUoIjMiKTsKLQkJCWNhdGVnb3J5NC5nZXRDYXRlZ29yeSgpLmFkZChjYXRlZ29yeTUpOwotCQkJY2F0ZWdvcnk0LmdldENhdGVnb3J5KCkuYWRkKGNhdGVnb3J5Nik7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTEpOwotCQkJbGlzdC5hZGQoY2F0ZWdvcnkyKTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5Myk7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTQpOwotCQkJCi0JCQkvL3NhdmUgdGhlIGhvY2tleSB0YXhvbm9teQotCQkJVGF4b25vbXkgaG9ja2V5VGF4b25vbXlSZWYgPSByZWdNYW5hZ2VyLnNhdmVUYXhvbm9teShob2NrZXlUYXhvbm9teSk7Ci0KLQkJCS8vbWFrZSB0aGUgaG9ja2V5IHJlZ2lzdHJ5Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1aWxkaW5nIHRoZSBob2NrZXkgUmVnaXN0cnkgbW9kZWwiKTsKLQkJCVVERElSZWdpc3RyeVNlcnZpY2UgdWRkaVJlZ2lzdHJ5U2VydmljZSA9IFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsJCQkKLQkJCVVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSB1ZGRpUmVnaXN0cnlTZXJ2aWNlLm5ld1VERElSZWdpc3RyeSgpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldElkKCJob2NrZXkucmVnaXN0cnkiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRWZXJzaW9uKCIyLjAiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXREZWZhdWx0TG9naW4oImhvY2tleWZhbmF0aWMiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXREaXNjb3ZlcnlVUkwoImh0dHA6Ly9zb21lLmRpc2NvdmVyeS51cmwiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRQdWJsaWNhdGlvblVSTCgiaHR0cDovL3NvbWUucHVibGljYXRpb24udXJsIik7Ci0JCQlOYW1lIG5hbWUgPSBSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5hbWUoKTsKLQkJCW5hbWUuc2V0VmFsdWUoIkhvY2tleSBSZWdpc3RyeSIpOwotCQkJdWRkaVJlZ2lzdHJ5LmdldE5hbWUoKS5hZGQobmFtZSk7Ci0KLQkJCS8vIEFkZCB0aGUgcmVmZXJlbmNlIHRvIHRoZSB0YXhvbm9teSAoc2F2ZWQgYWJvdmUpIHRvIHRoZSByZWdpc3RyeS4gIAotCQkJdWRkaVJlZ2lzdHJ5U2VydmljZS5hZGRUYXhvbm9teSh1ZGRpUmVnaXN0cnksaG9ja2V5VGF4b25vbXlSZWYpOwotCi0JCQkvKgotCQkJVURESVRheG9ub215RmluZGVyIFVJVEZpbmRlciA9IG5ldyBVRERJVGF4b25vbXlGaW5kZXIoKTsKLQkJCXJlZ01hbmFnZXIuYWRkVGF4b25vbXlGaW5kZXIodWRkaVJlZ2lzdHJ5LmdldENsYXNzKCkuZ2V0TmFtZSgpLFVJVEZpbmRlcik7Ci0JCQkqLwotCQkJLy8gU2F2ZSB0aGUgdGhpbmcuCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNhdmluZyB0aGUgaG9ja2V5IFJlZ2lzdHJ5IG1vZGVsIik7Ci0JCQlyZWdNYW5hZ2VyLnNhdmVSZWdpc3RyeSh1ZGRpUmVnaXN0cnkpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQl7Ci0JCQlleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlmYWlsKCJVbmV4cGVjdGVkIFRocm93YWJsZSBbIitleGMuZ2V0TWVzc2FnZSgpKyJdIik7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZJTklTSEVEIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX3NhdmVSZWdpc3RyeVxuIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBMb2FkcyB0aGUgcmVnaXN0cnkgYW5kIHRheG9ub215IGluIHRoZSBpbmRleCBjcmVhdGVkIGluCi0JICogdGVzdF9SZWdpc3RyeU1hbmFnZXJfc2F2ZVJlZ2lzdHJ5LCB0aGVuIGFzc2VydHMgdGhhdCB0aGUKLQkgKiBjb250ZW50IG9mIHRoZSBtb2RlbCBpcyB3aGF0IHdlIGV4cGVjdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9sb2FkUmVnaXN0cnkoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVElORyB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9sb2FkUmVnaXN0cnkiKTsKLQkJdHJ5IHsKLQkJCS8vIFNldHVwCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFJlZ2lzdHJ5U2VydmljZSBhbmQgR2V0dGluZyBSZWdpc3RyeU1hbmFnZXIiKTsJCi0JCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7CQotCQkJSVJlZ2lzdHJ5TWFuYWdlciByZWdNYW5hZ2VyID0gcmVnaXN0cnlTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkJCQotCQkJLy8gR2V0IHRoZSBvbmUgcmVnaXN0cnkgVVJJIHdlIGV4cGVjdCwgYW5kIGxvYWQgdGhlIHJlZ2lzdHJ5LgotCQkJU3RyaW5nW10gcmVnaXN0cmllcyA9IHJlZ01hbmFnZXIuZ2V0UmVnaXN0cnlVUklzKCk7Ci0JCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHJlZ2lzdHJpZXMgIityZWdpc3RyaWVzLmxlbmd0aCxyZWdpc3RyaWVzLmxlbmd0aCwxKTsKLQkJCVN0cmluZyB1cmkgPSByZWdpc3RyaWVzWzBdOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkaW5nIHJlZ2lzdHJ5ICIgKyB1cmkpOwotCQkJUmVnaXN0cnkgcmVnaXN0cnkgPSByZWdNYW5hZ2VyLmxvYWRSZWdpc3RyeSh1cmkpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCByZWdpc3RyeSAiICsgcmVnaXN0cnkuZ2V0SWQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoIkRpZCBub3QgZmluZCBob2NrZXkgcmVnaXN0cnkiLCJob2NrZXkucmVnaXN0cnkiLHJlZ2lzdHJ5LmdldElkKCkpOwotCQkJCi0JCQkvLyBJdCdzIHN1cHBvc2VkIHRvIGJlIGEgVURESSByZWdpc3RyeS4gVmVyaWZ5IGl0IGFuZCBjaGVjayBpdHMgdmFsdWVzLgotCQkJYXNzZXJ0VHJ1ZSgiUmVnaXN0cnkgaXMgbm90IGEgVURESVJlZ2lzdHJ5IiwocmVnaXN0cnkgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnkpKTsKLQkJCVVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSAoVURESVJlZ2lzdHJ5KXJlZ2lzdHJ5OwotCQkJYXNzZXJ0RXF1YWxzKHVkZGlSZWdpc3RyeS5nZXRWZXJzaW9uKCksIjIuMCIpOwotCQkJYXNzZXJ0RXF1YWxzKHVkZGlSZWdpc3RyeS5nZXREZWZhdWx0TG9naW4oKSwiaG9ja2V5ZmFuYXRpYyIpOwotCQkJYXNzZXJ0RXF1YWxzKHVkZGlSZWdpc3RyeS5nZXREaXNjb3ZlcnlVUkwoKSwiaHR0cDovL3NvbWUuZGlzY292ZXJ5LnVybCIpOwotCQkJYXNzZXJ0RXF1YWxzKHVkZGlSZWdpc3RyeS5nZXRQdWJsaWNhdGlvblVSTCgpLCJodHRwOi8vc29tZS5wdWJsaWNhdGlvbi51cmwiKTsKLQkJCQotCQkJLy8gTG9hZCB0aGUgdGF4b25vbWllcyB1c2VkIHRoZSBVRERJIHJlZ2lzdHJ5LgotCQkJVURESVJlZ2lzdHJ5U2VydmljZSB1ZGRpUmVnaXN0cnlTZXJ2aWNlID0gVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQkJVGF4b25vbXlbXSB0YXhvbm9taWVzID0gcmVnTWFuYWdlci5sb2FkVGF4b25vbWllcyh1ZGRpUmVnaXN0cnlTZXJ2aWNlLmdldFRheG9ub215VVJJcyh1ZGRpUmVnaXN0cnkpKTsKLQkJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBudW1iZXIgb2YgdGF4b25vbWllcyAiK3RheG9ub21pZXMubGVuZ3RoLHRheG9ub21pZXMubGVuZ3RoLDEpOwotCQkJVGF4b25vbXkgdGF4b25vbXkgPSB0YXhvbm9taWVzWzBdOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCB0YXhvbm9teSAiICsgdGF4b25vbXkuZ2V0SWQoKSk7Ci0JCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJEaWQgbm90IGZpbmQgaG9ja2V5IHRheG9ub215IiwiaG9ja2V5LnRheG9ub215Iix0YXhvbm9teS5nZXRJZCgpKTsKLQkJCQotCQkJLy8gRHVtcCBvdXQgdGhlIHZhbHVlcyAobm8gYXNzZXJ0aW9ucyBoZXJlKS4KLQkJCUVMaXN0IGNMaXN0ID0gdGF4b25vbXkuZ2V0Q2F0ZWdvcnkoKTsKLQkJCWZvcihpbnQgaSA9IDA7aTxjTGlzdC5zaXplKCk7aSsrKXsKLQkJCQlDYXRlZ29yeSBjYXRlZ29yeSA9IChDYXRlZ29yeSljTGlzdC5nZXQoaSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCBjYXRlZ29yeSAiICsgY2F0ZWdvcnkuZ2V0TmFtZSgpKTsKLQkJCQlFTGlzdCBjMkxpc3QgPSBjYXRlZ29yeS5nZXRDYXRlZ29yeSgpOwotCQkJCWZvcihpbnQgaiA9IDA7ajxjMkxpc3Quc2l6ZSgpO2orKyl7Ci0JCQkJCUNhdGVnb3J5IGlDYXRlZ29yeSA9IChDYXRlZ29yeSljMkxpc3QuZ2V0KGopOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIHN1YmNhdGVnb3J5ICIgKyBpQ2F0ZWdvcnkuZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9CQkJCQkKLQkJfQotCQljYXRjaChFeGNlcHRpb24gdCkKLQkJewotCQkJdC5wcmludFN0YWNrVHJhY2UoKTsKLQkJCWZhaWwoIlVuZXhwZWN0ZWQgVGhyb3dhYmxlIFsiK3QuZ2V0TWVzc2FnZSgpKyJdIik7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZJTklTSEVEIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX2xvYWRSZWdpc3RyeVxuIik7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Rlc3RCdW5kbGVVdGlscy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9UZXN0QnVuZGxlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgyMmExMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Rlc3RCdW5kbGVVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uLkJ1bmRsZVV0aWxzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5WZXJzaW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdEJ1bmRsZVV0aWxzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdEdldFZlcnNpb24oKSB7Ci0JCVZlcnNpb24gdmVyc2lvbiA9IEJ1bmRsZVV0aWxzLmdldFZlcnNpb24oIm9yZy5lY2xpcHNlLndzdC53cyIpOwotCQlhc3NlcnROb3ROdWxsKCJ2ZXJzaW9uIHNob3VsZCBuZXZlciBiZSBudWxsIiwgdmVyc2lvbik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTRExDb3BpZXJUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XU0RMQ29waWVyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE1ZTdhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTRExDb3BpZXJUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDEyNiAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzCi0gKiAyMDA3MDQwOSAgIDE4MTYzNSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NETENvcGllciB1dGlsaXR5IHNob3VsZCBjcmVhdGUgdGFyZ2V0IGZvbGRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLldTRExDb3BpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBKVW5pdCB0ZXN0cyBmb3IgV1NETENvcGllcgotICovCi1wdWJsaWMgY2xhc3MgV1NETENvcGllclRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX0RJUiAgICAgPSAiZGF0YS93c2RsY29waWVyLyI7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSMSA9ICJ3c2RsMSI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSMiA9ICJ3c2RsMiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSMyA9ICJ3c2RsMyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSNCA9ICJ3c2RsNCI7Ci0JCi0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCi0JLyoqCi0JICogUmV0dXJuIHN1aXRlIG9mIHRlc3RzIHRvIHJ1bi4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgVGVzdFN1aXRlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiV1NETENvcGllclRlc3RzIik7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2UxIikpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlMiIpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTMiKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2U0IikpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlNSIpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTYiKSk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0JCQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIFRlc3QgbWV0aG9kIG5hbWUuCi0JICovCi0JcHVibGljIFdTRExDb3BpZXJUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCSAgICBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJXU0RMQ29waWVyVGVzdHMiKTsKLQkgICAgCi0JICAgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLQkgICAgCXByb2plY3QuY3JlYXRlKG51bGwpOwotCSAgICAJCi0JICAgIGlmICghcHJvamVjdC5pc09wZW4oKSkKLQkgICAgCXByb2plY3Qub3BlbihudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBmb2xkZXIuCi0JICogQHBhcmFtIG5hbWUgTmFtZSBvZiBmb2xkZXIuCi0JICogQHJldHVybiBUaGUgY3JlYXRlZCBmb2xkZXIuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIElGb2xkZXIgY3JlYXRlRm9sZGVyKFN0cmluZyBuYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGb2xkZXIgZm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIobmV3IFBhdGgobmFtZSkpOwotICAgICAgICBmb2xkZXIuY3JlYXRlKGZhbHNlLCB0cnVlLCBudWxsKTsKLQkgICAgcmV0dXJuIGZvbGRlcjsKLQl9Ci0JCi0JLyoKLQkgKiBWYWxpZGF0ZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBvZiB0aGUgdGFyZ2V0IGZvbGRlciBhZnRlciBjb3B5aW5nLgotCSAqLwotCXByaXZhdGUgdm9pZCB2YWxpZGF0ZShJRm9sZGVyIGZvbGRlciwgU3RyaW5nIGZpbGVuYW1lKSB7CQkKLQkJYXNzZXJ0Tm90TnVsbChmb2xkZXIuZmluZE1lbWJlcigiMS8yLzMvdGVzdC53c2RsIikpOwotCQlhc3NlcnROb3ROdWxsKGZvbGRlci5maW5kTWVtYmVyKCIxLzJhLyIgKyBmaWxlbmFtZSkpOwotCQlhc3NlcnROb3ROdWxsKGZvbGRlci5maW5kTWVtYmVyKCIxLzJhL3Rlc3QueHNkIikpOwotCQlhc3NlcnROb3ROdWxsKGZvbGRlci5maW5kTWVtYmVyKCJ0ZXN0LnhzZCIpKTsJCQotCX0KLQkKLQkvKgotCSAqIFZhbGlkYXRlIHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBmaWxlcyBoYXZlIG5vdCBjaGFuZ2VkLgotCSAqLwotCXByaXZhdGUgbG9uZ1tdIHZhbGlkYXRlVGltZXN0YW1wcyhJRm9sZGVyIGZvbGRlciwgbG9uZ1tdIG9sZFRpbWVzdGFtcHMpIHsKLQkJCi0JCWxvbmdbXSBjdXJyZW50VGltZXN0YW1wcyA9IG5ldyBsb25nWzNdOwotCQkKLQkJY3VycmVudFRpbWVzdGFtcHNbMF0gPSBmb2xkZXIuZmluZE1lbWJlcigiMS8yLzMvdGVzdC53c2RsIikuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKTsKLQkJaWYgKG9sZFRpbWVzdGFtcHMgIT0gbnVsbCkgYXNzZXJ0RXF1YWxzKGN1cnJlbnRUaW1lc3RhbXBzWzBdLCBvbGRUaW1lc3RhbXBzWzBdKTsKLQotCQljdXJyZW50VGltZXN0YW1wc1sxXSA9IGZvbGRlci5maW5kTWVtYmVyKCIxLzJhL3Rlc3QueHNkIikuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKTsKLQkJaWYgKG9sZFRpbWVzdGFtcHMgIT0gbnVsbCkgYXNzZXJ0RXF1YWxzKGN1cnJlbnRUaW1lc3RhbXBzWzFdLCBvbGRUaW1lc3RhbXBzWzFdKTsKLQkJCi0JCWN1cnJlbnRUaW1lc3RhbXBzWzJdID0gZm9sZGVyLmZpbmRNZW1iZXIoInRlc3QueHNkIikuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKTsKLQkJaWYgKG9sZFRpbWVzdGFtcHMgIT0gbnVsbCkgYXNzZXJ0RXF1YWxzKGN1cnJlbnRUaW1lc3RhbXBzWzJdLCBvbGRUaW1lc3RhbXBzWzJdKTsKLQkJCi0JCXJldHVybiBjdXJyZW50VGltZXN0YW1wczsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBjYXNlICMxCi0JICogLSBjb3BpZXMgd3NkbCBmcm9tIHRlc3QgZGF0YSBkaXJlY3RvcnkgdXNpbmcgZmlsZTovIFVSSSAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTEoKSB7Ci0JCXRyeSB7Ci0JCQlVUkwgdXJsID0gVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KERBVEFfRElSICsgIjEvMmEvc3RhcnQud3NkbCIpOwkJCQkKLQkJCXVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQkJCi0JCQlJRm9sZGVyIGZvbGRlciA9IGNyZWF0ZUZvbGRlcihXU0RMX0ZPTERFUjEpOwotCQkJU3RyaW5nIGZvbGRlclVSSSA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiICsgZm9sZGVyLmdldEZ1bGxQYXRoKCk7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiAiICsgdXJsKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyB0bzogICAiICsgZm9sZGVyVVJJKTsKLQkJCQotCQkJV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcigpOwotCQkJY29waWVyLnNldFNvdXJjZVVSSSh1cmwudG9TdHJpbmcoKSk7Ci0JCQljb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlclVSSSk7Ci0JCQkKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBudWxsKTsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkKLQkJCXZhbGlkYXRlKGZvbGRlciwgInN0YXJ0LndzZGwiKTsKLQkJCWFzc2VydEVxdWFscyhjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkudG9TdHJpbmcoKSwgIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGNhc2UgIzIKLQkgKiAtIGNvcGllcyB3c2RsIGZyb20gb25lIGZvbGRlciB0byBhbm90aGVyIHVzaW5nIHBsYXRmb3JtOi9yZXNvdXJjZSBVUkkKLQkgKiAtIGFsc28gY2hhbmdlcyB0aGUgdGFyZ2V0IGZpbGVuYW1lCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENhc2UyKCkgewotCQl0cnkgewotCQkJSVJlc291cmNlIHJlc291cmNlID0gcHJvamVjdC5nZXRGb2xkZXIoV1NETF9GT0xERVIxKS5maW5kTWVtYmVyKCIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCUlGb2xkZXIgZm9sZGVyID0gY3JlYXRlRm9sZGVyKFdTRExfRk9MREVSMik7CQkJCi0JCQkKLQkJCVN0cmluZyBwYXRoID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOyAJCQkJCQkJCQkKLQkJCVN0cmluZyBmb2xkZXJVUkkgPSBmb2xkZXIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogIiArIHBhdGgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHBhdGgpOwkJCQotCQkJY29waWVyLnNldFRhcmdldEZvbGRlclVSSShmb2xkZXJVUkkpOwotCQkJY29waWVyLnNldFRhcmdldEZpbGVuYW1lKCJuZXduYW1lLndzZGwiKTsKLQkJCQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQotCQkJdmFsaWRhdGUoZm9sZGVyLCAibmV3bmFtZS53c2RsIik7Ci0JCQlhc3NlcnRFcXVhbHMoY29waWVyLmdldFJlbGF0aXZlUGF0aCgpLnRvU3RyaW5nKCksICIxLzJhL25ld25hbWUud3NkbCIpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CQotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdCBjYXNlICMzCi0JICogLSBydW5zIHRoZSBXU0RMQ29waWVyIHdpdGhvdXQgc3BlY2lmeWluZyBhIHNvdXJjZSBVUkkgKG9wZXJhdGlvbiBzaG91bGQgZmFpbCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTMoKSB7Ci0JCXRyeSB7CQkJCi0JCQlJRm9sZGVyIGZvbGRlciA9IGNyZWF0ZUZvbGRlcihXU0RMX0ZPTERFUjMpOwotCQkJCi0JCQlTdHJpbmcgZm9sZGVyVVJJID0gZm9sZGVyLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIGZyb206IE4vQSIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlclVSSSk7CQkJCi0JCQkKLQkJCXRyeSB7Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGhlcmUiLCBmYWxzZSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjZSk7Ci0JCQl9Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsKLQkJfQotCX0JCi0KLQkvKioKLQkgKiBUZXN0IGNhc2UgIzQKLQkgKiAtIHJ1bnMgdGhlIFdTRExDb3BpZXIgd2l0aG91dCBjcmVhdGluZyBhIHRhcmdldCBmb2xkZXIKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTQoKSB7Ci0JCXRyeSB7Ci0JCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBwcm9qZWN0LmdldEZvbGRlcihXU0RMX0ZPTERFUjEpLmZpbmRNZW1iZXIoIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJSUZvbGRlciBmb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcihXU0RMX0ZPTERFUjQpOwotCQkJCQkJCi0JCQlTdHJpbmcgcGF0aCA9IHJlc291cmNlLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyBmb2xkZXJVUkkgPSAicGxhdGZvcm06L3Jlc291cmNlIiArIGZvbGRlci5nZXRGdWxsUGF0aCgpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogIiArIHBhdGgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJYXNzZXJ0VHJ1ZSghZm9sZGVyLmV4aXN0cygpKTsKLQkJCQotCQkJV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcigpOwotCQkJY29waWVyLnNldFNvdXJjZVVSSShwYXRoKTsKLQkJCWNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZm9sZGVyVVJJKTsKLQkJCQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQotCQkJYXNzZXJ0VHJ1ZShmb2xkZXIuZXhpc3RzKCkpOwotCQkJdmFsaWRhdGUoZm9sZGVyLCAic3RhcnQud3NkbCIpOwotCQkJYXNzZXJ0RXF1YWxzKGNvcGllci5nZXRSZWxhdGl2ZVBhdGgoKS50b1N0cmluZygpLCAiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsJCQkKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGNhc2UgIzUKLQkgKiAtIHJ1bnMgdGhlIFdTRExDb3BpZXIgd2l0aG91dCBzcGVjaWZ5aW5nIGEgdGFyZ2V0IGZvbGRlciAob3BlcmF0aW9uIHNob3VsZCBmYWlsKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlNSgpIHsKLQkJdHJ5IHsKLQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IHByb2plY3QuZ2V0Rm9sZGVyKFdTRExfRk9MREVSMSkuZmluZE1lbWJlcigiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN0cmluZyBwYXRoID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOyAJCQkJCQkJCQkJCQkJCQkKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIGZyb206ICIgKyBwYXRoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyB0bzogICBOL0EiKTsKLQkJCQotCQkJV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcigpOwotCQkJY29waWVyLnNldFNvdXJjZVVSSShwYXRoKTsJCQkKLQkJCQotCQkJdHJ5IHsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgaGVyZSIsIGZhbHNlKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGNlKTsKLQkJCX0KLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzISIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwkJCQotCQl9Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgY2FzZSAjNgotCSAqIC0gY29waWVzIHdzZGwgZnJvbSBvbmUgZm9sZGVyIG9udG8gaXRzZWxmIHVzaW5nIHBsYXRmb3JtOi9yZXNvdXJjZSBVUkkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTYoKSB7Ci0JCXRyeSB7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IHByb2plY3QuZ2V0Rm9sZGVyKFdTRExfRk9MREVSMSk7Ci0JCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBmb2xkZXIuZmluZE1lbWJlcigiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN0cmluZyBwYXRoID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOyAJCQkJCQkKLQkJCVN0cmluZyBmb2xkZXJVUkkgPSBmb2xkZXIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJCQkJCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogIiArIHBhdGgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHBhdGgpOwkJCQotCQkJY29waWVyLnNldFRhcmdldEZvbGRlclVSSShmb2xkZXJVUkkpOwkJCQotCi0JCQlsb25nW10gb2xkVGltZXN0YW1wcyA9IHZhbGlkYXRlVGltZXN0YW1wcyhmb2xkZXIsIG51bGwpOwotCQkJCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCi0JCQl2YWxpZGF0ZShmb2xkZXIsICJzdGFydC53c2RsIik7Ci0JCQl2YWxpZGF0ZVRpbWVzdGFtcHMoZm9sZGVyLCBvbGRUaW1lc3RhbXBzKTsKLQkJCWFzc2VydEVxdWFscyhjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkudG9TdHJpbmcoKSwgIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CQotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwotCQl9Ci0JfQotfQotCi0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTSlVuaXRDb25zdGFudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2U1ZmY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLQotcHVibGljIGludGVyZmFjZSBXU0pVbml0Q29uc3RhbnRzIHsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41MCI7Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MucnVudGltZS5heGlzMTEiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYlByb2plY3ROYW1lID0gIldQIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJQcm9qZWN0Mk5hbWUgPSAiV1AyIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wb25lbnROYW1lID0gIndlYkNvbXBvbmVudCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcG9uZW50Mk5hbWUgPSAid2ViQ29tcDIiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXAzTmFtZSA9ICJ3ZWJDb21wMyI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcDROYW1lID0gIndlYkNvbXA0IjsKLSAgCi0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGVqYlByb2plY3ROYW1lID0gIkVKQlByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGVqYkNvbXBvbmVudE5hbWUgPSAiZWpiQ29tcG9uZW50IjsKLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGFwcENsaWVudFByb2plY3ROYW1lID0gIkFwcENsaWVudFByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGFwcENsaWVudENvbXBOYW1lID0gImFwcENsaWVudENvbXBvbmVudCI7ICAKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWFyQ29tcE5hbWUgPSAiRUFSQ29tcG9uZW50IjsKLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VGaW5kZXJUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlRmluZGVyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxZjE5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VGaW5kZXJUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV2ViU2VydmljZUZpbmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbzsKLQotLyoqCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VGaW5kZXJUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50cyB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoV2ViU2VydmljZUZpbmRlclRlc3RzLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdTRmluZGVyKCl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRpbmcgd2ViIHNlcnZpY2UgZmluZGVyIik7Ci0JCVdlYlNlcnZpY2VGaW5kZXIgd3NmID0gV2ViU2VydmljZUZpbmRlci5pbnN0YW5jZSgpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJhdHRlbXB0aW5nIHRvIGxvY2F0ZSBhbGwgd2ViIHNlcnZpY2VzIGluIHdvcmtzcGFjZSIpOwotCQlJdGVyYXRvciB3c0l0ZXJhdG9yID0gd3NmLmdldFdlYlNlcnZpY2VzKG51bGwpOwotCQl3aGlsZSAod3NJdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCVdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IChXZWJTZXJ2aWNlSW5mbykgd3NJdGVyYXRvci5uZXh0KCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIndlYlNlcnZpY2UgVVJMOiAiICsgd3NJbmZvLmdldFdzZGxVUkwoKSk7Ci0JCX0KLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiZmluaXNoZWQgZmluZGluZyBhbGwgd2Vic2VydmljZXMiKTsKLQkJIAotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9CdWlsZENsYXNzcGF0aC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9CdWlsZENsYXNzcGF0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDk2MjNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvQnVpbGRDbGFzc3BhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk1hbmlmZXN0RWxlbWVudDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5Db25zdGFudHM7Ci0KLS8qKgotICogVGhpcyBwcm9ncmFtIHdpbGwgZ2VuZXJhdGUgYSBjbGFzc3BhdGggdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZCB0aGUgd3NleHBsb3Jlci53YXIgZmlsZS4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgQnVpbGRDbGFzc3BhdGggaW1wbGVtZW50cyBJUGxhdGZvcm1SdW5uYWJsZQotewotICAgIHB1YmxpYyBPYmplY3QgcnVuKE9iamVjdCBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIAotICAgIHsgICAgICAgIAotICAgICAgUmVzb3VyY2VCdW5kbGUgcGx1Z2luUmVxdWlyZXMgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYucHJvcGVydHkudG9vbHMuRXhwbG9yZXJSZXF1aXJlcyIgKTsKLSAgICAgIEVudW1lcmF0aW9uICAgIHJlcXVpcmVLZXlzICAgPSBwbHVnaW5SZXF1aXJlcy5nZXRLZXlzKCk7Ci0gICAgICAKLSAgICAgIHdoaWxlKCByZXF1aXJlS2V5cy5oYXNNb3JlRWxlbWVudHMoKSApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKXJlcXVpcmVLZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGJ1aWxkQ2xhc3NwYXRoKCBwbHVnaW5SZXF1aXJlcy5nZXRTdHJpbmcoa2V5KSApOwotICAgICAgfQotICAgICAgICAgICAgCi0gICAgICByZXR1cm4gSVBsYXRmb3JtUnVubmFibGUuRVhJVF9PSzsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGJ1aWxkQ2xhc3NwYXRoKCBTdHJpbmcgcGx1Z2luSWQgKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgQnVuZGxlIGJ1bmRsZSAgICA9IFBsYXRmb3JtLmdldEJ1bmRsZSggcGx1Z2luSWQgKTsKLSAgICAgIFN0cmluZyBjbGFzc3BhdGggPSAoU3RyaW5nKWJ1bmRsZS5nZXRIZWFkZXJzKCkuZ2V0KCBDb25zdGFudHMuQlVORExFX0NMQVNTUEFUSCApOwotICAgICAgU3RyaW5nIGxvY2F0aW9uICA9IGJ1bmRsZS5nZXRMb2NhdGlvbigpOwotICAgICAgICAgICAgICAKLSAgICAgIC8vIEFkZCBjbGFzc3BhdGggdG8gbGlzdAotICAgICAgTWFuaWZlc3RFbGVtZW50W10gY2xhc3NwYXRocyA9IE1hbmlmZXN0RWxlbWVudC5wYXJzZUhlYWRlcihDb25zdGFudHMuQlVORExFX0NMQVNTUEFUSCwgY2xhc3NwYXRoKTsKLSAgICAgIAotICAgICAgaWYoIGNsYXNzcGF0aHMgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjbGFzc3BhdGhzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbmV3UGF0aCA9IG51bGw7Ci0gICAgICAgICAgCi0gICAgICAgICAgLy8gV2UgaGF2ZSBhIHNwZWNpYWwgY2FzZSBmb3IgdGhlIFNXVCBwbHVnaW4gc2luY2UgaXQKLSAgICAgICAgICBpZiggbG9jYXRpb24uaW5kZXhPZiggIm9yZy5lY2xpcHNlLnN3dCIgKSAhPSAtMSApCi0gICAgICAgICAgewotICAgICAgICAgICAgICBCdW5kbGVbXSBidW5kbGVzICAgICA9IFBsYXRmb3JtLmdldEZyYWdtZW50cyggYnVuZGxlICk7ICAKLSAgICAgICAgICAgICAgU3RyaW5nICAgbmV3TG9jYXRpb24gPSBidW5kbGVzWzBdLmdldExvY2F0aW9uKCkuc3Vic3RyaW5nKDgpOwotICAgICAgICAgICAgICBTdHJpbmcgICBwYXRoICAgICAgICA9IGNsYXNzcGF0aHNbaW5kZXhdLmdldFZhbHVlKCkucmVwbGFjZUZpcnN0KCAiXFwkd3NcXCQiLCAid3Mvd2luMzIiKTsKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIG5ld1BhdGggPSBuZXdMb2NhdGlvbiArIHBhdGg7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYoIGxvY2F0aW9uLnN0YXJ0c1dpdGgoICJ1cGRhdGUiICkgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmV3UGF0aCA9IGxvY2F0aW9uLnN1YnN0cmluZyg4KSArIGNsYXNzcGF0aHNbaW5kZXhdLmdldFZhbHVlKCk7ICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmKCBsb2NhdGlvbi5zdGFydHNXaXRoKCAiaW5pdGlhbCIgKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5ld1BhdGggPSBsb2NhdGlvbi5zdWJzdHJpbmcoMjMpICsgY2xhc3NwYXRoc1tpbmRleF0uZ2V0VmFsdWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiggbG9jYXRpb24uc3RhcnRzV2l0aCggIlN5c3RlbSIgKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFsbExvY2F0aW9uKCkuZ2V0VVJMKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoNik7Ci0gICAgICAgICAgICAgIG5ld1BhdGggPSBwbGF0Zm9ybUxvY2F0aW9uICsgInBsdWdpbnMvb3JnLmVjbGlwc2Uub3NnaV8zLjAuMS8iICsgY2xhc3NwYXRoc1tpbmRleF0uZ2V0VmFsdWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgU3lzdGVtLm91dC5wcmludCggbmV3UGF0aCArICc7Jyk7IAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9Db3B5UHJvcGVydHlGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9Db3B5UHJvcGVydHlGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGVlNTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvQ29weVByb3BlcnR5RmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDb3B5UHJvcGVydHlGaWxlcyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgICAgc3RhcnRQYXRoICAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgU3RyaW5nW10gICAgcGx1Z2luRmlsZXMgICA9IFV0aWxzLnJlYWRMaW5lcyggYXJnc1sxXSApOwotICAgIFN0cmluZyAgICAgIG5ld1BhdGggICAgICAgPSBhcmdzWzJdOwotICAgIFN0cmluZyAgICAgIHBhdGhSZWxhdGl2ZVRvPSBhcmdzWzNdOwotICAgIFZlY3RvciAgICAgIHByb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBsdWdpbkZpbGVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHBsdWdpbkRpciAgICAgPSBVdGlscy5nZXRGaWxlKCBzdGFydFBhdGgsIHBsdWdpbkZpbGVzW2luZGV4XSApOwotICAgICAgCi0gICAgICBpZiggcGx1Z2luRGlyICE9IG51bGwgKQotICAgICAgewotICAgICAgICBVdGlscy5nZXRGaWxlcyggcGx1Z2luRGlyLCBwcm9wZXJ0eUZpbGVzLCAicHJvcGVydGllcyIsIG5ldyBTdHJpbmdbXXsgImJpbiIsICJidWlsZC5wcm9wZXJ0aWVzIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGZpbGUKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcHJvcGVydHlGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwcm9wRmlsZSAgICA9IChGaWxlKXByb3BlcnR5RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFN0cmluZyBwcm9wTmFtZSAgICA9IHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgaW50ICAgIHBsdWdpbkluZGV4ID0gcHJvcE5hbWUuaW5kZXhPZiggcGF0aFJlbGF0aXZlVG8gKTsKLSAgICAgIGludCAgICBmaXJzdFNsYXNoICA9IHByb3BOYW1lLmluZGV4T2YoICJcXCIsIHBsdWdpbkluZGV4ICk7Ci0gICAgICBpbnQgICAgbmV4dFNsYXNoICAgPSBwcm9wTmFtZS5pbmRleE9mKCAiXFwiLCBmaXJzdFNsYXNoKzEgKTsKLSAgICAgIFN0cmluZyBwbHVnaW5OYW1lICA9IHByb3BOYW1lLnN1YnN0cmluZyggZmlyc3RTbGFzaCArIDEsIG5leHRTbGFzaCApOwotICAgICAgaW50ICAgIHVuZGVySW5kZXggID0gcGx1Z2luTmFtZS5pbmRleE9mKCAnXycgKTsKLSAgICAgIAotICAgICAgaWYoIHVuZGVySW5kZXggIT0gLTEgKQotICAgICAgewotICAgICAgICBwbHVnaW5OYW1lID0gcGx1Z2luTmFtZS5zdWJzdHJpbmcoIDAsIHVuZGVySW5kZXggKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nIG5ld05hbWUgPSBuZXdQYXRoICsgRmlsZS5zZXBhcmF0b3IgKyAicGx1Z2lucyIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yICsgcGx1Z2luTmFtZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlLnNlcGFyYXRvciArIHByb3BOYW1lLnN1YnN0cmluZyggbmV4dFNsYXNoKzEsIHByb3BOYW1lLmxlbmd0aCgpICk7Ci0gICAgICAKLSAgICAgIEZpbGUgICAgICAgIG5ld0ZpbGUgPSBuZXcgRmlsZSggbmV3TmFtZSApOwotICAgICAgRmlsZSAgICAgICAgcGFyZW50ICA9IG5ldyBGaWxlKCBuZXdGaWxlLmdldFBhcmVudCgpICk7Ci0gICAgICBQcmludFdyaXRlciB3cml0ZXIgID0gbnVsbDsKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHBhcmVudC5ta2RpcnMoKTsKLSAgICAgICAgCi0gICAgICAgIHdyaXRlciA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIG5ld0ZpbGUgKSk7Ci0gICAgICAgIFN0cmluZ1tdIGxpbmVzID0gVXRpbHMucmVhZExpbmVzKCBwcm9wRmlsZSApOwotICAgICAgICAKLSAgICAgICAgZm9yKCBpbnQgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgbGluZXMubGVuZ3RoOyBsaW5lSW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICB3cml0ZXIucHJpbnRsbiggbGluZXNbbGluZUluZGV4XSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiggd3JpdGVyICE9IG51bGwgKSB3cml0ZXIuY2xvc2UoKTsgCi0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRDb250ZXh0SWRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRDb250ZXh0SWRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjYzMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kQ29udGV4dElkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBmaW5kIENvbnRleHQgSURzIGluIHNvdXJjZSBmaWxlcy4KLSAqIGFyZ3NbMF0gPSBUaGUgcm9vdCBkaXJlY3Rvcnkgd2hlcmUgcGx1Z2lucyBzb3VyY2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBzZWFyY2hlZC4KLSAqIGFyZ3NbMV0gPSBBIGZpbGUgY29udGFpbmluZyBwbHVnaW4gc291cmNlIGRpcmVjdG9yaWVzLiAgRWFjaCBsaW5lIHNob3VsZCBjb250YWluCi0gKiAgICAgICAgICAgYSBwYXRoIHRvIGEgc291cmNlIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgYXJnc1swXSBwYXJhbWV0ZXIuCi0gKiBhcmdzWzJdID0gVGhlIG91dHB1dCBmaWxlIG5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaW5kQ29udGV4dElkcyAKLXsKLSAgcHVibGljIHZvaWQgZmluZElkcyggU3RyaW5nIHJvb3REaXJlY3RvcnksIFN0cmluZyBzb3VyY2VEaXJlY3RvcnlOYW1lLCBTdHJpbmcgb3V0cHV0RmlsZU5hbWUgKQotICB7Ci0JRmlsZSAgICAgICAgc291cmNlRGlyZWN0b3J5RmlsZSA9IG5ldyBGaWxlKCBzb3VyY2VEaXJlY3RvcnlOYW1lICk7Ci0JU3RyaW5nW10gICAgc3JjRGlyTGluZXMgICAgICAgICA9IFV0aWxzLnJlYWRMaW5lcyggc291cmNlRGlyZWN0b3J5RmlsZSApOwotCVByaW50V3JpdGVyIG91dHB1dEZpbGUgICAgICAgICAgPSBudWxsOwotCQkKLQl0cnkKLQl7Ci0JICBvdXRwdXRGaWxlID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggb3V0cHV0RmlsZU5hbWUgKSApOwotCQotCSAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNyY0RpckxpbmVzLmxlbmd0aDsgaW5kZXgrKyApCi0JICB7Ci0JCVN0cmluZyBzb3VyY2VEaXJOYW1lICAgPSBzcmNEaXJMaW5lc1tpbmRleF07Ci0JICAgIEZpbGUgICBzb3VyY2VEaXJlY3RvcnkgPSBuZXcgRmlsZSggcm9vdERpcmVjdG9yeSwgc291cmNlRGlyTmFtZSApOwotCSAgCi0JICAgIG91dHB1dEZpbGUucHJpbnRsbiggIj09PT09PT5Db250ZXh0IElEcyBmb3IgcGx1Z2luIGRpcmVjdG9yeTogIiArIHNvdXJjZURpck5hbWUgKTsKLQkgICAgCi0JICAgIGZpbmRJZHNGb3JhRGlyZWN0b3J5KCBzb3VyY2VEaXJlY3RvcnksIG91dHB1dEZpbGUgKTsKLQkgIH0KLQl9Ci0JY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotCXsKLQkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JZmluYWxseQotCXsKLQkgIGlmKCBvdXRwdXRGaWxlICE9IG51bGwgKQotCSAgewotCSAgICBvdXRwdXRGaWxlLmNsb3NlKCk7Ci0JICB9Ci0JfQotICB9Ci0gIAotICBzdGF0aWMgcHVibGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgICBGaW5kQ29udGV4dElkcyBmaW5kSWRzID0gbmV3IEZpbmRDb250ZXh0SWRzKCk7Ci0gICAgCi0gICAgaWYoIGFyZ3MubGVuZ3RoICE9IDMgKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkVycm9yOiBleHBlY3RpbmcgYSByb290IGRpcmVjdG9yeSwgdGhlIHNvdXJjZSBkaXJlY3RvcnkgZmlsZSBuYW1lLCBhbmQgYW4gb3V0cHV0IGZpbGUgYXMgcGFyYW1ldGVycy4iICk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGZpbmRJZHMuZmluZElkcyggYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSApOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gZmluZElkc0ZvcmFEaXJlY3RvcnkoIEZpbGUgc291cmNlRGlyZWN0b3J5LCBQcmludFdyaXRlciBvdXRwdXRGaWxlICkKLSAgewotCVZlY3RvciAgZmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0JYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQotICAgIFV0aWxzLmdldEZpbGVzKCBzb3VyY2VEaXJlY3RvcnksIGZpbGVzLCAiamF2YSIsIG5ldyBTdHJpbmdbMF0gKTsKLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBmaWxlLgotICAgIGZvciggaW50IGZpbGVJbmRleCA9IDA7IGZpbGVJbmRleCA8IGZpbGVzLnNpemUoKTsgZmlsZUluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIGxpbmVzID0gVXRpbHMucmVhZExpbmVzKCAoRmlsZSlmaWxlcy5lbGVtZW50QXQoZmlsZUluZGV4KSApOwkKLSAgICAgIAotICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggbGluZSBpbiB0aGUgZmlsZS4KLSAgICAgIGZvciggaW50IGxpbmVJbmRleCA9IDA7IGxpbmVJbmRleCA8IGxpbmVzLmxlbmd0aDsgbGluZUluZGV4KysgKQotICAgICAgewotICAgICAgICBTdHJpbmcgbGluZSA9IGxpbmVzW2xpbmVJbmRleF07Ci0gICAgICAgIAotICAgICAgICBpZiggbGluZS5pbmRleE9mKCJDT05URVhUX0lEIikgIT0gLTEgKQotICAgICAgICB7Ci0gICAgICAgICAgb3V0cHV0RmlsZS5wcmludGxuKCBsaW5lICk7Ci0gICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmb3VuZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kRHVwbGljYXRlS2V5cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kRHVwbGljYXRlS2V5cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDJmZmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZER1cGxpY2F0ZUtleXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgRmluZER1cGxpY2F0ZUtleXMgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbGUgICAgICAgIHN0YXJ0UGF0aCAgICAgPSBuZXcgRmlsZSggYXJnc1swXSApOwotICAgIFN0cmluZ1tdICAgIHBsdWdpbkZpbGVzICAgPSBVdGlscy5yZWFkTGluZXMoIGFyZ3NbMV0gKTsKLSAgICBWZWN0b3IgICAgICBwcm9wZXJ0eUZpbGVzID0gbmV3IFZlY3RvcigpOwotICAgIEhhc2h0YWJsZSAgIGtleXMgICAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgUHJpbnRXcml0ZXIgd3JpdGVyICAgICAgICA9IG51bGw7Ci0gICAgSGFzaHRhYmxlICAgc3JjS2V5cyAgICAgICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBWZWN0b3IgICAgICBzcmNGaWxlcyAgICAgID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciAgICAgIHByb3BOYW1lcyAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yICAgICAgcGx1Z2luTmFtZXMgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmdbXSAgICBwbHVnaW5BcnJheSAgID0gbnVsbDsKLSAgICBIYXNodGFibGUgICBzcmNQbHVnaW5NYXAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHdyaXRlciA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIGFyZ3NbMl0gKSk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwbHVnaW5GaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwbHVnaW5EaXIgICAgID0gVXRpbHMuZ2V0RmlsZSggc3RhcnRQYXRoLCBwbHVnaW5GaWxlc1tpbmRleF0gKTsKLSAgICAgIAotICAgICAgVXRpbHMuZ2V0RmlsZXMoIHBsdWdpbkRpciwgcHJvcGVydHlGaWxlcywgInByb3BlcnRpZXMiLCBuZXcgU3RyaW5nW117ICJiaW4iLCAiYnVpbGQucHJvcGVydGllcyIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2V4cGxvcmVyLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1ZGRpLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2RsLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2lsLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYXZvcml0ZXMucHJvcGVydGllcyIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgICAgVXRpbHMuZ2V0RmlsZXMoIHBsdWdpbkRpciwgc3JjRmlsZXMsICJqYXZhIiwgbmV3IFN0cmluZ1swXSApOwotICAgIH0KLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBmaWxlCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnR5RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcHJvcEZpbGUgPSAoRmlsZSlwcm9wZXJ0eUZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBGaWxlICAgcGFyZW50ICAgPSBuZXcgRmlsZSggcHJvcEZpbGUuZ2V0UGFyZW50KCkgKTsKLSAgICAgIAotICAgICAgLy8gU2tpcCBwcm9wZXJ0aWVzIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBwbHVnaW4gZGlyZWN0b3J5LgotICAgICAgaWYoIFV0aWxzLnN0cmluZ0luQXJyYXkoIHBhcmVudC5nZXROYW1lKCksIHBsdWdpbkZpbGVzICkgKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nIHByb3BOYW1lID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICBpbnQgICAgc3JjU3RhcnQgPSBwcm9wTmFtZS5pbmRleE9mKCAic3JjIiApOwotICAgICAgCi0gICAgICBpZiggc3JjU3RhcnQgIT0gLTEgKQotICAgICAgewotICAgICAgICBpbnQgbGFzdFNsYXNoID0gcHJvcE5hbWUubGFzdEluZGV4T2YoICdcXCcgKTsKLSAgICAgICAgaW50IGxhc3REb3QgICA9IHByb3BOYW1lLmxhc3RJbmRleE9mKCAnLicgKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgICA9IHByb3BOYW1lLnN1YnN0cmluZyggc3JjU3RhcnQgKyA0LCBsYXN0U2xhc2ggKTsKLSAgICAgICAgU3RyaW5nIG5hbWUyICA9IHByb3BOYW1lLnN1YnN0cmluZyggc3JjU3RhcnQgKyA0LCBsYXN0RG90ICk7Ci0gICAgICAgIG5hbWUgID0gbmFtZS5yZXBsYWNlKCAnXFwnLCAnLicgKTsgCi0gICAgICAgIG5hbWUyID0gbmFtZTIucmVwbGFjZSggJ1xcJywgJy4nICk7Ci0gICAgICAgIAotICAgICAgICBwbHVnaW5OYW1lcy5hZGQoIG5hbWUgKTsKLSAgICAgICAgcGx1Z2luTmFtZXMuYWRkKCBuYW1lMiApOwotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbiggcHJvcE5hbWUgKyAiPj4iICsgbmFtZSArICI+PiIgKyBuYW1lMiApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwbHVnaW5BcnJheSA9IChTdHJpbmdbXSlwbHVnaW5OYW1lcy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgCi0gICAgLy8gRmluZCBhbGwgdGhlIGphdmEgc3RyaW5ncy4KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc3JjRmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgICBzcmNGaWxlICAgICA9IChGaWxlKXNyY0ZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBWZWN0b3IgICBmaWxlU3JjS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIGxpbmVzICAgICAgID0gVXRpbHMucmVhZExpbmVzKHNyY0ZpbGUgKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgc3JjSW5kZXggPSAwOyBzcmNJbmRleCA8IGxpbmVzLmxlbmd0aDsgc3JjSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFV0aWxzLmZpbmRKYXZhU3RyaW5ncyggbGluZXNbc3JjSW5kZXhdLCBmaWxlU3JjS2V5cyApOwotICAgICAgfQotICAgICAgCi0gICAgICBmb3IoIGludCBrZXlzSW5kZXggPSAwOyBrZXlzSW5kZXggPCBmaWxlU3JjS2V5cy5zaXplKCk7IGtleXNJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nICBrZXkgICAgID0gKFN0cmluZylmaWxlU3JjS2V5cy5lbGVtZW50QXQoIGtleXNJbmRleCApOwotICAgICAgICBIYXNoU2V0IGZpbGVTZXQgPSAoSGFzaFNldClzcmNLZXlzLmdldCgga2V5ICk7Ci0gICAgICAgIAotICAgICAgICBpZiggZmlsZVNldCA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGZpbGVTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgIHNyY0tleXMucHV0KCBrZXksIGZpbGVTZXQgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIFV0aWxzLnN0cmluZ0luQXJyYXkoIGtleSwgcGx1Z2luQXJyYXkgKSApCi0gICAgICAgIHsKLSAgICAgICAgICBIYXNoU2V0IG5hbWVzID0gKEhhc2hTZXQpc3JjUGx1Z2luTWFwLmdldCggc3JjRmlsZSApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBuYW1lcyA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgICBzcmNQbHVnaW5NYXAucHV0KCBzcmNGaWxlLCBuYW1lcyApOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBuYW1lcy5hZGQoIGtleSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaWxlU2V0LmFkZCggc3JjRmlsZSApOwotICAgICAgfQotICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGludCBjb3VudCA9IDE7Ci0gICAgCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggcHJvcGVydHkgZmlsZQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwcm9wZXJ0eUZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHByb3BGaWxlID0gKEZpbGUpcHJvcGVydHlGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgVmVjdG9yIHByb3BLZXlzID0gVXRpbHMuZ2V0UHJvcGVydHlLZXlzKCBwcm9wRmlsZSApOyAgCi0gICAgICBGaWxlICAgcGFyZW50ICAgPSBuZXcgRmlsZSggcHJvcEZpbGUuZ2V0UGFyZW50KCkgKTsKLSAgICAgIAotICAgICAgLy8gU2tpcCBwcm9wZXJ0aWVzIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBwbHVnaW4gZGlyZWN0b3J5LgotICAgICAgaWYoIFV0aWxzLnN0cmluZ0luQXJyYXkoIHBhcmVudC5nZXROYW1lKCksIHBsdWdpbkZpbGVzICkgKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSApOwotICAgICAgCi0gICAgICBmb3IoIGludCBwcm9wSW5kZXggPSAwOyBwcm9wSW5kZXggPCBwcm9wS2V5cy5zaXplKCk7IHByb3BJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByb3BLZXkgPSAoU3RyaW5nKXByb3BLZXlzLmVsZW1lbnRBdCggcHJvcEluZGV4ICk7Ci0gICAgICAgIAotICAgICAgICBpZigga2V5cy5jb250YWluc0tleShwcm9wS2V5KSAmJiAhcHJvcEtleS5zdGFydHNXaXRoKCAiUExVR0lOIiApKQotICAgICAgICB7Ci0gICAgICAgICAgRmlsZSBvcmlnRmlsZSA9IChGaWxlKWtleXMuZ2V0KCBwcm9wS2V5ICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgU3RyaW5nIG9yaWdOYW1lID0gb3JpZ0ZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgICAgU3RyaW5nIHByb3BOYW1lID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgb3JpZ05hbWUgPSBvcmlnTmFtZS5zdWJzdHJpbmcoIGFyZ3NbMF0ubGVuZ3RoKCksIG9yaWdOYW1lLmxlbmd0aCgpICk7Ci0gICAgICAgICAgcHJvcE5hbWUgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIGFyZ3NbMF0ubGVuZ3RoKCksIHByb3BOYW1lLmxlbmd0aCgpICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgSGFzaFNldCBmaWxlU2V0ID0gKEhhc2hTZXQpc3JjS2V5cy5nZXQoIHByb3BLZXkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggZmlsZVNldCAhPSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZXIucHJpbnRsbiggY291bnQgKyAiIFByb3BlcnR5OiAiICsgcHJvcEtleSArICIgaXMgaW4gYm90aCAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ05hbWUgKyAiIGFuZCAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBJdGVyYXRvciBpdGVyID0gZmlsZVNldC5pdGVyYXRvcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSggaXRlci5oYXNOZXh0KCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGaWxlIGZpbGUgPSAoRmlsZSlpdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oICIgID4iICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSApOwotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgSGFzaFNldCAgbmFtZXMgPSAoSGFzaFNldClzcmNQbHVnaW5NYXAuZ2V0KCBmaWxlICk7Ci0gICAgICAgICAgICAgIEl0ZXJhdG9yIG5hbWVJdGVyID0gbmFtZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIHdoaWxlKCBuYW1lSXRlci5oYXNOZXh0KCkgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oICIgICAgPiIgKyBuYW1lSXRlci5uZXh0KCkgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBrZXlzLnB1dCggcHJvcEtleSwgcHJvcEZpbGUgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiggd3JpdGVyICE9IG51bGwgKSB3cml0ZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kUGVyY2VudFN0cmluZy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kUGVyY2VudFN0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2RlZjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZFBlcmNlbnRTdHJpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBGaW5kUGVyY2VudFN0cmluZyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgICAgc3RhcnRQYXRoICAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgU3RyaW5nW10gICAgcGx1Z2luRmlsZXMgICA9IFV0aWxzLnJlYWRMaW5lcyggYXJnc1sxXSApOwotICAgIFByaW50V3JpdGVyIHdyaXRlciAgICAgICAgPSBudWxsOwotICAgIFZlY3RvciAgICAgIHNyY0ZpbGVzICAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggYXJnc1syXSApKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBsdWdpbkZpbGVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHBsdWdpbkRpciAgICAgPSBVdGlscy5nZXRGaWxlKCBzdGFydFBhdGgsIHBsdWdpbkZpbGVzW2luZGV4XSApOwotICAgICAgCi0gICAgICBpZiggcGx1Z2luRGlyICE9IG51bGwgKQotICAgICAgewotICAgICAgICBVdGlscy5nZXRGaWxlcyggcGx1Z2luRGlyLCBzcmNGaWxlcywgImphdmEiLCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgICB9Ci0gICAgfQotICAgICAgICAgIAotICAgIC8vIEZpbmQgYWxsIHRoZSBqYXZhIHN0cmluZ3MuCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNyY0ZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgICAgc3JjRmlsZSAgICAgPSAoRmlsZSlzcmNGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgVmVjdG9yICAgZmlsZVNyY0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBsaW5lcyAgICAgICA9IFV0aWxzLnJlYWRMaW5lcyhzcmNGaWxlICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCBsaW5lcy5sZW5ndGg7IHNyY0luZGV4KysgKQotICAgICAgewotICAgICAgICBVdGlscy5maW5kSmF2YVN0cmluZ3MoIGxpbmVzW3NyY0luZGV4XSwgZmlsZVNyY0tleXMgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgZm9yKCBpbnQga2V5c0luZGV4ID0gMDsga2V5c0luZGV4IDwgZmlsZVNyY0tleXMuc2l6ZSgpOyBrZXlzSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyAga2V5ID0gKFN0cmluZylmaWxlU3JjS2V5cy5lbGVtZW50QXQoIGtleXNJbmRleCApOwotICAgICAgICAKLSAgICAgICAgaWYoIGtleS5zdGFydHNXaXRoKCIlIiApICkKLSAgICAgICAgewotICAgICAgICAgIHdyaXRlci5wcmludGxuKCBrZXkgKyAiID4+ICIgKyBzcmNGaWxlLmdldE5hbWUoKSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCB3cml0ZXIgIT0gbnVsbCApIHdyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRQcm9wZXJ0eU1vdmVtZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRQcm9wZXJ0eU1vdmVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNjYzNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kUHJvcGVydHlNb3ZlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnR5UmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgRmluZFByb3BlcnR5TW92ZW1lbnQgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbGUgb2xkUGF0aCAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgRmlsZSBuZXdQYXRoICAgID0gbmV3IEZpbGUoIGFyZ3NbMV0gKTsKLSAgICBGaWxlIG91dHB1dEZpbGUgPSBuZXcgRmlsZSggYXJnc1syXSApOwotICAgCi0gICAgVmVjdG9yICAgIG9sZFByb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yICAgIG5ld1Byb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgSGFzaHRhYmxlIG9sZEtleU1hcCAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgSGFzaHRhYmxlIG5ld0tleU1hcCAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCi0gICAgVXRpbHMuZ2V0RmlsZXMoIG9sZFBhdGgsIG9sZFByb3BlcnR5RmlsZXMsICJwcm9wZXJ0aWVzIiwgbmV3IFN0cmluZ1swXSApOwotICAgIFV0aWxzLmdldEZpbGVzKCBuZXdQYXRoLCBuZXdQcm9wZXJ0eUZpbGVzLCAicHJvcGVydGllcyIsIG5ldyBTdHJpbmdbMF0gKTsKLQotICAgIGJ1aWxkTWFwKCBvbGRQcm9wZXJ0eUZpbGVzLCBvbGRLZXlNYXAgKTsKLSAgICBidWlsZE1hcCggbmV3UHJvcGVydHlGaWxlcywgbmV3S2V5TWFwICk7Ci0gICAgCi0gICAgU2V0ICAgICAgICAgbmV3S2V5U2V0ID0gbmV3S2V5TWFwLmVudHJ5U2V0KCk7Ci0gICAgSXRlcmF0b3IgICAgaXRlciAgICAgID0gbmV3S2V5U2V0Lml0ZXJhdG9yKCk7Ci0gICAgUHJpbnRXcml0ZXIgd3JpdGVyICAgID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBvdXRwdXRGaWxlICkpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLSAgICB3aGlsZSggaXRlci5oYXNOZXh0KCkgJiYgd3JpdGVyICE9IG51bGwgKQotICAgIHsKLSAgICAgIE1hcC5FbnRyeSBlbnRyeSAgICAgICA9IChNYXAuRW50cnkpaXRlci5uZXh0KCk7Ci0gICAgICBTdHJpbmcgICAgcHJvcGVydHkgICAgPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOwotICAgICAgU3RyaW5nICAgIG5ld0ZpbGVOYW1lID0gKFN0cmluZyllbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgU3RyaW5nICAgIG9sZEZpbGVOYW1lID0gKFN0cmluZylvbGRLZXlNYXAuZ2V0KCBwcm9wZXJ0eSApOwotICAgICAgCi0gICAgICBpZiggb2xkRmlsZU5hbWUgPT0gbnVsbCB8fCBuZXdGaWxlTmFtZS5lcXVhbHMoIG9sZEZpbGVOYW1lICkgKQotICAgICAgewotICAgICAgICAvLyBEbyBub3RoaW5nLiAgRWl0aGVyIHRoaXMga2V5IGRpZG4ndCBleGlzdCBpbiB0aGUgb2xkIHByb3BlcnR5Ci0gICAgICAgIC8vIGZpbGVzIG9yIHRoaXMga2V5IGlzIHN0aWxsIGluIHRoZSBzYW1lIHByb3BlcnR5IGZpbGUuCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHdyaXRlci5wcmludGxuKCBwcm9wZXJ0eSArICIgIiArIG9sZEZpbGVOYW1lICsgIiAiICsgbmV3RmlsZU5hbWUgKTsgCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCB3cml0ZXIgIT0gbnVsbCApIHdyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBidWlsZE1hcCggVmVjdG9yIGlucHV0RmlsZXMsIEhhc2h0YWJsZSBrZXlNYXAgKQotICB7Ci0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGlucHV0RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgICAgICBwcm9wRmlsZSAgICA9IChGaWxlKWlucHV0RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFN0cmluZyAgICAgIHByb3BOYW1lICAgID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICBpbnQgICAgICAgICBwbHVnaW5JbmRleCA9IHByb3BOYW1lLmluZGV4T2YoICJwbHVnaW5zIiApOwotICAgICAgU3RyaW5nICAgICAgcHJvcFN0cmluZyAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIHBsdWdpbkluZGV4LCBwcm9wTmFtZS5sZW5ndGgoKSApOyAgICAgIAotICAgICAgSW5wdXRTdHJlYW0gc3RyZWFtICAgICAgPSBudWxsOwotICAgICAgCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgc3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbSggcHJvcEZpbGUgKTsKLSAgICAgICAgUHJvcGVydHlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBuZXcgUHJvcGVydHlSZXNvdXJjZUJ1bmRsZSggc3RyZWFtICk7Ci0gICAgICAgIAotICAgICAgICBFbnVtZXJhdGlvbiBrZXlzID0gYnVuZGxlLmdldEtleXMoKTsKLSAgICAgICAgCi0gICAgICAgIHdoaWxlKCBrZXlzLmhhc01vcmVFbGVtZW50cygpICkKLSAgICAgICAgewotICAgICAgICAgIGtleU1hcC5wdXQoIGtleXMubmV4dEVsZW1lbnQoKSwgcHJvcFN0cmluZyApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiggc3RyZWFtICE9IG51bGwgKSBzdHJlYW0uY2xvc2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0dlblBsdWdpblByb3BlcnRpZXNGcm9tUGx1Z2luWG1sLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0dlblBsdWdpblByb3BlcnRpZXNGcm9tUGx1Z2luWG1sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NmRkZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9HZW5QbHVnaW5Qcm9wZXJ0aWVzRnJvbVBsdWdpblhtbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci0KLXB1YmxpYyBjbGFzcyBHZW5QbHVnaW5Qcm9wZXJ0aWVzRnJvbVBsdWdpblhtbCAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgc3RhcnRQYXRoID0gbmV3IEZpbGUoIGFyZ3NbMF0gKTsKLSAgICBTdHJpbmdbXSBwbHVnaW5GaWxlcyA9IFV0aWxzLnJlYWRMaW5lcyggYXJnc1sxXSApOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwbHVnaW5GaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZyBmaWxlbmFtZSA9IHBsdWdpbkZpbGVzW2luZGV4XTsKLSAgICAgIAotICAgICAgSGFzaFNldCBrZXlzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgIEZpbGUgICAgZGlyICA9IFV0aWxzLmdldEZpbGUoIHN0YXJ0UGF0aCwgZmlsZW5hbWUgKTsKLSAgICAgIEZpbGUgICAgZmlsZSA9IFV0aWxzLmdldEZpbGUoIGRpciwgInBsdWdpbi54bWwiICk7Ci0KLSAgICAgIGlmKCBmaWxlID09IG51bGwgKSBjb250aW51ZTsKLSAgICAgIAotICAgICAgVXRpbHMuZ2V0UGx1Z2luWE1MS2V5cyggZmlsZSwga2V5cyApOwotCi0gICAgICBGaWxlIHByb3BmaWxlID0gVXRpbHMuZ2V0RmlsZSggZGlyLCAicGx1Z2luLnByb3BlcnRpZXMiICk7Ci0gICAgICAKLSAgICAgIGlmKCBrZXlzLnNpemUoKSA+IDAgJiYgcHJvcGZpbGUgPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiTm8gcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBmb3I6IiArIGZpbGUgKTsKLSAgICAgICAgICBwcm9wZmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoICJwcmVmaXgiLCAic3VmZml4IiApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgICAgewotICAgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZigga2V5cy5zaXplKCkgPT0gMCApCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgICAgICAgCi0gICAgICBGaWxlICAgICAgICAgICBvdXRwdXRGaWxlID0gbmV3IEZpbGUoIGRpci5nZXRBYnNvbHV0ZVBhdGgoKSArIEZpbGUuc2VwYXJhdG9yICsgInBsdWdpbi5wcm9wZXJ0aWVzLm5ldyIgKTsKLSAgICAgIEZpbGUgICAgICAgICAgIGRlbEZpbGUgPSBuZXcgRmlsZSggZGlyLmdldEFic29sdXRlUGF0aCgpICsgRmlsZS5zZXBhcmF0b3IgKyAicGx1Z2luLnByb3BlcnRpZXMuZGVsIiApOwotICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyICAgICA9IG51bGw7Ci0gICAgICBQcmludFdyaXRlciBkZWxXcml0ZXIgID0gbnVsbDsKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHdyaXRlciA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIG91dHB1dEZpbGUgKSApOwotICAgICAgICBkZWxXcml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBkZWxGaWxlICkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJHZW5lcmF0aW5nIG91dHB1dCB0bzoiICsgb3V0cHV0RmlsZSApOwotICAgICAgICBVdGlscy5jcmVhdGVPdXRwdXRGaWxlKCBrZXlzLCBwcm9wZmlsZSwgd3JpdGVyLCBkZWxXcml0ZXIgKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOyAKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiggd3JpdGVyICE9IG51bGwgKSB3cml0ZXIuY2xvc2UoKTsKLSAgICAgICAgICBpZiggZGVsV3JpdGVyICE9IG51bGwgKSBkZWxXcml0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAKLSAgICB9Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9MaXN0UHJvcGVydHlGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9MaXN0UHJvcGVydHlGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTBhNmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvTGlzdFByb3BlcnR5RmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0UHJvcGVydHlGaWxlcyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgICAgc3RhcnRQYXRoICAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgVmVjdG9yICAgICAgcHJvcGVydHlGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBVdGlscy5nZXRGaWxlcyggc3RhcnRQYXRoLCBwcm9wZXJ0eUZpbGVzLCAiYmFja3VwIiwgbmV3IFN0cmluZ1tdeyAiYmluIiwgImJ1aWxkLnByb3BlcnRpZXMiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBmaWxlCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnR5RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcHJvcEZpbGUgICAgPSAoRmlsZSlwcm9wZXJ0eUZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBTdHJpbmcgcHJvcE5hbWUgICAgPSBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgIGludCAgICBwbHVnaW5JbmRleCA9IHByb3BOYW1lLmluZGV4T2YoICJwbHVnaW5zIiApOwotICAgICAgaW50ICAgIGZpcnN0U2xhc2ggID0gcHJvcE5hbWUuaW5kZXhPZiggIlxcIiwgcGx1Z2luSW5kZXggKTsKLSAgICAgIGludCAgICBuZXh0U2xhc2ggICA9IHByb3BOYW1lLmluZGV4T2YoICJcXCIsIGZpcnN0U2xhc2grMSApOwotICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBmaXJzdFNsYXNoICsgMSwgbmV4dFNsYXNoICk7Ci0gICAgICBpbnQgICAgdW5kZXJJbmRleCAgPSBwbHVnaW5OYW1lLmluZGV4T2YoICdfJyApOwotICAgICAgCi0gICAgICBpZiggdW5kZXJJbmRleCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIHBsdWdpbk5hbWUgPSBwbHVnaW5OYW1lLnN1YnN0cmluZyggMCwgdW5kZXJJbmRleCApOwotICAgICAgfQotICAgICAgCi0gICAgICBTdHJpbmcgbmV3TmFtZSA9ICJkZWwgIHBsdWdpbnMiICsgCi0gICAgICAgICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yICsgcGx1Z2luTmFtZSArCi0gICAgICAgICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yICsgcHJvcE5hbWUuc3Vic3RyaW5nKCBuZXh0U2xhc2grMSwgcHJvcE5hbWUubGVuZ3RoKCkgKTsKLQotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBuZXdOYW1lICk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1JlbW92ZUJyYWNrZXRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1JlbW92ZUJyYWNrZXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNTY4MmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9SZW1vdmVCcmFja2V0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmF3dC5CdXR0b247Ci1pbXBvcnQgamF2YS5hd3QuRXZlbnQ7Ci1pbXBvcnQgamF2YS5hd3QuRnJhbWU7Ci1pbXBvcnQgamF2YS5hd3QuR3JpZExheW91dDsKLWltcG9ydCBqYXZhLmF3dC5UZXh0QXJlYTsKLWltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKLWltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKLQotcHVibGljIGNsYXNzIFJlbW92ZUJyYWNrZXRzIGV4dGVuZHMgRnJhbWUgCi17Ci0gIC8qKgotICAgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzYxNzI5MjMyMDI5OTgyNDE3Nkw7Ci0gIHByaXZhdGUgVGV4dEFyZWEgaW5wdXRBcmVhXzsKLSAgcHJpdmF0ZSBUZXh0QXJlYSBvdXRwdXRBcmVhXzsKLSAgcHJpdmF0ZSBCdXR0b24gICBidXR0b25fOwotICAKLSAgcHVibGljIFJlbW92ZUJyYWNrZXRzKCkKLSAgewotICAJc3VwZXIoICJDb252ZXJ0IEhUTUwgYnJhY2tldHMiICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIAotICB7Ci0gIAlSZW1vdmVCcmFja2V0cyBjb252ZXJ0ID0gbmV3IFJlbW92ZUJyYWNrZXRzKCk7Ci0gIAkKLSAgCWNvbnZlcnQuYnVpbGRVSSgpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYnVpbGRVSSgpCi0gIHsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDMsMSk7Ci0gICAgLy9sYXlvdXQuc2V0Q29sdW1ucygxKTsKLSAgICBzZXRMYXlvdXQoIGxheW91dCApOwotICAgIAotICAgIGlucHV0QXJlYV8gID0gbmV3IFRleHRBcmVhKCAxMCwgNTAgKTsKLSAgICBvdXRwdXRBcmVhXyA9IG5ldyBUZXh0QXJlYSggMTAsIDUwICk7Ci0gICAgYnV0dG9uXyAgICAgPSBuZXcgQnV0dG9uKCAiUHJlc3MgaGVyZSB0byBjb252ZXJ0IHRvIEhUTUwiICk7Ci0gICAgCi0gICAgaW5wdXRBcmVhXy5zZXRFZGl0YWJsZSggdHJ1ZSApOwotICAgIG91dHB1dEFyZWFfLnNldEVkaXRhYmxlKCB0cnVlICk7Ci0gICAgYnV0dG9uXy5hZGRBY3Rpb25MaXN0ZW5lciggbmV3IEFjdGlvbkxpc3RlbmVyKCkKLSAgICAJCSAgICAgICAgICAgICAgICAgICB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoIEFjdGlvbkV2ZW50IGV2dCApCi0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUZXh0KCk7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgCQkgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgYWRkKCBpbnB1dEFyZWFfICk7Ci0gICAgYWRkKCBidXR0b25fICk7Ci0gICAgYWRkKCBvdXRwdXRBcmVhXyApOwotICAgIC8vc2V0U2l6ZSggMTAwLCAxMDAgKTsKLSAgICBwYWNrKCk7Ci0gICAgc2hvdygpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVFdmVudCggRXZlbnQgZXZ0ICkKLSAgewotICAgIGlmKCBldnQuaWQgPT0gRXZlbnQuV0lORE9XX0RFU1RST1kgKQotICAgIHsKLSAgICAgIFN5c3RlbS5leGl0KDApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGNvbnZlcnRUZXh0KCkKLSAgewotICAJU3RyaW5nIGlucHV0U3RyaW5nID0gaW5wdXRBcmVhXy5nZXRUZXh0KCk7Ci0gIAlTdHJpbmcgb3V0cHV0U3RyaW5nID0gaW5wdXRTdHJpbmcucmVwbGFjZUFsbCggIjwiLCAiJmx0OyIpOwotICAJCi0gIAlvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJpbmcucmVwbGFjZUFsbCggIj4iLCAiJmd0OyIgKTsKLSAgCQotICAJb3V0cHV0QXJlYV8uc2V0VGV4dCggb3V0cHV0U3RyaW5nICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvUmVtb3ZlVW51c2VkS2V5cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9SZW1vdmVVbnVzZWRLZXlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZWE4NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9SZW1vdmVVbnVzZWRLZXlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlVW51c2VkS2V5cyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgICAgc3RhcnRQYXRoICAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgU3RyaW5nW10gICAgcGx1Z2luRmlsZXMgICA9IFV0aWxzLnJlYWRMaW5lcyggYXJnc1sxXSApOwotICAgIFZlY3RvciAgICAgIHByb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgSGFzaHRhYmxlICAga2V5cyAgICAgICAgICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBIYXNodGFibGUgICBzcmNLZXlzICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIFZlY3RvciAgICAgIHNyY0ZpbGVzICAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yICAgICAgcHJvcE5hbWVzICAgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgICAgICBwbHVnaW5OYW1lcyAgID0gbmV3IFZlY3RvcigpOwotICAgIFN0cmluZ1tdICAgIHBsdWdpbkFycmF5ICAgPSBudWxsOwotICAgIEhhc2h0YWJsZSAgIHNyY1BsdWdpbk1hcCAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCi0gICAgCi0gICAgLy8gRmluZCBhbGwgdGhlIHByb3BlcnR5IGZpbGVzLgotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwbHVnaW5GaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwbHVnaW5EaXIgICAgID0gVXRpbHMuZ2V0RmlsZSggc3RhcnRQYXRoLCBwbHVnaW5GaWxlc1tpbmRleF0gKTsKLSAgICAgIAotICAgICAgaWYoIHBsdWdpbkRpciA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiUGx1Z2luOiAiICsgcGx1Z2luRmlsZXNbaW5kZXhdICsgIiBub3QgZm91bmQhIiApOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgVXRpbHMuZ2V0RmlsZXMoIHBsdWdpbkRpciwgcHJvcGVydHlGaWxlcywgInByb3BlcnRpZXMiLCBuZXcgU3RyaW5nW117ICJiaW4iLCAiYnVpbGQucHJvcGVydGllcyIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2V4cGxvcmVyLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1ZGRpLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2RsLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c2lsLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYXZvcml0ZXMucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ld3Byb3BzLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxwcm9wcy5wcm9wZXJ0aWVzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAgIFV0aWxzLmdldEZpbGVzKCBwbHVnaW5EaXIsIHNyY0ZpbGVzLCAiamF2YSIsIG5ldyBTdHJpbmdbMF0gKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggcHJvcGVydHkgZmlsZQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwcm9wZXJ0eUZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHByb3BGaWxlID0gKEZpbGUpcHJvcGVydHlGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgRmlsZSAgIHBhcmVudCAgID0gbmV3IEZpbGUoIHByb3BGaWxlLmdldFBhcmVudCgpICk7Ci0gICAgICAKLSAgICAgIC8vIFNraXAgcHJvcGVydGllcyBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4KLSAgICAgIGlmKCBVdGlscy5zdHJpbmdJbkFycmF5KCBwYXJlbnQuZ2V0TmFtZSgpLCBwbHVnaW5GaWxlcyApICkKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFN0cmluZyBwcm9wTmFtZSA9IHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgaW50ICAgIHNyY1N0YXJ0ID0gcHJvcE5hbWUuaW5kZXhPZiggInNyYyIgKTsKLSAgICAgIAotICAgICAgaWYoIHNyY1N0YXJ0ICE9IC0xICkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RTbGFzaCA9IHByb3BOYW1lLmxhc3RJbmRleE9mKCAnXFwnICk7Ci0gICAgICAgIGludCBsYXN0RG90ICAgPSBwcm9wTmFtZS5sYXN0SW5kZXhPZiggJy4nICk7Ci0gICAgICAgIFN0cmluZyBuYW1lICAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIHNyY1N0YXJ0ICsgNCwgbGFzdFNsYXNoICk7Ci0gICAgICAgIFN0cmluZyBuYW1lMiAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIHNyY1N0YXJ0ICsgNCwgbGFzdERvdCApOwotICAgICAgICBuYW1lICA9IG5hbWUucmVwbGFjZSggJ1xcJywgJy4nICk7IAotICAgICAgICBuYW1lMiA9IG5hbWUyLnJlcGxhY2UoICdcXCcsICcuJyApOwotICAgICAgICAKLSAgICAgICAgcGx1Z2luTmFtZXMuYWRkKCBuYW1lICk7Ci0gICAgICAgIHBsdWdpbk5hbWVzLmFkZCggbmFtZTIgKTsKLSAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIHByb3BOYW1lICsgIj4+IiArIG5hbWUgKyAiPj4iICsgbmFtZTIgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcGx1Z2luQXJyYXkgPSAoU3RyaW5nW10pcGx1Z2luTmFtZXMudG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICAgIAotICAgIC8vIEZpbmQgYWxsIHRoZSBqYXZhIHN0cmluZ3MuCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNyY0ZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgICAgc3JjRmlsZSAgICAgPSAoRmlsZSlzcmNGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgVmVjdG9yICAgZmlsZVNyY0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBsaW5lcyAgICAgICA9IFV0aWxzLnJlYWRMaW5lcyhzcmNGaWxlICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCBsaW5lcy5sZW5ndGg7IHNyY0luZGV4KysgKQotICAgICAgewotICAgICAgICBVdGlscy5maW5kSmF2YVN0cmluZ3MoIGxpbmVzW3NyY0luZGV4XSwgZmlsZVNyY0tleXMgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgZm9yKCBpbnQga2V5c0luZGV4ID0gMDsga2V5c0luZGV4IDwgZmlsZVNyY0tleXMuc2l6ZSgpOyBrZXlzSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyAga2V5ICAgICA9IChTdHJpbmcpZmlsZVNyY0tleXMuZWxlbWVudEF0KCBrZXlzSW5kZXggKTsKLSAgICAgICAgSGFzaFNldCBmaWxlU2V0ID0gKEhhc2hTZXQpc3JjS2V5cy5nZXQoIGtleSApOwotICAgICAgICAKLSAgICAgICAgaWYoIGZpbGVTZXQgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBmaWxlU2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgICBzcmNLZXlzLnB1dCgga2V5LCBmaWxlU2V0ICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBVdGlscy5zdHJpbmdJbkFycmF5KCBrZXksIHBsdWdpbkFycmF5ICkgKQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaFNldCBuYW1lcyA9IChIYXNoU2V0KXNyY1BsdWdpbk1hcC5nZXQoIHNyY0ZpbGUgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggbmFtZXMgPT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgc3JjUGx1Z2luTWFwLnB1dCggc3JjRmlsZSwgbmFtZXMgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgbmFtZXMuYWRkKCBrZXkgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZmlsZVNldC5hZGQoIHNyY0ZpbGUgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpbnQgY291bnQgPSAxOwotICAgIAotICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGZpbGUKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcHJvcGVydHlGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwcm9wRmlsZSA9IChGaWxlKXByb3BlcnR5RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFZlY3RvciBwcm9wS2V5cyA9IFV0aWxzLmdldFByb3BlcnR5S2V5cyggcHJvcEZpbGUgKTsgIAotICAgICAgRmlsZSAgIHBhcmVudCAgID0gbmV3IEZpbGUoIHByb3BGaWxlLmdldFBhcmVudCgpICk7Ci0gICAgICAKLSAgICAgIC8vIFNraXAgcHJvcGVydGllcyBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4KLSAgICAgIGlmKCBVdGlscy5zdHJpbmdJbkFycmF5KCBwYXJlbnQuZ2V0TmFtZSgpLCBwbHVnaW5GaWxlcyApICkKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgIFN0cmluZyBwcm9wTmFtZSAgID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICBpbnQgICAgc3JjU3RhcnQgICA9IHByb3BOYW1lLmluZGV4T2YoICJzcmMiICk7Ci0gICAgICBTdHJpbmcgZm9sZGVyTmFtZSA9ICIiOwotICAgICAgU3RyaW5nIHBrZ05hbWUgID0gIiI7Ci0gICAgICAKLSAgICAgIGlmKCBzcmNTdGFydCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIGludCBsYXN0U2xhc2ggPSBwcm9wTmFtZS5sYXN0SW5kZXhPZiggJ1xcJyApOwotICAgICAgICBTdHJpbmcgbmFtZSAgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBzcmNTdGFydCArIDQsIGxhc3RTbGFzaCApOwotICAgICAgICBuYW1lICA9IG5hbWUucmVwbGFjZSggJ1xcJywgJy4nICk7IAotICAgICAgICAKLSAgICAgICAgcGtnTmFtZSAgICA9IG5hbWU7Ci0gICAgICAgIGZvbGRlck5hbWUgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIDAsIGxhc3RTbGFzaCArIDEgKTsgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpICk7Ci0gICAgICAKLSAgICAgIFN0cmluZyBuZXdQcm9wTmFtZSA9IGZvbGRlck5hbWUgKyAibmV3cHJvcHMucHJvcGVydGllcyI7Ci0gICAgICBTdHJpbmcgZGVsUHJvcE5hbWUgPSBmb2xkZXJOYW1lICsgImRlbHByb3BzLnByb3BlcnRpZXMiOwotICAgICAgCi0gICAgICBQcmludFdyaXRlciBuZXdQcm9wZXJ0eUZpbGUgPSBudWxsOwotICAgICAgUHJpbnRXcml0ZXIgZGVsUHJvcGVydHlGaWxlID0gbnVsbDsKLSAgICAgICAgCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgbmV3UHJvcGVydHlGaWxlID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggbmV3UHJvcE5hbWUgKSk7Ci0gICAgICAgIGRlbFByb3BlcnR5RmlsZSA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIGRlbFByb3BOYW1lICkpOwotICAgICAgICAKLSAgICAgICAgVXRpbHMuY3JlYXRlT3V0cHV0RmlsZSggc3JjS2V5cy5rZXlTZXQoKSwgcHJvcEZpbGUsIG5ld1Byb3BlcnR5RmlsZSwgZGVsUHJvcGVydHlGaWxlICk7Ci0gICAgICAgIAotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsgCi0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIGlmKCBuZXdQcm9wZXJ0eUZpbGUgIT0gbnVsbCApIG5ld1Byb3BlcnR5RmlsZS5jbG9zZSgpOwotICAgICAgICBpZiggZGVsUHJvcGVydHlGaWxlICE9IG51bGwgKSBkZWxQcm9wZXJ0eUZpbGUuY2xvc2UoKTsKLSAgICAgIH0gICAgIAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9VcGRhdGVGZWF0dXJlWE1MRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvVXBkYXRlRmVhdHVyZVhNTEZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZmFlZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9VcGRhdGVGZWF0dXJlWE1MRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVGZWF0dXJlWE1MRmlsZXMgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAJU3RyaW5nIHJvb3RQYXRoICAgICA9IGFyZ3NbMF07Ci0gIAlGaWxlICAgcm9vdEZpbGUgICAgID0gbmV3IEZpbGUoIHJvb3RQYXRoICk7Ci0gIAlWZWN0b3IgZmVhdHVyZUZpbGVzID0gbmV3IFZlY3RvcigpOwotICAJCi0gIAlnZXRGaWxlcyggZmVhdHVyZUZpbGVzLCByb290RmlsZSApOwotICAJCi0gIAlpbnQgc2l6ZSA9IGZlYXR1cmVGaWxlcy5zaXplKCk7Ci0gIAkKLSAgCWZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyBpbmRleCsrICkKLSAgCXsKLSAgCSAgRmlsZSAgICAgZmlsZSAgICAgID0gKEZpbGUpZmVhdHVyZUZpbGVzLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgCSAgU3RyaW5nICAgZmlsZU5hbWUgID0gZmlsZS5nZXROYW1lKCk7Ci0gIAkgIGludCAgICAgIGxhbmdJbmRleCA9IGZpbGVOYW1lLmluZGV4T2YoICJmZWF0dXJlXyIgKTsKLSAgCSAgaW50ICAgICAgZG90SW5kZXggID0gZmlsZU5hbWUuaW5kZXhPZiggJy4nLCBsYW5nSW5kZXggKTsKLSAgCSAgU3RyaW5nICAgbGFuZyAgICAgID0gZmlsZU5hbWUuc3Vic3RyaW5nKCBsYW5nSW5kZXggKyA4LCBkb3RJbmRleCApOwotICAJICBTdHJpbmdbXSBsaW5lcyAgICAgPSBVdGlscy5yZWFkTGluZXMoIGZpbGUgKTsKLSAgCSAgCi0JICBQcmludFdyaXRlciB3cml0ZXIgICAgID0gbnVsbDsKLSAgCSAgRmlsZVdyaXRlciAgZmlsZVdyaXRlciA9IG51bGw7Ci0gIAkgIAotICAJICB0cnkKLQkgIHsKLQkgICAgZmlsZVdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKCBmaWxlICk7Ci0gIAkgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKCBmaWxlV3JpdGVyICk7Ci0gIAkgICAgCi0gIAkgICAgZm9yKCBpbnQgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgbGluZXMubGVuZ3RoOyBsaW5lSW5kZXgrKyApCi0gIAkgICAgewotICAJICAJICBTdHJpbmcgbGluZSA9IGxpbmVzW2xpbmVJbmRleF07Ci0gIAkgIAkKLSAgCSAgCSAgaWYoIGxpbmUuaW5kZXhPZiggImxpY2Vuc2VVUkwiICkgIT0gLTEgKQotICAJICAJICB7Ci0gIAkgIAkJd3JpdGVyLnByaW50bG4oICJsaWNlbnNlVVJMPWxpY2Vuc2VfIiArIGxhbmcgKyAiLmh0bWwiICk7Ci0gIAkgIAkgIH0KLSAgCSAgCSAgZWxzZQotICAJICAJICB7Ci0gIAkgIAkJd3JpdGVyLnByaW50bG4oIGxpbmUgKTsKLSAgCSAgCSAgfQotICAJICAgIH0KLQkgIH0KLSAgCSAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotCSAgewotICAJICAJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfQotICAJICBmaW5hbGx5Ci0JICB7Ci0gIAkgIAl0cnkKLQkJewotICAJICAJICB3cml0ZXIuY2xvc2UoKTsKLSAgCSAgCSAgZmlsZVdyaXRlci5jbG9zZSgpOwotCQl9Ci0gIAkgIAljYXRjaCggRXhjZXB0aW9uIGV4YyApCi0JCXsKLSAgCSAgCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JICB9Ci0gIAl9Ci0gIH0KLSAgCi0gIHN0YXRpYyBwcml2YXRlIHZvaWQgZ2V0RmlsZXMoIFZlY3RvciBmaWxlcywgRmlsZSBwYXRoICkKLSAgewotICAgIGlmKCBwYXRoLmlzRGlyZWN0b3J5KCkgKQotICAgIHsKLSAgICAgIEZpbGVbXSBjaGlsZHJlbiA9IHBhdGgubGlzdEZpbGVzKCk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZHJlbi5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgCWdldEZpbGVzKCBmaWxlcywgY2hpbGRyZW5baW5kZXhdICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgcGF0aE5hbWUgPSBwYXRoLmdldE5hbWUoKTsKLSAgICAgICAgICAgIAotICAgICAgaW50ICAgIGluZGV4ICAgID0gcGF0aE5hbWUuaW5kZXhPZiggImZlYXR1cmVfIiApOwotICAgICAgCi0gICAgICBpZiggaW5kZXggIT0gLTEgKQotICAgICAgewotICAgICAgCWZpbGVzLmFkZCggcGF0aCApOwotICAgICAgfQotICAgIH0gIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1V0aWxzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMjBkYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnR5UmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIFV0aWxzIAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlT3V0cHV0RmlsZSggQ29sbGVjdGlvbiBrZXlzLCBGaWxlIHByb3BzRmlsZSwgUHJpbnRXcml0ZXIgb3V0cHV0RmlsZSwgUHJpbnRXcml0ZXIgZGVsZXRlRmlsZSApCi0gIHsKLSAgICBTdHJpbmdbXSBsaW5lcyAgICAgICAgPSByZWFkTGluZXMoIHByb3BzRmlsZSApOwotICAgIGJvb2xlYW4gIGNvbnRpbnVlTGluZSA9IGZhbHNlOwotICAgIGJvb2xlYW4gIGRlbGV0ZUtleSAgICA9IGZhbHNlOwotICAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBTdHJpbmcgICBsaW5lID0gbGluZXNbaW5kZXhdLnRyaW0oKTsKLSAgICAgIAotICAgICAgaWYoIGNvbnRpbnVlTGluZSApCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlTGluZSA9IGxpbmUuZW5kc1dpdGgoICJcXCIgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCAhZGVsZXRlS2V5ICkKLSAgICAgICAgewotICAgICAgICAgIG91dHB1dEZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGRlbGV0ZUZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgY29udGludWVMaW5lID0gbGluZS5lbmRzV2l0aCggIlxcIiApOwotICAgICAgCi0gICAgICBib29sZWFuICB2YWxpZEtleSAgICAgPSBpc0xpbmVLZXkoIGtleXMsIGxpbmUgKTsKLSAgICAgIGJvb2xlYW4gIGhhc0tleSAgICAgICA9IGxpbmUuaW5kZXhPZiggJz0nICkgIT0gLTE7Ci0gICAgICAKLSAgICAgIGlmKCB2YWxpZEtleSApCi0gICAgICB7Ci0gICAgICAgIG91dHB1dEZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgICBkZWxldGVLZXkgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGhhc0tleSApCi0gICAgICB7Ci0gICAgICAgIGRlbGV0ZUtleSA9IHRydWU7Ci0gICAgICAgIGRlbGV0ZUZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBvdXRwdXRGaWxlLnByaW50bG4oIGxpbmUgKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0xpbmVLZXkoIENvbGxlY3Rpb24ga2V5cywgU3RyaW5nIGxpbmUgKQotICB7Ci0gICAgYm9vbGVhbiAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgSXRlcmF0b3IgaXRlciAgID0ga2V5cy5pdGVyYXRvcigpOwotICAgIGludCAgICAgIGVxdWFsSW5kZXggPSBsaW5lLmluZGV4T2YoICc9JyApOwotICAgIFN0cmluZyAgIGtleSAgICAgICAgPSBudWxsOwotICAgIAotICAgIGlmKCBlcXVhbEluZGV4ICE9IC0xICYmICFsaW5lLnN0YXJ0c1dpdGgoICIjIiApKQotICAgIHsKLSAgICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKCAwLCBlcXVhbEluZGV4ICk7Ci0gICAgfQotICAgIAotICAgIHdoaWxlKCBpdGVyLmhhc05leHQoKSAmJiBrZXkgIT0gbnVsbCApCi0gICAgewotICAgICAgU3RyaW5nIGNvbGxlY3Rpb25LZXkgPSAoU3RyaW5nKWl0ZXIubmV4dCgpOwotICAgICAgaWYoIGtleS5lcXVhbHMoIGNvbGxlY3Rpb25LZXkgKSB8fCBjb2xsZWN0aW9uS2V5LmVxdWFscyggJyUnICsga2V5ICkgKQotICAgICAgewotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGdldFBsdWdpblhNTEtleXMoIEZpbGUgZmlsZSwgSGFzaFNldCBrZXlzICkKLSAgewotICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlciggZmlsZSApICk7Ci0gICAgICAKLSAgICAgIFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7Ci0gICAgICAKLSAgICAgIHdoaWxlKCBsaW5lICE9IG51bGwgKQotICAgICAgewotICAgICAgICBWZWN0b3IgbGluZWtleXMgPSBmaW5kS2V5cyggbGluZSApOwotICAgICAgICBrZXlzLmFkZEFsbCggbGluZWtleXMgKTsKLSAgICAgICAgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmKCByZWFkZXIgIT0gbnVsbCApIHJlYWRlci5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIEZpbGUgZ2V0RmlsZSggRmlsZSBiYXNlLCBmaW5hbCBTdHJpbmcgY2hpbGQgKQotICB7Ci0gICAgRmlsZVtdIGZpbGUgPSBiYXNlLmxpc3RGaWxlcyggbmV3IEZpbGVuYW1lRmlsdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoIEZpbGUgZmlsZSwgU3RyaW5nIG5hbWUgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBuYW1lLmluZGV4T2YoICdfJyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGluZGV4ICE9IC0xICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyggMCwgaW5kZXggKTsgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZS5lbmRzV2l0aCggY2hpbGQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgcmV0dXJuIGZpbGUubGVuZ3RoID09IDAgPyBudWxsIDogZmlsZVswXTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBWZWN0b3IgZmluZEtleXMoIFN0cmluZyBsaW5lICkKLSAgewotICAgIFZlY3RvciBrZXlzICAgICAgID0gbmV3IFZlY3RvcigpOwotICAgIGludCAgICBxdW90ZXN0YXJ0ID0gbGluZS5pbmRleE9mKCAnIicgKTsKLSAgICBpbnQgICAgcXVvdGVlbmQgICA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZXN0YXJ0ICsgMSApOwotICAgIAotICAgIHdoaWxlKCBxdW90ZXN0YXJ0ICE9IC0xICYmIHF1b3RlZW5kICE9IC0xICYmIHF1b3Rlc3RhcnQgPCBxdW90ZWVuZCApCi0gICAgewotICAgICAgU3RyaW5nIGtleSA9IGxpbmUuc3Vic3RyaW5nKCBxdW90ZXN0YXJ0KzEsIHF1b3RlZW5kICk7Ci0gICAgICAKLSAgICAgIGlmKCBrZXkuc3RhcnRzV2l0aCggIiUiKSApCi0gICAgICB7Ci0gICAgICAgIGtleXMuYWRkKCBrZXkuc3Vic3RyaW5nKDEsIGtleS5sZW5ndGgoKSApICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHF1b3Rlc3RhcnQgPSBsaW5lLmluZGV4T2YoICciJywgcXVvdGVlbmQrMSApOwotICAgICAgcXVvdGVlbmQgICA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZXN0YXJ0KzEgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGtleXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBmaW5kSmF2YVN0cmluZ3MoIFN0cmluZyBsaW5lLCBWZWN0b3Iga2V5cyApCi0gIHsKLSAgICBpbnQgICAgcXVvdGVzdGFydCA9IGxpbmUuaW5kZXhPZiggJyInICk7Ci0gICAgaW50ICAgIHF1b3RlZW5kICAgPSBsaW5lLmluZGV4T2YoICciJywgcXVvdGVzdGFydCArIDEgKTsKLSAgICAKLSAgICB3aGlsZSggcXVvdGVzdGFydCAhPSAtMSAmJiBxdW90ZWVuZCAhPSAtMSAmJiBxdW90ZXN0YXJ0IDwgcXVvdGVlbmQgKQotICAgIHsKLSAgICAgIC8vIEZpbmQgbGFzdCByZWFsIGVuZGluZyBxdW90ZS4KLSAgICAgIHdoaWxlKCBxdW90ZXN0YXJ0ICE9IC0xICYmIHF1b3RlZW5kICE9IC0xICYmIGxpbmUuY2hhckF0KCBxdW90ZWVuZC0xICkgPT0gJ1xcJyApCi0gICAgICB7Ci0gICAgICAgIHF1b3RlZW5kID0gbGluZS5pbmRleE9mKCAnIicsIHF1b3RlZW5kICsgMSApOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiggcXVvdGVzdGFydCA9PSAtMSB8fCBxdW90ZWVuZCA9PSAtMSB8fCBxdW90ZXN0YXJ0ID4gcXVvdGVlbmQgKSBicmVhazsKLSAgICAgIAotICAgICAgU3RyaW5nIGtleSA9IGxpbmUuc3Vic3RyaW5nKCBxdW90ZXN0YXJ0KzEsIHF1b3RlZW5kICk7Ci0gICAgICAKLSAgICAgIGtleXMuYWRkKCBrZXkgKTsKLSAgICAgIAotICAgICAgcXVvdGVzdGFydCA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZWVuZCsxICk7Ci0gICAgICBxdW90ZWVuZCAgID0gbGluZS5pbmRleE9mKCAnIicsIHF1b3Rlc3RhcnQrMSApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSByZWFkTGluZXMoIEZpbGUgZmlsZSApCi0gIHsKLSAgICBWZWN0b3IgZmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKCBmaWxlICkgKTsKLSAgICAgIAotICAgICAgU3RyaW5nIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAgIAotICAgICAgd2hpbGUoIGxpbmUgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGZpbGVzLmFkZCggbGluZSApOwotICAgICAgICBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJQcm9ibGVtIG9wZW5pbmcgZmlsZToiICsgZmlsZSApOwotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmKCByZWFkZXIgIT0gbnVsbCApIHJlYWRlci5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pZmlsZXMudG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICAgIAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIHJlYWRMaW5lcyggU3RyaW5nIGZpbGUgKQotICB7Ci0gICAgcmV0dXJuIHJlYWRMaW5lcyggbmV3IEZpbGUoIGZpbGUgKSApOwotICB9Ci0gICAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBnZXRGaWxlcyggRmlsZSBmaWxlLCBWZWN0b3IgZmlsZXMsIFN0cmluZyBmaWxlU3VmZml4LCBTdHJpbmdbXSBleGNsdWRlRmlsZXMgKQotICB7Ci0gICAgaWYoIHN0cmluZ0luQXJyYXkoIGZpbGUuZ2V0TmFtZSgpLCBleGNsdWRlRmlsZXMgKSApCi0gICAgewotICAgICAgLy8gZG8gbm90aGluZwotICAgIH0KLSAgICBlbHNlIGlmKCBmaWxlLmlzRGlyZWN0b3J5KCkgKQotICAgIHsKLSAgICAgIEZpbGVbXSBkaXJmaWxlcyA9IGZpbGUubGlzdEZpbGVzKCk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBkaXJmaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBnZXRGaWxlcyggZGlyZmlsZXNbaW5kZXhdLCBmaWxlcywgZmlsZVN1ZmZpeCwgZXhjbHVkZUZpbGVzICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYoIGZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCBmaWxlU3VmZml4ICkgKQotICAgIHsKLSAgICAgIGZpbGVzLmFkZCggZmlsZSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHN0cmluZ0luQXJyYXkoIFN0cmluZyBuYW1lLCBTdHJpbmdbXSBuYW1lcyApCi0gIHsKLSAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG5hbWVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgaWYoIG5hbWUuZXF1YWxzKCBuYW1lc1tpbmRleF0gKSkKLSAgICAgIHsKLSAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZvdW5kOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGdldFByb3BlcnR5S2V5cyggRmlsZSBmaWxlICkKLSAgewotICAgIFZlY3RvciAgICAgIGtleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgSW5wdXRTdHJlYW0gc3RyZWFtID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBmaWxlICk7Ci0gICAgICAKLSAgICAgIFByb3BlcnR5UmVzb3VyY2VCdW5kbGUgYnVuZGxlICA9IG5ldyBQcm9wZXJ0eVJlc291cmNlQnVuZGxlKCBzdHJlYW0gKTsKLSAgICAgIEVudW1lcmF0aW9uICAgICAgICAgICAga2V5RW51bSA9IGJ1bmRsZS5nZXRLZXlzKCk7Ci0gICAgICAKLSAgICAgIHdoaWxlKCBrZXlFbnVtLmhhc01vcmVFbGVtZW50cygpICkKLSAgICAgIHsKLSAgICAgICAga2V5cy5hZGQoIGtleUVudW0ubmV4dEVsZW1lbnQoKSApOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmKCBzdHJlYW0gIT0gbnVsbCApIHN0cmVhbS5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBrZXlzOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGM0MDgzMGUuLjE2ZjJiOWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwNS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMTA0LnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETFRlc3RzUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvR2V0V1NETFR5cGUvSW1wb3J0TWUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvR2V0V1NETFR5cGUvSW1wb3J0TWUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg4OTlkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0dldFdTRExUeXBlL0ltcG9ydE1lLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkltcG9ydE1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZTEiPgotICAgICAgCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAJCTx4c2Q6c2VxdWVuY2U+Ci0KLSAgICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgICAgCTwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJJbXBvcnRNZU1lc3NhZ2VSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iSW1wb3J0TWVNZXNzYWdlUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IkltcG9ydE1lTWVzc2FnZUV4dHJhIj4KLSAgCTx3c2RsOnBhcnQgbmFtZT0iTmV3UGFydCIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIj48L3dzZGw6cGFydD4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UxIj48L3dzZGw6cGFydD4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydE1lIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpJbXBvcnRNZU1lc3NhZ2VSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOkltcG9ydE1lTWVzc2FnZVJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJJbXBvcnRQb3J0VHlwZUV4dHJhIj4KLSAgCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0gIAkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSI+PC93c2RsOm91dHB1dD4KLSAgCTwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRNZVNPQVAiIHR5cGU9InRuczpJbXBvcnRNZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRCaW5kaW5nRXh0cmEiCi0gIAl0eXBlPSJ0bnM6SW1wb3J0UG9ydFR5cGVFeHRyYSI+Ci0gIAk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLSAgCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLSAgCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAJCTxzb2FwOm9wZXJhdGlvbgotICAJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lL05ld09wZXJhdGlvbiIgLz4KLSAgCQk8d3NkbDppbnB1dD4KLSAgCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0gIAkJPC93c2RsOmlucHV0PgotICAJCTx3c2RsOm91dHB1dD4KLSAgCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0gIAkJPC93c2RsOm91dHB1dD4KLSAgCTwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkltcG9ydE1lIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpJbXBvcnRNZVNPQVAiIG5hbWU9IkltcG9ydE1lU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnRTZXJ2aWNlRXh0cmEiPgotICAJPHdzZGw6cG9ydCBuYW1lPSJJbXBvcnRQb3J0RXh0cmEiIGJpbmRpbmc9InRuczpJbXBvcnRCaW5kaW5nRXh0cmEiPgotICAJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotICAJPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMNEpSZW1vdmUvSW1wb3J0TWUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETDRKUmVtb3ZlL0ltcG9ydE1lLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ODk5ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMNEpSZW1vdmUvSW1wb3J0TWUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iSW1wb3J0TWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlMSI+Ci0gICAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgIAkJPHhzZDpzZXF1ZW5jZT4KLQotICAgICAgCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IkltcG9ydE1lTWVzc2FnZVJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJJbXBvcnRNZU1lc3NhZ2VSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iSW1wb3J0TWVNZXNzYWdlRXh0cmEiPgotICAJPHdzZGw6cGFydCBuYW1lPSJOZXdQYXJ0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gIAk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iPjwvd3NkbDpwYXJ0PgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gIAk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZTEiPjwvd3NkbDpwYXJ0PgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iSW1wb3J0TWUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOkltcG9ydE1lTWVzc2FnZVJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6SW1wb3J0TWVNZXNzYWdlUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydFBvcnRUeXBlRXh0cmEiPgotICAJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gIAkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLSAgCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotICAJPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkltcG9ydE1lU09BUCIgdHlwZT0idG5zOkltcG9ydE1lIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkltcG9ydEJpbmRpbmdFeHRyYSIKLSAgCXR5cGU9InRuczpJbXBvcnRQb3J0VHlwZUV4dHJhIj4KLSAgCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotICAJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotICAJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gIAkJPHNvYXA6b3BlcmF0aW9uCi0gIAkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvTmV3T3BlcmF0aW9uIiAvPgotICAJCTx3c2RsOmlucHV0PgotICAJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLSAgCQk8L3dzZGw6aW5wdXQ+Ci0gIAkJPHdzZGw6b3V0cHV0PgotICAJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLSAgCQk8L3dzZGw6b3V0cHV0PgotICAJPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iSW1wb3J0TWUiPgotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkltcG9ydE1lU09BUCIgbmFtZT0iSW1wb3J0TWVTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkltcG9ydFNlcnZpY2VFeHRyYSI+Ci0gIAk8d3NkbDpwb3J0IG5hbWU9IkltcG9ydFBvcnRFeHRyYSIgYmluZGluZz0idG5zOkltcG9ydEJpbmRpbmdFeHRyYSI+Ci0gIAkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0gIAk8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTREw0SlJlbW92ZS9SZW1vdmVWaWFXU0RMNEoud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETDRKUmVtb3ZlL1JlbW92ZVZpYVdTREw0Si53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTc0NGI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETDRKUmVtb3ZlL1JlbW92ZVZpYVdTREw0Si53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJSZW1vdmVWaWFXU0RMNEoiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SZW1vdmVWaWFXU0RMNEovIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUmVtb3ZlVmlhV1NETDRKLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGwxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lLyI+Ci0gICAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iIGxvY2F0aW9uPSJJbXBvcnRNZS53c2RsIj48L3dzZGw6aW1wb3J0PgotICAgIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SZW1vdmVWaWFXU0RMNEovIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UxIj4KLSAgICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgCQk8eHNkOnNlcXVlbmNlPgotCi0gICAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVtb3ZlVmlhV1NETDRKTWVzc2FnZVJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZW1vdmVWaWFXU0RMNEpNZXNzYWdlUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlbW92ZVZpYVdTREw0Sk1lc3NhZ2VFeHRyYSI+Ci0gIAk8d3NkbDpwYXJ0IG5hbWU9Ik5ld1BhcnQiIHR5cGU9InhzZDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiI+PC93c2RsOnBhcnQ+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlMSI+PC93c2RsOnBhcnQ+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJSZW1vdmVWaWFXU0RMNEoiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlbW92ZVZpYVdTREw0Sk1lc3NhZ2VSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlbW92ZVZpYVdTREw0Sk1lc3NhZ2VSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWFpblBvcnRUeXBlRXh0cmEiPgotICAJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gIAkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLSAgCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotICAJPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlJlbW92ZVZpYVdTREw0SlNPQVAiIHR5cGU9InRuczpSZW1vdmVWaWFXU0RMNEoiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUmVtb3ZlVmlhV1NETDRKL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9Ik1haW5CaW5kaW5nRXh0cmEiIHR5cGU9InRuczpNYWluUG9ydFR5cGVFeHRyYSI+Ci0gIAk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLSAgCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLSAgCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAJCTxzb2FwOm9wZXJhdGlvbgotICAJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JlbW92ZVZpYVdTREw0Si9OZXdPcGVyYXRpb24iIC8+Ci0gIAkJPHdzZGw6aW5wdXQ+Ci0gIAkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAJCTwvd3NkbDppbnB1dD4KLSAgCQk8d3NkbDpvdXRwdXQ+Ci0gIAkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAJCTwvd3NkbDpvdXRwdXQ+Ci0gIAk8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJSZW1vdmVWaWFXU0RMNEoiPgotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOlJlbW92ZVZpYVdTREw0SlNPQVAiIG5hbWU9IlJlbW92ZVZpYVdTREw0SlNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iTWFpblNlcnZpY2VFeHRyYSI+Ci0gIAk8d3NkbDpwb3J0IG5hbWU9Ik1haW5Qb3J0RXh0cmEiIGJpbmRpbmc9InRuczpNYWluQmluZGluZ0V4dHJhIj4KLSAgCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLSAgCTwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9CdWdGaXhlc1Rlc3QuamF2YQppbmRleCAwYmEwOWYyLi43ODc4OThlIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQnVnRml4ZXNUZXN0LmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0J1Z0ZpeGVzVGVzdC5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKIAogaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKIGltcG9ydCBqYXZheC53c2RsLlBvcnQ7CkBAIC02NCw3ICs2Myw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFV0aWw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwpAQCAtMjUxLDUzICsyNDksNiBAQAogICAgICAgfQogICAgIH0pOwogICAgIAotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiUmVtb3ZlQmluZGluZyIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdFJlbW92ZUJpbmRpbmcoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlJlbW92ZU1lc3NhZ2UiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RSZW1vdmVNZXNzYWdlKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJSZW1vdmVQb3J0VHlwZSIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdFJlbW92ZVBvcnRUeXBlKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJSZW1vdmVTZXJ2aWNlIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0UmVtb3ZlU2VydmljZSgpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiR2V0V1NETFR5cGUiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RHZXRXU0RMVHlwZSgpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiSW52YWxpZFhTREltcG9ydHMiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RJbnZhbGlkWFNESW1wb3J0cygpOwotICAgICAgfQotICAgIH0pOwogICAgIHJldHVybiBzdWl0ZTsKICAgfQogCkBAIC02MjYsMjYzICs1NzcsNyBAQAogCiAgICAgYXNzZXJ0U2FtZSh0eXBlc0VsZW1lbnQsIHNlY29uZENoaWxkKTsKICAgfQotICAKLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjQ1MjYzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlTWVzc2FnZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBsb2FkIGEgd3NkbCB0aGF0IGltcG9ydHMgYW5vdGhlciB3c2RsCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9XU0RMNEpSZW1vdmUvUmVtb3ZlVmlhV1NETDRKLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBTdHJpbmcgaW1wb3J0ZWRUYXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iOyAvLyROT04tTkxTLTEkCi0gICAgICBpbnQgdG90YWxNZXNzYWdlcyA9IDU7Ci0gICAgICBkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIHdzZGwgd2FzIGxvYWRlZCBwcm9wZXJseQotICAgICAgYXNzZXJ0RXF1YWxzKCJJbml0aWFsIG1lc3NhZ2VzIHdlcmUgbm90IHByb3Blcmx5IGxvYWRlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpKSIsIHRvdGFsTWVzc2FnZXMsIGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBhc3NlcnRFcXVhbHMoIkluaXRpYWwgbWVzc2FnZXMgd2VyZSBub3QgcHJvcGVybHkgbG9hZGVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpKSIsIHRvdGFsTWVzc2FnZXMsIGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgTm9kZUxpc3QgbWVzc2FnZUVsZW1lbnRzID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSwgV1NETENvbnN0YW50cy5NRVNTQUdFX0VMRU1FTlRfVEFHKTsKLSAgICAgIGFzc2VydEVxdWFscygiSW5pdGlhbCBtZXNzYWdlcyB3ZXJlIG5vdCBwcm9wZXJseSBsb2FkZWQgKGNoZWNrZWQgdmlhIERPTSkiLCB0b3RhbE1lc3NhZ2VzLCBtZXNzYWdlRWxlbWVudHMuZ2V0TGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBtZXNzYWdlIHdlJ3JlIGdvaW5nIHRvIHJlbW92ZSBjdXJyZW50bHkgZXhpc3RzCi0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiUmVtb3ZlVmlhV1NETDRKTWVzc2FnZUV4dHJhIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGphdmF4LndzZGwuTWVzc2FnZSBtZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJVbmFibGUgdG8gZmluZCBSZW1vdmVWaWFXU0RMNEpNZXNzYWdlRXh0cmEiLCBtZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyByZW1vdmUgdGhlIG1lc3NhZ2UKLSAgICAgIGphdmF4LndzZGwuTWVzc2FnZSByZW1vdmVkTWVzc2FnZSA9IGRlZmluaXRpb24ucmVtb3ZlTWVzc2FnZShtZXNzYWdlUU5hbWUpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgbWVzc2FnZSByZW1vdmVkIiwgbWVzc2FnZSwgcmVtb3ZlZE1lc3NhZ2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBtZXNzYWdlIGlzIGdvbmUKLSAgICAgIGphdmF4LndzZGwuTWVzc2FnZSBub25leGlzdE1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE51bGwoIlJlbW92ZVZpYVdTREw0Sk1lc3NhZ2VFeHRyYSBzdGlsbCBleGlzdHMgaW4gbW9kZWwiLCBub25leGlzdE1lc3NhZ2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBub3cgMSBsZXNzIG1lc3NhZ2UKLSAgICAgIGFzc2VydEVxdWFscygiTWVzc2FnZSB3YXMgbm90IHJlbW92ZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKSkiLCB0b3RhbE1lc3NhZ2VzLTEsIGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBhc3NlcnRFcXVhbHMoIk1lc3NhZ2Ugd2FzIG5vdCByZW1vdmVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpKSIsIHRvdGFsTWVzc2FnZXMtMSwgZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgbWVzc2FnZUVsZW1lbnRzID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSwgV1NETENvbnN0YW50cy5NRVNTQUdFX0VMRU1FTlRfVEFHKTsKLSAgICAgIGFzc2VydEVxdWFscygiTWVzc2FnZSB3YXMgbm90IHJlbW92ZWQgKGNoZWNrZWQgdmlhIERPTSkiLCB0b3RhbE1lc3NhZ2VzLTEsIG1lc3NhZ2VFbGVtZW50cy5nZXRMZW5ndGgoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIGltcG9ydGVkIG1lc3NhZ2Ugd2UncmUgZ29pbmcgdG8gcmVtb3ZlIGN1cnJlbnRseSBleGlzdHMKLSAgICAgIG1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZShpbXBvcnRlZFRhcmdldE5hbWVzcGFjZSwgIkltcG9ydE1lTWVzc2FnZUV4dHJhIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlVuYWJsZSB0byBmaW5kIEltcG9ydE1lTWVzc2FnZUV4dHJhIiwgbWVzc2FnZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gYXR0ZW1wdCB0byByZW1vdmUgdGhlIGltcG9ydGVkIG1lc3NhZ2UKLSAgICAgIHJlbW92ZWRNZXNzYWdlID0gZGVmaW5pdGlvbi5yZW1vdmVNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgICBhc3NlcnROdWxsKCJJbXBvcnRNZU1lc3NhZ2VFeHRyYSB3YXMgaW5jb3JyZWN0bHkgcmVtb3ZlZCIsIHJlbW92ZWRNZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgaW1wb3J0ZWQgbWVzc2FnZSBzdGlsbCBleGlzdHMKLSAgICAgIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIkltcG9ydE1lTWVzc2FnZUV4dHJhIG5vIGxvbmdlciBleGlzdHMiLCBtZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBub25leGlzdE1lc3NhZ2UgPSBkZWZpbml0aW9uLnJlbW92ZU1lc3NhZ2UobmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgImRvZXNudGV4aXN0IikpOyAvLyROT04tTkxTLTEkCi0gICAgICBhc3NlcnROdWxsKCJBIG5vbi1leGlzdGluZyBtZXNzYWdlIHdhcyByZW1vdmVkIiwgbm9uZXhpc3RNZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9ICAgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI0NTI2MwotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlbW92ZVNlcnZpY2UoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gbG9hZCBhIHdzZGwgdGhhdCBpbXBvcnRzIGFub3RoZXIgd3NkbAotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvV1NETDRKUmVtb3ZlL1JlbW92ZVZpYVdTREw0Si53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgU3RyaW5nIGltcG9ydGVkVGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0TWUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgaW50IHRvdGFsU2VydmljZXMgPSAyOwotICAgICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSB3c2RsIHdhcyBsb2FkZWQgcHJvcGVybHkKLSAgICAgIGFzc2VydEVxdWFscygiSW5pdGlhbCBzZXJ2aWNlcyB3ZXJlIG5vdCBwcm9wZXJseSBsb2FkZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKSkiLCB0b3RhbFNlcnZpY2VzLCBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0RXF1YWxzKCJJbml0aWFsIHNlcnZpY2VzIHdlcmUgbm90IHByb3Blcmx5IGxvYWRlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKSkiLCB0b3RhbFNlcnZpY2VzLCBkZWZpbml0aW9uLmdldEVTZXJ2aWNlcygpLnNpemUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIE5vZGVMaXN0IHNlcnZpY2VFbGVtZW50cyA9IGRlZmluaXRpb25FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksIFdTRExDb25zdGFudHMuU0VSVklDRV9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkluaXRpYWwgc2VydmljZXMgd2VyZSBub3QgcHJvcGVybHkgbG9hZGVkIChjaGVja2VkIHZpYSBET00pIiwgdG90YWxTZXJ2aWNlcywgc2VydmljZUVsZW1lbnRzLmdldExlbmd0aCgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgc2VydmljZSB3ZSdyZSBnb2luZyB0byByZW1vdmUgY3VycmVudGx5IGV4aXN0cwotICAgICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIk1haW5TZXJ2aWNlRXh0cmEiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5TZXJ2aWNlIHNlcnZpY2UgPSBkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlVuYWJsZSB0byBmaW5kIE1haW5TZXJ2aWNlRXh0cmEiLCBzZXJ2aWNlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyByZW1vdmUgdGhlIHNlcnZpY2UKLSAgICAgIGphdmF4LndzZGwuU2VydmljZSByZW1vdmVkU2VydmljZSA9IGRlZmluaXRpb24ucmVtb3ZlU2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3Qgc2VydmljZSByZW1vdmVkIiwgc2VydmljZSwgcmVtb3ZlZFNlcnZpY2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBzZXJ2aWNlIGlzIGdvbmUKLSAgICAgIGphdmF4LndzZGwuU2VydmljZSBub25leGlzdFNlcnZpY2UgPSBkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLSAgICAgIGFzc2VydE51bGwoIk1haW5TZXJ2aWNlRXh0cmEgc3RpbGwgZXhpc3RzIGluIG1vZGVsIiwgbm9uZXhpc3RTZXJ2aWNlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgbm93IDEgbGVzcyBzZXJ2aWNlCi0gICAgICBhc3NlcnRFcXVhbHMoIlNlcnZpY2Ugd2FzIG5vdCByZW1vdmVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkpIiwgdG90YWxTZXJ2aWNlcy0xLCBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0RXF1YWxzKCJTZXJ2aWNlIHdhcyBub3QgcmVtb3ZlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKSkiLCB0b3RhbFNlcnZpY2VzLTEsIGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIHNlcnZpY2VFbGVtZW50cyA9IGRlZmluaXRpb25FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksIFdTRExDb25zdGFudHMuU0VSVklDRV9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIlNlcnZpY2Ugd2FzIG5vdCByZW1vdmVkIChjaGVja2VkIHZpYSBET00pIiwgdG90YWxTZXJ2aWNlcy0xLCBzZXJ2aWNlRWxlbWVudHMuZ2V0TGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBpbXBvcnRlZCBzZXJ2aWNlIHdlJ3JlIGdvaW5nIHRvIHJlbW92ZSBjdXJyZW50bHkgZXhpc3RzCi0gICAgICBzZXJ2aWNlUU5hbWUgPSBuZXcgUU5hbWUoaW1wb3J0ZWRUYXJnZXROYW1lc3BhY2UsICJJbXBvcnRTZXJ2aWNlRXh0cmEiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2VydmljZSA9IGRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVW5hYmxlIHRvIGZpbmQgSW1wb3J0U2VydmljZUV4dHJhIiwgc2VydmljZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gYXR0ZW1wdCB0byByZW1vdmUgdGhlIGltcG9ydGVkIHNlcnZpY2UKLSAgICAgIHJlbW92ZWRTZXJ2aWNlID0gZGVmaW5pdGlvbi5yZW1vdmVTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBhc3NlcnROdWxsKCJJbXBvcnRTZXJ2aWNlRXh0cmEgd2FzIGluY29ycmVjdGx5IHJlbW92ZWQiLCByZW1vdmVkU2VydmljZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIGltcG9ydGVkIHNlcnZpY2Ugc3RpbGwgZXhpc3RzCi0gICAgICBzZXJ2aWNlID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJJbXBvcnRTZXJ2aWNlRXh0cmEgbm8gbG9uZ2VyIGV4aXN0cyIsIHNlcnZpY2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIG5vbmV4aXN0U2VydmljZSA9IGRlZmluaXRpb24ucmVtb3ZlU2VydmljZShuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiZG9lc250ZXhpc3QiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGFzc2VydE51bGwoIkEgbm9uLWV4aXN0aW5nIHNlcnZpY2Ugd2FzIHJlbW92ZWQiLCBub25leGlzdFNlcnZpY2UpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0gICAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjQ1MjYzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlQmluZGluZygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBsb2FkIGEgd3NkbCB0aGF0IGltcG9ydHMgYW5vdGhlciB3c2RsCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9XU0RMNEpSZW1vdmUvUmVtb3ZlVmlhV1NETDRKLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBTdHJpbmcgaW1wb3J0ZWRUYXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iOyAvLyROT04tTkxTLTEkCi0gICAgICBpbnQgdG90YWxCaW5kaW5ncyA9IDI7Ci0gICAgICBkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIHdzZGwgd2FzIGxvYWRlZCBwcm9wZXJseQotICAgICAgYXNzZXJ0RXF1YWxzKCJJbml0aWFsIGJpbmRpbmdzIHdlcmUgbm90IHByb3Blcmx5IGxvYWRlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpKSIsIHRvdGFsQmluZGluZ3MsIGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBhc3NlcnRFcXVhbHMoIkluaXRpYWwgYmluZGluZ3Mgd2VyZSBub3QgcHJvcGVybHkgbG9hZGVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpKSIsIHRvdGFsQmluZGluZ3MsIGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgTm9kZUxpc3QgYmluZGluZ0VsZW1lbnRzID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSwgV1NETENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHKTsKLSAgICAgIGFzc2VydEVxdWFscygiSW5pdGlhbCBiaW5kaW5ncyB3ZXJlIG5vdCBwcm9wZXJseSBsb2FkZWQgKGNoZWNrZWQgdmlhIERPTSkiLCB0b3RhbEJpbmRpbmdzLCBiaW5kaW5nRWxlbWVudHMuZ2V0TGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBiaW5kaW5nIHdlJ3JlIGdvaW5nIHRvIHJlbW92ZSBjdXJyZW50bHkgZXhpc3RzCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiTWFpbkJpbmRpbmdFeHRyYSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBqYXZheC53c2RsLkJpbmRpbmcgYmluZGluZyA9IGRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVW5hYmxlIHRvIGZpbmQgTWFpbkJpbmRpbmdFeHRyYSIsIGJpbmRpbmcpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIHJlbW92ZSB0aGUgYmluZGluZwotICAgICAgamF2YXgud3NkbC5CaW5kaW5nIHJlbW92ZWRCaW5kaW5nID0gZGVmaW5pdGlvbi5yZW1vdmVCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBiaW5kaW5nIHJlbW92ZWQiLCBiaW5kaW5nLCByZW1vdmVkQmluZGluZyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIGJpbmRpbmcgaXMgZ29uZQotICAgICAgamF2YXgud3NkbC5CaW5kaW5nIG5vbmV4aXN0QmluZGluZyA9IGRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotICAgICAgYXNzZXJ0TnVsbCgiTWFpbkJpbmRpbmdFeHRyYSBzdGlsbCBleGlzdHMgaW4gbW9kZWwiLCBub25leGlzdEJpbmRpbmcpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBub3cgMSBsZXNzIGJpbmRpbmcKLSAgICAgIGFzc2VydEVxdWFscygiQmluZGluZyB3YXMgbm90IHJlbW92ZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKSkiLCB0b3RhbEJpbmRpbmdzLTEsIGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBhc3NlcnRFcXVhbHMoIkJpbmRpbmcgd2FzIG5vdCByZW1vdmVkIChjaGVja2VkIHZpYSBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpKSIsIHRvdGFsQmluZGluZ3MtMSwgZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgYmluZGluZ0VsZW1lbnRzID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSwgV1NETENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHKTsKLSAgICAgIGFzc2VydEVxdWFscygiQmluZGluZyB3YXMgbm90IHJlbW92ZWQgKGNoZWNrZWQgdmlhIERPTSkiLCB0b3RhbEJpbmRpbmdzLTEsIGJpbmRpbmdFbGVtZW50cy5nZXRMZW5ndGgoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIGltcG9ydGVkIGJpbmRpbmcgd2UncmUgZ29pbmcgdG8gcmVtb3ZlIGN1cnJlbnRseSBleGlzdHMKLSAgICAgIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZShpbXBvcnRlZFRhcmdldE5hbWVzcGFjZSwgIkltcG9ydEJpbmRpbmdFeHRyYSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBiaW5kaW5nID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJVbmFibGUgdG8gZmluZCBJbXBvcnRCaW5kaW5nRXh0cmEiLCBiaW5kaW5nKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgaW1wb3J0ZWQgYmluZGluZwotICAgICAgcmVtb3ZlZEJpbmRpbmcgPSBkZWZpbml0aW9uLnJlbW92ZUJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLSAgICAgIGFzc2VydE51bGwoIkltcG9ydEJpbmRpbmdFeHRyYSB3YXMgaW5jb3JyZWN0bHkgcmVtb3ZlZCIsIHJlbW92ZWRCaW5kaW5nKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgaW1wb3J0ZWQgYmluZGluZyBzdGlsbCBleGlzdHMKLSAgICAgIGJpbmRpbmcgPSBkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIkltcG9ydEJpbmRpbmdFeHRyYSBubyBsb25nZXIgZXhpc3RzIiwgYmluZGluZyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgbm9uZXhpc3RCaW5kaW5nID0gZGVmaW5pdGlvbi5yZW1vdmVCaW5kaW5nKG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJkb2VzbnRleGlzdCIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0TnVsbCgiQSBub24tZXhpc3RpbmcgYmluZGluZyB3YXMgcmVtb3ZlZCIsIG5vbmV4aXN0QmluZGluZyk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNDUyNjMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVQb3J0VHlwZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBsb2FkIGEgd3NkbCB0aGF0IGltcG9ydHMgYW5vdGhlciB3c2RsCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9XU0RMNEpSZW1vdmUvUmVtb3ZlVmlhV1NETDRKLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBTdHJpbmcgaW1wb3J0ZWRUYXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRNZS8iOyAvLyROT04tTkxTLTEkCi0gICAgICBpbnQgdG90YWxQb3J0VHlwZXMgPSAyOwotICAgICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSB3c2RsIHdhcyBsb2FkZWQgcHJvcGVybHkKLSAgICAgIGFzc2VydEVxdWFscygiSW5pdGlhbCBwb3J0IHR5cGVzIHdlcmUgbm90IHByb3Blcmx5IGxvYWRlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKSkiLCB0b3RhbFBvcnRUeXBlcywgZGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBhc3NlcnRFcXVhbHMoIkluaXRpYWwgcG9ydCB0eXBlcyB3ZXJlIG5vdCBwcm9wZXJseSBsb2FkZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpKSIsIHRvdGFsUG9ydFR5cGVzLCBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBwb3J0VHlwZUVsZW1lbnRzID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSwgV1NETENvbnN0YW50cy5QT1JUX1RZUEVfRUxFTUVOVF9UQUcpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJJbml0aWFsIHBvcnQgdHlwZXMgd2VyZSBub3QgcHJvcGVybHkgbG9hZGVkIChjaGVja2VkIHZpYSBET00pIiwgdG90YWxQb3J0VHlwZXMsIHBvcnRUeXBlRWxlbWVudHMuZ2V0TGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBwb3J0IHR5cGUgd2UncmUgZ29pbmcgdG8gcmVtb3ZlIGN1cnJlbnRseSBleGlzdHMKLSAgICAgIFFOYW1lIHBvcnRUeXBlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiTWFpblBvcnRUeXBlRXh0cmEiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5Qb3J0VHlwZSBwb3J0VHlwZSA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGUocG9ydFR5cGVRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJVbmFibGUgdG8gZmluZCBNYWluUG9ydFR5cGVFeHRyYSIsIHBvcnRUeXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyByZW1vdmUgdGhlIHBvcnRUeXBlCi0gICAgICBqYXZheC53c2RsLlBvcnRUeXBlIHJlbW92ZWRQb3J0VHlwZSA9IGRlZmluaXRpb24ucmVtb3ZlUG9ydFR5cGUocG9ydFR5cGVRTmFtZSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBwb3J0VHlwZSByZW1vdmVkIiwgcG9ydFR5cGUsIHJlbW92ZWRQb3J0VHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gbWFrZSBzdXJlIHBvcnRUeXBlIGlzIGdvbmUKLSAgICAgIGphdmF4LndzZGwuUG9ydFR5cGUgbm9uZXhpc3RQb3J0VHlwZSA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGUocG9ydFR5cGVRTmFtZSk7Ci0gICAgICBhc3NlcnROdWxsKCJNYWluUG9ydFR5cGVFeHRyYSBzdGlsbCBleGlzdHMgaW4gbW9kZWwiLCBub25leGlzdFBvcnRUeXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgbm93IDEgbGVzcyBwb3J0VHlwZQotICAgICAgYXNzZXJ0RXF1YWxzKCJQb3J0VHlwZSB3YXMgbm90IHJlbW92ZWQgKGNoZWNrZWQgdmlhIGRlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkpIiwgdG90YWxQb3J0VHlwZXMtMSwgZGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKS5zaXplKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICBhc3NlcnRFcXVhbHMoIlBvcnRUeXBlIHdhcyBub3QgcmVtb3ZlZCAoY2hlY2tlZCB2aWEgZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkpIiwgdG90YWxQb3J0VHlwZXMtMSwgZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIHBvcnRUeXBlRWxlbWVudHMgPSBkZWZpbml0aW9uRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLCBXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRV9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIlBvcnRUeXBlIHdhcyBub3QgcmVtb3ZlZCAoY2hlY2tlZCB2aWEgRE9NKSIsIHRvdGFsUG9ydFR5cGVzLTEsIHBvcnRUeXBlRWxlbWVudHMuZ2V0TGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIC8vIG1ha2Ugc3VyZSBpbXBvcnRlZCBwb3J0VHlwZSB3ZSdyZSBnb2luZyB0byByZW1vdmUgY3VycmVudGx5IGV4aXN0cwotICAgICAgcG9ydFR5cGVRTmFtZSA9IG5ldyBRTmFtZShpbXBvcnRlZFRhcmdldE5hbWVzcGFjZSwgIkltcG9ydFBvcnRUeXBlRXh0cmEiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcG9ydFR5cGUgPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiVW5hYmxlIHRvIGZpbmQgSW1wb3J0UG9ydFR5cGVFeHRyYSIsIHBvcnRUeXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgaW1wb3J0ZWQgcG9ydFR5cGUKLSAgICAgIHJlbW92ZWRQb3J0VHlwZSA9IGRlZmluaXRpb24ucmVtb3ZlUG9ydFR5cGUocG9ydFR5cGVRTmFtZSk7Ci0gICAgICBhc3NlcnROdWxsKCJJbXBvcnRQb3J0VHlwZUV4dHJhIHdhcyBpbmNvcnJlY3RseSByZW1vdmVkIiwgcmVtb3ZlZFBvcnRUeXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICAvLyBtYWtlIHN1cmUgaW1wb3J0ZWQgcG9ydFR5cGUgc3RpbGwgZXhpc3RzCi0gICAgICBwb3J0VHlwZSA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGUocG9ydFR5cGVRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJJbXBvcnRQb3J0VHlwZUV4dHJhIG5vIGxvbmdlciBleGlzdHMiLCBwb3J0VHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgbm9uZXhpc3RQb3J0VHlwZSA9IGRlZmluaXRpb24ucmVtb3ZlUG9ydFR5cGUobmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgImRvZXNudGV4aXN0IikpOyAvLyROT04tTkxTLTEkCi0gICAgICBhc3NlcnROdWxsKCJBIG5vbi1leGlzdGluZyBwb3J0VHlwZSB3YXMgcmVtb3ZlZCIsIG5vbmV4aXN0UG9ydFR5cGUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0gICAgICAKLSAgfQotICAKKwogICAvKioKICAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNTA1NTMKICAgICovCkBAIC0xNTY0LDExMSArMTI1OSw0IEBACiAgICAgICBmYWlsKCk7CiAgICAgfSAgICAgIAogICB9Ci0gIAotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNDcyOTYKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRXU0RMVHlwZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBsb2FkIGEgd3NkbAotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvR2V0V1NETFR5cGUvQmFkSW1wb3J0LndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICAgIC8vIHRlc3QgYWxsIGRpcmVjdCBjaGlsZCBlbGVtZW50cyBvZiBkZWZpbml0aW9uIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBleHBlY3RlZCB0eXBlCi0gICAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBpbnQgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoZGVmaW5pdGlvbkVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJEZWZpbml0aW9uIHR5cGUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCIsIFdTRExDb25zdGFudHMuREVGSU5JVElPTiwgdHlwZSk7ICAvLyROT04tTkxTLTEkCi0KLSAgICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBkZWZpbml0aW9uRWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oMCk7Ci0gICAgICAvLyBza2lwIG92ZXIgdGV4dCBub2RlCi0gICAgICBpZiAobi5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoKEVsZW1lbnQpbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkltcG9ydCB0eXBlIGluY29ycmVjdGx5IGlkZW50aWZpZWQiLCBXU0RMQ29uc3RhbnRzLklNUE9SVCwgdHlwZSk7ICAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAvLyBza2lwIG92ZXIgdGV4dCBub2RlCi0gICAgICBpZiAobi5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoKEVsZW1lbnQpbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoInhzZDppbXBvcnQgdHlwZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIiwgLTEsIHR5cGUpOyAgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgLy8gc2tpcCBvdmVyIHRleHQgbm9kZQotICAgICAgaWYgKG4uZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIHR5cGUgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKCJUeXBlcyB0eXBlIGluY29ycmVjdGx5IGlkZW50aWZpZWQiLCBXU0RMQ29uc3RhbnRzLlRZUEVTLCB0eXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgLy8gc2tpcCBvdmVyIHRleHQgbm9kZQotICAgICAgaWYgKG4uZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIHR5cGUgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKCJNZXNzYWdlIHR5cGUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCIsIFdTRExDb25zdGFudHMuTUVTU0FHRSwgdHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAKLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAvLyBza2lwIG92ZXIgdGV4dCBub2RlCi0gICAgICBpZiAobi5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoKEVsZW1lbnQpbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoIk1lc3NhZ2UgdHlwZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIiwgV1NETENvbnN0YW50cy5NRVNTQUdFLCB0eXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgLy8gc2tpcCBvdmVyIHRleHQgbm9kZQotICAgICAgaWYgKG4uZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIHR5cGUgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKCJQb3J0IHR5cGUgdHlwZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIiwgV1NETENvbnN0YW50cy5QT1JUX1RZUEUsIHR5cGUpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAvLyBza2lwIG92ZXIgdGV4dCBub2RlCi0gICAgICBpZiAobi5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgdHlwZSA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoKEVsZW1lbnQpbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkJpbmRpbmcgdHlwZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIiwgV1NETENvbnN0YW50cy5CSU5ESU5HLCB0eXBlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgLy8gc2tpcCBvdmVyIHRleHQgbm9kZQotICAgICAgaWYgKG4uZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIHR5cGUgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKCJTZXJ2aWNlIHR5cGUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCIsIFdTRExDb25zdGFudHMuU0VSVklDRSwgdHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNDcyOTYKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkWFNESW1wb3J0cygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBsb2FkIGEgd3NkbCB0aGF0IGNvbnRhaW5zIGFuIHhzZDppbXBvcnQgb3V0c2lkZSBvZiB3c2RsOnR5cGVzCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9HZXRXU0RMVHlwZS9CYWRJbXBvcnQud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIAotICAgICAgLy8gdGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIHZhbGlkIHdzZGw6aW1wb3J0Ci0gICAgICBNYXAgaW1wb3J0cyA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGltcG9ydHMiLCAxLCBpbXBvcnRzLnNpemUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgLy8gdGhlIGJhZCB4c2Q6aW1wb3J0IHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGV4dGVuc2liaWxpdHkgZWxlbWVudAotICAgICAgTGlzdCBleHRFbGVtZW50cyA9IGRlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBudW1iZXIgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyIsIDEsIGV4dEVsZW1lbnRzLnNpemUoKSk7ICAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0gICAgICAKLSAgfQogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL0FsbFdTRExVSVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQWxsV1NETFVJVGVzdHMuamF2YQppbmRleCBmYjIxZDcyLi44NzI0NjRkIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQWxsV1NETFVJVGVzdHMuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQWxsV1NETFVJVGVzdHMuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC00MCw3ICs0MCw1IEBACiAgICAgYWRkVGVzdChXU0RMWE1MTlNDbGVhbnVwVGVzdHMuc3VpdGUoKSk7CiAgICAgLy8gVW51c2VkIFdTREwgSW1wb3J0cwogICAgIGFkZFRlc3QoVW51c2VkV1NETEltcG9ydHNUZXN0cy5zdWl0ZSgpKTsKLSAgICAvLyBNaXNjIGJ1ZyBmaXhlcwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwogICB9CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMDMwZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzLmludGVybmFsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5YU0RUeXBlU3lzdGVtUHJvdmlkZXI7Ci0KLQotLyoqCi0gKiBDb250YWlucyB1bml0IHRlc3RzIGZvciByZXBvcnRlZCBidWdzLgotICovCi1wdWJsaWMgY2xhc3MgQnVnRml4ZXNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIHB1YmxpYyBCdWdGaXhlc1Rlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZShCdWdGaXhlc1Rlc3QuY2xhc3MuZ2V0TmFtZSgpKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiQnVpbHRJblR5cGVzIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RCdWlsdEluVHlwZXMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjQzODAwCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QnVpbHRJblR5cGVzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oVENfUk9PVF9GT0xERVIgKyAiL0J1aWx0SW5UeXBlL05ld1dTRExGaWxlMS53c2RsIik7ICAvLyROT04tTkxTLTEkCi0KLSAgICAgIFhTRFR5cGVTeXN0ZW1Qcm92aWRlciBwcm92aWRlciA9IG5ldyBYU0RUeXBlU3lzdGVtUHJvdmlkZXIoKTsKLSAgICAgIExpc3QgdHlwZXMgPSBwcm92aWRlci5nZXRCdWlsdEluVHlwZU5hbWVzTGlzdChkZWZpbml0aW9uKTsKLSAgICAgIGFzc2VydFRydWUoIlVuYWJsZSB0byBmaW5kIGJ1aWx0IGluIHNjaGVtYSB0eXBlcyIsICF0eXBlcy5pc0VtcHR5KCkpOyAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9CdWlsdEluVHlwZS9OZXdXU0RMRmlsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9CdWlsdEluVHlwZS9OZXdXU0RMRmlsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU0YTc3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvQnVpbHRJblR5cGUvTmV3V1NETEZpbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTmV3V1NETEZpbGUxIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OZXdXU0RMRmlsZTEvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUxLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczpwPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUxLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3AzIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3AzUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJvcDNSZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6b3AzUmVzcG9uc2UiPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0ib3AzUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpvcDMiPjwvd3NkbDpwYXJ0PgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld1BhcnQiIHR5cGU9InA6c3RyaW5nIj48L3dzZGw6cGFydD4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdQYXJ0MSIgdHlwZT0icDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld1BhcnQyIiB0eXBlPSJwOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3UGFydDQiIHR5cGU9InA6c3RyaW5nIj48L3dzZGw6cGFydD4KLQkKLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdQYXJ0MyIgdHlwZT0icDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9InAyIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Im9wMyI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6b3AzUmVxdWVzdCIgbmFtZT0iYWFhIj48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOm9wM1Jlc3BvbnNlIiBuYW1lPSJiYmIiPjwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iYjEiIHR5cGU9InRuczpwMiI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJvcDMiPgotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUxL29wMyIgLz4KLQkJCTx3c2RsOmlucHV0IG5hbWU9ImFhYSI+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbmFtZT0iYmJiIj4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJzMSI+Ci0JCTx3c2RsOnBvcnQgbmFtZT0iTmV3UG9ydCIgYmluZGluZz0idG5zOmIxIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0dldFdTRExUeXBlL0JhZEltcG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvSW1wb3J0MDAxLndzZGwKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9HZXRXU0RMVHlwZS9CYWRJbXBvcnQud3NkbApyZW5hbWUgdG8gdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvSW1wb3J0MDAxLndzZGwKaW5kZXggN2E4YTdkMS4uMTFiNWE5ZCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9HZXRXU0RMVHlwZS9CYWRJbXBvcnQud3NkbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvQ29yZS9JbXBvcnQwMDEud3NkbApAQCAtMSw5ICsxLDcgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2JhZHdzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJiYWR3c2RsIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvYmFkd3NkbC8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydE1lLyIgbG9jYXRpb249IkltcG9ydE1lLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9CYWRJbXBvcnQiIHNjaGVtYUxvY2F0aW9uPSJCYWRJbXBvcnQueHNkIj48L3hzZDppbXBvcnQ+Cis8d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydDAwMSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iPgogICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvYmFkd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgogICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgogICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+CkBAIC0yNiwxNiArMjQsMTYgQEAKICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+CiAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KICAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9ImJhZHdzZGwiPgorICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJJbXBvcnQwMDEiPgogICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgogICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KICAgICA8L3dzZGw6b3BlcmF0aW9uPgogICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iYmFkd3NkbFNPQVAiIHR5cGU9InRuczpiYWR3c2RsIj4KKyAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnQwMDFTT0FQIiB0eXBlPSJ0bnM6SW1wb3J0MDAxIj4KICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2JhZHdzZGwvTmV3T3BlcmF0aW9uIi8+CisgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvTmV3T3BlcmF0aW9uIi8+CiAgICAgICA8d3NkbDppbnB1dD4KICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KICAgICAgIDwvd3NkbDppbnB1dD4KQEAgLTQ0LDggKzQyLDggQEAKICAgICAgIDwvd3NkbDpvdXRwdXQ+CiAgICAgPC93c2RsOm9wZXJhdGlvbj4KICAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iYmFkd3NkbCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6YmFkd3NkbFNPQVAiIG5hbWU9ImJhZHdzZGxTT0FQIj4KKyAgPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnQwMDEiPgorICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkltcG9ydDAwMVNPQVAiIG5hbWU9IkltcG9ydDAwMVNPQVAiPgogICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KICAgICA8L3dzZGw6cG9ydD4KICAgPC93c2RsOnNlcnZpY2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvQ29yZS9NYWluMDAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvQ29yZS9NYWluMDAxLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhZTQyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDEud3NkbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisJeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDEvIgorCW5hbWU9Ik1haW4wMDEiCisJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDEvIgorCXhtbG5zOndzZGwxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iPgorCQorCTwhLS0gVW51c2VkIEltcG9ydCAtLT4KKwkKKwk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCisJCWxvY2F0aW9uPSJJbXBvcnQwMDEud3NkbCI+CisJPC93c2RsOmltcG9ydD4KKzwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDIud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTAyMDkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvTWFpbjAwMi53c2RsCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKwl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwMi8iCisgICAgbmFtZT0iTWFpbjAwMiIKKwl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwMi8iCisJeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKKwl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIj4KKwkKKwk8IS0tIFVzZWQgSW1wb3J0IC0tPgorCQorCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIKKwkJbG9jYXRpb249IkltcG9ydDAwMS53c2RsIj4KKwk8L3dzZGw6aW1wb3J0PgorCQorCTx3c2RsOnNlcnZpY2UgbmFtZT0iTWFpblNlcnZpY2UiPgorCQk8d3NkbDpwb3J0IG5hbWU9Ik5ld1BvcnQiIGJpbmRpbmc9IndzZGwxOkltcG9ydDAwMVNPQVAiPgorCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iPjwvc29hcDphZGRyZXNzPgorCQk8L3dzZGw6cG9ydD4KKwk8L3dzZGw6c2VydmljZT4KKzwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDMud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGE2MDJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvTWFpbjAwMy53c2RsCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKwl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDAzLyIKKyAgICBuYW1lPSJNYWluMDAzIgorICAgCXhtbG5zOndzZGwxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCisJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDMvIj4KKworCTwhLS0gVW51c2VkIEltcG9ydCAtLT4KKwkKKwk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCisJCWxvY2F0aW9uPSJJbXBvcnQwMDEud3NkbCI+CisJPC93c2RsOmltcG9ydD4KKzwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDQud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjMyYjVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvTWFpbjAwNC53c2RsCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKwl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA0LyIKKyAgICBuYW1lPSJNYWluMDA0IgorCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA0LyIKKwl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgorCXhtbG5zOndzZGwxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iPgorCQorCTwhLS0gVXNlZCBJbXBvcnQgLS0+CisJCisJPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIgorCQlsb2NhdGlvbj0iSW1wb3J0MDAxLndzZGwiPgorCTwvd3NkbDppbXBvcnQ+CisJCisJPHdzZGw6c2VydmljZSBuYW1lPSJNYWluU2VydmljZSI+CisJCTx3c2RsOnBvcnQgbmFtZT0iTmV3UG9ydCIgYmluZGluZz0id3NkbDE6SW1wb3J0MDAxU09BUCI+CisJCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyI+PC9zb2FwOmFkZHJlc3M+CisJCTwvd3NkbDpwb3J0PgorCTwvd3NkbDpzZXJ2aWNlPgorPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvTWFpbjAwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvTWFpbjAwNS53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYzEzYWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvQ29yZS9NYWluMDA1LndzZGwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisJeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDUvIgorICAgIG5hbWU9Ik1haW4wMDUiCisgICAJeG1sbnM6d3NkbDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIKKwl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwNS8iPgorCisJPCEtLSBVbnVzZWQgSW1wb3J0IC0tPgorCQorCTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCisJCWxvY2F0aW9uPSJJbXBvcnQwMDEud3NkbCI+CisJPC9pbXBvcnQ+Cis8L2RlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvTWFpbjAwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvTWFpbjAwNi53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZTIwYzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvQ29yZS9NYWluMDA2LndzZGwKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisJeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDYvIgorICAgIG5hbWU9Ik1haW4wMDYiCisJeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKKyAgIAl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIgorCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluMDA2LyI+CisKKwk8IS0tIFVzZWQgSW1wb3J0IC0tPgorCQorCTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCisJCWxvY2F0aW9uPSJJbXBvcnQwMDEud3NkbCI+CisJPC9pbXBvcnQ+CisJCisJPHNlcnZpY2UgbmFtZT0iTWFpblNlcnZpY2UiPgorCQk8cG9ydCBuYW1lPSJOZXdQb3J0IiBiaW5kaW5nPSJ3c2RsMTpJbXBvcnQwMDFTT0FQIj4KKwkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIj48L3NvYXA6YWRkcmVzcz4KKwkJPC9wb3J0PgorCTwvc2VydmljZT4KKzwvZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvQ29yZS9NYWluMDA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1dTREwvV1NETEltcG9ydHMvQ29yZS9NYWluMDA3LndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2NmI0YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDcud3NkbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisJeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDcvIgorCW5hbWU9Ik1haW4wMDciCisJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4wMDcvIgorCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iPgorCQorCTwhLS0gVW51c2VkIEltcG9ydCAtLT4KKwkKKwk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDAwMS8iCisJCWxvY2F0aW9uPSJJbXBvcnQwMDEud3NkbCI+CisJPC93c2RsOmltcG9ydD4KKzwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDgud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTA3MGRjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvTWFpbjAwOC53c2RsCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKwl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwNy8iCisJbmFtZT0iTWFpbjAwNyIKKwl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwNy8iCisJeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKKwl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQwMDEvIj4KKwkKKwk8IS0tIFVzZWQgSW1wb3J0IC0tPgorCQorCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0MDAxLyIKKwkJbG9jYXRpb249IkltcG9ydDAwMS53c2RsIj4KKwk8L3dzZGw6aW1wb3J0PgorCQorCTx3c2RsOnNlcnZpY2UgbmFtZT0iTWFpblNlcnZpY2UiPgorCQk8d3NkbDpwb3J0IG5hbWU9Ik5ld1BvcnQiIGJpbmRpbmc9IkltcG9ydDAwMVNPQVAiPgorCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iPjwvc29hcDphZGRyZXNzPgorCQk8L3dzZGw6cG9ydD4KKwk8L3dzZGw6c2VydmljZT4KKzwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvV1NETC9XU0RMSW1wb3J0cy9Db3JlL01haW4wMDkud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGNiZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkudGVzdHMvdGVzdHJlc291cmNlcy9XU0RML1dTRExJbXBvcnRzL0NvcmUvTWFpbjAwOS53c2RsCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKwl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwOS8iCisJbmFtZT0iTWFpbjAwOSIKKwl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbjAwOS8iPgorCQorCTwhLS0gVW51c2VkIEludmFsaWQgSW1wb3J0IC0tPgorCQorCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRmlsZU5vdEZvdW5kLyIKKwkJbG9jYXRpb249IldTRExGaWxlTm90Rm91bmQud3NkbCI+CisJPC93c2RsOmltcG9ydD4KKzwvd3NkbDpkZWZpbml0aW9ucz4K