ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDBlNGE2OWQuLjlhOGE2ZGUgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTUsNCArMTUsNCBAQAogLm5iLWdyYWRsZS1wcm9wZXJ0aWVzCiAubmItZ3JhZGxlCiAuZ3JhZGxldGFza25hbWVjYWNoZQotCitwcml2YXRlL2NhY2hlCmRpZmYgLS1naXQgYS9LRVlTIGIvS0VZUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWEyZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvS0VZUwpAQCAtMCwwICsxLDI1OCBAQAorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBHUEcga2V5cyBvZiBBcGFjaGUgWmVzdCBkZXZlbG9wZXJzLgorCitVc2VyczogICAgZ3BnIC0taW1wb3J0IEtFWVMKKworRGV2ZWxvcGVyczoKKyAgQ3JlYXRlIGEga2V5OgorICAgIGdwZyAtLWdlbi1rZXkKKworICBBZGRpbmcgeW91IGtleSB0byB0aGlzIGZpbGU6CisgICAgKGdwZyAtLWxpc3Qtc2lncyA8a2V5IGlkPiAmJiBncGcgLS1hcm1vciAtLWV4cG9ydCA8a2V5IGlkPikgPj4gdGhpcyBmaWxlLgorCisgIFB1Ymxpc2ggdGhlIGtleToKKyAgICBncGcgLS1rZXlzZXJ2ZXIgcGdwLm1pdC5lZHUgLS1zZW5kLWtleXMgPGtleSBpZD4KKworICBTaWduaW5nIGFub3RoZXIgZGV2ZWxvcGVycyBrZXk6CisgICAgZ3BnIC0ta2V5c2VydmVyIHBncC5taXQuZWR1IC0tc2VhcmNoLWtleXMgPG5hbWUgb3IgZW1haWw+CisgICAgZ3BnIC0ta2V5c2VydmVyIHBncC5taXQuZWR1IC0tcmVjdi1rZXlzIDxvdGhlciBrZXkgaWQ+CisgICAgZ3BnIC11IDx5b3VyIGtleSBpZD4gLS1zaWduLWtleSA8b3RoZXIga2V5IGlkPgorICAgIGdwZyAtLWtleXNlcnZlciBwZ3AubWl0LmVkdSAtLXNlbmQta2V5cyA8b3RoZXIga2V5IGlkPgorCisgIEFkZGl0aW9uYWwgSW5mb3JtYXRpb246CisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2Rldi9vcGVucGdwLmh0bWwjZ2VuZXJhdGUta2V5CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQTEVBU0UgTk9URSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgUmVsZWFzZXMgd2lsbCBiZSBzaWduZWQgdXNpbmcgb25lIG9mIHRoZSBrZXlzIHByZXNlbnQgaW4gdGhpcyBmaWxlLiBUaGlzIGZpbGUKKyAgd2lsbCBiZSBhdmFpbGFibGUgd2l0aCB0aGUgZGlzdHJpYnV0ZWQgQXBhY2hlIFplc3QgcmVsZWFzZXMgYXQ6CisKKyAgICAgIGh0dHBzOi8vZGlzdC5hcGFjaGUub3JnL3JlcG9zL2Rpc3QvemVzdC9LRVlTCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3B1YiAgIDQwOTZSLzMyRDQwQUQ2IDIwMDktMDktMTkKK3VpZCAgICAgICAgICAgICAgICAgIE5pY2xhcyBIZWRobWFuIDxuaWNsYXNAaGVkaG1hbi5vcmc+CitzaWcgMyAgICAgICAgMzJENDBBRDYgMjAwOS0wOS0xOSAgTmljbGFzIEhlZGhtYW4gPG5pY2xhc0BoZWRobWFuLm9yZz4KK3NpZyAgICAgICAgICAzM0Q3MEZDMyAyMDA5LTA5LTE5ICBbVXNlciBJRCBub3QgZm91bmRdCitzaWcgICAgICAgICAgQjA3MTM0NkQgMjAwOS0wOS0xOSAgW1VzZXIgSUQgbm90IGZvdW5kXQorc2lnICAgICAgICAgIDdEMDM5MUFDIDIwMTUtMDQtMjcgIFBhdWwgTWVybGluIChBcGFjaGUpIDxwYXVsbWVybGluQGFwYWNoZS5vcmc+Cit1aWQgICAgICAgICAgICAgICAgICBOaWNsYXMgSGVkaG1hbiAoQXBhY2hlIENvZGUgU2lnbmluZyBLZXkpIDxuaWNsYXNAYXBhY2hlLm9yZz4KK3NpZyAzICAgICAgICAzMkQ0MEFENiAyMDA5LTA5LTE5ICBOaWNsYXMgSGVkaG1hbiA8bmljbGFzQGhlZGhtYW4ub3JnPgorc2lnICAgICAgICAgIDdEMDM5MUFDIDIwMTUtMDQtMjcgIFBhdWwgTWVybGluIChBcGFjaGUpIDxwYXVsbWVybGluQGFwYWNoZS5vcmc+CitzdWIgICA0MDk2Ui8zMUFBRUI3NSAyMDA5LTA5LTE5CitzaWcgICAgICAgICAgMzJENDBBRDYgMjAwOS0wOS0xOSAgTmljbGFzIEhlZGhtYW4gPG5pY2xhc0BoZWRobWFuLm9yZz4KKworLS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCitWZXJzaW9uOiBHbnVQRy9NYWNHUEcyIHYyLjAuMjIgKERhcndpbikKKworbVFJTkJFcTAwL0lCRUFDeElwRnRBS3c3RmdDdWUzSmp5MGNIZWFpd2pBU045TkVUM3NPaFhQZ0lvYXFqYmM3ZAorYWU5blVsRjJNaG5YakxnbnBrek9QZmNreVFHVzJPVFltNU43ampONHFoRVRKVTdjMGFjc0FKUEdGMWNFV0JnWAorRlh5M0QvQ0F2a0JqWEN6aXdMQytLWFBZOVdvQXhsejg1Q2ZJUERYV2ZGbWlWYlh3RnlwbVNoc0xoeVlxeHZJMQorWm5kQ3UvNWpkZGtsZVhpbS9DYWtVM3haVzdqU2piMDB0Tk5MbEJpTkx0eldvajRxRTJIU0lyTHNYQjRCV0VIbAorbUVNZ083cWZvdGpiclRHODhRc2xDQ3FtSGZ5SHNxK2hFc0NrNVpra0Q2NDYwczBxSWc0MFo3TkVUNUQzUTlzMAorZFRUaEt0dXVEZlRPY0lNYTJ5cTErU3B0eGJWeEo1TE8wQXdDZTZnU0luTnE2NDJpUTREa1RXRFVNNmJ3WEUzKworZm5QRW5mVlUxQW1VV2hBeVdIdVk1MkZVTkVEQjA0NEZZcGJJTGpXSUExeXdLUzNZd204c3NtY2k1amp0Qk5RQQorZnpHMTVWTHR0NjN0LzVhcEt4b0ZGZ2RVOXRGNnJobU0yMHFRVTJwWmduY1RkVnNXZFRZODY3ZDd5bmx1d2JBYworTjlHeG0vYlJTRVNhMmdKcXU5RE9CQnJBSTFFdjlkRnVoNXArblJuYitHNUlmeFd3Wnl6L2xIYjh3eDMzSjk1SgorbitGWUJqWmgzdlArcUFLcklGN3lEUDFRd3NZeGFtRlQ2U2ljS3V1T3drL0gxRmJ4NjdkNUV6UWgxaFVhNEFtYworbVp0REpidFhYeVUwQkxEYmhROVUreTZDaHdjSlRCK0YzU0FLc0FIUGhLK21iQXdYNVRoOEJjMG9nUUFSQVFBQgordENOT2FXTnNZWE1nU0dWa2FHMWhiaUE4Ym1samJHRnpRR2hsWkdodFlXNHViM0puUG9rQ09nUVRBUW9BSkFJYgorQXdVTENRZ0hBd1VWQ2drSUN3VVdBZ01CQUFJZUFRSVhnQVVDU3JUYkhRSVpBUUFLQ1JDWld0NzBNdFFLMXFNZworRUFDZVI0WUlJTjJiVS93cU1TaEJaYU5oSGw2WTV5bWw3YTlRTm1oeGZwZFozbkRmVXRncytpVnNVYUNaSklxZwordjVLMW9NU25GRkpMTEJVSWR5SUtKdWxYK0ZNQVBxcVNZL3BTV09QV0p6U0tUeXM2ZHF5cTE0SUppTDl2TUtiKworaUZlSTRQMHpTWUtqWFhjUnZMZEwvU0hHMC9UT2YxZDhFdDBsczhlWTJWRUlaT2RpdGQwdU1JaUkzNWlrOGVMUworZlRVL3k4RjZCdlV2WlFUVmh0ZjFZTHQ4YUxuMkxxSDNwZmx1SkdHYmREMzVXVUp0aDNhOUxvYktZZXl3aWYregorWXVqUWZtVnB4S0dKMEErRmd2SE1PdTBYNFNSbElFdDZwS3BlT0l3YnpVN0VLZlFKSE5YZGJCS2NLRnBoaW9MRAorS3IrNEhxdlJvQUtjV000ZXF5dldjekNmdVY4RVd4UmozRDVDQXdNV25RM1JUaldEMGdmUnM4TlEyYk5oNnkwbgorWE96aE4yZmt3aVBrK1BFZDIyb0h1NW8vRGVnQ1NKZFc3Wnloem1iNkx0ZEcveXg1aWJtQWZTdzhKTmVRdXJNYQorMTF6VFJUK0JMa3kvWmEreWttSy8rbzRtMnRjRERzY21oWnQzV1NIU2hnbGhsWlc0SjJscjVKeHVPN3lZYkk1WAorS1E0UFg3S1U2SFUrVVREMlh4ZEJ4U2trZWppNXBwNGNzOGozQlVyamVXU2JjQWk3akdKMmQ1a2RzWFlwWEF5ZworQlNQWkZqYittQVpsUXRqWkMwN3hHWGM4WXVkbDRtL0hSNTdoTExaaHNnWkJuWVFUVEl2dURhK05XTGFWSnFSbgorVFBqa3lETytFT2ZFVGQ0eFFkdWhOcms3MjZrRlpnUnNkQW5hRW00WXFBRHZDb2hHQkJBUkNnQUdCUUpLdE5vagorQUFvSkVNWTB2b296MXcvRHVPOEFvTGo1WEdFVEh3OW1MampJV1FvVUNETlo5YkdkQUtEOVc2Mit2UGxieVd4QgorcEtZMjJNMnlDQkR1SlloR0JCQVJDZ0FHQlFKS3ROcFJBQW9KRUtrcWdEbXdjVFJ0UXh3QW4xQXliVWllSlJyagorNW5HNGZGK0xaRE5DSUxFMUFLRGZyQnhNbmNhQUY1SEVqVFdpUExzbElUOGFpNGtFR3dRUUFRb0FCZ1VDVlQ0dgoraEFBS0NSRFhuZXhKZlFPUnJEbHBIL1FLMUdIMHdyNDBOK0wreGZ4eDlTY3NMR0FNTzBvYjB4N0tYY05meng1RworWTJBeXEyL1lsNGZ3eFhzbWt0WjlLOWNWM2xzMHlBdUhYUEZVaUppdXp4eFV4SlR5d3NlclFYRUVEVytyakpySgorVU12b1ZHSDdQWXNFaXFod0JuZUlKV1dlN2FtWHdUVGtnWndHUURxQmFzSHQrR0pJZVRGME14N1VuOFNjSm40egorUTlablZmbzhkS3VHWDhrOXBPVG90WE8ya3dWZE1QUFl1aGMrclBKUmxSZmFnOHUrb3VsY1IxSjVEa1FTZkVCNgoreXdLZ3F0alpVcEFLWHlTY09JNGt2N3JkaXBLcVhaSkhHeG0reFRiQ1MyZzA4Ty83OFpzVEdxVmFCRy9mYlBPZworeGRsUkQzbDdBQ3VCQSsrM3lpV1RqS2lHeFhZQzJ0U25XQXZnSytJVjBid2E5aXhtdDk1YXpuWE55MmlVbTZzQworanNJVWZpUmExQkV6bmdkMFpGcitsQlY5RnhKZmRsSWcvNHYzck1rTC9nTkJHWHNvTzRtSzhSMDRZWGRmOUw0Twora0dWMzRsdVhvc080U2laQ1I1amJlUTQyU01MZExxa25OdXA4ZHVLYWNMYk5oQ2FJdEJpcXh1MHdlZUVld1RBcQorQkhmRGJpbEFwZTZuTjhQcXQwMnpTZFA0ZnQxZjAwaSsrMXloME5sam9aYW1TWmVwclVtcDFyYWhZaVl1dnRycAorN21jTWVPLzU5K0dvcG5yZGdnekVncElQT0dmSUFrT2lDT2JjSEFBOEhtSDlFN0FOWFpGYk1VMjZjT2M5dDFkUgorYWNCdG81ejJLbThHbTlENitBaXBoTEt2MEtySUNTYzRLcmF2VDAwMFZOSUdRZWJXRjJRRVZnV1NYWjQvRlFCTgorRHpWTThGRmVEcS9ENUFld2Z2MjBMMWJZY0laMXVyK2VQcUc3cC9KL0ZoVnNUU2JYcVRSSEtScEJMdjlSa0NISQorL05MSEJwdzM3djZ2d2FkZVdUUDg5U1pWZXM2bkRsUitDK3p1cHo2bXpYQTJaaTZSL0xITHdaT3hEVDVwU2dVNworaWUvUE1YamErSWc5b2hudldWVXVYckYzMlNUNWJsZ3YydGRRWkxyWFRDSGZXSmNqQlVYbjZYOG9pTXlzdUx2ZQorMktjWVhVVHFQcFRKaDhSMDdqeXlxdFNWUUVUU2h1dXNUUDBHdE9YOS80RmJMMElBWkpOSU9OWjlPM1YxYkdMOAorODVxTjhWdnhlMU01UnRVcEE1VjNyU2tHbmRvZ2JQNXFpbHhHeS9iQU5sdkdTczhBcnVhNEZTOHJyRVAzM21lWAorR2RKU0IwUGNhbElMM21OT01hY2JBYWc2OFpwSWI0aTFaL2FnbVRVMkxWeDAybFUxRnZUc1E2YVcvWUtzL01pdgorYTBIWlRDMVRtaTZiSys4c25kWFNuY2lNRThmUEVVRVVIanIyNW9QNVovVzAzL2FaeWFBYzNqRk94ZG1kTDNrOQord004QStaSW1VQzFtbUl4MlAwNW5KYldrSFIyem40S0Z4MTlJdjYxOGdjeXM1L2w3c05uNU1JUk9ybEJJdzkxUAoraVZyUmhrRlZIcFJxd2h1Sm1GMllqVWw2SXBuelUxdVJqSGpwU00rMmRJMVBWeW9MamlldkhzTFhxbWZhcmpzLworK1NuK3dOY3VxSmlMYTl3d3RIRTBpSmxaSGplNW9lMFlNa1crMmpadW9VeElaNzlHYUpySnF0UDd4aXBjejBuaworcGJiVnJqT3VZdHpBZjNpT0tjMXJWb3g5M1UwWGtNc0hKTGoyT1ZnZmU5eTBQRTVwWTJ4aGN5QklaV1JvYldGdQorSUNoQmNHRmphR1VnUTI5a1pTQlRhV2R1YVc1bklFdGxlU2tnUEc1cFkyeGhjMEJoY0dGamFHVXViM0puUG9rQworTndRVEFRb0FJUVVDU3JUYXl3SWJBd1VMQ1FnSEF3VVZDZ2tJQ3dVV0FnTUJBQUllQVFJWGdBQUtDUkNaV3Q3MAorTXRRSzFpbHBFQUNWVktQL0trQ21nNWwrWERKRU0vYUVOYzVCVXlGVkN1bmJJd2JuSkNRQWZUQWZiSnFud20wYgorY0Y5aFFEY0JPKzN5ejJidlBWbkl5bG5JMVhKUkNtbHpuK0dJWXhNWW1NdlFMWXkwSGE2clJmZ0hteEpIYzkrTgoreWFPRWgyYUtsVFlKYStZM1pZWHRybklxM1ZUZVJTcmZSTisyLzlNcVI2dUxqU1FKQnJsb095MlNJb2IzQVhWOQordmptZ3A1UFlHNXJ2YkZYZ2I5M3lubGdpZVgzNWw0WHJNM1c2ZkdSeXB2V3czVGY5d2VraERPdFljOVdKck1rUworSDZWRXQ2OHpVUUhTZTh5QWFqbGlMRjBLd3Q3U3VBS0JOZWp0c3hvMklCWC9NeG5yVjZFWWJCUU9rclYvbTJleQorZzNEWHg4bnV2dEVvL1FQK21uMklvUDRSa28yekt0RkJ3TGJPK3MzZUdLY3JGZThPdEprZlBySnBvYTk1UDNEbQorTDdXSXJHYmVBMXRCSCtoYXdQbWZzRWlYK3VOSHhJNTN4L0xwczVKc1F4UWptSDhvR2srQlNtazdzZzlaQkRtTQorWmZ6K1pMekhMQ005dkh4R1g0Ny9vZ2hPODBxckZzSzJ2aG1qK2FKWjFjNmk3NkdIVm00Q2lidmhReVJVZlgxNQorUldBQlowTzRXYWpWMlh4eGRFcjJrSWk4YW9WK0pEM1ZsUk93UG5xMjZqRER0Q2xMOW9uemtiRVIwRWlhWnpDaQorNkNqQm9oL2gycklTbDhpRHdkWjlPWFZVcXpDS3Z1TVBjODJNbWdBZEczV3EvZXpkR1F4US90TXZ6R3hISHFqKworSEtCeTZtbGwrd01MSzBpK0pzY1JTK0pMNnhpc1hPenQ0azhYb1c3dkVvRzZRNFdQMFVZZGZJa0VIQVFRQVFvQQorQmdVQ1ZUNHZqUUFLQ1JEWG5leEpmUU9SckRpN0gvOWhVdGZhTkRwWURoNnd6REVSWU9JZlNwaXU2a0ZPUUp6cgorcXFsMy9SWncwMnN5ZDBVS3pCTmZXc0ptemx3VTRPNkpLekVvV1ZaL2JnMUYyQkVZRjMrcFJIRWRTdGhUM3d1VgorL2JlQVlkWWd2SjhoTmtOU2FBZktyRzNOTUM1RXRQdExiK1JUU2QzNG5tanNBbGdCbEZsZnVZcy8vdjR2TWNNUworZHh5eUNkdWtSUWpMajMrbEFwY2NYSnJTUDBsTXpjRWFhMjdBRElLblo4bEVqYzlIQitrUnFFUUZxM25RNHBPRQorZ2tGMlllZ08xSjdLRUxzdDJBZnVxVkdUc2RpaEhQTmJXclRCczk5Q25ETCtnSlNkMWpsRU16ZkUxUWt2UFFEUgorWmZzcjFtakk1cWdNQmpSNi9OMTYvb0VNdkZsU3Z5cTByU0hlMy9VS09YaGMzRFh5V3hqeC90aHdzRTlOdzh0VgorVDRhYjY4OWJMbFlSS2NvZXVVbG5raWUzYmhQc3lJYjhJQ3plZTRISEQzelk5ZFovZkoxdGtLNTFEVmFmVWNvagorR2FmNjE0Yk1zQ3BzU3Rpb1BwcGxwcXU4Q0dzNlBRa1RqRVg2L1ZHSmNxVVRwN05pU1RUSUlHVUxQMFVZZStCcQorcEZ0UWNmM29jTDRtUWQ4VndSWk5FUXpEbW1BdThmODdQSktwd1JqT2JveS92TytLc0orVmN5djFxVTJHUDFBdAorbDBjdlU2cGtJTkoyVElVdlp2WjJrMCtFL3BTWnN2VzYydkxxUy9VVXJiVEdCZTBYMWxxYmVyWXRJb3NMUW5tVQorUkhodXZMeU9BN01rTzZoV2hGYXI0NGRIYW5tTlNhM3pWM1FaanpzT3RSVUsyb1d1YkR4WE5KNis2cVVCTkQzQgorU3lwd0p3Vm8rU2NuZUYzL05NL0FBM05wZ3AwSHVGdFd5NVJuRkJlczY3U1poQzZJK3IyN1M4N1NVVUVoS2wweQoraEZvZUpURVFtanhHRnhCL2hsOC9CdXVPazJUc0tVSUkwL2o5cWhJY1V3alFZR2dLWVRRdFppM1AyQTIyOWdleAorYkU3cWozZ2FPem4vK1JhZjhMTzJnQXhBWmUzYy9EZFgvNGdTMWpiTmRDbFVzODg4dmVxT3NnejROajFWTHV2cgorWE1UQWJJaUpCcnR2dXdKd05Ed2pFa1ZpVnd4ak9tN1BLaVFaeVgxNzVHNHZSQWlva3N3M0tIakpRSyt4cTc3VgorQjMvbkVsQnlxTlR1WCswK3o2WTNaTkVvTGxsZDltcnk2SVBvRnczeWxMTVdaUHFwbjJVSnhVRnFYa1pSZEp2cworbU5oT2Z3U0tWSkRoWElDMVAybzBuQi90NTRyZWJtbTBXQndsRnhEeHVPL0h6b0lpcngzQm5lendqVS9Lam9mTworbWxlTWdhZUV5blQwRlR0bEsrSFhxUUxrS1duU3pQd21MM2E3SmdRK0ZEK2syU2hSdTllMUpwY0dxbkdKcGdmVAorbUtZdkNBdmIzWGRFTy9DOEpqUTBveDBJTDkzcWd1SkZFWkhsNG5oc0ptbDJkVndONlVFZDB4dWphcUYxOUpUOAorUG80MkU4ZzltTjRhUVNJaDEzN1M1TjdJQlZLZ3Y5WTc3cldpcE1iM2REcFRWdUZrUTdrVFQ0OFl0SG9tQjJiQQora2JvbXVsMElrcUJuWk1QZU5YRHJUNzYwaUxEWnpibzM0dGFXTHNBQmpSdjNCb3FnZ2c3OXZ5UXBwbWxuWjZ6MQorODJvU2pkUG1CTkM5OVV2Tjl4S0xxTkw1Ykw5MG5Ud2tFZnBNWkVNbFZBakR0UGVBSWpzU3VRSU5CRXEwMC9JQgorRUFDM1d1SytrbE9XbVhvMFZwSmFFY282REQ1MHAzekdJTEFOMkVQNnltdlRQMloreEFFcVJGT29vc2FmWDAyZAorY3BCZkllcThCQWZJNFNGR1FGd0g1MEl4TnFWRmM1VGtIRnZmbzhFQmIweFlvV3czbE9KVnhmc3ljUkZ4YWtqSQorcTZIbmVMeDJGLzB2QTFBOWE2RzF5b3JhL3YySTF0SVYwZHVyTXBQUndWdGN6ZXhJQ0FlMUpuN3ErT3NYMzZ5QgorSzNCRkxpUTd5V1M4ZzVTbk5sN0hhTmZ2QTRDVncvSnpVOG9DN2tkN0NvZzJNU0daQStiaGlRUW1tMlpxZnBZbAorc0UydVFxZ21OandaVmcyWFpkSTlGeFEzTTkwc1hPdmFTVGlHUGpNVjFHTHpPbDg1cWVwVlV4ZTk5M21Sajg2cQorK0tsS3dWS29HVXJZbG9IV01ubnk1ZGh1Yk5CT0xXWW5FTFZKb25zdjVSYmhGWnpzYlNtOEpBTHBQMDh6WVN4dgorcUpsYVRJZ251N3hHdXMrbWcrMmxLbDBkTTR4RWlhZVJSZ0ViZFNUbjdFeEsyai9HVWI1TnpkUE15aUJ0SnR1Qworc1IrZGxjWWh4UkdyNXdJWmRPRTdSRUxvY0hnSzQzd29rWjNrb1ZUejRvL0dBOVVVb0NJcTZkQ3JveGwwYVo5NAorbUZhSVB6WXBudnQyL21kNU16ZUNzcUdtcDVsMFE2R2xDR2lMK203QVB1WUtvYUpGdkZLQytsaXAzOCtmUHpqaQorTUpmUC9TR29TTmw2ODkvSnVkNjFiZ3FDcERLVHN2dkxJWWNaTWhlZ2IrckFVY3JoektOd3hrM3A3UjdmMmVXdgorSlFBaGZlbDloWXBENEV6UEFUVERFQy9sdUtqTjhVb1U5dFFweHlQUVJnME50UUFSQVFBQmlRSWZCQmdCQ2dBSgorQlFKS3ROUHlBaHNNQUFvSkVKbGEzdlF5MUFyV21FUVAvM1JuSWpiMnZhUXZ5Vm9OQzN0NnkyeFFVUUpBZmZtLworam8vRmxPeWI4YzM2ZklEU0xGTmZqTVV6d3ZvMTE2VkFENDRCWmNvbElhQkFqbUNNSXBsZzY5OUlXKzdTbHI0cworeUtqMEc4WjRrUjRybjRZQzU3ais3YU1UNlo2RGZIaVVVWkhpQXBBWWxJZjE0RHNNWVU4T0dJYjdpM1V4cHFUdworM1k1UnduS1dOSVEzY0o5UE8rTUpiKytUbk10K0xSaTJIYTFMbnV5MGlERjc3aXAwV2puZENTQlM3ZU9uK0pjdAorZktUVC93TXM4aGVjSEI4Nlo4V2xGTDhZS3l3MExzeFZHRWU1anFDRXlqamw5blFjWXdVMUdIUWdqbXU5NUVFWgorRVUySG5XdXB2dFQ4OXEyMksxYUd2Z2xPNkFVZ1ZhdFo5a0w2YjZuc0FDRjR4M1U4L1RsOHNhWEE0ZTdtN1d3SworSGc0T3NheE1UVDhYbk4raVpmNWQzeVJ2QkJ1ZGdXOGt1KzV5aW1PTDRRK2R5UWR1dm9CTU0reUVIV20zSyt6RQorbHg1UDVFM1FsK3ZKeGdDY2ZxKzdXSzVVeXV5a0kxVUdLUnk2SXdiY09NVFk5MzEwaExjVWY1aFIzMWpmKzdqOAorTUJESkU2UDRTS2NMU2Qxc3k5VkVFb3JMajhzMFN5ajErazc5N2F4bDV1MjRTRFhlM0dKUUFBMGNZT1oxaUV5bgorTGx3VTFFclNpeDNsemlsd0Q0MGg0ekhJSmExb1VjelV2YnBvNlY1U3ZUUnFXNUJ5ZlpvQUZEQWJNMFRsMmhucgorN2pQNCtja3RaK2VqRWpBNE9UT29WZVZhblYzUXVBTU81RVRsN09YNSt2TnozcnhvR0VtQ2s1ZkhtMWM2WHBnUworalR5ZzE5SVFSbWU3Cis9cGxsbgorLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQorCisKK3B1YiAgIDgxOTJSLzdEMDM5MUFDIDIwMTUtMDQtMjcKK3VpZCAgICAgICAgICAgICAgICAgIFBhdWwgTWVybGluIChBcGFjaGUpIDxwYXVsbWVybGluQGFwYWNoZS5vcmc+CitzaWcgMyAgICAgICAgN0QwMzkxQUMgMjAxNS0wNC0yNyAgUGF1bCBNZXJsaW4gKEFwYWNoZSkgPHBhdWxtZXJsaW5AYXBhY2hlLm9yZz4KK3N1YiAgIDgxOTJSLzA5MUJBNzE3IDIwMTUtMDQtMjcKK3NpZyAgICAgICAgICA3RDAzOTFBQyAyMDE1LTA0LTI3ICBQYXVsIE1lcmxpbiAoQXBhY2hlKSA8cGF1bG1lcmxpbkBhcGFjaGUub3JnPgorCistLS0tLUJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KK1ZlcnNpb246IEdudVBHL01hY0dQRzIgdjIuMC4yMiAoRGFyd2luKQorCittUVFOQkZVK0NYVUJJQUN1VkRITFBsK2pMeE1lZTlIUkdWU1BRRGRoUG1haVlMeGFhbTlyZXZUUitjSnlVWnFVCitFWjdzT0I3b1k4bU5yMlhCWmYrK3IzQ1dFMDNNVDN2VjBkODYyWnBIQjJjSXBnVTk4MjJoQ0FoNFJCdkVFYzJaCitnYjc0azg4dEFDTW80SWlKWWR0bkN5cUxib3RSQzB2cnk1V3NQdVJsTlR3cnFFNnNqQzdSQjJmTi9vOXRNVkJmCit1WGd1eU1USHp4RitwZSsvV2d5WFNYVWV3K1ovNVJkY1JpZGZkdDlYYmZiYlh4MkJaK0J0ZXo4WDdXNk9SUE9LCis4RGZoRmVNMmNlSjc3ZnBkdjd3VXF5cEQ0ZkMzQ3k4dFdCZXY1cEU5NG1mVzIyaDkwbFZXbHZjU0RJNjJ1WGsyCitXaU8zWDVjTUtJcFJGbWUrT2w4cUYwY0lqTEQzc0tFZktBRWtHZmdUY0V1eG02eXEzR3JIcWtzYlUyNk0vT2l4CityQlc0T0NZTjErZUFVY0RrbWs2Q05EakpDVk01Um1oUFJ0UnBWV1dxZTNFc3l6R25lZ2xHUXdBZEVvU21Qd2J4CitmakVyckpvcEFnb1R4Tm1KTXdtK1p0Q09yOGkySUlDUnY1RkJ4ZnFZdEZqNEppU0FiNjVXWUkxaHFWdDJ1ZDYrCis2TVA0VjNIcTBLTk9tQXprc0R0K0JJdTNYNGt0eHhUSC9WUFBDR0tKSHBSYnU1NWNsWWJCd1plSFdrV0FNVndxCityVGNQcWFqNDZTWTV4T2xlc3Z3ejQzN1JGMG5nSUp1dzNabFpxLzNFTXV2S2R6MkpOWExvSTBFSXZ0UnJtMXNaCit0SEY1c3V0WEpDc1MwV29KK25SeU1heXZlY0loTFV6bEMvaU9RWjdmRk1sZlFHT2E0TjBqeGwwdWV3dkZRR2dXCitRV09JcGV2UnlwMW1yd3NuWVFIa1NQeDFVTW1WSDZpSWo2V0t0dXpJV2ZmSWVlK29ZbjdKdmNWbUtZeHhIZ0FiCis2V0VibHR4bzRaZ1pCd1RRbUV6dXRJNkhlSU8rMU1Pc29USEh3ZXViU28vNHlEZ3ZyU3lRdVNxbGVwcDNjbWh6CitjV3hVZklGT3lxbUlXTXJvSlhrcW5XOVgzdkh5a25ub2tYTS9HMjU5RUlhRmNnRE5lSk5QNXNiTGJscTVScUIwCitGVUMrdEZVSnI4TmFFNGFoV3B6S2pNNmtmaUFFdnBVZm1ESTNWNVJDbzNPcHU1OUV2ZmxOcGVaeG9xUUZDU25PCitFbXJpMW1YeHMwQmJIVVMyKzFtWW12ei9kSnBEVlNOT3dmVmZ3NjU3ZmdZQ2ovSk5YbTZoR1pPTFlVWHZEbVNKCis0MHljR2hNRHl1YXc3bHpoWlc1UERUdzd4K3laR3RUTnlXOS8vLzYzZzNBMmxlRGlNQjBablpOSzdhbGlPZVV5CitRYWhibHUyOW81cnY5eFRzUUFZWEtjN2xxdEpqWFFwMm1VeHlMTU9GN050akFoVy8zMFQ2SEYxc0dHZFR5NW9KCitHa2dIaHR3U05BdEs2RksxWEpuQVU3YjRZbDFORlA1TkZkaWxTZjlHUjBwR0VSRVVOb0g5YS90YWdubkNuSGhuCituVWhJS21vbEhQUDB6SlpnTUxHVnNRZEd3eGxsNDFzOG1ocWRyY2w1NEZvUFV1U1oyMzlsbkhvaEtCUDE0YWNICis1K2dJQis3TE1taWZCNCtBaXhtNDRJa3l2SHpOMEYycHJOcEZTUndXSjV3LzM2N3JBTnRtZlJWWFYzaVNOL0NMCitKbXpRQUswM25uUStocVdxSENmRGdpSzRPTVNBNVJZajZPQzVBQkVCQUFHMExGQmhkV3dnVFdWeWJHbHVJQ2hCCitjR0ZqYUdVcElEeHdZWFZzYldWeWJHbHVRR0Z3WVdOb1pTNXZjbWMraVFRM0JCTUJDZ0FoQlFKVlBnbDFBaHNECitCUXNKQ0FjREJSVUtDUWdMQlJZQ0F3RUFBaDRCQWhlQUFBb0pFTmVkN0VsOUE1R3NvWWNmL2pnMHZZSkt6MUxxCit3VW5pTVNVZHdFbnI3bjJHdTBQWS9aZlBtRG5lZlB1VEVyMkFWMk5WZFJvZTZmenBvUmMvbjBMNE5MRGpxU2J1Cit1ZDNxTFpZeU1lZW5WUGVmMC9jaEVEQ0pwVVZYajArOExrckZRSGJvbElJeUhvd0oyOWo1TDBRMk1xdnpWY1MwCitiNVBNdkhXbG1icGhrYjlUMFlpMHY3ZlpEb203ZGVTcmI5ZUZrQlpSM2hSVFRtb1lTenlGc2RaYnhTa3A5RDFqCitrSmoxWERzQy95ajdMYk0vSVVMMmRmUFRPempqRmR6UWg3SjIwVE04ejNvUFJSNExRS090NElqMnhoTldlek0rCitCeUJyTmxxNjU4NlFSVmpPQ3lZNDNWK3VxcTBQOCtheXc4UE1JbDBtM0pKZklYRTRoRHhmb3AramJta1BvWTIrCitFbVNQSDk4NWhmZjZpemExQTJhN1RMa2Z6YkJyenJRUDFqU3BqRktGUkdiSFg4TFdDZktvU0tVYzFsMitDWkZECitEN2s2NmpWcnN4OHQ3ZmVIU082bmtRVUQwQVY4TDd5ci85UTBNWUVWRng5Ri8zOE50ZWZMQUcvTGlRSHF5YjA2CitQQ3cwcEQxMlk5ZEdmOFNRYndhV1AxRXMzdmpubWllcElCcjBwSWM0N3doZC9WMi9xcnB6Mkx1T0t6L2trdWhDCis5Nk9vNmRDZnRBVWt0M2pXTllWYzZvREpOaFA2MzFic2pmYWY5b1pHdzVOaXltUDUySmtKWWNlMGp1ZmRLYm5WCitSbERZOVltWFVsMlIrS3ZaNVB1K2ZRTkVPbGx4MmEwbGNQUzNMMWd6R2lqdGkwc3hZUlZoUUJ5VWdnZjJKemxUCitFZlJPK0VlK1MwSzhtT09XK2tBUXp6MzBkNDNtbGdKNDQwbWEzaEtLOVc4OHhHT1dvT2JLVWo0eXJmYW92RWNpCittb0FocHFyMUZ6bmpnTkNzNjVQSUhLMnlRdjdJSEtJaUVvREJNc0VKeVNOSGE3dG9yVllZRmlKeng5K25KTXg3CitBUy8rcVdrZ3BSdlIwWFB5djJ4SkppZ3lKVUlvNlJhejBkK2QwQ2JFYkFrb2tRSm4wbnV2dzlJTkhOS3FsTUl3CitDQU1Idi9pTldkc1NIeHlheEFXaGljWUJPKzFVN3VtQWNxdjR3Y2dPaGM1SzFnRU8zTnlRUWlPalA2RTNJTEpPCitqNUZ6Rnl4bU8xWTdwMVpwdUlCanIyWTZ2SHNJWGxRZ0tZNDFpVDFDQXRhOC9SR0tSVVJSOTZFMVVWMnlxVXFSCittZHJoWVVxZWlBaGhiTCsyNEZkMnIwcnNsM1ZaYlhTMjgvSmFzNHBEZXNtaktGaSt2TTRITnp6NkpvcURZai84CitMQTlEalVFdmttd1h6aGlHa0ZhNFExbWJPZEQ4RmhSaE5oaUtOSlNOQ0FjcVk2YkR4d1Y3d0Rxbk8xdksySzFBCitBaC80SUtpYlpWcThud3J3WkU3TkJNcktHSC8rVSs5bk5PNVU2aEZKS1Z4ajE2WUg1VWJkSTdNd2oycFJoMGJjCitkUUtMS2FTUm5RYS9rZUxkbVl5bDBtZitqbWEyUTk0YmhSaHBZM0gyeWViRW1IanYzN05mcUFwdS95ZWFjZ2NyCis3c3lVMU5wSHJHSDFWdEd0M0YzZ0xCNjN5NXFSRXlCWG5BcWhQR0g5VTJHclE1Ulo0MnY3OFg1b0NKTTVpc0xnCitKMnRNSlQ2VHlVK0NDeU1tMmZyd3FIenB1cnFPZDgyTGw1Q3ZsSVBMMlNOUklRTXpZaGtaOE9QaXhXUGtwK1ZICit3M2dsNWRyNkJOYTVCQTBFVlQ0SmRRRWdBTmZpVEpFTVpZSXNoRWEvRW0wRGRkRk9sQUlSRVUwaGpLckRMN1loCithaWJpM2ZJdEhoZ1VmY3FLQWx0NmxMRXlDZUxOOWNVeGc5cGVtV3FWSDIzRUNHN05HUDRtbFhEanEyenZMSkFDCitaam5YdkZmSHp6T3BKeVpHY044ZHFsTnVNUnd1VVF5TmpTZGJ5SjBDcGZnVWF4cVFGUEJSakFxbkc3elVpbmJlCitIWXZ4SHBZUlducnMxcEJ6TDNJU3krQ3NybXIwOHB4QXRHZmVRVTFvOUlVRWEwSERtT2gyUnN0THlQN2NyY0tDCitNM0xvb2tsWGFSbEh1bUdWTzkwZnJRcG5ySlFWdDNyeU82bjgyQ2MyZndTWXUxYWZDaXNGemJqVm55VlpVc01ZCitkdVBJdFNEOUd2aGZOb1V3elQ3RUdHTHRrNlpmeVhZcHVtVlNWTzJ2T0k4ZmRxaW5KWktjNlZWSVZlNFIyVFdnCitkVmsvTU55NE1QbVUzTThaZzE4MlZrYk9jQjRTWWZyTlJBMS9Uc0p3T0RCNkJOM0Y4UUpSMmJOS2xrV2I4ZitFCit0S1dHNXZncEwyYW50RFE3dmJicUdkVGRDczFPVy8vYXVWQkt5UnZFT0Y2Wm1HOVdjMlQ2OFV2U0E3RU5BWjZYCitLWlNFRHNnNkg4dDRDQldiK1NDNXMvRTI2Ni9oZ1llTGx3L05uNWZZWjZiWmE4LzdiaVdQUXl4QlMvMXhPNVR5CisxdFd3NGlUb3JJeERRQmRObDFGR2RrZDBUUzY0WHpVeEdVQTlubXVoS2hVTzZhNEo5Q1ltQ1VKSnQ3aFJXZ3h3CitmVTNjVFZpK3dJeWovVTRlKzNSSytaS1B2U1VFb005S2l6UmpBQXBhVmk2ZDByY3pWRHEycUlmbW9iaExFeFdZCitGZnBCcks3U01FZVl4V0g1blNoUkR1VS9SemMyMk84dFNvMmFQL0RiRWlNbG8wT085ckZFbm9FY2M1R1FhTTRTCitob2J3SWpScTFLU2xFSjRVTFdxc0oyMTFlb1VEdDZiWVRWQ1A3YTk3ZUdwRFlMNWdYaVVyenlSOWxOQ01ZQkVMCis4VklVRXZzUXlaNUYwVzMvekZFUWtoZjY5cDRCbGVmemRqUDJzQ2xFNEtWMTYxUUVoMkZSTXBOY0R6RnJsbDU2CityLzFZZDkzUCtrdEo3UGo2QnFuc1JTbENEeXZhRjVzSk82bVhaM2F6MEl5bGJGcUVRV05SaWFteHlLeUIydm16Cit0MFBoZlFLUVZhU0NCNTFoSDl1V0loTm9QWDBkRlhHemZOM1VmM2VQVUx1WXF4cjNwclBvaGpkY21CdldmclRGCitnbmkrc1JhSXFOamE4Wnc0ZE16ZzNHZ2Z3Wnk4ZHU3czE3WkZEbzZlZmV0SCs1aWFCUTlFZTFKY0UxUW5YbFlWCisxbkdmL2FqM1FGVENXVFFpNElncEd6OEJYNlhoV1NXblNKVTZvajV5K3RLNjdKU0FqVkRYZmVrSHFrTkRaVFIvCiszb1BiTU9TQlFuVjFScWVrSm1xbTYyTm1hQ1pIWG1yWTZrZTc4aFgrbklMRmVSNi90S3p1YncwK2VzU2puZm9tCitSK1Q4NnFzd3c1NWJCOXF1eVpndjNUVVl6TnZUZmVrZ21uTEhkWUkwQVY3SGxBVTdRM2c1VDQybVAwV1V5TTZNCisxOXNTaElpeXJKalkvak4rRGJMWW1nUDVXM1lNT3BKV0lQcXpLZzNCbDM3OVFja2g4Yjl3S0ZEa3hVVHE2alVNCitwM3d5bi94TkdQc1FEQU1ZNHE5TThITXFURTlhNXQzUW85UzVuL2R5dzk2VHlhY0FFUUVBQVlrRUh3UVlBUW9BCitDUVVDVlQ0SmRRSWJEQUFLQ1JEWG5leEpmUU9SckEwMUlBQ2FBaXAxdWRONkhYeWlubUM0QmtWVE56UjM2SnBkCit0anpLUm9OQ2FoK0Y3K0ptYWgybXJ2Z3U0MkJwTmtaRmEvcUNqd1MvWDFINEx2SXZ5cHl1UmZzcnY3WnMvdGRCCitoSU4yVWhwN1hiTkNaTEhGWGNIWlJJd3hJY3BLcjNKY3hhMGhJWUpnTHJXU3VIMjhrd3ZNZVZYSTRUWUl6QnVjCitxakJxUjZHL3loOTJmQUN5dktJZ1REYUs4MVZIVXp0R21MZVJTQkgyQlZnbTRBN0VSZEwycDZaSFRjeDRBZFFQCitmMGk3ZlhYNHhBUzkvVUl2MzNuSGJXNFJsTWM4RGh0ZVBKQ0JOa2pMUFU1OC9FVWVVdVhTS1NXTUMzYmxYNW9nCitVTVpGZjl2TTM0SVAvUzdtaTBVMkVlMzFNVEFicVJaaVE4ekV1QlFWMGVFMCtwSU9qdHM2NkMyMmF2TU5ra2czCis0WTkxQ0FaMjEweWNHTWhCVWhheTltSCtuWjlnUU1KMUhDSnlZcHBVd3hpUndpZDVnaGp0TjlVdUM0enpOV0ExCitCR0Nhc3lvY21nNThyVXZPN3BudGVhbUkrbW8ybGtpZWNpQnJhY2h5L0wwYWlKSWtIL2dlNmZ6bDdtVU00dWVMCisrZzFBYTA4TU9WMkptdytjeEJTRDdwK1N4MWZveUgycUEwNGtuNSt5OVU3TTlyM05vZW4wU3lVUEFaZk56cVl3CitKWnhsVkVpem1EYUVjS01TczdsQ0c5OFZkY1VMUnlWSmYzTjZqcmJpZGRjdCs3WnRub3VNK0gvYkJSQlZOdVBOCitzV0tBb0NSTEZaL2tFNVY0K1NoRllZd0hhc3Z2VU5xZ0VNWXZOTk9Ia3BqenlQUWhVb0UwVlByN015VCtqWlRlCit2aDY4UDR2TkhwaDlIdE9xWWJRUCtTZldodW80YmRia0QvL0xvTVlvY25NZ2FQZ2xJUXIwK3hBbURwWmI4bGRjCis4OWlZdlR3eXBaY3duaXRrQ2Jxck1udXkzd1I2bTQyN2F0WFloVjI4UjJubk9QdXVpeXd4SDRhVDhlTG9BVjNqCis5WEJYemVmZCtmQmptMDRpWVFPSFVLYnZ1S045bnJBOE4ydUJ2L1JOTVNHLytFZU1RVnpHUXdIc0JTSmFyY1pqCiszbXpZOHpncXBPNGw2WTBPa1pWSWltY3VKU3o1ZU5haytvY203UFpVaUx2VndKUjE3VVJFUU9JTDFPbTVIT3c3CitPVyt0Sk5ZUGZhMElra1hhdjU4eUxRVVcrS2YyZ2c3NmMzNUJjMW9RcUxYV1NtL2lvYUxUWFFxY3o2RkllTkpBCis3cGpCRzFkUlUwLzYyM2pVUkYyYjc1eHlabmdYZW42VnRWcmQ4S29uZmRqSWdMRjhSRVpXUDVaSktUN1dISFNiCiticXh1VTdjNHRBY01NSE1xSHl5MENzbVluL0FCM2grUnJwNkx5V1BCaGo4eXJDR05ScXhUTHk3amUxOGJZbjFVCitWYUlCTTA1OUlTS3ptUW9SRXVRSFpMdldNUVRqbWJhbUZLcm5acmxmZE9nak4xbWV2QXZIclZjMUh3WFZ2MnZzCitXb0FoWmFDU3FYYVdjbVVBRzdJUmhxcnRnbTJYSkRwMFhlTjdGZWVMOUhvSXhWNW9SZVJsUnVMZkkyTGc2dHRTCitCTmVCcEptSmp1dlZFY1RPWGRlVTluRWxucFFyaTBsNjR3QnRCRS92Y1JXeXZlamRDakROdXRzR2pEOCs5SnNqCitzK2ZUZ0dNSTNqMUFuVDhDL0ZIMGFCNnd4N2VaVTR5KzlFZkwwTXJiQ2ZGcEt4U2RVTTJOSTk1cAorPWs3S0cKKy0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KZGlmZiAtLWdpdCBhL0xJQ0VOU0UudHh0IGIvTElDRU5TRS50eHQKaW5kZXggZjQzM2IxYS4uODNjNDg2NCAxMDA2NDQKLS0tIGEvTElDRU5TRS50eHQKKysrIGIvTElDRU5TRS50eHQKQEAgLTE3NSwzICsxNzUsMTE1IEBACiAgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KIAogICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FwYWNoZSBaZXN04oSiIHN1YmNvbXBvbmVudHM6CisKK1RoZSBBcGFjaGUgWmVzdOKEoiBwcm9qZWN0IGNvbnRhaW5zIHN1YmNvbXBvbmVudHMgd2l0aCBzZXBhcmF0ZSBjb3B5cmlnaHQKK25vdGljZXMgYW5kIGxpY2Vuc2UgdGVybXMuIFlvdXIgdXNlIG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIHRoZXNlCitzdWJjb21wb25lbnRzIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBmb2xsb3dpbmcKK2xpY2Vuc2VzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRoZSBNSVQgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEFwYWNoZSBaZXN04oSiIHByb2plY3QgYnVuZGxlcyB0aGUgZm9sbG93aW5nIGZpbGVzIHVuZGVyIHRoZSBNSVQgTGljZW5zZToKKworLSBqUXVlcnkgdjEuNi40IChodHRwczovL2pxdWVyeS5jb20vKQorICBCdW5kbGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG1pbmlzaXRlLgorICBDb3B5cmlnaHQgMjAxNCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgorLSBqUXVlcnkuU2Nyb2xsVG8gdjEuNC4yIChodHRwczovL2dpdGh1Yi5jb20vZmxlc2xlci9qcXVlcnkuc2Nyb2xsVG8pCisgIEJ1bmRsZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gbWluaXNpdGUuCisgIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEFyaWVsIEZsZXNsZXIuCistIFN5bnRheEhpZ2hsaWdodGVyIHYzLjAuODMgKGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIvKQorICBCdW5kbGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG1pbmlzaXRlLgorICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRoZSBCU0QgMy1DbGF1c2VzIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBBcGFjaGUgWmVzdOKEoiBwcm9qZWN0IGJ1bmRsZXMgdGhlIGZvbGxvd2luZyBmaWxlcyB1bmRlciB0aGUgQlNECiszLUNsYXVzZXMgTGljZW5zZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaGUgVzNDIFNvZnR3YXJlIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBBcGFjaGUgWmVzdOKEoiBwcm9qZWN0IGJ1bmRsZXMgdGhlIGZvbGxvd2luZyBmaWxlcyB1bmRlciB0aGUgVzNDIFNvZnR3YXJlCitMaWNlbnNlOgorCistIFRoZSAieG1sOiIgTmFtZXNwYWNlIChodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UpCisgIEJ1bmRsZWQgaW4gdGhlIFJlbnRhbCBzYW1wbGUuCisgIENvcHlyaWdodCDCqSAxOTk0LTIwMDEgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlCisgIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4KKyAgQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuCistIFhIVE1MIDEuMCAoMm5kIGVkKSBTdHJpY3QgaW4gWE1MIFNjaGVtYSAoaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxLXNjaGVtYS8pCisgIEJ1bmRsZWQgaW4gdGhlIFJlbnRhbCBzYW1wbGUuCisgIENvcHlyaWdodCDCqSAxOTk0LTIwMDEgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlCisgIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4KKyAgQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuCisKK0FsbCBSaWdodHMgUmVzZXJ2ZWQuIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvCisKK1RoaXMgVzNDIHdvcmsgKGluY2x1ZGluZyBzb2Z0d2FyZSwgZG9jdW1lbnRzLCBvciBvdGhlciByZWxhdGVkIGl0ZW1zKSBpcyBiZWluZworcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4gQnkgb2J0YWluaW5nLAordXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgKHRoZSBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLAordW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9uczoKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIG9yCityb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMCitjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZworbW9kaWZpY2F0aW9ucywgdGhhdCB5b3UgbWFrZToKKworMS4gVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZQorICAgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuCisKKzIuIEFueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvciB0ZXJtcyBhbmQKKyAgIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIGEgc2hvcnQgbm90aWNlIG9mIHRoZSBmb2xsb3dpbmcgZm9ybSAoaHlwZXJ0ZXh0CisgICBpcyBwcmVmZXJyZWQsIHRleHQgaXMgcGVybWl0dGVkKSBzaG91bGQgYmUgdXNlZCB3aXRoaW4gdGhlIGJvZHkgb2YgYW55CisgICByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZTogIkNvcHlyaWdodCDCqSBbJGRhdGUtb2Ytc29mdHdhcmVdIFdvcmxkCisgICBXaWRlIFdlYiBDb25zb3J0aXVtLCAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQKKyAgIE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLyIKKworMy4gTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFczQyBmaWxlcywgaW5jbHVkaW5nIHRoZSBkYXRlCisgICBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoCisgICB0aGUgY29kZSBpcyBkZXJpdmVkLikKKworVEhJUyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMsIiBBTkQgQ09QWVJJR0hUIEhPTERFUlMgTUFLRQorTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVAorVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTiBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkKK1BBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLgorCitDT1BZUklHSFQgSE9MREVSUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KKworVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCitwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkCitkb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLgpkaWZmIC0tZ2l0IGEvTk9USUNFLnR4dCBiL05PVElDRS50eHQKaW5kZXggOTdmOWI1Ny4uYWJkZDY1NCAxMDA2NDQKLS0tIGEvTk9USUNFLnR4dAorKysgYi9OT1RJQ0UudHh0CkBAIC0xLDEyICsxLDUgQEAKLVFpNGogU0RLCi1Db3B5cmlnaHQgMjAwNy0yMDA5LCBUaGUgUWk0aiBEZXZlbG9wbWVudCBUZWFtIG9mIGluZGl2aWR1YWxzLgorQXBhY2hlIFplc3TihKIgKEphdmEgRWRpdGlvbikgU0RLCitDb3B5cmlnaHQgMjAxNSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAKLVNlZSBodHRwOi8vd3d3LnFpNGoub3JnL2NvbnRyaWJ1dG9ycy5odG1sIGZvciBsaXN0IG9mIG9mIGluZGl2aWR1YWxzLgotQWxzbyBzZWUgZWFjaCBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIENvcHlyaWdodCBjbGFpbXMuCi0KLVFpNGogaXMgYSBjb21tdW5pdHkgYWdncmVnYXRlZCB3b3JrcyB1bmRlciBDb3B5cmlnaHQgbGF3LgotQWxsIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCB3b3JrcyBhdCBRaTRqIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2UgdmVyIDIuMCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMKLQotU2VlIE5PVElDRSBmaWxlcyBpbiBjb3JlLywgbGlicmFyaWVzLyBhbmQgZXh0ZW5zaW9ucy8gZm9yIGZ1cnRoZXIKLW5vdGljZXMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBhdAorVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KZGlmZiAtLWdpdCBhL1JFQURNRS50eHQgYi9SRUFETUUudHh0CmluZGV4IDBjYzBiY2QuLmRjYmU2ZGYgMTAwNjQ0Ci0tLSBhL1JFQURNRS50eHQKKysrIGIvUkVBRE1FLnR4dApAQCAtMSw0OCArMSw2NCBAQAogCi1XZWxjb21lIHRvIHRoZSB3b3JsZCBvZiBRaTRqCitXZWxjb21lIHRvIHRoZSB3b3JsZCBvZiBBcGFjaGUgWmVzdAogICAgLSBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgb24gdGhlIEphdmEgcGxhdGZvcm0uCiAKIAotVGhpcyBRaTRqIFNESyBjb250YWlucyBldmVyeXRoaW5nIHlvdSBuZWVkIHRvIGNyZWF0ZSBRaTRqIGFwcGxpY2F0aW9ucy4KK1RoaXMgQXBhY2hlIFplc3TihKIgU291cmNlIERpc3RyaWJ1dGlvbiBjb250YWlucyBldmVyeXRoaW5nIHlvdSBuZWVkIHRvCitjcmVhdGUgWmVzdOKEoiBhcHBsaWNhdGlvbnMuCiAKIAotUWk0aiBzdGFydGVkIGluIDIwMDcsIGFuZCBpcyBzdGlsbCBpbiBoZWF2eSBkZXZlbG9wbWVudC4gV2Ugd291bGQgbGlrZQorWmVzdOKEoiBzdGFydGVkIGluIDIwMDcsIGFuZCBpcyBzdGlsbCBpbiBoZWF2eSBkZXZlbG9wbWVudCB1bmRlciB0aGUgdW1icmVsbGEgb2YKK3RoZSBBcGFjaGUgWmVzdOKEoiBwcm9qZWN0IGF0IHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gV2Ugd291bGQgbGlrZQogZGV2ZWxvcGVycyBhcm91bmQgdGhlIHdvcmxkIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBhZHZhbmNlbWVudCBvZiB0aGlzCiBjb29sLCBuZXcgYW5kIGNoYWxsZW5naW5nIHRlY2hub2xvZ3kuIFdlIGFyZSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4KIHBlb3BsZSB3aWxsaW5nIHRvIGhlbHAgaW1wcm92ZSB0aGUgU0RLLCBzYW1wbGVzLCB0dXRvcmlhbHMsIGRvY3VtZW50YXRpb24KIGFuZCBvdGhlciBzdXBwb3J0aW5nIG1hdGVyaWFsLgogCi1QbGVhc2Ugc2VlIGh0dHA6Ly9xaTRqLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK1BsZWFzZSBzZWUgaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAogTGljZW5zaW5nCiAtLS0tLS0tLS0KLUFsbCBRaTRqIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgYW4gQXBhY2hlIExpY2Vuc2UuCitBbGwgWmVzdOKEoiBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIGFuIEFwYWNoZSBMaWNlbnNlLgogCiBUaGlyZC1QYXJ0eSBEZXBlbmRlbmNpZXMgbWF5IGJlIGxpY2Vuc2VkIHVuZGVyIG90aGVyIHRlcm1zLiBUaGUgb25seQogcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBTTEY0SiAoTUlUIExpY2VuY2UpLCBBU00gKEJTRCBMaWNlbmNlKSBhbmQKIEpvZGEtVGltZSAoQXBhY2hlIExpY2VuY2UpLgogCi0KLURlcGVuZGVuY2llcyBub3QgaW5jbHVkZWQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBiaW5hcnkgZGlzdHJpYnV0aW9ucyBjb250YWlucyBRaTRqIGFydGlmYWN0cyBvbmx5IHRvIGtlZXAgdGhlIGRvd25sb2FkCi1zaXplIHNtYWxsLiBFYWNoIFFpNGogYXJ0aWZhY3QgY29tZXMgd2l0aCBhIGZpbGUgcHJlZml4ZWQgLi4tcnVudGltZS1kZXBzLnR4dAotdGhhdCBjb250YWlucyB0aGUgbGlzdCBvZiBpdHMgZGVwZW5kZW5jaWVzLiBNb3Jlb3ZlciwgYXQgdGhlIFNESyByb290IHlvdSdsbAotZmluZCBhIE1ldGFsaW5rIGZpbGUgbmFtZWQgcWk0ai1zZGstcnVudGltZS1kZXBzLm1ldGFsaW5rIHRoYXQgeW91IGNhbiB1c2UgdG8KLWRvd25sb2FkIGFsbCBuZWVkZWQgZGVwZW5kZW5jaWVzIGphcnMuIE1ldGFsaW5rIGZpbGVzIGNhbiBiZSBkb3dubG9hZGVkIHVzaW5nCi1jdXJsLCBhcmlhMiBhbmQgYSBsb3Qgb2Ygb3RoZXIgZG93bmxvYWQgdG9vbHMuIFN1cHBvcnQgaW4gd2dldCBpcyBjb21pbmcuCi0KLUZpbmFsbHksIFFpNGogVGVzdFN1cHBvcnQgZGVwZW5kcyBvbiBKVW5pdCA0LnggYW5kIGl0cyBkZXBlbmRlbmNpZXMsIHdoaWNoCitGaW5hbGx5LCBaZXN04oSiIFRlc3RTdXBwb3J0IGRlcGVuZHMgb24gSlVuaXQgNC54IGFuZCBpdHMgZGVwZW5kZW5jaWVzLCB3aGljaAogaXMgYWxzbyBub3QgaW5jbHVkZWQgaW4gdGhlIFNESyBpdHNlbGYsIGFzIGl0IGlzIHByZXNlbnQgYW1vbmcgbW9zdCBKYXZhCiBkZXZlbG9wZXJzLgogCisKK0RlcGVuZGVuY2llcyBub3QgaW5jbHVkZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGNvbnRhaW5zIFplc3TihKIgc291cmNlcyBvbmx5IHRvIGtlZXAgdGhlIGRvd25sb2FkCitzaXplIHNtYWxsLiBUaGUgR3JhZGxlIGJ1aWxkIGF1dG9tYXRpY2FsbHkgZG93bmxvYWRzIG5lZWRlZCBkZXBlbmRlbmNpZXMuCitJZiB5b3UgbmVlZCB0byBnbyBvZmZsaW5lIHR5cGUgYC4vZ3JhZGxldyBnb09mZmxpbmVgIHRvIGVuc3VyZSBhbGwgbmVlZGVkCitkZXBlbmRlbmNpZXMgYXJlIGNhY2hlZCBieSBHcmFkbGUuCisKIElmIHlvdSBwcmVmZXIgdG8gdXNlIGEgZGVwZW5kZW5jeSBtYW5hZ2VtZW50IHN5c3RlbSwgZ28gdG86Ci1odHRwOi8vcWk0ai5vcmcvbGF0ZXN0L2hvd3RvLWRlcGVuZC1vbi1xaTRqLmh0bWwKK2h0dHBzOi8vemVzdC5hcGFjaGUub3JnL2phdmEvbGF0ZXN0L2hvd3RvLWRlcGVuZC1vbi16ZXN0Lmh0bWwKIAogCi1UaGFuayB5b3UgZm9yIHRyeWluZyBvdXQgUWk0aiBhbmQgQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nLgorQnVpbGRpbmcgQXBhY2hlIFplc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gYnVpbGQgWmVzdOKEoiBmcm9tIHNvdXJjZXMgeW91IG9ubHkgbmVlZCB0byBoYXZlIGEgdmFsaWQgSmF2YSBKREsgPj0gNworaW5zdGFsbGF0aW9uLgorCitJZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgWmVzdOKEoiBtYW51YWwsIHRoZW4geW91IGFsc28gbmVlZCB2YWxpZCBBc2NpaWRvYworKGh0dHA6Ly93d3cubWV0aG9kcy5jby5uei9hc2NpaWRvYy8pIGFuZCBEb2Nib29rLVhTTCBpbnN0YWxsYXRpb25zLgorCitIZXJlIGlzIGhvdyB0byBydW4gYSBmdWxsIGJ1aWxkIHdpdGggY2hlY2tzOgorCisgICAgLi9ncmFkbGV3IGNoZWNrIGFzc2VtYmxlCisKK1JlYWQgdGhlIFplc3TihKIgQnVpbGQgU3lzdGVtIHR1dG9yaWFsIGZvciBtb3JlIGRldGFpbHM6CitodHRwczovL3plc3QuYXBhY2hlLm9yZy9qYXZhL2xhdGVzdC9idWlsZC1zeXN0ZW0uaHRtbAogCiAKLS0tIFFpNGogQ29yZSBEZXYgVGVhbQorVGhhbmsgeW91IGZvciB0cnlpbmcgb3V0IEFwYWNoZSBaZXN04oSiIGFuZCBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcuCisKKworLS0gQXBhY2hlIFplc3TihKIgVGVhbQogCmRpZmYgLS1naXQgYS9iaW4vZ2l0LWNyZWF0ZS1yZW1vdGUtYnJhbmNoLnNoIGIvYmluL2dpdC1jcmVhdGUtcmVtb3RlLWJyYW5jaC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTM3ODYxMC4uMDAwMDAwMAotLS0gYS9iaW4vZ2l0LWNyZWF0ZS1yZW1vdGUtYnJhbmNoLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyEvYmluL3NoCi0jIGdpdC1jcmVhdGUtcmVtb3RlLWJyYW5jaCA8YnJhbmNoX25hbWU+Ci0KLWlmIFsgJCMgLW5lIDEgXTsgdGhlbgotICAgICAgICAgZWNobyAxPiYyIFVzYWdlOiAkMCBicmFuY2hfbmFtZQotICAgICAgICAgZXhpdCAxMjcKLWZpCi0gCi1leHBvcnQgYnJhbmNoX25hbWU9JDEKLWdpdCBwdXNoIG9yaWdpbiBvcmlnaW46cmVmcy9oZWFkcy8ke2JyYW5jaF9uYW1lfQotZ2l0IGZldGNoIG9yaWdpbgotZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgJHticmFuY2hfbmFtZX0gb3JpZ2luLyR7YnJhbmNoX25hbWV9Ci1naXQgcHVsbApkaWZmIC0tZ2l0IGEvYmluL21pZ3JhdGUvZGV2ZWxvcC5zaCBiL2Jpbi9taWdyYXRlL2RldmVsb3Auc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDlmMzdkZmUuLjAwMDAwMDAKLS0tIGEvYmluL21pZ3JhdGUvZGV2ZWxvcC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1naXQgY2xvbmUgZ2l0Oi8vZ2l0aHViLmNvbS9RaTRqL3FpNGotc2RrLmdpdAotY2QgcWk0ai1zZGsKLWdpdCBybSAuZ2l0bW9kdWxlcwotZ2l0IGNvbW1pdCAtYSAtbSAiUmVtb3Zpbmcgc3VibW9kdWxlcyBhbmQgbWVyZ2luZyBxaTRqLWNvcmUsIHFpNGotbGlicmFyaWVzIGFuZCBxaTRqLWV4dGVuc2lvbnMgdmlhIHN1YnRyZWUtbWVyZ2UiCi0KLWdpdCByZW1vdGUgYWRkIC1mIGNvcmUgZ2l0QGdpdGh1Yi5jb206UWk0ai9xaTRqLWNvcmUuZ2l0Ci1naXQgbWVyZ2UgLXMgb3VycyAtLW5vLWNvbW1pdCBjb3JlL2RldmVsb3AKLWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9Y29yZS8gLXUgY29yZS9kZXZlbG9wCi1naXQgY29tbWl0IC1tICJNZXJnZSAncWk0ai1jb3JlJyBhcyBpbnRvIFNESyIKLWdpdCBwdWxsIC1zIHN1YnRyZWUgY29yZSBkZXZlbG9wCi0KLWdpdCByZW1vdGUgYWRkIC1mIGxpYnJhcmllcyBnaXRAZ2l0aHViLmNvbTpRaTRqL3FpNGotbGlicmFyaWVzLmdpdAotZ2l0IG1lcmdlIC1zIG91cnMgLS1uby1jb21taXQgbGlicmFyaWVzL2RldmVsb3AKLWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9bGlicmFyaWVzLyAtdSBsaWJyYXJpZXMvZGV2ZWxvcAotZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgJ3FpNGotbGlicmFyaWVzJyBhcyBpbnRvIFNESyIKLWdpdCBwdWxsIC1zIHN1YnRyZWUgbGlicmFyaWVzIGRldmVsb3AKLQotZ2l0IHJlbW90ZSBhZGQgLWYgZXh0ZW5zaW9ucyBnaXRAZ2l0aHViLmNvbTpRaTRqL3FpNGotZXh0ZW5zaW9ucy5naXQKLWdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IGV4dGVuc2lvbnMvZGV2ZWxvcAotZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD1leHRlbnNpb25zLyAtdSBleHRlbnNpb25zL2RldmVsb3AKLWdpdCBjb21taXQgLW0gIk1lcmdlICdxaTRqLWV4dGVuc2lvbnMnIGFzIGludG8gU0RLIgotZ2l0IHB1bGwgLXMgc3VidHJlZSBleHRlbnNpb25zIGRldmVsb3AKLQpkaWZmIC0tZ2l0IGEvYmluL3RhZy5zaCBiL2Jpbi90YWcuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDczMTkxNzkuLjAwMDAwMDAKLS0tIGEvYmluL3RhZy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyEvYmluL3NoCi0KLVZFUlNJT049JDEKLU1FU1NBR0U9JDIKLWdpdCB0YWcgLXMgLW0gJE1FU1NBR0UgJFZFUlNJT04KLWdpdCBwdXNoIC0tdGFncwpkaWZmIC0tZ2l0IGEvYnVpbGQuZ3JhZGxlIGIvYnVpbGQuZ3JhZGxlCmluZGV4IDIwZjIxNWUuLmQ3NjY2ZTYgMTAwNjQ0Ci0tLSBhL2J1aWxkLmdyYWRsZQorKysgYi9idWlsZC5ncmFkbGUKQEAgLTEsMTEgKzEsNDIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKIHByb2plY3QuZXh0IHsKLSAgdGl0bGUgPSAiUWk0aiBTREsiCi0gIGRlc2NyaXB0aW9uID0gIlFpNGrihKIgaXMgYSBmcmFtZXdvcmsgZm9yIGRvbWFpbiBjZW50cmljIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LCBpbmNsdWRpbmcgZXZvbHZlZCBjb25jZXB0cyBmcm9tIEFPUCwgREkgYW5kIERERC4iCisgIHRpdGxlID0gIkFwYWNoZSBaZXN04oSiIChKYXZhIEVkaXRpb24pIFNESyIKKyAgZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgKEphdmEgRWRpdGlvbikgaXMgYSBmcmFtZXdvcmsgZm9yIGRvbWFpbiBjZW50cmljIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LCBpbmNsdWRpbmcgZXZvbHZlZCBjb25jZXB0cyBmcm9tIEFPUCwgREkgYW5kIERERC4iCiAgIHRlc3RGYWlsdXJlcyA9IFsgXQogICBtYWluQ2xhc3NOYW1lID0gJ29yZy5xaTRqLmNvbnRhaW5lci5NYWluJwogICBncm9vdnljTWFpbl9teCA9ICI3MDBtIgotICBncm9vdnljTWFpbl9wZXJtU2l6ZSA9ICIyNTZtIgotICBncm9vdnljTWFpbl9tYXhQZXJtU2l6ZSA9ICIyNTZtIgorICBncm9vdnljTWFpbl9wZXJtU2l6ZSA9ICI1MTJtIgorICBncm9vdnljTWFpbl9tYXhQZXJtU2l6ZSA9ICI1MTJtIgorfQorCitidWlsZHNjcmlwdCB7CisgIHJlcG9zaXRvcmllcyB7CisgICAgbWF2ZW4geyB1cmwgImh0dHBzOi8vcGx1Z2lucy5ncmFkbGUub3JnL20yLyIgfQorICAgIGpjZW50ZXIoKQorICB9CisgIGRlcGVuZGVuY2llcyB7CisgICAgY2xhc3NwYXRoICdncmFkbGUucGx1Z2luLm9yZy5ub3NwaGVyZS5hcGFjaGU6Y3JlYWR1ci1yYXQtZ3JhZGxlOjAuMS4yJworICAgIGNsYXNzcGF0aCAnZ3JhZGxlLnBsdWdpbi5vcmcubm9zcGhlcmUuaG9ua2VyOmhvbmtlci1ncmFkbGU6MC4yLjEnCisgICAgY2xhc3NwYXRoICdvcmcuaGliZXJuYXRlLmJ1aWxkLmdyYWRsZTpncmFkbGUtbWF2ZW4tcHVibGlzaC1hdXRoOjIuMC4xJworICB9CiB9CiAKIApAQCAtMTMsOSArNDQsMTAgQEAKIGFwcGx5IHBsdWdpbjogJ2lkZWEnCiBhcHBseSBwbHVnaW46ICdzaWduaW5nJwogYXBwbHkgcGx1Z2luOiAnbWF2ZW4nCi1hcHBseSBmcm9tOiAnbWF2ZW4tY29tcGF0LmdyYWRsZScKK2FwcGx5IHBsdWdpbjogJ21hdmVuLXB1Ymxpc2gtYXV0aCcKIGFwcGx5IHBsdWdpbjogJ3Byb2plY3QtcmVwb3J0JwogYXBwbHkgZnJvbTogJ2xpYnJhcmllcy5ncmFkbGUnCithcHBseSBwbHVnaW46ICdvcmcubm9zcGhlcmUuYXBhY2hlLnJhdCcKIAogdGFyZ2V0Q29tcGF0aWJpbGl0eSA9ICIxLjciCiBzb3VyY2VDb21wYXRpYmlsaXR5ID0gIjEuNyIKQEAgLTIzLDE0ICs1NSw0OCBAQAogLy8gQ29sbGVjdCB0aGUgbW9kdWxlcyB0aGF0IGZ1bGZpbGxzIHRoZSBSZWxlYXNlIENyaXRlcmlhLgogcHJvamVjdC5leHQgewogICByZWxlYXNlU3BlYyA9IG5ldyBvcmcucWk0ai5ncmFkbGUucGx1Z2luLk1vZHVsZVJlbGVhc2VTcGVjaWZpY2F0aW9uKCkKKyAgcmVsZWFzZUFwcHJvdmVkUHJvamVjdHMgPSBhbGxwcm9qZWN0cy5maW5kQWxsKCB7IHAgLT4gcm9vdFByb2plY3QucmVsZWFzZVNwZWMuc2F0aXNmaWVkQnkoIHAgKSB9ICkKIH0KIAotZGVmIHJlbGVhc2VBcHByb3ZlZFByb2plY3RzID0gYWxscHJvamVjdHMuZmluZEFsbCggeyBwcm9qZWN0IC0+ICByb290UHJvamVjdC5leHQucmVsZWFzZVNwZWMuc2F0aXNmaWVkQnkoIHByb2plY3QgKSB9ICkKKy8vIFRvZ2dsZSBzaWduaW5nLCB1c2VkIGJ5IHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGJ5IHNldHRpbmcgdGhlIHNraXBTaWduaW5nIHByb3BlcnR5IGluIGdyYWRsZS5wcm9wZXJ0aWVzCitwcm9qZWN0LmV4dC5za2lwU2lnbmluZyA9IHJvb3RQcm9qZWN0Lmhhc1Byb3BlcnR5KCAnc2tpcFNpZ25pbmcnICkgPyByb290UHJvamVjdC5za2lwU2lnbmluZyA6IGZhbHNlCiAKLWJ1aWxkc2NyaXB0IHsKLSAgcmVwb3NpdG9yaWVzIHsKLSAgICBtYXZlbkNlbnRyYWwoKQotICB9CityYXQgeworICAgIG9ubHlJZiB7IHZlcnNpb24gIT0gJzAnIH0KKyAgICBleGNsdWRlcyA9IFsKKyAgICAgICAgJyoqLy5EU19TdG9yZS8qKicsICcqKi8uXyonLAorICAgICAgICAvLyBHaXQgRmlsZXMKKyAgICAgICAgJyoqLy5naXQvKionLCAnKiovLmdpdGlnbm9yZScsCisgICAgICAgIC8vIEdyYWRsZSBGaWxlcworICAgICAgICAnZ3JhZGxlL3dyYXBwZXIvKionLCAnKiovZ3JhZGxldycsICcqKi9ncmFkbGV3LmJhdCcsICcqKi8uZ3JhZGxlLyoqJywKKyAgICAgICAgLy8gQnVpbGQgT3V0cHV0CisgICAgICAgICcqKi9idWlsZC8qKicsICcqKi9kZXJieS5sb2cnLCAnb3V0LyoqJywKKyAgICAgICAgLy8gSURFIEZpbGVzCisgICAgICAgICcqKi8uaWRlYS8qKicsICcqKi8qLmltbCcsICcqKi8qLmlwcicsICcqKi8qLml3cycsCisgICAgICAgICcqKi8uc2V0dGluZ3MvKionLCAnKiovLmNsYXNzcGF0aCcsICcqKi8ucHJvamVjdCcsCisgICAgICAgICcqKi8uZ3JhZGxldGFza25hbWVjYWNoZScsICcqKi9wcml2YXRlL2NhY2hlLyoqJywKKyAgICAgICAgJyoqLy5uYi1ncmFkbGUtcHJvcGVydGllcycsICcqKi8ubmItZ3JhZGxlLyoqJywKKyAgICAgICAgLy8gSlNPTiBmaWxlcyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBjb21tZW50cywgYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cuanNvbi5vcmcvIGFuZCBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0NjI3LnR4dAorICAgICAgICAnKiovKi5qc29uJywKKyAgICAgICAgLy8gVmFyaW91cyBUZXh0IFJlc291cmNlcworICAgICAgICAnKiovUkVBRE1FLionLCcqKi9SRUFETUUqLionLCAnKiovVE9ETycsCisgICAgICAgICcqKi9zcmMvbWFpbi9yZXNvdXJjZXMvKiovKi50eHQnLAorICAgICAgICAnKiovc3JjL3Rlc3QvcmVzb3VyY2VzLyoqLyoudHh0JywKKyAgICAgICAgJ2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvKiovKi5odG0nLAorICAgICAgICAnbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy8qKi8qLmF0b20nLAorICAgICAgICAndG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzLyoqLyouZnQnLAorICAgICAgICAndG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzLyoqLyoudGVtcGxhdGUnLAorICAgICAgICAvLyBHcmFwaGljIFJlc291cmNlcworICAgICAgICAnKiovKi5zdmcnLCAnKiovKi5naWYnLCAnKiovKi5wbmcnLCAnKiovKi5qcGcnLCAnKiovKi5wc2QnLAorICAgICAgICAvLyBLZXlzdG9yZXMKKyAgICAgICAgJyoqLyouamNla3MnLAorICAgICAgICAvLyBTeW50YXggSGlnaGxpZ2h0ZXIgLSBNSVQKKyAgICAgICAgJ21hbnVhbC8qKi9zaCouY3NzJywgJ21hbnVhbC8qKi9zaCouanMnLAorICAgICAgICAvLyBqUXVlcnkgJiBwbHVnaW5zIC0gTUlUCisgICAgICAgICdtYW51YWwvKiovanF1ZXJ5Ki5qcycsCisgICAgICAgIC8vIFczQyBYTUwgU2NoZW1hcyAtIFczQyBTb2Z0d2FyZSBMaWNlbnNlCisgICAgICAgICdzYW1wbGVzL3JlbnRhbC9zcmMvbWFpbi9yZXNvdXJjZXMvKi54c2QnLAorICAgIF0KIH0KIAogCkBAIC01MSw4ICsxMTcsNyBAQAogZGVmIHJlcG9zX3VybHMgPSBbCiAgIG1hdmVuQ2VudHJhbDogImh0dHA6Ly9yZXBvMS5tYXZlbi5vcmcvbWF2ZW4yLyIsCiAgIG9wczRqOiAiaHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi8iLAotICByZXN0bGV0OiAnaHR0cDovL21hdmVuLnJlc3RsZXQub3JnJywKLSAgamF2YW5ldDogImh0dHA6Ly9kb3dubG9hZC5qYXZhLm5ldC9tYXZlbi8yIiwKKyAgcmVzdGxldDogJ2h0dHA6Ly9tYXZlbi5yZXN0bGV0Lm9yZy8nLAogICBjbG9qYXJzOiAiaHR0cDovL2Nsb2phcnMub3JnL3JlcG8vIiwKIF0KIApAQCAtNjUsMTIgKzEzMCwxNSBAQAogLy8gIGFwcGx5IHBsdWdpbjogJ2NoZWNrc3R5bGUnCiAgIGFwcGx5IHBsdWdpbjogJ3Byb2plY3QtcmVwb3J0JwogICBhcHBseSBwbHVnaW46ICdtYXZlbicKKyAgYXBwbHkgcGx1Z2luOiAnb3JnLm5vc3BoZXJlLmhvbmtlcicKIAogCiAgIGRlZmF1bHRUYXNrcyAnY2xhc3NlcycsICd0ZXN0JwogCi0gIGdyb3VwID0gbmFtZS5zdWJzdHJpbmcoIDAsIG5hbWUubGFzdEluZGV4T2YoICcuJyApICkKLSAgdmVyc2lvbiA9IFN5c3RlbS5wcm9wZXJ0aWVzLnZlcnNpb24gPzogIjAiCisgIGdyb3VwID0gbmFtZSA9PSAnb3JnLnFpNGonID8gJ29yZy5xaTRqJyA6IG5hbWUuc3Vic3RyaW5nKCAwLCBuYW1lLmxhc3RJbmRleE9mKCAnLicgKSApCisgIGlmKCB2ZXJzaW9uID09ICd1bnNwZWNpZmllZCcgKSB7CisgICAgdmVyc2lvbiA9IFN5c3RlbS5wcm9wZXJ0aWVzLnZlcnNpb24gPzogIjAiCisgIH0KICAgCiAgIC8vIFVURi04IEZvciBhbGwgY29tcGlsYXRpb25zIGFuZCBqYXZhZG9jcwogICAvLyBEZXByZWNhdGlvbiB3YXJuaW5ncyBmb3IgYWxsIGNvbXBpbGF0aW9ucwpAQCAtODUsMTMgKzE1MywyMiBAQAogICB9CiAgIHRhc2tzLndpdGhUeXBlKEphdmFkb2MpIHsKICAgICBvcHRpb25zLmVuY29kaW5nID0gJ1VURi04JworICAgIG9wdGlvbnMuZG9jRW5jb2RpbmcgPSAnVVRGLTgnCisgICAgb3B0aW9ucy5jaGFyU2V0ID0gJ1VURi04JworICAgIG9wdGlvbnMubm9UaW1lc3RhbXAgPSB0cnVlCisgICAgb3B0aW9ucy5saW5rcyA9IFsKKyAgICAgICdodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpLycsCisgICAgICAnaHR0cDovL3d3dy5qb2RhLm9yZy9qb2RhLXRpbWUvYXBpZG9jcy8nLAorICAgICAgJ2h0dHA6Ly93d3cuanNvbi5vcmcvamF2YWRvYy8nLAorICAgICAgJ2h0dHA6Ly9qdW5pdC5vcmcvamF2YWRvYy9sYXRlc3QvJworICAgIF0KKyAgICAvLyBleGNsdWRlICcqKi9pbnRlcm5hbC8qKicKICAgfQogCiAgIHJlcG9zaXRvcmllcyB7CiAgICAgbWF2ZW5DZW50cmFsKCkKICAgICBtYXZlbiB7IG5hbWUgJ29wczRqLXJlcG8nOyB1cmwgcmVwb3NfdXJscy5vcHM0aiB9CiAgICAgbWF2ZW4geyBuYW1lICdyZXN0bGV0LXJlcG8nOyB1cmwgcmVwb3NfdXJscy5yZXN0bGV0IH0KLSAgICBtYXZlbiB7IG5hbWUgJ21hdmVuMi1yZXBvc2l0b3J5LmRldi5qYXZhLm5ldCc7IHVybCByZXBvc191cmxzLmphdmFuZXQgfQogICAgIG1hdmVuIHsgbmFtZSAnY2xvamFycy1yZXBvJzsgdXJsIHJlcG9zX3VybHMuY2xvamFycyB9CiAgIH0KIApAQCAtMTA5LDE2ICsxODYsMjIgQEAKICAgZGVmIHVwbG9hZFJlbGVhc2VTcGVjID0gcm9vdFByb2plY3QuaGFzUHJvcGVydHkoJ3VwbG9hZFJlbGVhc2VTcGVjJykgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvb3RQcm9qZWN0LnVwbG9hZFJlbGVhc2VTcGVjIDogdXBsb2FkUmVsZWFzZXMgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRydWUgOiBmYWxzZQotICAvLyBCeSBkZWZhdWx0IFJFTEVBU0VTIGFyZSB1cGxvYWRlZCB1c2luZyBTU0gsIFNOQVBTSE9UUyB1c2luZyBXRUJEQVYKKyAgLy8gQnkgZGVmYXVsdCBSRUxFQVNFUyBhbmQgU05BUFNIT1RTIGFyZSB1cGxvYWRlZCB1c2luZyBIVFRQCiAgIC8vIFVzZWQgV2Fnb24gY2FuIGJlIG92ZXJyaWRlbiBieSBzZXR0aW5nIHRoZSB1cGxvYWRXYWdvbiBwcm9wZXJ0eQotICAvLyBkZWYgd2Fnb25TU0ggPSAib3JnLmFwYWNoZS5tYXZlbi53YWdvbjp3YWdvbi1zc2g6MS4wLWJldGEtMiIKLSAgZGVmIHdhZ29uV0VCREFWID0gIm9yZy5hcGFjaGUubWF2ZW4ud2Fnb246d2Fnb24td2ViZGF2OjEuMC1iZXRhLTIiCisgIC8vIGRlZiB3YWdvblNTSCA9ICJvcmcuYXBhY2hlLm1hdmVuLndhZ29uOndhZ29uLXNzaDoyLjIiCisgIC8vIGRlZiB3YWdvbldFQkRBViA9ICJvcmcuYXBhY2hlLm1hdmVuLndhZ29uOndhZ29uLXdlYmRhdjoxLjAtYmV0YS0yIgorICBkZWYgd2Fnb25IVFRQID0gIm9yZy5hcGFjaGUubWF2ZW4ud2Fnb246d2Fnb24taHR0cDoyLjIiCiAgIGRlZiB1cGxvYWRXYWdvbiA9IHJvb3RQcm9qZWN0Lmhhc1Byb3BlcnR5KCd1cGxvYWRXYWdvbicpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgID8gcm9vdFByb2plY3QudXBsb2FkV2Fnb24gOiB3YWdvbldFQkRBVgotICAvLyBCeSBkZWZhdWx0IFJFTEVBU0VTIGFyZSB1cGxvYWRlZCB0byBPUFM0SiwgU05BUFNIT1RTIHRvIENsb3VkYmVlcworICAgICAgICAgICAgICAgICAgICAgICAgPyByb290UHJvamVjdC51cGxvYWRXYWdvbiA6IHdhZ29uSFRUUAorICAvLyBCeSBkZWZhdWx0IFJFTEVBU0VTIGFuZCBTTkFQU0hPVFMgYXJlIHVwbG9hZGVkIHRvIEFwYWNoZSBOZXh1cwogICAvLyBUYXJnZXQgcmVwb3NpdG9yeSBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHNldHRpbmcgdGhlIHVwbG9hZFJlcG9zaXRvcnkgcHJvcGVydHkKLSAgZGVmIHJlbGVhc2VzUmVwb3NpdG9yeSA9ICJkYXY6aHR0cHM6Ly9yZXBvc2l0b3J5LXFpNGouZm9yZ2UuY2xvdWRiZWVzLmNvbS9yZWxlYXNlLyIKLSAgZGVmIHNuYXBzaG90c1JlcG9zaXRvcnkgPSAiZGF2Omh0dHBzOi8vcmVwb3NpdG9yeS1xaTRqLmZvcmdlLmNsb3VkYmVlcy5jb20vc25hcHNob3QvIgorICBkZWYgcmVsZWFzZXNSZXBvc2l0b3J5TmFtZSA9ICJhcGFjaGUucmVsZWFzZXMuaHR0cHMiCisgIGRlZiByZWxlYXNlc1JlcG9zaXRvcnkgPSAiaHR0cHM6Ly9yZXBvc2l0b3J5LmFwYWNoZS5vcmcvc2VydmljZS9sb2NhbC9zdGFnaW5nL2RlcGxveS9tYXZlbjIiCisgIGRlZiBzbmFwc2hvdHNSZXBvc2l0b3J5TmFtZSA9ICJhcGFjaGUuc25hcHNob3RzLmh0dHBzIgorICBkZWYgc25hcHNob3RzUmVwb3NpdG9yeSA9ICJodHRwczovL3JlcG9zaXRvcnkuYXBhY2hlLm9yZy9jb250ZW50L3JlcG9zaXRvcmllcy9zbmFwc2hvdHMiCisgIGRlZiB1cGxvYWRSZXBvc2l0b3J5TmFtZSA9IHJvb3RQcm9qZWN0Lmhhc1Byb3BlcnR5KCd1cGxvYWRSZXBvc2l0b3J5TmFtZScpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvb3RQcm9qZWN0LnVwbG9hZFJlcG9zaXRvcnlOYW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVwbG9hZFJlbGVhc2VzID8gcmVsZWFzZXNSZXBvc2l0b3J5TmFtZSA6IHNuYXBzaG90c1JlcG9zaXRvcnlOYW1lCiAgIGRlZiB1cGxvYWRSZXBvc2l0b3J5ID0gcm9vdFByb2plY3QuaGFzUHJvcGVydHkoJ3VwbG9hZFJlcG9zaXRvcnknKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb290UHJvamVjdC51cGxvYWRSZXBvc2l0b3J5IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVwbG9hZFJlbGVhc2VzID8gcmVsZWFzZXNSZXBvc2l0b3J5IDogc25hcHNob3RzUmVwb3NpdG9yeQpAQCAtMTU2LDYgKzIzOSwxMSBAQAogICB9CiAKICAgc291cmNlU2V0cyB7CisgICAgbWFpbiB7CisgICAgICBvdXRwdXQuZGlyKCBob25rZXJHZW5EZXBlbmRlbmNpZXMub3V0cHV0RGlyLCBidWlsdEJ5OiBob25rZXJHZW5EZXBlbmRlbmNpZXMgKQorICAgICAgb3V0cHV0LmRpciggaG9ua2VyR2VuTGljZW5zZS5vdXRwdXREaXIsIGJ1aWx0Qnk6IGhvbmtlckdlbkxpY2Vuc2UgKQorICAgICAgb3V0cHV0LmRpciggaG9ua2VyR2VuTm90aWNlLm91dHB1dERpciwgYnVpbHRCeTogaG9ua2VyR2VuTm90aWNlICkKKyAgICB9CiAgICAgZG9jcyB7CiAgICAgICByZXNvdXJjZXMgewogICAgICAgICBzcmNEaXIgJ3NyYy9kb2NzJwpAQCAtMTYzLDE3ICsyNTEsNDEgQEAKICAgICB9CiAgIH0KIAorICBob25rZXIgeworICAgIC8vIFByb2plY3QgTGljZW5zZSwgYXBwbGllZCB0byBhbGwgc3VibW9kdWxlcworICAgIGxpY2Vuc2UgJ0FwYWNoZSAyJworICAgIC8vIERlcGVuZGVuY2llcyAodHJhbnNpdGl2ZSBvciBub3QpIHdpdGggbm8gbGljZW5zZSBpbmZvcm1hdGlvbiwgb3ZlcnJpZGluZyB0aGVtCisgICAgbGljZW5zZU92ZXJyaWRlIHsgY2FuZGlkYXRlIC0+CisgICAgICBpZiggY2FuZGlkYXRlLmdyb3VwID09ICdhc20nIHx8IGNhbmRpZGF0ZS5tb2R1bGUgPT0gJ3ByZWZ1c2UtY29yZScgKSB7CisgICAgICAgIGNhbmRpZGF0ZS5saWNlbnNlID0gJ0JTRCAzLUNsYXVzZScKKyAgICAgIH0KKyAgICAgIGlmKCBjYW5kaWRhdGUuZ3JvdXAgPT0gJ29yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMnCisgICAgICAgICAgfHwgY2FuZGlkYXRlLmdyb3VwID09ICdqZGJtJworICAgICAgICAgIHx8IGNhbmRpZGF0ZS5ncm91cCA9PSAnb3JnLm9zZ2knCisgICAgICAgICAgfHwgY2FuZGlkYXRlLmdyb3VwLnN0YXJ0c1dpdGgoICdvcmcucmVzdGxldCcgKSApIHsKKyAgICAgICAgY2FuZGlkYXRlLmxpY2Vuc2UgPSAnQXBhY2hlIDInCisgICAgICB9CisgICAgfQorICB9CisgIGhvbmtlckdlbk5vdGljZSB7CisgICAgaGVhZGVyID0gJ0FwYWNoZSBaZXN0JworICAgIGZvb3RlciA9ICdUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0XG5UaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLlxuJworICB9CisgIGNoZWNrLmRlcGVuZHNPbiBob25rZXJDaGVjaworCiAgIHByb2plY3QuZXh0IHsKICAgICBqYXZhRGlyID0gbmV3IEZpbGUoICIkcHJvamVjdERpci9zcmMvbWFpbi9qYXZhIiApCiAgICAgc2NhbGFEaXIgPSBuZXcgRmlsZSggIiRwcm9qZWN0RGlyL3NyYy9tYWluL3NjYWxhIiApCisgICAgZ3Jvb3Z5RGlyID0gbmV3IEZpbGUoICIkcHJvamVjdERpci9zcmMvbWFpbi9ncm9vdnkiKQogICAgIGRvY3VtZW50YXRpb25EaXIgPSBuZXcgRmlsZSggIiRwcm9qZWN0RGlyL3NyYy9kb2NzIiApCiAgICAgdGVzdEphdmFEaXIgPSBuZXcgRmlsZSggIiRwcm9qZWN0RGlyL3NyYy90ZXN0cy9qYXZhIiApCiAgICAgdGVzdFNjYWxhRGlyID0gbmV3IEZpbGUoICIkcHJvamVjdERpci9zcmMvdGVzdHMvc2NhbGEiICkKKyAgICB0ZXN0R3Jvb3Z5RGlyID0gbmV3IEZpbGUoICIkcHJvamVjdERpci9zcmMvdGVzdHMvZ3Jvb3Z5IikKICAgfQogCiAgIC8vIEFjdHVhbCBjb2RlIHByb2plY3RzIEJFR0lOIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgaWYoIGV4dC5qYXZhRGlyLmlzRGlyZWN0b3J5KCkgfHwgZXh0LnNjYWxhRGlyLmlzRGlyZWN0b3J5KCkgfHwKLSAgICAgIGV4dC50ZXN0SmF2YURpci5pc0RpcmVjdG9yeSgpIHx8IGV4dC50ZXN0U2NhbGFEaXIuaXNEaXJlY3RvcnkoKSApCisgIGlmKCBleHQuamF2YURpci5pc0RpcmVjdG9yeSgpIHx8IGV4dC5zY2FsYURpci5pc0RpcmVjdG9yeSgpIHx8IGV4dC5ncm9vdnlEaXIuaXNEaXJlY3RvcnkoKSB8fAorICAgICAgZXh0LnRlc3RKYXZhRGlyLmlzRGlyZWN0b3J5KCkgfHwgZXh0LnRlc3RTY2FsYURpci5pc0RpcmVjdG9yeSgpIHx8IGV4dC50ZXN0R3Jvb3Z5RGlyLmlzRGlyZWN0b3J5KCkgKQogICB7CiAgICAgYXBwbHkgcGx1Z2luOiAnamFjb2NvJwogICAgIGFwcGx5IHBsdWdpbjogJ29zZ2knCkBAIC0yMDgsMTcgKzMyMCwxOCBAQAogICAgIGphciB7CiAgICAgICBtYW5pZmVzdCB7CiAgICAgICAgIGxpY2Vuc2UgPSAnaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dCcKLSAgICAgICAgZG9jVVJMID0gJ2h0dHA6Ly93d3cucWk0ai5vcmcnCi0gICAgICAgIGRlc2NyaXB0aW9uID0gcHJvamVjdC5kZXNjcmlwdGlvbiA/OiAnUWk0aiBpcyBhIHBsYXRmb3JtIGZvciBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcnCi0gICAgICAgIHZlbmRvciA9ICdRaTRqIENvbW11bml0eSwgaHR0cDovL3d3dy5xaTRqLm9yZycKKyAgICAgICAgZG9jVVJMID0gJ2h0dHBzOi8vemVzdC5hcGFjaGUub3JnJworICAgICAgICBkZXNjcmlwdGlvbiA9IHByb2plY3QuZGVzY3JpcHRpb24gPzogJ0FwYWNoZSBaZXN04oSiIChKYXZhIEVkaXRpb24pIGlzIGEgcGxhdGZvcm0gZm9yIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZycKKyAgICAgICAgdmVuZG9yID0gJ1RoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZycKICAgICAgICAgaW5zdHJ1Y3Rpb24gJy1kZWJ1ZycsICd0cnVlJwogICAgICAgfQogICAgIH0KIAogICAgIHNpZ25pbmcgewotICAgICAgcmVxdWlyZWQgeyB1cGxvYWRTaWduZWQgfQorICAgICAgcmVxdWlyZWQgeyByb290UHJvamVjdC52ZXJzaW9uICE9ICcwJyAmJiB1cGxvYWRTaWduZWQgfQogICAgICAgc2lnbiBjb25maWd1cmF0aW9ucy5hcmNoaXZlcwogICAgIH0KKyAgICBzaWduQXJjaGl2ZXMub25seUlmIHsgIXJvb3RQcm9qZWN0LnNraXBTaWduaW5nIH0KIAogICAgIHRhc2sgc291cmNlSmFyKCB0eXBlOiBKYXIgKSB7CiAgICAgICBjbGFzc2lmaWVyID0gInNvdXJjZXMiCkBAIC0zMDEsMTYgKzQxNCwxOCBAQAogICAgICAgaWYoIHVwbG9hZFNpZ25lZCApCiAgICAgICAgIGJlZm9yZURlcGxveW1lbnQgeyBNYXZlbkRlcGxveW1lbnQgZGVwbG95bWVudCAtPiBzaWduaW5nLnNpZ25Qb20oIGRlcGxveW1lbnQgKSB9CiAgICAgICBjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbnMuZGVwbG95ZXJKYXJzCi0gICAgICByZXBvc2l0b3J5KHVybDogdXBsb2FkUmVwb3NpdG9yeSkgeworICAgICAgcmVwb3NpdG9yeShpZDogdXBsb2FkUmVwb3NpdG9yeU5hbWUsIHVybDogdXBsb2FkUmVwb3NpdG9yeSkgewogICAgICAgICBpZiggdXBsb2FkVXNlcm5hbWUgKQogICAgICAgICAgIGF1dGhlbnRpY2F0aW9uKHVzZXJOYW1lOiB1cGxvYWRVc2VybmFtZSwgcGFzc3dvcmQ6IHVwbG9hZFBhc3N3b3JkKQogICAgICAgfQotICAgICAgc25hcHNob3RSZXBvc2l0b3J5KHVybDogdXBsb2FkUmVwb3NpdG9yeSkgeworICAgICAgc25hcHNob3RSZXBvc2l0b3J5KGlkOiB1cGxvYWRSZXBvc2l0b3J5TmFtZSwgdXJsOiB1cGxvYWRSZXBvc2l0b3J5KSB7CiAgICAgICAgIGlmKCB1cGxvYWRVc2VybmFtZSApCiAgICAgICAgICAgYXV0aGVudGljYXRpb24odXNlck5hbWU6IHVwbG9hZFVzZXJuYW1lLCBwYXNzd29yZDogdXBsb2FkUGFzc3dvcmQpCiAgICAgICB9CiAgICAgfQogICB9CisgIGFwcGx5IGZyb206ICIkcm9vdFByb2plY3QucHJvamVjdERpci9tYXZlbi1jb21wYXQuZ3JhZGxlIgorICBhcHBseSBwbHVnaW46ICdtYXZlbi1wdWJsaXNoLWF1dGgnIC8vIEJ1ZyBpbiBtYXZlbi1wdWJsaXNoLWF1dGggcmVxdWlyZSBhcHBseSBhZnRlciB1cGxvYWRBcmNoaXZlcyBzZXR1cAogCiAgIGlkZWEubW9kdWxlLmltbCB7CiAgICAgd2hlbk1lcmdlZCB7IG1vZHVsZSAtPgpAQCAtMzE5LDYgKzQzNCwxNCBAQAogICB9CiB9IC8vIGFsbHByb2plY3RzIEVORCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy8vIEFsbG93IGVhc3kgZG93bmxvYWQgb2YgYWxsIGRlcGVuZGVuY2llcyB0byBnbyBvZmZsaW5lCisvLyAuL2dyYWRsZXcgZ29PZmZsaW5lCit0YXNrIGdvT2ZmbGluZSB7CisgIGRvTGFzdCB7CisgICAgYWxscHJvamVjdHMuY29uZmlndXJhdGlvbnMuZmxhdHRlbigpKi5yZXNvbHZlZENvbmZpZ3VyYXRpb24KKyAgfQorfQorCiBncmFkbGUudGFza0dyYXBoLndoZW5SZWFkeSB7dGFza0dyYXBoIC0+CiAgIHRhc2tHcmFwaC5hbGxUYXNrcy5sYXN0KCkuZG9MYXN0IHsKICAgICBpZiggcm9vdFByb2plY3QuZXh0LnRlc3RGYWlsdXJlcyApCkBAIC0zNjYsNyArNDg5LDcgQEAKICAgICAgIGV4ZWN1dGlvbmRhdGEgewogICAgICAgICBjb3ZlcmVkUHJvamVjdHMuY29sbGVjdCB7IHAgLT4gZmlsZXNldCggZGlyOiAiJHtwLmJ1aWxkRGlyLnBhdGh9L2phY29jbyIgKSB7IGluY2x1ZGUoIG5hbWU6ICcqLmV4ZWMnICkgfSB9CiAgICAgICB9Ci0gICAgICBzdHJ1Y3R1cmUoIG5hbWU6ICJRaTRqIFNESyIgKSB7CisgICAgICBzdHJ1Y3R1cmUoIG5hbWU6ICJBcGFjaGUgWmVzdOKEoiAoSmF2YSBFZGl0aW9uKSBTREsiICkgewogICAgICAgICBncm91cCggbmFtZTogIkNvcmUiICkgewogICAgICAgICAgIGNsYXNzZmlsZXMgeyBjb3JlUHJvamVjdHMuY29sbGVjdCB7IHAgLT4gZmlsZXNldCBkaXI6ICIke3AuYnVpbGREaXIucGF0aH0vY2xhc3Nlcy9tYWluIiB9IH0KICAgICAgICAgICBzb3VyY2VmaWxlcyB7IGNvcmVQcm9qZWN0cy5jb2xsZWN0IHsgcCAtPiBmaWxlc2V0IGRpcjogIiR7cC5wcm9qZWN0RGlyLnBhdGh9L3NyYy9tYWluL2phdmEiIH0gfQpAQCAtMzk0LDcgKzUxNyw3IEBACiAgICAgICB9CiAgICAgICBjc3YgIGRlc3RmaWxlOiAiJHtvdXRwdXRQYXRofS9qYWNvY28uY3N2IiwgZW5jb2Rpbmc6ICJVVEYtOCIKICAgICAgIHhtbCAgZGVzdGZpbGU6ICIke291dHB1dFBhdGh9L2phY29jby54bWwiLCBlbmNvZGluZzogIlVURi04IgotICAgICAgaHRtbCBkZXN0ZGlyOiAgb3V0cHV0UGF0aCwgZW5jb2Rpbmc6ICJVVEYtOCIsIGxvY2FsZTogImVuIiwgZm9vdGVyOiAiUWk0aiBTREsiCisgICAgICBodG1sIGRlc3RkaXI6ICBvdXRwdXRQYXRoLCBlbmNvZGluZzogIlVURi04IiwgbG9jYWxlOiAiZW4iLCBmb290ZXI6ICJBcGFjaGUgWmVzdOKEoiAoSmF2YSBFZGl0aW9uKSBTREsiCiAgICAgfQogICB9CiAgIGlucHV0cy5kaXIgc3VicHJvamVjdHMuY29sbGVjdCB7IHAgLT4gIiR7cC5idWlsZERpci5wYXRofS9qYWNvY28iIH0KQEAgLTQwNyw3ICs1MzAsNyBAQAogCiAgIG9wdGlvbnMuZG9jRmlsZXNTdWJEaXJzID0gdHJ1ZQogICBvcHRpb25zLmVuY29kaW5nID0gIlVURi04IgotICBvcHRpb25zLm92ZXJ2aWV3ID0gIiR7cm9vdFByb2plY3QucHJvamVjdERpcn0vYnVpbGRTcmMvc3JjL2phdmFkb2Mvb3ZlcnZpZXcuaHRtbCIKKyAgb3B0aW9ucy5vdmVydmlldyA9ICIke3Jvb3RQcm9qZWN0LnByb2plY3REaXJ9L3NyYy9qYXZhZG9jL292ZXJ2aWV3Lmh0bWwiCiAgIHRpdGxlID0gIiR7cm9vdFByb2plY3QudGl0bGV9ICR7dmVyc2lvbn0iCiAgIGRlZiBhcGlTb3VyY2VzID0gcmVsZWFzZUFwcHJvdmVkUHJvamVjdHMuZmluZEFsbCggeyBwcm9qZWN0IC0+CiAgICAgKCBwcm9qZWN0Lm5hbWUuc3RhcnRzV2l0aCggJ29yZy5xaTRqLmNvcmUnICkgJiYgIXByb2plY3QubmFtZS5zdGFydHNXaXRoKCAnb3JnLnFpNGouY29yZS5ydW50aW1lJyApICkgfHwKQEAgLTQxOCwxMiArNTQxLDExIEBACiAgIHNvdXJjZSBhcGlTb3VyY2VzLmNvbGxlY3QgeyBwcm9qZWN0IC0+CiAgICAgcHJvamVjdC5zb3VyY2VTZXRzLm1haW4uYWxsSmF2YQogICB9Ci0gIGRlc3RpbmF0aW9uRGlyID0gbmV3IEZpbGUoICIiICsgYnVpbGREaXIgKyAnL2RvY3MvamF2YWRvYycgKQorICBkZXN0aW5hdGlvbkRpciA9IHByb2plY3QuZmlsZSggIiRwcm9qZWN0LmRvY3NEaXIvamF2YWRvY3MiICkKICAgLy8gTWlnaHQgbmVlZCBhIGNsYXNzcGF0aAogICBjbGFzc3BhdGggPSBmaWxlcyggYXBpU291cmNlcy5jb2xsZWN0IHsgcHJvamVjdCAtPgogICAgIHByb2plY3Quc291cmNlU2V0cy5tYWluLmNvbXBpbGVDbGFzc3BhdGgKICAgfSApCi0gIG9wdGlvbnMubGlua3MoICJodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpLyIgKQogICBvcHRpb25zLmdyb3VwKCBbICJDb3JlIEFQSSI6IFsgIm9yZy5xaTRqLmFwaSIsICJvcmcucWk0ai5hcGkuKiIsICJvcmcucWk0ai5pbyIsICJvcmcucWk0ai5mdW5jdGlvbmFsIiBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICJDb3JlIEJvb3RzdHJhcCI6IFsgIm9yZy5xaTRqLmJvb3RzdHJhcCIsICJvcmcucWk0ai5ib290c3RyYXAuKiIgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29yZSBTUEkiOiBbICJvcmcucWk0ai5zcGkiLCAib3JnLnFpNGouc3BpLioiIF0sCkBAIC00NDAsMTEgKzU2MiwxMSBAQAogCiAgIGlmKCByb290UHJvamVjdC52ZXJzaW9uID09ICcwJyB8fCByb290UHJvamVjdC52ZXJzaW9uLmNvbnRhaW5zKCAiU05BUFNIT1QiICkgKQogICB7Ci0gICAgaW50byggIiRyb290UHJvamVjdC5wcm9qZWN0RGlyLy4uL3FpNGouZ2l0aHViLmNvbS9kZXZlbG9wL2phdmFkb2NzLyIgKQorICAgIGludG8oICIkcm9vdFByb2plY3QucHJvamVjdERpci8uLi96ZXN0LXdlYi9zaXRlL2NvbnRlbnQvamF2YS9kZXZlbG9wL2phdmFkb2NzLyIgKQogICB9CiAgIGVsc2UKICAgewotICAgIGludG8oICIkcm9vdFByb2plY3QucHJvamVjdERpci8uLi9xaTRqLmdpdGh1Yi5jb20vJHZlcnNpb24vamF2YWRvY3MvIiApCisgICAgaW50byggIiRyb290UHJvamVjdC5wcm9qZWN0RGlyLy4uL3plc3Qtd2ViL3NpdGUvY29udGVudC9qYXZhLyR2ZXJzaW9uL2phdmFkb2NzLyIgKQogICB9CiAgIGZyb20oICdidWlsZC9kb2NzL2phdmFkb2MvJyApCiB9CkBAIC00NTIsNDIgKzU3NCwxNjEgQEAKIAogLy8gQnVpbGQgQWxsCiB0YXNrIGJ1aWxkQWxsKCBkZXBlbmRzT246IFsKLSAgICBhcmNoaXZlSmF2YWRvY3MsCi0gICAgdGVzdCwKKyAgICBqYXZhZG9jcywKKyAgICBjaGVjaywKICAgICBqYXIsCiAgICAgc3VicHJvamVjdHMqLmRlcGVuZGVuY3lSZXBvcnQsCiAgICAgc3VicHJvamVjdHMqLmFzc2VtYmxlLAogICAgICc6b3JnLnFpNGoubWFudWFsOndlYnNpdGUnCiBdICkgeyB9CiAKLS8vIFByZXBhcmUgcnVudGltZSBkZXBlbmRlbmNpZXMgZG93bmxvYWQgZmFjaWxpdHkgKG1ldGFsaW5rKQotYnVpbGRBbGwuZG9MYXN0IHsKLSAgICBkZWYgcnVudGltZURlcHNNZXRhbGluayA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbjxtZXRhbGluayB4bWxucz1cInVybjppZXRmOnBhcmFtczp4bWw6bnM6bWV0YWxpbmtcIj5cbiIKLSAgICBydW50aW1lRGVwc01ldGFsaW5rID0gcnVudGltZURlcHNNZXRhbGluayArICIgPGlkZW50aXR5PnFpNGotc2RrLXJ1bnRpbWUtZGVwczwvaWRlbnRpdHk+XG4iCi0gICAgcnVudGltZURlcHNNZXRhbGluayA9IHJ1bnRpbWVEZXBzTWV0YWxpbmsgKyAiIDx2ZXJzaW9uPiR7dmVyc2lvbn08L3ZlcnNpb24+XG4iCi0gICAgZGVmIGhhbmRsZWRHYXZQYXRocyA9IFtdCi0gICAgcmVsZWFzZUFwcHJvdmVkUHJvamVjdHMuZWFjaCB7IHAgLT4KLSAgICAgIHAuY29uZmlndXJhdGlvbnMucnVudGltZS5hbGxEZXBlbmRlbmNpZXMuZWFjaCB7IGRlcCAtPgotICAgICAgICBkZWYgZ2F2cGF0aCA9IGRlcC5ncm91cC5yZXBsYWNlKCIuIiwiLyIpICsgIi8iICsgZGVwLm5hbWUgKyAiLyIgKyBkZXAudmVyc2lvbiArICIvIiArIGRlcC5uYW1lICsgIi0iICsgZGVwLnZlcnNpb24gKyAiLmphciIKLSAgICAgICAgaWYoICFkZXAuZ3JvdXAuc3RhcnRzV2l0aCgib3JnLnFpNGoiKSAmJiAhaGFuZGxlZEdhdlBhdGhzLmNvbnRhaW5zKCBnYXZwYXRoICkgKSB7Ci0gICAgICAgICAgcnVudGltZURlcHNNZXRhbGluayA9IHJ1bnRpbWVEZXBzTWV0YWxpbmsgKyAiICA8ZmlsZSBuYW1lPVwiJHtkZXAuZ3JvdXB9LSR7ZGVwLm5hbWV9LSR7ZGVwLnZlcnNpb259LmphclwiPlxuIgotICAgICAgICAgIHJlcG9zX3VybHMuZWFjaCB7IHJlcG9fdXJsIC0+Ci0gICAgICAgICAgICBydW50aW1lRGVwc01ldGFsaW5rID0gcnVudGltZURlcHNNZXRhbGluayArICIgICAgPHVybD4iICsgcmVwb191cmwudmFsdWUgKyBkZXAuZ3JvdXAucmVwbGFjZSgiLiIsIi8iKSArICIvIiArIGRlcC5uYW1lICsgIi8iICsgZGVwLnZlcnNpb24gKyAiLyIgKyBkZXAubmFtZSArICItIiArIGRlcC52ZXJzaW9uICsgIi5qYXIiICsgIjwvdXJsPlxuIgotICAgICAgICAgIH0KLSAgICAgICAgICBydW50aW1lRGVwc01ldGFsaW5rID0gcnVudGltZURlcHNNZXRhbGluayArICIgIDwvZmlsZT5cblxuIgotICAgICAgICAgIGhhbmRsZWRHYXZQYXRocyA8PCBnYXZwYXRoCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcnVudGltZURlcHNNZXRhbGluayA9IHJ1bnRpbWVEZXBzTWV0YWxpbmsgKyAiPC9tZXRhbGluaz5cbiIKLSAgICBuZXcgRmlsZSggYnVpbGREaXIudG9TdHJpbmcoKSwgInJlcG9ydHMiICkubWtkaXJzKCkKLSAgICBuZXcgRmlsZSggYnVpbGREaXIudG9TdHJpbmcoKSwgInJlcG9ydHMvcWk0ai1zZGstcnVudGltZS1kZXBzLm1ldGFsaW5rIiApLnRleHQgPSBydW50aW1lRGVwc01ldGFsaW5rCisvLyBHZW5lcmF0ZSBsaWNlbnNlIGhlYWRlcnMgd2l0aCBjb21tZW50IHN0eWxlcworZGVmIGxpY2Vuc2VIZWFkZXJfd3JhcCggYmFzZSwgdG9wLCBsZWZ0LCBib3R0b20gKSB7CisgICggdG9wID8gIiR0b3BcbiIgOiAnJyApICsgYmFzZS5yZWFkTGluZXMoKS5jb2xsZWN0eyAiJHtsZWZ0fSR7aXR9IiB9LmpvaW4oICdcbicgKSArICdcbicgKyAoIGJvdHRvbSA/ICIkYm90dG9tXG4iIDogJycgKQorfQorZGVmIGxpY2Vuc2VIZWFkZXIoIGZsYXZvdXIgKSB7CisgIGRlZiBiYXNlID0gcHJvamVjdC5maWxlKCAnZXRjL2hlYWRlci50eHQnICkudGV4dAorICBkZWYgaGVhZGVyCisgIHN3aXRjaCggZmxhdm91ciApIHsKKyAgICBjYXNlICdqYXZhJzogY2FzZSAnZ3Jvb3Z5JzogY2FzZSAnc2NhbGEnOiBjYXNlICdqcyc6CisgICAgICBoZWFkZXIgPSBsaWNlbnNlSGVhZGVyX3dyYXAoIGJhc2UsICcvKicsICcgKiAnLCAnICovJyApIDsgYnJlYWsKKyAgICBjYXNlICd4bWwnOiBjYXNlICdodG1sJzoKKyAgICAgIGhlYWRlciA9IGxpY2Vuc2VIZWFkZXJfd3JhcCggYmFzZSwgJzwhLS0nLCAnICAnLCAnLS0+JyApIDsgYnJlYWsKKyAgICBjYXNlICd0eHQnOiBjYXNlICdzaGVsbCc6IGNhc2UgJ3B5dGhvbic6IGNhc2UgJ3J1YnknOgorICAgICAgaGVhZGVyID0gbGljZW5zZUhlYWRlcl93cmFwKCBiYXNlLCBudWxsLCAnIyAnLCBudWxsICkgOyBicmVhaworICAgIGNhc2UgJ2Fkb2MnOiBjYXNlICdhc2NpaWRvYyc6CisgICAgICBoZWFkZXIgPSBsaWNlbnNlSGVhZGVyX3dyYXAoIGJhc2UsIG51bGwsICcvLyAnLCBudWxsICkgOyBicmVhaworICAgIGRlZmF1bHQ6CisgICAgICBoZWFkZXIgPSBiYXNlCisgIH0KKyAgaGVhZGVyCiB9CiAKLWRlZiBzcmNEaXN0SW1hZ2UgPSBjb3B5U3BlYyB7Cit0YXNrIGdlbmVyYXRlQmluRGlzdEdvT2ZmbGluZUhlbHBlcnMgeworICBkZWYgZ29PZmZsaW5lR3JhZGxlRmlsZSA9IGZpbGUoICdidWlsZC9nby1vZmZsaW5lLWhlbHBlcnMvZ28tb2ZmbGluZS5ncmFkbGUnICkKKyAgZGVmIGdvT2ZmbGluZVBvbUZpbGUgPSBmaWxlKCAnYnVpbGQvZ28tb2ZmbGluZS1oZWxwZXJzL2dvLW9mZmxpbmUucG9tJykKKyAgb3V0cHV0cy5maWxlcyBnb09mZmxpbmVHcmFkbGVGaWxlCisgIG91dHB1dHMuZmlsZXMgZ29PZmZsaW5lUG9tRmlsZQorICBkb0xhc3QgeworCisgICAgZGVmIGdvT2ZmbGluZUdyYWRsZSA9IGxpY2Vuc2VIZWFkZXIoICdqYXZhJyApCisgICAgZ29PZmZsaW5lR3JhZGxlICs9ICcvLyBUaGlzIGdyYWRsZSBidWlsZCBmaWxlIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIGRvd25sb2FkaW5nIGFsbCBkZXBlbmRlbmNpZXMgaW4gYSBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhpcyBmaWxlIG5hbWVkIFwnZGVwZW5kZW5jaWVzXCcuXG4nCisgICAgZ29PZmZsaW5lR3JhZGxlICs9ICcvLyBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiBncmFkbGUgLWIgZ28tb2ZmbGluZS5ncmFkbGUgZG93bmxvYWRcbicKKyAgICBnb09mZmxpbmVHcmFkbGUgKz0gJ2FwcGx5IHBsdWdpbjogXCdqYXZhXCdcbmNvbmZpZ3VyYXRpb25zIHsgZG93bmxvYWQgfVxucmVwb3NpdG9yaWVzIHtcbicKKyAgICBkZWYgZ29PZmZsaW5lUG9tID0gbGljZW5zZUhlYWRlciggJ3htbCcgKQorICAgIGdvT2ZmbGluZVBvbSArPSAnPHByb2plY3Q+XG4gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj5cbicKKyAgICBnb09mZmxpbmVQb20gKz0gIiAgPGdyb3VwSWQ+b3JnLnFpNGo8L2dyb3VwSWQ+XG4gIDxhcnRpZmFjdElkPmdvLW9mZmxpbmUtaGVscGVyPC9hcnRpZmFjdElkPlxuICA8dmVyc2lvbj4kdmVyc2lvbjwvdmVyc2lvbj5cbiIKKyAgICBnb09mZmxpbmVQb20gKz0gJyAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz5cbicKKyAgICBnb09mZmxpbmVQb20gKz0gJyAgPCEtLVxuICBUaGlzIHBvbSBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBkb3dubG9hZGluZyBhbGwgZGVwZW5kZW5jaWVzIGluIGEgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoaXMgZmlsZSBuYW1lZCBcJ2RlcGVuZGVuY2llc1wnLlxuJworICAgIGdvT2ZmbGluZVBvbSArPSAnICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuXG4gIG12biAtZiBnby1vZmZsaW5lLnBvbSB2YWxpZGF0ZVxuICAtLT5cbiAgPHJlcG9zaXRvcmllcz5cbicKKworICAgIGRlZiByZXBvQ291bnQgPSAxCisgICAgcmVwb3NfdXJscy5lYWNoIHsgcmVwb191cmwgLT4KKyAgICAgIGdvT2ZmbGluZUdyYWRsZSArPSAiICBtYXZlbiB7IHVybCAnJHtyZXBvX3VybC52YWx1ZX0nIH1cbiIKKyAgICAgIGdvT2ZmbGluZVBvbSArPSAiICAgIDxyZXBvc2l0b3J5PjxpZD5nby1vZmZsaW5lLXJlcG8tJHJlcG9Db3VudDwvaWQ+PHVybD4ke3JlcG9fdXJsLnZhbHVlfTwvdXJsPjwvcmVwb3NpdG9yeT5cbiIKKyAgICAgIHJlcG9Db3VudCsrCisgICAgfQorCisgICAgZ29PZmZsaW5lR3JhZGxlICs9ICd9XG5kZXBlbmRlbmNpZXMge1xuJworICAgIGdvT2ZmbGluZVBvbSArPSAnICA8L3JlcG9zaXRvcmllcz5cbiAgPGRlcGVuZGVuY2llcz5cbicKKworICAgIC8vIERvIHRoZSBnbG9iYWwgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGhlcmUgc28gdGhlcmUgd29uJ3QgYmUgYW55IHN1cHJpc2Ugd2hlbiB1c2luZyB0aGUgaGVscGVycworICAgIC8vIFRoaXMgYWxzbyBhbGxvdyB0byBhcHBseSB0aGUgcmVzb2x1dGlvbiBzdHJhdGVneSBkZWZpbmVkIGluIGxpYnJhcmllcy5ncmFkbGUKKyAgICAvLyBXQVJOIHNvbWUgb2Ygb3VyIG1vZHVsZXMgZGVwZW5kcyBvbiAhPSB2ZXJzaW9ucyBvZiBzb21lIGFydGlmYWN0cywgdGhpcyByZXNvbHV0aW9uIGZsYXR0ZW4gdGhpcyB1c2luZyB0aGUgbW9zdCB1cCB0byBkYXRlCisgICAgZGVmIGFsbFJ1bnRpbWVEZXBzID0gcmVsZWFzZUFwcHJvdmVkUHJvamVjdHMuY29sbGVjdHsgaXQuY29uZmlndXJhdGlvbnMucnVudGltZS5hbGxEZXBlbmRlbmNpZXMgfS5mbGF0dGVuKCkKKyAgICByb290UHJvamVjdC5jb25maWd1cmF0aW9ucy5jcmVhdGUoICdnb09mZmxpbmVIZWxwZXJzJyApCisgICAgcm9vdFByb2plY3QuZGVwZW5kZW5jaWVzIHsgYWxsUnVudGltZURlcHMuZWFjaHsgZ29PZmZsaW5lSGVscGVycyBpdCB9IH0KKyAgICByb290UHJvamVjdC5jb25maWd1cmF0aW9ucy5nb09mZmxpbmVIZWxwZXJzLmluY29taW5nLnJlc29sdXRpb25SZXN1bHQuYWxsQ29tcG9uZW50cy5lYWNoIHsgY29tcCAtPgorICAgICAgZGVmIGRlcENvb3JkcyA9ICIke2NvbXAubW9kdWxlVmVyc2lvbi5ncm91cH06JHtjb21wLm1vZHVsZVZlcnNpb24ubmFtZX06JHtjb21wLm1vZHVsZVZlcnNpb24udmVyc2lvbn0iCisgICAgICBpZiggIWNvbXAubW9kdWxlVmVyc2lvbi5ncm91cC5zdGFydHNXaXRoKCAnb3JnLnFpNGonICkgKSB7CisgICAgICAgIGdvT2ZmbGluZUdyYWRsZSArPSAiICBkb3dubG9hZCggJyRkZXBDb29yZHMnICkgeyB0cmFuc2l0aXZlID0gZmFsc2UgfVxuIgorICAgICAgICBnb09mZmxpbmVQb20gKz0gIiAgICA8ZGVwZW5kZW5jeT48Z3JvdXBJZD4ke2NvbXAubW9kdWxlVmVyc2lvbi5ncm91cH08L2dyb3VwSWQ+PGFydGlmYWN0SWQ+JHtjb21wLm1vZHVsZVZlcnNpb24ubmFtZX08L2FydGlmYWN0SWQ+PHZlcnNpb24+JHtjb21wLm1vZHVsZVZlcnNpb24udmVyc2lvbn08L3ZlcnNpb24+PC9kZXBlbmRlbmN5PlxuIgorICAgICAgfQorICAgIH0KKworICAgIGdvT2ZmbGluZUdyYWRsZSArPSAiIiJ9Cit0YXNrIGRvd25sb2FkKCB0eXBlOiBDb3B5ICkgeworICBkZWYgc291cmNlcyA9IGNvbmZpZ3VyYXRpb25zLmRvd25sb2FkLnJlc29sdmVkQ29uZmlndXJhdGlvbi5yZXNvbHZlZEFydGlmYWN0cy5jb2xsZWN0IHsgYXJ0aWZhY3QgLT4KKyAgICBwcm9qZWN0LmRlcGVuZGVuY2llcy5jcmVhdGUoIFsgZ3JvdXA6IGFydGlmYWN0Lm1vZHVsZVZlcnNpb24uaWQuZ3JvdXAsIG5hbWU6IGFydGlmYWN0Lm1vZHVsZVZlcnNpb24uaWQubmFtZSwgdmVyc2lvbjogYXJ0aWZhY3QubW9kdWxlVmVyc2lvbi5pZC52ZXJzaW9uLCBjbGFzc2lmaWVyOiAnc291cmNlcycgXSApCisgIH0KKyAgZGVmIGphdmFkb2NzID0gY29uZmlndXJhdGlvbnMuZG93bmxvYWQucmVzb2x2ZWRDb25maWd1cmF0aW9uLnJlc29sdmVkQXJ0aWZhY3RzLmNvbGxlY3QgeyBhcnRpZmFjdCAtPgorICAgIHByb2plY3QuZGVwZW5kZW5jaWVzLmNyZWF0ZSggWyBncm91cDogYXJ0aWZhY3QubW9kdWxlVmVyc2lvbi5pZC5ncm91cCwgbmFtZTogYXJ0aWZhY3QubW9kdWxlVmVyc2lvbi5pZC5uYW1lLCB2ZXJzaW9uOiBhcnRpZmFjdC5tb2R1bGVWZXJzaW9uLmlkLnZlcnNpb24sIGNsYXNzaWZpZXI6ICdqYXZhZG9jJyBdICkKKyAgfQorICBmcm9tIGNvbmZpZ3VyYXRpb25zLmRvd25sb2FkCisgIGZyb20gY29uZmlndXJhdGlvbnMuZGV0YWNoZWRDb25maWd1cmF0aW9uKCBzb3VyY2VzIGFzIERlcGVuZGVuY3lbXSApLnJlc29sdmVkQ29uZmlndXJhdGlvbi5sZW5pZW50Q29uZmlndXJhdGlvbi5nZXRGaWxlcyggU3BlY3MuU0FUSVNGSUVTX0FMTCApCisgIGZyb20gY29uZmlndXJhdGlvbnMuZGV0YWNoZWRDb25maWd1cmF0aW9uKCBqYXZhZG9jcyBhcyBEZXBlbmRlbmN5W10gKS5yZXNvbHZlZENvbmZpZ3VyYXRpb24ubGVuaWVudENvbmZpZ3VyYXRpb24uZ2V0RmlsZXMoIFNwZWNzLlNBVElTRklFU19BTEwgKQorICBpbnRvIGZpbGUoICdkZXBlbmRlbmNpZXMvJyApCit9CisiIiIKKworICAgIGdvT2ZmbGluZVBvbSArPSAiIiIgIDwvZGVwZW5kZW5jaWVzPlxuICA8YnVpbGQ+PHBsdWdpbnM+PHBsdWdpbj4KKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi4xMDwvdmVyc2lvbj4KKyAgICA8ZXhlY3V0aW9ucz4KKyAgICAgIDxleGVjdXRpb24+CisgICAgICAgIDxpZD5nby1vZmZsaW5lLWphcnM8L2lkPjxwaGFzZT52YWxpZGF0ZTwvcGhhc2U+CisgICAgICAgIDxnb2Fscz48Z29hbD5jb3B5LWRlcGVuZGVuY2llczwvZ29hbD48L2dvYWxzPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Plwke3Byb2plY3QuYmFzZWRpcn0vZGVwZW5kZW5jaWVzPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgPGV4Y2x1ZGVUcmFuc2l0aXZlPnRydWU8L2V4Y2x1ZGVUcmFuc2l0aXZlPgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgIDxleGVjdXRpb24+CisgICAgICAgIDxpZD5nby1vZmZsaW5lLXNvdXJjZXM8L2lkPjxwaGFzZT52YWxpZGF0ZTwvcGhhc2U+CisgICAgICAgIDxnb2Fscz48Z29hbD5jb3B5LWRlcGVuZGVuY2llczwvZ29hbD48L2dvYWxzPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8Y2xhc3NpZmllcj5zb3VyY2VzPC9jbGFzc2lmaWVyPjxmYWlsT25NaXNzaW5nQ2xhc3NpZmllckFydGlmYWN0PmZhbHNlPC9mYWlsT25NaXNzaW5nQ2xhc3NpZmllckFydGlmYWN0PgorICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+XCR7cHJvamVjdC5iYXNlZGlyfS9kZXBlbmRlbmNpZXM8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICA8ZXhjbHVkZVRyYW5zaXRpdmU+dHJ1ZTwvZXhjbHVkZVRyYW5zaXRpdmU+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgPGlkPmdvLW9mZmxpbmUtamF2YWRvY3M8L2lkPjxwaGFzZT52YWxpZGF0ZTwvcGhhc2U+CisgICAgICAgIDxnb2Fscz48Z29hbD5jb3B5LWRlcGVuZGVuY2llczwvZ29hbD48L2dvYWxzPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8Y2xhc3NpZmllcj5qYXZhZG9jPC9jbGFzc2lmaWVyPjxmYWlsT25NaXNzaW5nQ2xhc3NpZmllckFydGlmYWN0PmZhbHNlPC9mYWlsT25NaXNzaW5nQ2xhc3NpZmllckFydGlmYWN0PgorICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+XCR7cHJvamVjdC5iYXNlZGlyfS9kZXBlbmRlbmNpZXM8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICA8ZXhjbHVkZVRyYW5zaXRpdmU+dHJ1ZTwvZXhjbHVkZVRyYW5zaXRpdmU+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvZXhlY3V0aW9uPgorICAgIDwvZXhlY3V0aW9ucz4KKyAgPC9wbHVnaW4+PC9wbHVnaW5zPjwvYnVpbGQ+Cis8L3Byb2plY3Q+CisiIiIKKworICAgIGdvT2ZmbGluZUdyYWRsZUZpbGUucGFyZW50RmlsZS5ta2RpcnMoKQorICAgIGdvT2ZmbGluZVBvbUZpbGUucGFyZW50RmlsZS5ta2RpcnMoKQorCisgICAgZ29PZmZsaW5lR3JhZGxlRmlsZS50ZXh0ID0gZ29PZmZsaW5lR3JhZGxlCisgICAgZ29PZmZsaW5lUG9tRmlsZS50ZXh0ID0gZ29PZmZsaW5lUG9tCisgIH0KK30KKworCitkZWYgc3JjRGlzdEZpbGVzSW1hZ2VzID0gY29weVNwZWMgewogICBmcm9tICcuJworICBpbmNsdWRlICcqLnR4dCcKKyAgaW5jbHVkZSAnZG9hcC5yZGYnCisgIGluY2x1ZGUgJyouZ3JhZGxlJworICBpbmNsdWRlICdncmFkbGV3KicKKyAgaW5jbHVkZSAnZ3JhZGxlLyoqJworICBpbmNsdWRlICdldGMvKionCisgIGluY2x1ZGUgJ2J1aWxkU3JjLyoqJworICBpbmNsdWRlICdzcmMvKionCisgIHJlbGVhc2VBcHByb3ZlZFByb2plY3RzLmVhY2ggeyBwIC0+CisgICAgZGVmIHJlbFBhdGggPSBuZXcgRmlsZSggcHJvamVjdC5wcm9qZWN0RGlyLnRvVVJJKCkucmVsYXRpdml6ZSggcC5wcm9qZWN0RGlyLnRvVVJJKCkgKS50b1N0cmluZygpICkKKyAgICBpbmNsdWRlICIkcmVsUGF0aC8qKiIKKyAgfQorICBpbmNsdWRlICdtYW51YWwvKionCisgIGluY2x1ZGUgJ3NhbXBsZXMvKionCisgIGluY2x1ZGUgJ3Rlc3RzLyoqJworICBpbmNsdWRlICd0dXRvcmlhbHMvKionCisgIC8vIEZpbHRlcmVkLCBzZWUgYmVsb3cKKyAgZXhjbHVkZSAnc2V0dGluZ3MuZ3JhZGxlJworICBleGNsdWRlICdncmFkbGUucHJvcGVydGllcycKKyAgLy8gRXhjbHVkZXMKICAgZXhjbHVkZSAnKiovYnVpbGQvJyAgICAgICAgICAgICAgIC8vIEJ1aWxkIG91dHB1dAotICBleGNsdWRlICcqKi9iaW4vJyAgICAgICAgICAgICAgICAgLy8gSGVscGVyIHNjcmlwdHMKICAgZXhjbHVkZSAnZGVyYnkubG9nJyAgICAgICAgICAgICAgIC8vIERlcmJ5IHRlc3QgZ2FyYmFnZQogICBleGNsdWRlICcqKi8qLmltbCcgICAgICAgICAgICAgICAgLy8gSURFQSBmaWxlcwogICBleGNsdWRlICcqKi8qLmlwcicgICAgICAgICAgICAgICAgLy8gSURFQSBmaWxlcwpAQCAtNTAyLDkgKzc0Myw1MyBAQAogICBleGNsdWRlICcqKi8uZ2l0LycgICAgICAgICAgICAgICAgLy8gR2l0IGRpcmVjdG9yaWVzCiAgIGV4Y2x1ZGUgJyoqLy5naXQqJyAgICAgICAgICAgICAgICAvLyBHaXQgZmlsZXMKICAgZXhjbHVkZSAnKiovLmdyYWRsZS8nICAgICAgICAgICAgIC8vIEdyYWRsZSBtYW5hZ2VtZW50IGZpbGVzCi0gIGV4Y2x1ZGUgJyoqL2dyYWRsZS5wcm9wZXJ0aWVzJyAgICAvLyBHcmFkbGUgcHJvcGVydGllcwogICBleGNsdWRlICcqKi8uZ3JhZGxldGFza25hbWVjYWNoZScgLy8gR3JhZGxlIGNhY2hlCi0gIGludG8gInFpNGotc2RrLSR2ZXJzaW9uL3NyYy8iCisgIGludG8gJy4nCit9CisKK3Rhc2sgc3JjRGlzdEZpbHRlcmVkRmlsZXMoKSB7CisgIC8vIEdlbmVyYXRlcyB2YXJpb3VzIGZpbGVzIGZvciB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbgorICAvLyAtIHNldHRpbmdzLmdyYWRsZQorICAvLyAtIGdyYWRsZS5wcm9wZXJ0aWVzIHRvIHNldCB2ZXJzaW9uICEKKyAgZGVmIGZpbHRlcmVkRGlyID0gbmV3IEZpbGUoICIkcHJvamVjdC5idWlsZERpci90bXAvc3JjRGlzdEZpbHRlcmVkRmlsZXMiKQorICBvdXRwdXRzLmZpbGUgZmlsdGVyZWREaXIKKyAgZG9MYXN0IHsKKyAgICAvLyBTZXR0aW5ncworICAgIGRlZiBzZXR0aW5nc0ZpbGUgPSBuZXcgRmlsZSggZmlsdGVyZWREaXIsICAnc2V0dGluZ3MuZ3JhZGxlJyApCisgICAgc2V0dGluZ3NGaWxlLnBhcmVudEZpbGUubWtkaXJzKCkKKyAgICBkZWYgZmlsdGVyZWRTZXR0aW5ncyA9ICcnCisgICAgcHJvamVjdC5maWxlKCAnc2V0dGluZ3MuZ3JhZGxlJyApLnJlYWRMaW5lcygpLmVhY2ggeyBsaW5lIC0+CisgICAgICBpZiggbGluZS5jb250YWlucyggJ1wnbGlicmFyaWVzOicgKSB8fCBsaW5lLmNvbnRhaW5zKCAnXCdleHRlbnNpb25zOicgKSB8fCBsaW5lLmNvbnRhaW5zKCAnXCd0b29sczonICkgKSB7CisgICAgICAgIGRlZiBhY2NlcHRlZCA9IGZhbHNlCisgICAgICAgIHJlbGVhc2VBcHByb3ZlZFByb2plY3RzLmNvbGxlY3R7aXQucHJvamVjdERpcn0uZWFjaCB7IGFjY2VwdGVkUHJvamVjdERpciAtPgorICAgICAgICAgIGlmKCBsaW5lLmNvbnRhaW5zKCAiJyR7YWNjZXB0ZWRQcm9qZWN0RGlyLnBhcmVudEZpbGUubmFtZX06JHthY2NlcHRlZFByb2plY3REaXIubmFtZX0nIiApICkgeworICAgICAgICAgICAgYWNjZXB0ZWQgPSB0cnVlCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKCBhY2NlcHRlZCApIHsKKyAgICAgICAgICBmaWx0ZXJlZFNldHRpbmdzICs9ICIkbGluZVxuIgorICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBmaWx0ZXJlZFNldHRpbmdzICs9ICIkbGluZVxuIgorICAgICAgfQorICAgIH0KKyAgICBzZXR0aW5nc0ZpbGUudGV4dCA9IGZpbHRlcmVkU2V0dGluZ3MKKyAgICAvLyBncmFkbGUucHJvcGVydGllcworICAgIGRlZiBncmFkbGVQcm9wc0ZpbGUgPSBuZXcgRmlsZSggZmlsdGVyZWREaXIsICdncmFkbGUucHJvcGVydGllcycgKQorICAgIGdyYWRsZVByb3BzRmlsZS5wYXJlbnRGaWxlLm1rZGlycygpCisgICAgZ3JhZGxlUHJvcHNGaWxlLnRleHQgPSBwcm9qZWN0LmZpbGUoICdncmFkbGUucHJvcGVydGllcycgKS50ZXh0ICsgIlxuc2tpcFNpZ25pbmc9dHJ1ZVxuc2tpcEFzY2lpZG9jSWZBYnNlbnQ9dHJ1ZVxuXG52ZXJzaW9uPSR2ZXJzaW9uXG4iCisgIH0KK30KKworZGVmIHNyY0Rpc3RGaWx0ZXJlZEZpbGVzSW1hZ2UgPSBjb3B5U3BlYyB7CisgIGZyb20gc3JjRGlzdEZpbHRlcmVkRmlsZXMKKyAgaW50byAnLicKK30KKworZGVmIHNyY0Rpc3RJbWFnZSA9IGNvcHlTcGVjIHsKKyAgaW50byAiYXBhY2hlLXplc3QtamF2YS0kdmVyc2lvbi1zcmMiCisgIHdpdGggc3JjRGlzdEZpbGVzSW1hZ2VzCisgIHdpdGggc3JjRGlzdEZpbHRlcmVkRmlsZXNJbWFnZQogfQogCiBkZWYgcmVwb3J0c0Rpc3RJbWFnZSA9IGNvcHlTcGVjIHsKQEAgLTUyMiwxMiArODA3LDExIEBACiAgIHJlbGVhc2VBcHByb3ZlZFByb2plY3RzLmNvbGxlY3QgeyBwIC0+CiAgICAgaW50byggImxpYnMvIiApIHsKICAgICAgIGZyb20gIiRwLmJ1aWxkRGlyL3JlcG9ydHMvcHJvamVjdC9kZXBlbmRlbmNpZXMudHh0IgotICAgICAgcmVuYW1lICdkZXBlbmRlbmNpZXMudHh0JywgcC5uYW1lICsgJy0nICsgcC52ZXJzaW9uICsgJy1ydW50aW1lLWRlcHMudHh0JworICAgICAgcmVuYW1lICdkZXBlbmRlbmNpZXMudHh0JywgIiR7cC5uYW1lfS0ke3AudmVyc2lvbn0tcnVudGltZS1kZXBzLnR4dCIKICAgICB9CiAgIH0KLSAgaW50byggImxpYnMvIiApIHsKLSAgICBmcm9tICJidWlsZC9yZXBvcnRzL3FpNGotc2RrLXJ1bnRpbWUtZGVwcy5tZXRhbGluayIKLSAgICByZW5hbWUgJ3FpNGotc2RrLXJ1bnRpbWUtZGVwcy5tZXRhbGluaycsICdxaTRqLXNkay0nICsgdmVyc2lvbiArICctcnVudGltZS1kZXBzLm1ldGFsaW5rJworICBpbnRvKCAnLicgKSB7CisgICAgZnJvbSBnZW5lcmF0ZUJpbkRpc3RHb09mZmxpbmVIZWxwZXJzLm91dHB1dHMKICAgfQogfQogCkBAIC01MzYsNzMgKzgyMCwxNjYgQEAKICAgICBpbnRvKCAibGlicy8iICkgewogICAgICAgZnJvbSBwcm9qLmNvbmZpZ3VyYXRpb25zLmFyY2hpdmVzLmFydGlmYWN0cy5maWxlcwogICAgICAgZXhjbHVkZSAnKiotdGVzdHNvdXJjZXMuamFyJwotICAgICAgZXhjbHVkZSAnKiotamF2YWRvYy5qYXInCiAgICAgICBleGNsdWRlICcqKi8qLmFzYycKICAgICB9CiAgIH0KIH0KIAotZGVmIHNhbXBsZXNJbWFnZSA9IGNvcHlTcGVjIHsKLSAgZnJvbSggIiRwcm9qZWN0RGlyL3NhbXBsZXMiICkKLSAgZnJvbSggIiRwcm9qZWN0RGlyL3NhbXBsZXMvKi9idWlsZC9kb2NzL2phdmFkb2MiICkKLSAgaW50byggInNhbXBsZXMiICkKLSAgZXhjbHVkZSAnKiovKi5pbWwnCi0gIGV4Y2x1ZGUgJyoqL2J1aWxkLycgICAgIC8vIGJ1aWxkIG91dHB1dAotfQotCi1kZWYgdHV0b3JpYWxzSW1hZ2UgPSBjb3B5U3BlYyB7Ci0gIGZyb20oICIkcHJvamVjdERpci90dXRvcmlhbHMiICkKLSAgZXhjbHVkZSAnKiovYnVpbGQvJwotICBpbnRvKCAidHV0b3JpYWxzIiApCi0gIGZyb20oICIkcHJvamVjdERpci90dXRvcmlhbHMvKi9idWlsZC9kb2NzL2phdmFkb2MiICkKLSAgZXhjbHVkZSAnKiovKi5pbWwnCitkZWYgYmluRGlzdE5vdGljZXNJbWFnZSA9IGNvcHlTcGVjIHsKKyAgZnJvbSggIiRwcm9qZWN0RGlyL0xJQ0VOU0UudHh0IikKKyAgZnJvbSggIiRwcm9qZWN0RGlyL3NyYy9iaW4tZGlzdCIgKQorICBpbnRvKCAiLiIgKQogfQogCiBkZWYgYmluRGlzdEltYWdlID0gY29weVNwZWMgewotICBpbnRvICJxaTRqLXNkay0kdmVyc2lvbiIKKyAgaW50byAiYXBhY2hlLXplc3QtamF2YS0kdmVyc2lvbi1iaW4iCisgIHdpdGggYmluRGlzdE5vdGljZXNJbWFnZQogICB3aXRoIGRvY3NJbWFnZQogICB3aXRoIHJlcG9ydHNEaXN0SW1hZ2UKICAgd2l0aCBydW50aW1lRGVwZW5kZW5jaWVzTGlzdEltYWdlCiAgIHdpdGggbGlic0ltYWdlCi0gIHdpdGggc2FtcGxlc0ltYWdlCi0gIHdpdGggdHV0b3JpYWxzSW1hZ2UKIH0KIAotdGFzayB6aXBTb3VyY2VzKCB0eXBlOiBaaXAsIGRlcGVuZHNPbjogWyBidWlsZEFsbCBdICkgewotICBiYXNlTmFtZSA9ICdxaTRqLXNkaycKK3Rhc2sgemlwU291cmNlcyggdHlwZTogWmlwICkgeworICBiYXNlTmFtZSA9ICdhcGFjaGUtemVzdC1qYXZhJwogICB3aXRoIHNyY0Rpc3RJbWFnZQogICBjbGFzc2lmaWVyID0gJ3NyYycKIH0KIAotdGFzayB0YXJTb3VyY2VzKCB0eXBlOiBUYXIsIGRlcGVuZHNPbjogWyBidWlsZEFsbCBdICkgewotICBiYXNlTmFtZSA9ICdxaTRqLXNkaycKK3Rhc2sgdGFyU291cmNlcyggdHlwZTogVGFyICkgeworICBiYXNlTmFtZSA9ICdhcGFjaGUtemVzdC1qYXZhJwogICB3aXRoIHNyY0Rpc3RJbWFnZQogICBjb21wcmVzc2lvbiA9IENvbXByZXNzaW9uLkdaSVAKICAgY2xhc3NpZmllciA9ICdzcmMnCiB9CiAKLXRhc2sgemlwQmluYXJpZXMoIHR5cGU6IFppcCwgZGVwZW5kc09uOiBbIGJ1aWxkQWxsIF0gKSB7Ci0gIGJhc2VOYW1lID0gJ3FpNGotc2RrJwordGFzayB6aXBCaW5hcmllcyggdHlwZTogWmlwLCBkZXBlbmRzT246IGJ1aWxkQWxsICkgeworICBiYXNlTmFtZSA9ICdhcGFjaGUtemVzdC1qYXZhJwogICBjbGFzc2lmaWVyID0gJ2JpbicKICAgd2l0aCBiaW5EaXN0SW1hZ2UKIH0KIAotdGFzayB0YXJCaW5hcmllcyggdHlwZTogVGFyLCBkZXBlbmRzT246IFsgYnVpbGRBbGwgXSApIHsKLSAgYmFzZU5hbWUgPSAncWk0ai1zZGsnCit0YXNrIHRhckJpbmFyaWVzKCB0eXBlOiBUYXIsIGRlcGVuZHNPbjogYnVpbGRBbGwgKSB7CisgIGJhc2VOYW1lID0gJ2FwYWNoZS16ZXN0LWphdmEnCiAgIGNsYXNzaWZpZXIgPSAnYmluJwogICBjb21wcmVzc2lvbiA9IENvbXByZXNzaW9uLkdaSVAKICAgd2l0aCBiaW5EaXN0SW1hZ2UKIH0KIAorLy8gQ2hlY2tzdW0gZGlzdHJpYnV0aW9ucwordGFza3Mud2l0aFR5cGUoIFppcCApIHsgdGFzayAtPgorICB0YXNrLmRvTGFzdCB7CisgICAgYW50LmNoZWNrc3VtIGZpbGU6IHRhc2suYXJjaGl2ZVBhdGgsIGFsZ29yaXRobTogJ01ENScKKyAgICBhbnQuY2hlY2tzdW0gZmlsZTogdGFzay5hcmNoaXZlUGF0aCwgYWxnb3JpdGhtOiAnU0hBLTUxMicKKyAgfQorfQordGFza3Mud2l0aFR5cGUoIFRhciApIHsgdGFzayAtPgorICB0YXNrLmRvTGFzdCB7CisgICAgYW50LmNoZWNrc3VtIGZpbGU6IHRhc2suYXJjaGl2ZVBhdGgsIGFsZ29yaXRobTogJ01ENScKKyAgICBhbnQuY2hlY2tzdW0gZmlsZTogdGFzay5hcmNoaXZlUGF0aCwgYWxnb3JpdGhtOiAnU0hBLTUxMicKKyAgfQorfQorCiBhcnRpZmFjdHMgewogICBhcmNoaXZlcyB6aXBTb3VyY2VzLCB0YXJTb3VyY2VzLCB6aXBCaW5hcmllcywgdGFyQmluYXJpZXMKIH0KIAorc2lnbmluZyB7CisgIHJlcXVpcmVkIHsgcm9vdFByb2plY3QudmVyc2lvbiAhPSAnMCcgJiYgIXJvb3RQcm9qZWN0LnZlcnNpb24uY29udGFpbnMoICdTTkFQU0hPVCcgKSB9CisgIHNpZ24gY29uZmlndXJhdGlvbnMuYXJjaGl2ZXMKK30KK3NpZ25BcmNoaXZlcy5vbmx5SWYgeyAhcm9vdFByb2plY3Quc2tpcFNpZ25pbmcgfQorCiB0YXNrIGRpc3QoIHR5cGU6IENvcHksIGRlcGVuZHNPbjogaW5zdGFsbCApIHsKKyAgZGVzY3JpcHRpb24gIlVucGFjayB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbiIKKyAgZ3JvdXAgPSAiZGlzdHJpYnV0aW9ucyIKICAgd2l0aCBiaW5EaXN0SW1hZ2UKICAgaW50byAiJGJ1aWxkRGlyL2Rpc3QiCiB9CiAKKy8vIFRhc2tzIGZvciBzb3VyY2UgYW5kIGJpbmFyeSBkaXN0cmlidXRpb25zIGNoZWNrcworZGVmIHVucGFja2VkU3JjRGlzdERpciA9IGZpbGUoICJidWlsZC91bnBhY2tlZC1kaXN0cmlidXRpb25zL3NyYy9hcGFjaGUtemVzdC1qYXZhLSR2ZXJzaW9uLXNyYyIgKQorZGVmIHVucGFja2VkQmluRGlzdERpciA9IGZpbGUoICJidWlsZC91bnBhY2tlZC1kaXN0cmlidXRpb25zL2Jpbi9hcGFjaGUtemVzdC1qYXZhLSR2ZXJzaW9uLWJpbiIgKQordGFzayB1bnBhY2tTcmNEaXN0KCB0eXBlOiBDb3B5ICkgeworICBkZXNjcmlwdGlvbiAiVW5wYWNrIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIgorICBncm91cCA9ICJkaXN0cmlidXRpb25zIgorICB3aXRoIHNyY0Rpc3RJbWFnZQorICBpbnRvICdidWlsZC91bnBhY2tlZC1kaXN0cmlidXRpb25zL3NyYycKK30KK3Rhc2sgY2hlY2tTcmNEaXN0KCB0eXBlOiBHcmFkbGVCdWlsZCwgZGVwZW5kc09uOiB1bnBhY2tTcmNEaXN0ICkgeworICBkZXNjcmlwdGlvbiA9ICJDaGVjayB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBieSBydW5uaW5nIHRoZSAnY2hlY2snIGFuZCAnYXNzZW1ibGUnIHRhc2tzIGluc2lkZSIKKyAgZ3JvdXAgPSAiZGlzdHJpYnV0aW9ucyIKKyAgYnVpbGRGaWxlID0gIiR1bnBhY2tlZFNyY0Rpc3REaXIvYnVpbGQuZ3JhZGxlIgorICB0YXNrcyA9IFsgJ2NoZWNrJywgJ2Fzc2VtYmxlJyBdCit9Cit0YXNrIHVucGFja0JpbkRpc3QoIHR5cGU6IENvcHksIGRlcGVuZHNPbjogYnVpbGRBbGwgKSB7CisgIGRlc2NyaXB0aW9uICJVbnBhY2sgdGhlIGJpbmFyeSBkaXN0cmlidXRpb24iCisgIGdyb3VwID0gImRpc3RyaWJ1dGlvbnMiCisgIHdpdGggYmluRGlzdEltYWdlCisgIGludG8gJ2J1aWxkL3VucGFja2VkLWRpc3RyaWJ1dGlvbnMvYmluJworfQordGFzayBjaGVja0JpbkRpc3RfcmF0KCB0eXBlOiBvcmcuYXBhY2hlLnJhdC5ncmFkbGUuUmF0VGFzaywgZGVwZW5kc09uOiB1bnBhY2tCaW5EaXN0ICkgeworICBkZXNjcmlwdGlvbiAiQ2hlY2sgdGhlIGJpbmFyeSBkaXN0cmlidXRpb24gdXNpbmcgQXBhY2hlIFJBVCIKKyAgZ3JvdXAgPSAiZGlzdHJpYnV0aW9ucyIKKyAgaW5wdXREaXIgPSB1bnBhY2tlZEJpbkRpc3REaXIKKyAgcmVwb3J0RGlyID0gZmlsZSggJ2J1aWxkL3JlcG9ydHMvcmF0LWJpbi1kaXN0JyApCisgIGV4Y2x1ZGVzID0gW10KK30KK3Rhc2sgY2hlY2tCaW5EaXN0X2dvT2ZmbGluZUdyYWRsZSggdHlwZTogR3JhZGxlQnVpbGQsIGRlcGVuZHNPbjogdW5wYWNrQmluRGlzdCApIHsKKyAgZGVzY3JpcHRpb24gIkNoZWNrIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIEdyYWRsZSBnby1vZmZsaW5lIGhlbHBlciIKKyAgZ3JvdXAgPSAiZGlzdHJpYnV0aW9ucyIKKyAgZGVmIGRlcGVuZGVuY2llc0RpciA9IG5ldyBGaWxlKCB1bnBhY2tlZEJpbkRpc3REaXIsICdkZXBlbmRlbmNpZXMnICkKKyAgZG9GaXJzdCB7IGRlcGVuZGVuY2llc0Rpci5kZWxldGVEaXIoKSB9CisgIGJ1aWxkRmlsZSA9ICIkdW5wYWNrZWRCaW5EaXN0RGlyL2dvLW9mZmxpbmUuZ3JhZGxlIgorICB0YXNrcyA9IFsgJ2Rvd25sb2FkJyBdCisgIGRvTGFzdCB7CisgICAgcmVsZWFzZUFwcHJvdmVkUHJvamVjdHMqLmNvbmZpZ3VyYXRpb25zLnJ1bnRpbWUuYWxsRGVwZW5kZW5jaWVzLmZpbmRBbGwoe2l0Lm5hbWV9KS5lYWNoIHsgZGVwIC0+CisgICAgICBkZWYgamFyQXJ0aWZhY3RJZCA9IGRlcC5uYW1lIGluc3RhbmNlb2YgU3RyaW5nID8gZGVwLm5hbWUgOiBkZXAubmFtZS5sYXN0KCkKKyAgICAgIGRlZiBqYXJWZXJzaW9uID0gZGVwLnZlcnNpb24gaW5zdGFuY2VvZiBTdHJpbmcgPyBkZXAudmVyc2lvbiA6IGRlcC52ZXJzaW9uLmxhc3QoKQorICAgICAgaWYoICFqYXJBcnRpZmFjdElkLnN0YXJ0c1dpdGgoICdvcmcucWk0aicgKSApIHsKKyAgICAgICAgZGVmIGphck5hbWUgPSAiJHtqYXJBcnRpZmFjdElkfS0ke2phclZlcnNpb259LmphciIKKyAgICAgICAgaWYoICFuZXcgRmlsZSggZGVwZW5kZW5jaWVzRGlyLCBqYXJOYW1lICkuZXhpc3RzKCkgKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEdyYWRsZUV4Y2VwdGlvbiggIkJpbmFyeSBkaXN0cmlidXRpb24gZ28tb2ZmbGluZS5ncmFkbGUgZmFpbGVkISBNaXNzaW5nOiAkamFyTmFtZSIgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQordGFzayBjaGVja0JpbkRpc3RfZ29PZmZsaW5lTWF2ZW4oIHR5cGU6IEV4ZWMsIGRlcGVuZHNPbjogdW5wYWNrQmluRGlzdCApIHsKKyAgZGVzY3JpcHRpb24gIkNoZWNrIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIE1hdmVuIGdvLW9mZmxpbmUgaGVscGVyIgorICBncm91cCA9ICJkaXN0cmlidXRpb25zIgorICBvbmx5SWYgeworICAgIGRlZiBwYXRoRGlycyA9IFN5c3RlbS5nZXRlbnYoICdQQVRIJyApLnNwbGl0KCBGaWxlLnBhdGhTZXBhcmF0b3IgKQorICAgIHBhdGhEaXJzLmNvbGxlY3QoIHsgbmV3IEZpbGUoIGl0LCAnbXZuJykgfSApLmZsYXR0ZW4oKS5maW5kQWxsKCB7IGl0LmlzRmlsZSgpIH0gKQorICB9CisgIGRlZiBkZXBlbmRlbmNpZXNEaXIgPSBuZXcgRmlsZSggdW5wYWNrZWRCaW5EaXN0RGlyLCAnZGVwZW5kZW5jaWVzJyApCisgIGRvRmlyc3QgeyBkZXBlbmRlbmNpZXNEaXIuZGVsZXRlRGlyKCkgfQorICB3b3JraW5nRGlyIHVucGFja2VkQmluRGlzdERpcgorICBjb21tYW5kTGluZSAnbXZuJywgJy1lJywgJy1mJywgJ2dvLW9mZmxpbmUucG9tJywgJ3ZhbGlkYXRlJworICBkb0xhc3QgeworICAgIHJlbGVhc2VBcHByb3ZlZFByb2plY3RzKi5jb25maWd1cmF0aW9ucy5ydW50aW1lLmFsbERlcGVuZGVuY2llcy5maW5kQWxsKHtpdC5uYW1lfSkuZWFjaCB7IGRlcCAtPgorICAgICAgZGVmIGphckFydGlmYWN0SWQgPSBkZXAubmFtZSBpbnN0YW5jZW9mIFN0cmluZyA/IGRlcC5uYW1lIDogZGVwLm5hbWUubGFzdCgpCisgICAgICBkZWYgamFyVmVyc2lvbiA9IGRlcC52ZXJzaW9uIGluc3RhbmNlb2YgU3RyaW5nID8gZGVwLnZlcnNpb24gOiBkZXAudmVyc2lvbi5sYXN0KCkKKyAgICAgIGlmKCAhamFyQXJ0aWZhY3RJZC5zdGFydHNXaXRoKCAnb3JnLnFpNGonICkgKSB7CisgICAgICAgIGRlZiBqYXJOYW1lID0gIiR7amFyQXJ0aWZhY3RJZH0tJHtqYXJWZXJzaW9ufS5qYXIiCisgICAgICAgIGlmKCAhbmV3IEZpbGUoIGRlcGVuZGVuY2llc0RpciwgamFyTmFtZSApLmV4aXN0cygpICkgeworICAgICAgICAgIHRocm93IG5ldyBHcmFkbGVFeGNlcHRpb24oICJCaW5hcnkgZGlzdHJpYnV0aW9uIGdvLW9mZmxpbmUucG9tIGZhaWxlZCEgTWlzc2luZzogJGphck5hbWUiICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KK3Rhc2sgY2hlY2tCaW5EaXN0IHsKKyAgZGVzY3JpcHRpb24gIkNoZWNrIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIgorICBncm91cCA9ICJkaXN0cmlidXRpb25zIgorICBkZXBlbmRzT24gLypjaGVja0JpbkRpc3RfcmF0LCovIGNoZWNrQmluRGlzdF9nb09mZmxpbmVHcmFkbGUsIGNoZWNrQmluRGlzdF9nb09mZmxpbmVNYXZlbgorfQordGFzayBjaGVja0Rpc3RzIHsKKyAgZGVzY3JpcHRpb24gIkNoZWNrIHRoZSBzb3VjZSBhbmQgYmluYXJ5IGRpc3RyaWJ1dGlvbnMiCisgIGdyb3VwID0gImRpc3RyaWJ1dGlvbnMiCisgIGRlcGVuZHNPbiBjaGVja1NyY0Rpc3QsIGNoZWNrQmluRGlzdAorfQorCiB0YXNrIGNoZWNrUmVsZWFzZVNwZWMgewogICBkZXNjcmlwdGlvbiA9ICJFbnN1cmUgdGhhdCBubyByZWxlYXNhYmxlIG1vZHVsZSBkZXBlbmQgb24gbW9kdWxlKHMpIHRoYXQgZG9uJ3QgZml0IHRoZSByZWxlYXNlIGNyaXRlcmlhLiIKICAgZ3JvdXAgPSAncmVsZWFzZScKQEAgLTY0Miw3ICsxMDE5LDcgQEAKICAgICAgIHRocm93IG5ldyBHcmFkbGVFeGNlcHRpb24oICIndmVyc2lvbicgbXVzdCBiZSBnaXZlbiBhcyBhIHN5c3RlbSBwcm9wZXJ0eSB0byBwZXJmb3JtIGEgcmVsZWFzZS4iICkKICAgICB9CiAgIH0KLSAgZGVwZW5kc09uIGNoZWNrUmVsZWFzZVNwZWMsIGFyY2hpdmVKYXZhZG9jcywgJzpvcmcucWk0ai5tYW51YWw6Y29weVdlYnNpdGUnLCBhbGxwcm9qZWN0cyoudXBsb2FkQXJjaGl2ZXMsIGRpc3QKKyAgZGVwZW5kc09uIGNoZWNrUmVsZWFzZVNwZWMsIHJhdCwgYXJjaGl2ZUphdmFkb2NzLCAnOm9yZy5xaTRqLm1hbnVhbDpjb3B5V2Vic2l0ZScsIGFsbHByb2plY3RzKi51cGxvYWRBcmNoaXZlcywgZGlzdAogfQogCiAvLwpAQCAtNjUxLDcgKzEwMjgsNyBAQAogLy8gVGhpcyB0YXNrIHNob3VsZCBiZSBydW4gYnkgImJ1aWxkIG1hc3RlciIgYW5kIHRoZSByZXN1bHRpbmcgb3VwdXQgY29tbWl0dGVkIHRvIHNvdXJjZSBjb250cm9sLiAgSXRzIG91dHB1dHMgaW5jbHVkZToKIC8vICAxKSAvZ3JhZGxldyB3aGljaCBpcyB0aGUgKk5JWCBzaGVsbCBzY3JpcHQgZm9yIGV4ZWN1dGluZyBidWlsZHMKIC8vICAyKSAvZ3JhZGxldy5iYXQgd2hpY2ggaXMgdGhlIHdpbmRvd3MgYmF0IHNjcmlwdCBmb3IgZm9yIGV4ZWN1dGluZyBidWlsZHMKLS8vICAzKSAvd3JhcHBlciB3aGljaCBpcyBhIGRpcmVjdG9yeSBuYW1lZCBieSB0aGUgImphclBhdGgiIGNvbmZpZyB3aGljaCBjb250YWlucyBvdGhlciBuZWVkZWQgZmlsZXMuCisvLyAgMykgL2dyYWRsZS93cmFwcGVyIHdoaWNoIGlzIGEgZGlyZWN0b3J5IG5hbWVkIGJ5IHRoZSAiamFyUGF0aCIgY29uZmlnIHdoaWNoIGNvbnRhaW5zIG90aGVyIG5lZWRlZCBmaWxlcy4KIHRhc2sgd3JhcHBlciggdHlwZTogV3JhcHBlciApIHsKLSAgZ3JhZGxlVmVyc2lvbiA9ICcyLjIuMScKKyAgZ3JhZGxlVmVyc2lvbiA9ICcyLjUnCiB9CmRpZmYgLS1naXQgYS9idWlsZFNyYy9idWlsZC5ncmFkbGUgYi9idWlsZFNyYy9idWlsZC5ncmFkbGUKaW5kZXggMTM5NTk3Zi4uMDQyZjNjZSAxMDA2NDQKLS0tIGEvYnVpbGRTcmMvYnVpbGQuZ3JhZGxlCisrKyBiL2J1aWxkU3JjL2J1aWxkLmdyYWRsZQpAQCAtMSwyICsxLDE4IEBACi0KLQorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KZGlmZiAtLWdpdCBhL2J1aWxkU3JjL3NyYy9iaW4vZGV2c3RhdHVzLmNvbmYgYi9idWlsZFNyYy9zcmMvYmluL2RldnN0YXR1cy5jb25mCmluZGV4IGI1Yjg3YWEuLjFhYjNmN2IgMTAwNjQ0Ci0tLSBhL2J1aWxkU3JjL3NyYy9iaW4vZGV2c3RhdHVzLmNvbmYKKysrIGIvYnVpbGRTcmMvc3JjL2Jpbi9kZXZzdGF0dXMuY29uZgpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiAjCiAjIEFzY2lpRG9jIFNuaXBwZXQgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZmlsZS4KICMKZGlmZiAtLWdpdCBhL2J1aWxkU3JjL3NyYy9iaW4vZGV2c3RhdHVzLnB5IGIvYnVpbGRTcmMvc3JjL2Jpbi9kZXZzdGF0dXMucHkKaW5kZXggYjEyN2ViMC4uYWE0YTEwNiAxMDA3NTUKLS0tIGEvYnVpbGRTcmMvc3JjL2Jpbi9kZXZzdGF0dXMucHkKKysrIGIvYnVpbGRTcmMvc3JjL2Jpbi9kZXZzdGF0dXMucHkKQEAgLTEsNSArMSwxOSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjIC0qLSBtb2RlOiBQeXRob247IGNvZGluZzogdXRmLTggLSotCisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIiIiCiBzb3VyY2U9aWdub3JlZAogdGFnPXNlbGYtdGVzdApkaWZmIC0tZ2l0IGEvYnVpbGRTcmMvc3JjL2Jpbi9zbmlwcGV0LmNvbmYgYi9idWlsZFNyYy9zcmMvYmluL3NuaXBwZXQuY29uZgppbmRleCA5NWI2OTVjLi5lMGJhMDM5IDEwMDY0NAotLS0gYS9idWlsZFNyYy9zcmMvYmluL3NuaXBwZXQuY29uZgorKysgYi9idWlsZFNyYy9zcmMvYmluL3NuaXBwZXQuY29uZgpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiAjCiAjIEFzY2lpRG9jIFNuaXBwZXQgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZmlsZS4KICMKZGlmZiAtLWdpdCBhL2J1aWxkU3JjL3NyYy9iaW4vc25pcHBldC5weSBiL2J1aWxkU3JjL3NyYy9iaW4vc25pcHBldC5weQppbmRleCBiZDhkNTM3Li45Y2IwYmZiIDEwMDc1NQotLS0gYS9idWlsZFNyYy9zcmMvYmluL3NuaXBwZXQucHkKKysrIGIvYnVpbGRTcmMvc3JjL2Jpbi9zbmlwcGV0LnB5CkBAIC0xLDUgKzEsMTkgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIyAtKi0gbW9kZTogUHl0aG9uOyBjb2Rpbmc6IHV0Zi04IC0qLQorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICIiIgogc291cmNlPWlnbm9yZWQKIHRhZz1zZWxmLXRlc3QKZGlmZiAtLWdpdCBhL2J1aWxkU3JjL3NyYy9qYXZhZG9jL292ZXJ2aWV3Lmh0bWwgYi9idWlsZFNyYy9zcmMvamF2YWRvYy9vdmVydmlldy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDU2NTI3Li4wMDAwMDAwCi0tLSBhL2J1aWxkU3JjL3NyYy9qYXZhZG9jL292ZXJ2aWV3Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPgotICAgIDxib2R5PgotICAgICAgICA8aDM+V2VsY29tZSB0byB0aGUgUWk0aiBTREsgSmF2YWRvYy48L2gzPgotICAgICAgICA8cD5RaTRqIGlzIGEgZnJhbWV3b3JrIGZvciBkb21haW4gY2VudHJpYyBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCwgaW5jbHVkaW5nIGV2b2x2ZWQgY29uY2VwdHMgZnJvbSBBT1AsIERJIGFuZCBEREQuPC9wPgotICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vcWk0ai5vcmciIHRhcmdldD0iX2JsYW5rIj5xaTRqLm9yZzwvYT48L3A+Ci0gICAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVpbGRTcmMvc3JjL21haW4vZ3Jvb3Z5L1hzbHQuZ3Jvb3Z5IGIvYnVpbGRTcmMvc3JjL21haW4vZ3Jvb3Z5L1hzbHQuZ3Jvb3Z5CmluZGV4IGExOTQ0NjEuLjcwYmQyNjMgMTAwNjQ0Ci0tLSBhL2J1aWxkU3JjL3NyYy9tYWluL2dyb292eS9Yc2x0Lmdyb292eQorKysgYi9idWlsZFNyYy9zcmMvbWFpbi9ncm9vdnkvWHNsdC5ncm9vdnkKQEAgLTEsMyArMSwyMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwogLyoqCiAgKiAgR3JhZGxlIHBsdWctaW4gZm9yIHJ1bm5pbmcgYSBzZXQgb2Ygb25lIG9yIG1vcmUKICAqICBmaWxlcyB0aHJvdWdoIGFuIFhTTFQgdHJhbnNmb3JtLiAgQSBzdHlsZVNoZWV0CmRpZmYgLS1naXQgYS9idWlsZFNyYy9zcmMvbWFpbi9ncm9vdnkvb3JnL3FpNGovZ3JhZGxlL3BsdWdpbi9Eb2N1bWVudGF0aW9uLmdyb292eSBiL2J1aWxkU3JjL3NyYy9tYWluL2dyb292eS9vcmcvcWk0ai9ncmFkbGUvcGx1Z2luL0RvY3VtZW50YXRpb24uZ3Jvb3Z5CmluZGV4IGJmMmE0MTYuLmFkOGNhMDQgMTAwNjQ0Ci0tLSBhL2J1aWxkU3JjL3NyYy9tYWluL2dyb292eS9vcmcvcWk0ai9ncmFkbGUvcGx1Z2luL0RvY3VtZW50YXRpb24uZ3Jvb3Z5CisrKyBiL2J1aWxkU3JjL3NyYy9tYWluL2dyb292eS9vcmcvcWk0ai9ncmFkbGUvcGx1Z2luL0RvY3VtZW50YXRpb24uZ3Jvb3Z5CkBAIC0xNyw5NCArMTcsMTUyIEBACiAKIGltcG9ydCBvcmcuZ3JhZGxlLmFwaS5EZWZhdWx0VGFzawogaW1wb3J0IG9yZy5ncmFkbGUuYXBpLnRhc2tzLlRhc2tBY3Rpb24KK2ltcG9ydCBvcmcuZ3JhZGxlLmFwaS50YXNrcy5JbnB1dAoraW1wb3J0IG9yZy5ncmFkbGUuYXBpLnRhc2tzLklucHV0RGlyZWN0b3J5CitpbXBvcnQgb3JnLmdyYWRsZS5hcGkudGFza3MuSW5wdXRGaWxlCitpbXBvcnQgb3JnLmdyYWRsZS5hcGkudGFza3MuSW5wdXRGaWxlcworaW1wb3J0IG9yZy5ncmFkbGUuYXBpLnRhc2tzLk91dHB1dERpcmVjdG9yeQogCi0vLyBUT0RPOiB1c2UgcHJvcGVyIHByb2plY3QgdmFyaWFibGVzIGZvciAnc3JjJyBhbmQgb3RoZXIgbG9jYXRpb25zCi0vLyBUT0RPOiBleHRyYWN0IG91dCBldmVyeSBsb2NhdGlvbiBpbnRvIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eQogLy8gVE9ETzogdHJ5IHRvIHVzZSBkZXBlbmRlbmNpZXMgZm9yIEZPUCBhbmQgZXhlY3V0ZSB3aXRoaW4gdGhlIHNhbWUgSlZNLgogLy8gVE9ETzogbW92ZSB0aGUgYnVsayBvZiByZXNvdXJjZXMgaW50byB0aGlzIHBsdWdpbiwgaW5zdGVhZCBvZiBzaXR0aW5nIGluIHRoZSBwcm9qZWN0LgogY2xhc3MgRG9jdW1lbnRhdGlvbiBleHRlbmRzIERlZmF1bHRUYXNrCiB7Ci0gIHByaXZhdGUgU3RyaW5nIGRvY05hbWUKKyAgQElucHV0IGRlZiBTdHJpbmcgZG9jTmFtZQorICBASW5wdXQgZGVmIFN0cmluZyBkb2NUeXBlCisgIHZvaWQgc2V0RG9jTmFtZSggU3RyaW5nIGRvY05hbWUgKSB7IHRoaXMuZG9jTmFtZSA9IGRvY05hbWUgfQorICB2b2lkIHNldERvY1R5cGUoIFN0cmluZyBkb2NUeXBlICkgeyB0aGlzLmRvY1R5cGUgPSBkb2NUeXBlIH0KIAotICBwcml2YXRlIFN0cmluZyBkb2NUeXBlCisgIEBJbnB1dERpcmVjdG9yeSBkZWYgRmlsZSBnZXRDb21tb25SZXNvdXJjZXNEaXIoKSB7IHByb2plY3QuZmlsZSggJ3NyYy9yZXNvdXJjZXMnICkgfQorICBASW5wdXREaXJlY3RvcnkgZGVmIEZpbGUgZ2V0Q29uZmlnRGlyKCkgeyBwcm9qZWN0LmZpbGUoICdzcmMvY29uZicgKSB9CisgIEBJbnB1dERpcmVjdG9yeSBkZWYgRmlsZSBnZXREb2NzRGlyKCkgeyBwcm9qZWN0LmZpbGUoICdzcmMvZG9jcycpIH0KKyAgQElucHV0RGlyZWN0b3J5IGRlZiBGaWxlIGdldFNyY01haW5EaXIoKSB7IHByb2plY3QuZmlsZSggJ3NyYy9tYWluJykgfQorICBASW5wdXREaXJlY3RvcnkgZGVmIEZpbGUgZ2V0WHNsRGlyKCkgeyBwcm9qZWN0LmZpbGUoICdzcmMveHNsJykgfQorICBASW5wdXREaXJlY3RvcnkgZGVmIEZpbGUgZ2V0QnVpbGRTcmNEaXIoKSB7IHByb2plY3Qucm9vdFByb2plY3QuZmlsZSggJ2J1aWxkU3JjL3NyYycgKSB9CisKKyAgQElucHV0RmlsZXMgZGVmIGdldFN1YlByb2plY3RzRG9jc0RpcnMoKSB7IHByb2plY3Qucm9vdFByb2plY3Quc3VicHJvamVjdHMuY29sbGVjdCB7IHAgLT4gcC5maWxlKCAnc3JjL2RvY3MnICkgfSB9CisgIEBJbnB1dEZpbGVzIGRlZiBnZXRTdWJQcm9qZWN0c1Rlc3REaXJzKCkgeyBwcm9qZWN0LnJvb3RQcm9qZWN0LnN1YnByb2plY3RzLmNvbGxlY3QgeyBwIC0+IHAuZmlsZSggJ3NyYy90ZXN0JyApIH0gfQorCisgIEBPdXRwdXREaXJlY3RvcnkgZGVmIEZpbGUgZ2V0T3V0cHV0RGlyKCkgeyBwcm9qZWN0LmZpbGUoICIke3Byb2plY3QuYnVpbGREaXJ9L2RvY3MvJHtkb2NOYW1lfS8iICkgfQorCisgIGRlZiBGaWxlIGdldFRlbXBBc2NpaWRvY0RpcigpIHsgcHJvamVjdC5maWxlKCAiJHtwcm9qZWN0LmJ1aWxkRGlyfS90bXAtYXNjaWlkb2MiICkgfQorICBkZWYgRmlsZSBnZXRUZW1wRGlyKCkgeyBwcm9qZWN0LmZpbGUoICIke3Byb2plY3QuYnVpbGREaXJ9L3RtcC9kb2NzLyR7ZG9jTmFtZX0iKSB9CiAKICAgQFRhc2tBY3Rpb24KICAgZGVmIHZvaWQgZ2VuZXJhdGUoKQogICB7Ci0gICAgZGVmIHVzZXJIb21lID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmhvbWUiKSkKLSAgICBkZWYgc25pcHBldERpciA9IG5ldyBGaWxlKHVzZXJIb21lLCAiLmFzY2lpZG9jL2ZpbHRlcnMvc25pcHBldCIpLmFic29sdXRlRmlsZQorICAgIGluc3RhbGxBc2NpaWRvY0ZpbHRlcnMoKQorCisgICAgWyBvdXRwdXREaXIsIHRlbXBBc2NpaWRvY0RpciwgdGVtcERpciBdKi5kZWxldGVEaXIoKQorICAgIFsgb3V0cHV0RGlyLCB0ZW1wQXNjaWlkb2NEaXIsIHRlbXBEaXIgXSoubWtkaXJzKCkKKworICAgIGNvcHlTdWJQcm9qZWN0c0RvY3NSZXNvdXJjZXMoKQorICAgIGdlbmVyYXRlQXNjaWlkb2NBY2NvcmRpbmdUb1JlbGVhc2VTcGVjaWZpY2F0aW9uKCkKKyAgICBnZW5lcmF0ZVhEb2MoKQorICAgIGdlbmVyYXRlQ2h1bmtlZEh0bWwoKQorICAgIC8vIGdlbmVyYXRlU2luZ2xlSHRtbCgpCisgICAgLy8gZ2VuZXJhdGVQZGYoKQorICB9CisKKyAgZGVmIHZvaWQgaW5zdGFsbEFzY2lpZG9jRmlsdGVycygpCisgIHsKKyAgICBkZWYgdXNlckhvbWUgPSBuZXcgRmlsZSggU3lzdGVtLmdldFByb3BlcnR5KCAndXNlci5ob21lJyApICkKKyAgICBkZWYgc25pcHBldERpciA9IG5ldyBGaWxlKCB1c2VySG9tZSwgJy5hc2NpaWRvYy9maWx0ZXJzL3NuaXBwZXQnICkuYWJzb2x1dGVGaWxlCiAgICAgaWYoICFzbmlwcGV0RGlyLmV4aXN0cygpICkKICAgICB7CiAgICAgICBwcmludGxuICJJbnN0YWxsaW5nIFtzbmlwcGV0XSBpbnRvICRzbmlwcGV0RGlyIgogICAgICAgc25pcHBldERpci5ta2RpcnMoKQogICAgICAgcHJvamVjdC5jb3B5IHsKLSAgICAgICAgZnJvbSAiJHByb2plY3Qucm9vdERpci9idWlsZFNyYy9zcmMvYmluIgorICAgICAgICBmcm9tICIke3Byb2plY3Qucm9vdERpcn0vYnVpbGRTcmMvc3JjL2JpbiIKICAgICAgICAgaW50byBzbmlwcGV0RGlyCiAgICAgICAgIGluY2x1ZGUgJ3NuaXBwZXQuKicKICAgICAgIH0KLSAgICAgIGFudC5jaG1vZChkaXI6IHNuaXBwZXREaXIsIHBlcm06ICI3NTUiLCBpbmNsdWRlczogInNuaXBwZXQucHkiKQorICAgICAgYW50LmNobW9kKCBkaXI6IHNuaXBwZXREaXIsIHBlcm06ICc3NTUnLCBpbmNsdWRlczogJ3NuaXBwZXQucHknICkKICAgICB9CiAKLSAgICBkZWYgZGV2c3RhdHVzRGlyID0gbmV3IEZpbGUodXNlckhvbWUsICIuYXNjaWlkb2MvZmlsdGVycy9kZXZzdGF0dXMiKS5hYnNvbHV0ZUZpbGUKKyAgICBkZWYgZGV2c3RhdHVzRGlyID0gbmV3IEZpbGUoIHVzZXJIb21lLCAnLmFzY2lpZG9jL2ZpbHRlcnMvZGV2c3RhdHVzJyApLmFic29sdXRlRmlsZQogICAgIGlmKCAhZGV2c3RhdHVzRGlyLmV4aXN0cygpICkKICAgICB7CiAgICAgICBwcmludGxuICJJbnN0YWxsaW5nIFtkZXZzdGF0dXNdIGludG8gJGRldnN0YXR1c0RpciIKICAgICAgIHNuaXBwZXREaXIubWtkaXJzKCkKICAgICAgIHByb2plY3QuY29weSB7Ci0gICAgICAgIGZyb20gIiRwcm9qZWN0LnJvb3REaXIvYnVpbGRTcmMvc3JjL2JpbiIKKyAgICAgICAgZnJvbSAiJHtwcm9qZWN0LnJvb3REaXJ9L2J1aWxkU3JjL3NyYy9iaW4iCiAgICAgICAgIGludG8gZGV2c3RhdHVzRGlyCiAgICAgICAgIGluY2x1ZGUgJ2RldnN0YXR1cy4qJwogICAgICAgfQotICAgICAgYW50LmNobW9kKGRpcjogZGV2c3RhdHVzRGlyLCBwZXJtOiAiNzU1IiwgaW5jbHVkZXM6ICJkZXZzdGF0dXMucHkiKQorICAgICAgYW50LmNobW9kKCBkaXI6IGRldnN0YXR1c0RpciwgcGVybTogJzc1NScsIGluY2x1ZGVzOiAnZGV2c3RhdHVzLnB5JyApCiAgICAgfQotCi0gICAgbmV3IEZpbGUocHJvamVjdC5idWlsZERpciwgImRvY3MvJGRvY05hbWUiLnRvU3RyaW5nKCkpLm1rZGlycygpCi0gICAgbmV3IEZpbGUocHJvamVjdC5idWlsZERpciwgInRtcC9kb2NzLyRkb2NOYW1lIi50b1N0cmluZygpKS5ta2RpcnMoKQotCi0gICAgY29weVJlc291cmNlcygpCi0gICAgZ2VuZXJhdGVYRG9jKCkKLSAgICBnZW5lcmF0ZUNodW5rZWRIdG1sKCkKLSAgICBnZW5lcmF0ZVNpbmdsZUh0bWwoKQotICAgIGdlbmVyYXRlUGRmKCkKICAgfQogCi0gIGRlZiB2b2lkIGNvcHlSZXNvdXJjZXMoKQorICBkZWYgdm9pZCBjb3B5U3ViUHJvamVjdHNEb2NzUmVzb3VyY2VzKCkKICAgewotICAgIHByb2plY3QucGFyZW50LnN1YnByb2plY3RzLmVhY2ggeyBwIC0+CisgICAgcHJvamVjdC5yb290UHJvamVjdC5zdWJwcm9qZWN0cy5lYWNoIHsgcCAtPgogICAgICAgcC5jb3B5IHsKLSAgICAgICAgZnJvbSAnc3JjL2RvY3MvcmVzb3VyY2VzJwotICAgICAgICBpbnRvICJidWlsZC9kb2NzLyRkb2NOYW1lLyIKKyAgICAgICAgZnJvbSBwLmZpbGUoICdzcmMvZG9jcy9yZXNvdXJjZXMnICkKKyAgICAgICAgaW50byBvdXRwdXREaXIKICAgICAgICAgaW5jbHVkZSAnKionCiAgICAgICB9CiAgICAgfQogICB9CiAKKyAgZGVmIHZvaWQgZ2VuZXJhdGVBc2NpaWRvY0FjY29yZGluZ1RvUmVsZWFzZVNwZWNpZmljYXRpb24oKQorICB7CisgICAgcHJvamVjdC5jb3B5IHsKKyAgICAgIGZyb20gZG9jc0RpcgorICAgICAgaW50byB0ZW1wQXNjaWlkb2NEaXIKKyAgICAgIGluY2x1ZGUgJyoqJworICAgIH0KKyAgICBpZiggcHJvamVjdC52ZXJzaW9uICE9ICcwJyAmJiAhcHJvamVjdC52ZXJzaW9uLmNvbnRhaW5zKCAnU05BUFNIT1QnICkgKSB7CisgICAgICBkZWYgbGljZW5zZUZpbGUgPSBuZXcgRmlsZSggdGVtcEFzY2lpZG9jRGlyLCAndXNlcmd1aWRlL2xpYnJhcmllcy50eHQnICkKKyAgICAgIGRlZiBleHRlbnNpb25zRmlsZSA9IG5ldyBGaWxlKCB0ZW1wQXNjaWlkb2NEaXIsICd1c2VyZ3VpZGUvZXh0ZW5zaW9ucy50eHQnICkKKyAgICAgIGRlZiB0b29sc0ZpbGUgPSBuZXcgRmlsZSggdGVtcEFzY2lpZG9jRGlyLCAndXNlcmd1aWRlL3Rvb2xzLnR4dCcgKQorICAgICAgWyBsaWNlbnNlRmlsZSwgZXh0ZW5zaW9uc0ZpbGUsIHRvb2xzRmlsZSBdLmVhY2ggeyBhc2NpaWRvY0ZpbGUgLT4KKyAgICAgICAgZGVmIGZpbHRlcmVkRmlsZUNvbnRlbnQgPSAnJworICAgICAgICBhc2NpaWRvY0ZpbGUucmVhZExpbmVzKCkuZWFjaCB7IGxpbmUgLT4KKyAgICAgICAgICBpZiggbGluZS5zdGFydHNXaXRoKCAnaW5jbHVkZTo6JyApICkgeworICAgICAgICAgICAgZGVmIGFwcHJvdmVkID0gZmFsc2UKKyAgICAgICAgICAgIHByb2plY3Qucm9vdFByb2plY3QucmVsZWFzZUFwcHJvdmVkUHJvamVjdHMuY29sbGVjdHtpdC5wcm9qZWN0RGlyfS5lYWNoIHsgYXBwcm92ZWRQcm9qZWN0RGlyIC0+CisgICAgICAgICAgICAgIGlmKCBsaW5lLmNvbnRhaW5zKCAiJHthcHByb3ZlZFByb2plY3REaXIucGFyZW50RmlsZS5uYW1lfS8ke2FwcHJvdmVkUHJvamVjdERpci5uYW1lfSIgKSApIHsKKyAgICAgICAgICAgICAgICBhcHByb3ZlZCA9IHRydWUKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoIGFwcHJvdmVkICkgeworICAgICAgICAgICAgICBmaWx0ZXJlZEZpbGVDb250ZW50ICs9ICIkbGluZVxuIgorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmaWx0ZXJlZEZpbGVDb250ZW50ICs9ICIkbGluZVxuIgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhc2NpaWRvY0ZpbGUudGV4dCA9IGZpbHRlcmVkRmlsZUNvbnRlbnQKKyAgICAgIH0KKyAgICB9CisgIH0KKwogICBkZWYgdm9pZCBnZW5lcmF0ZVhEb2MoKQogICB7CiAgICAgcHJvamVjdC5leGVjIHsKICAgICAgIGV4ZWN1dGFibGUgPSAnYXNjaWlkb2MnCi0gICAgICB3b3JraW5nRGlyID0gIi4uIgotICAgICAgZGVmIGNvbW1vblJlc291cmNlc0RpciA9ICdtYW51YWwvc3JjL3Jlc291cmNlcycKLSAgICAgIGRlZiBhc2NpaWRvY0NvbmZpZ0ZpbGUgPSAnbWFudWFsL3NyYy9jb25mL2FzY2lpZG9jLmNvbmYnCi0gICAgICBkZWYgZG9jYm9va0NvbmZpZ0ZpbGUgPSAnbWFudWFsL3NyYy9jb25mL2RvY2Jvb2s0NS5jb25mJwotICAgICAgZGVmIGxpbmtpbWFnZXNDb25maWdGaWxlID0gJ21hbnVhbC9zcmMvY29uZi9saW5rZWRpbWFnZXMuY29uZicKLSAgICAgIGRlZiB4ZG9jT3V0cHV0RmlsZSA9ICJtYW51YWwvYnVpbGQvdG1wL2RvY3MvJGRvY05hbWUveGRvYy10ZW1wLnhtbCIudG9TdHJpbmcoKQotICAgICAgZGVmIGFzY2lpRG9jRmlsZSA9ICJtYW51YWwvc3JjL2RvY3MvJGRvY05hbWUvaW5kZXgudHh0Ii50b1N0cmluZygpCisgICAgICB3b3JraW5nRGlyID0gJy4uJworICAgICAgZGVmIGNvbW1vblJlc291cmNlc1BhdGggPSByZWxhdGl2ZVBhdGgoIHByb2plY3Qucm9vdERpciwgY29tbW9uUmVzb3VyY2VzRGlyICkKKyAgICAgIGRlZiBhc2NpaWRvY0NvbmZpZ1BhdGggPSByZWxhdGl2ZVBhdGgoIHByb2plY3Qucm9vdERpciwgbmV3IEZpbGUoIGNvbmZpZ0RpciwgJ2FzY2lpZG9jLmNvbmYnICkgKQorICAgICAgZGVmIGRvY2Jvb2tDb25maWdQYXRoID0gcmVsYXRpdmVQYXRoKCBwcm9qZWN0LnJvb3REaXIsIG5ldyBGaWxlKCBjb25maWdEaXIsICdkb2Nib29rNDUuY29uZicgKSApCisgICAgICBkZWYgbGlua2ltYWdlc0NvbmZpZ1BhdGggPSByZWxhdGl2ZVBhdGgoIHByb2plY3Qucm9vdERpciwgbmV3IEZpbGUoIGNvbmZpZ0RpciwgJ2xpbmtlZGltYWdlcy5jb25mJyApICkKKyAgICAgIGRlZiB4ZG9jT3V0cHV0UGF0aCA9ICByZWxhdGl2ZVBhdGgoIHByb2plY3Qucm9vdERpciwgbmV3IEZpbGUoIHRlbXBEaXIsICd4ZG9jLXRlbXAueG1sJyApICkKKyAgICAgIGRlZiBhc2NpaWRvY0luZGV4UGF0aCA9IHJlbGF0aXZlUGF0aCggcHJvamVjdC5yb290RGlyLCBuZXcgRmlsZSggdGVtcEFzY2lpZG9jRGlyLCAiJGRvY05hbWUvaW5kZXgudHh0IiApICkKICAgICAgIGFyZ3MgPSBbCiAgICAgICAgICAgICAgICctLWF0dHJpYnV0ZScsICdyZXZudW1iZXI9JyArIHByb2plY3QudmVyc2lvbiwKICAgICAgICAgICAgICAgJy0tYXR0cmlidXRlJywgJ2xldmVsMT0nICsgKGRvY1R5cGUuZXF1YWxzKCdhcnRpY2xlJykgPyAxIDogMCksCiAgICAgICAgICAgICAgICctLWF0dHJpYnV0ZScsICdsZXZlbDI9JyArIChkb2NUeXBlLmVxdWFscygnYXJ0aWNsZScpID8gMiA6IDEpLAogICAgICAgICAgICAgICAnLS1hdHRyaWJ1dGUnLCAnbGV2ZWwzPScgKyAoZG9jVHlwZS5lcXVhbHMoJ2FydGljbGUnKSA/IDMgOiAyKSwKICAgICAgICAgICAgICAgJy0tYXR0cmlidXRlJywgJ2xldmVsND0nICsgKGRvY1R5cGUuZXF1YWxzKCdhcnRpY2xlJykgPyA0IDogMyksCi0gICAgICAgICAgICAgICctLWF0dHJpYnV0ZScsICdpbXBvcnRkaXI9JyArIGNvbW1vblJlc291cmNlc0RpciwKKyAgICAgICAgICAgICAgJy0tYXR0cmlidXRlJywgJ2ltcG9ydGRpcj0nICsgY29tbW9uUmVzb3VyY2VzUGF0aCwKICAgICAgICAgICAgICAgJy0tYmFja2VuZCcsICdkb2Nib29rJywKICAgICAgICAgICAgICAgJy0tYXR0cmlidXRlJywgJ2RvY2luZm8xJywKICAgICAgICAgICAgICAgJy0tZG9jdHlwZScsIGRvY1R5cGUsCi0gICAgICAgICAgICAgICctLWNvbmYtZmlsZT0nICsgYXNjaWlkb2NDb25maWdGaWxlLAotICAgICAgICAgICAgICAnLS1jb25mLWZpbGU9JyArIGRvY2Jvb2tDb25maWdGaWxlLAotICAgICAgICAgICAgICAnLS1jb25mLWZpbGU9JyArIGxpbmtpbWFnZXNDb25maWdGaWxlLAotICAgICAgICAgICAgICAnLS1vdXQtZmlsZScsIHhkb2NPdXRwdXRGaWxlLAotICAgICAgICAgICAgICBhc2NpaURvY0ZpbGUKKyAgICAgICAgICAgICAgJy0tY29uZi1maWxlPScgKyBhc2NpaWRvY0NvbmZpZ1BhdGgsCisgICAgICAgICAgICAgICctLWNvbmYtZmlsZT0nICsgZG9jYm9va0NvbmZpZ1BhdGgsCisgICAgICAgICAgICAgICctLWNvbmYtZmlsZT0nICsgbGlua2ltYWdlc0NvbmZpZ1BhdGgsCisgICAgICAgICAgICAgICctLW91dC1maWxlJywgeGRvY091dHB1dFBhdGgsCisgICAgICAgICAgICAgIGFzY2lpZG9jSW5kZXhQYXRoCiAgICAgICBdCiAgICAgfQogICB9CkBAIC0xMTIsMjUgKzE3MCwyNiBAQAogICBkZWYgdm9pZCBnZW5lcmF0ZUNodW5rZWRIdG1sKCkKICAgewogICAgIHByb2plY3QuY29weSB7Ci0gICAgICBmcm9tICdzcmMvcmVzb3VyY2VzJwotICAgICAgaW50byAiYnVpbGQvZG9jcy8kZG9jTmFtZS8iCisgICAgICBmcm9tIGNvbW1vblJlc291cmNlc0RpcgorICAgICAgaW50byBvdXRwdXREaXIKICAgICAgIGluY2x1ZGUgJyoqJwogICAgIH0KICAgICBwcm9qZWN0LmNvcHkgewotICAgICAgZnJvbSAic3JjL2RvY3MvJGRvY05hbWUvcmVzb3VyY2VzIgotICAgICAgaW50byAiYnVpbGQvZG9jcy8kZG9jTmFtZS8iCisgICAgICBmcm9tICIkZG9jc0Rpci8kZG9jTmFtZS9yZXNvdXJjZXMiCisgICAgICBpbnRvIG91dHB1dERpcgogICAgICAgaW5jbHVkZSAnKionCiAgICAgfQogCiAgICAgcHJvamVjdC5leGVjIHsKLSAgICAgIFN0cmluZyB4c2x0RmlsZSA9ICJzcmMvZG9jcy8kZG9jTmFtZS94c2wvY2h1bmtlZC54c2wiCisgICAgICBkZWYgeHNsdEZpbGUgPSAiJGRvY3NEaXIvJGRvY05hbWUveHNsL2NodW5rZWQueHNsIgorICAgICAgZGVmIG91dHB1dFBhdGggPSByZWxhdGl2ZVBhdGgoIHByb2plY3QucHJvamVjdERpciwgb3V0cHV0RGlyICkgKyAnLycKICAgICAgIGV4ZWN1dGFibGUgPSAneHNsdHByb2MnCiAgICAgICBhcmdzID0gWwogICAgICAgICAgICAgICAnLS1ub25ldCcsCiAgICAgICAgICAgICAgICctLW5vb3V0JywKLSAgICAgICAgICAgICAgJy0tb3V0cHV0JywgImJ1aWxkL2RvY3MvJGRvY05hbWUvIiwKKyAgICAgICAgICAgICAgJy0tb3V0cHV0Jywgb3V0cHV0UGF0aCwKICAgICAgICAgICAgICAgeHNsdEZpbGUsCi0gICAgICAgICAgICAgICJidWlsZC90bXAvZG9jcy8kZG9jTmFtZS94ZG9jLXRlbXAueG1sIgorICAgICAgICAgICAgICAiJHRlbXBEaXIveGRvYy10ZW1wLnhtbCIKICAgICAgIF0KICAgICB9CiAgIH0KQEAgLTEzOSw1OSArMTk4LDQzIEBACiAgIHsKICAgICBwcm9qZWN0LmV4ZWMgewogICAgICAgLy8gWE1MX0NBVEFMT0dfRklMRVM9Ci0gICAgICBTdHJpbmcgeHNsdEZpbGUgPSAnc3JjL3hzbC94aHRtbC54c2wnCisgICAgICBTdHJpbmcgeHNsdEZpbGUgPSAiJHhzbERpci94aHRtbC54c2wiCiAgICAgICBleGVjdXRhYmxlID0gJ3hzbHRwcm9jJwogICAgICAgYXJncyA9IFsKICAgICAgICAgICAgICAgJy0tbm9uZXQnLAogICAgICAgICAgICAgICAnLS1ub291dCcsCi0gICAgICAgICAgICAgICctLW91dHB1dCcsICJidWlsZC9kb2NzLyRkb2NOYW1lLyRkb2NOYW1lIiArICIuaHRtbCIsCisgICAgICAgICAgICAgICctLW91dHB1dCcsICIkb3V0cHV0RGlyLyR7ZG9jTmFtZX0uaHRtbCIsCiAgICAgICAgICAgICAgIHhzbHRGaWxlLAotICAgICAgICAgICAgICAiYnVpbGQvdG1wL2RvY3MvJGRvY05hbWUveGRvYy10ZW1wLnhtbCIKKyAgICAgICAgICAgICAgIiR0ZW1wRGlyL3hkb2MtdGVtcC54bWwiCiAgICAgICBdCiAgICAgfQogICB9CiAKICAgZGVmIHZvaWQgZ2VuZXJhdGVQZGYoKQogICB7Ci0vLyAkIHhzbHRwcm9jIC0tbm9uZXQgLi4vZG9jYm9vay14c2wvZm8ueHNsIGFydGljbGUueG1sID4gYXJ0aWNsZS5mbworICAgIC8vICQgeHNsdHByb2MgLS1ub25ldCAuLi9kb2Nib29rLXhzbC9mby54c2wgYXJ0aWNsZS54bWwgPiBhcnRpY2xlLmZvCiAgICAgLy8gJCBmb3AgYXJ0aWNsZS5mbyBhcnRpY2xlLnBkZgotCi0gICAgLy8gICAgcHJvamVjdC5leGVjIHsKLSAgICAvLyAgICAgIFN0cmluZyB4c2x0RmlsZSA9ICdzcmMveHNsL2ZvLnhzbCcKLSAgICAvLyAgICAgIGV4ZWN1dGFibGUgPSAneHNsdHByb2MnCi0gICAgLy8gICAgICBhcmdzID0gWwotICAgIC8vICAgICAgICAgICAgICAnLS1ub25ldCcsCi0gICAgLy8gICAgICAgICAgICAgICctLW91dHB1dCcsICJidWlsZC90bXAvZG9jcy8kZG9jTmFtZS8kZG9jTmFtZSIrIi5mbyIsCi0gICAgLy8gICAgICAgICAgICAgIHhzbHRGaWxlLAotICAgIC8vICAgICAgICAgICAgICAiYnVpbGQvdG1wL2RvY3MvJGRvY05hbWUveGRvYy10ZW1wLnhtbCIKLSAgICAvLyAgICAgIF0KLSAgICAvLyAgICB9Ci0gICAgLy8gICAgcHJvamVjdC5leGVjIHsKLSAgICAvLyAgICAgIGV4ZWN1dGFibGUgPSAnZm9wJwotICAgIC8vICAgICAgYXJncyA9IFsKLSAgICAvLyAgICAgICAgICAgICAgImJ1aWxkL3RtcC9kb2NzLyRkb2NOYW1lLyRkb2NOYW1lIisiLmZvIiwKLSAgICAvLyAgICAgICAgICAgICAgImJ1aWxkL2RvY3MvJGRvY05hbWUvJGRvY05hbWUiICsgIi5wZGYiCi0gICAgLy8gICAgICBdCi0gICAgLy8gICAgfQorICAgIHByb2plY3QuZXhlYyB7CisgICAgICBTdHJpbmcgeHNsdEZpbGUgPSAiJHhzbERpci9mby54c2wiCisgICAgICBleGVjdXRhYmxlID0gJ3hzbHRwcm9jJworICAgICAgYXJncyA9IFsKKyAgICAgICAgJy0tbm9uZXQnLAorICAgICAgICAnLS1vdXRwdXQnLCAiJHRlbXBEaXIvJHtkb2NOYW1lfS5mbyIsCisgICAgICAgIHhzbHRGaWxlLAorICAgICAgICAiJHRlbXBEaXIveGRvYy10ZW1wLnhtbCIKKyAgICAgIF0KKyAgICB9CisgICAgcHJvamVjdC5leGVjIHsKKyAgICAgIGV4ZWN1dGFibGUgPSAnZm9wJworICAgICAgYXJncyA9IFsKKyAgICAgICAgIiR0ZW1wRGlyLyR7ZG9jTmFtZX0uZm8iLAorICAgICAgICAiJG91dHB1dERpci8ke2RvY05hbWV9LnBkZiIKKyAgICAgIF0KKyAgICB9CiAgIH0KIAotICBTdHJpbmcgZ2V0RG9jTmFtZSggKQorICBkZWYgU3RyaW5nIHJlbGF0aXZlUGF0aCggRmlsZSByb290LCBGaWxlIHRhcmdldCApCiAgIHsKLSAgICByZXR1cm4gZG9jTmFtZQotICB9Ci0KLSAgdm9pZCBzZXREb2NOYW1lKCBTdHJpbmcgZG9jTmFtZSApCi0gIHsKLSAgICB0aGlzLmRvY05hbWUgPSBkb2NOYW1lCi0gIH0KLQotICBTdHJpbmcgZ2V0RG9jVHlwZSggKQotICB7Ci0gICAgcmV0dXJuIGRvY1R5cGUKLSAgfQotCi0gIHZvaWQgc2V0RG9jVHlwZSggU3RyaW5nIGRvY1R5cGUgKQotICB7Ci0gICAgdGhpcy5kb2NUeXBlID0gZG9jVHlwZQorICAgIG5ldyBGaWxlKCByb290LnRvVVJJKCkucmVsYXRpdml6ZSggdGFyZ2V0LnRvVVJJKCkgKS50b1N0cmluZygpICkucGF0aAogICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlLy5naXRpZ25vcmUgYi9jb3JlLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMzUzZTQuLjAwMDAwMDAKLS0tIGEvY29yZS8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1idWlsZC8KLSouaW1sCi1vdXQvCmRpZmYgLS1naXQgYS9jb3JlL0xJQ0VOU0UgYi9jb3JlL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MzNiMWEuLjAwMDAwMDAKLS0tIGEvY29yZS9MSUNFTlNFCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCmRpZmYgLS1naXQgYS9jb3JlL05PVElDRSBiL2NvcmUvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTVmMzRiLi4wMDAwMDAwCi0tLSBhL2NvcmUvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotUWk0aiBDb3JlCi1Db3B5cmlnaHQgMjAwNy0yMDExLCBUaGUgUWk0aiBEZXZlbG9wbWVudCBUZWFtIG9mIGluZGl2aWR1YWxzLgotCi1TZWUgaHR0cDovL3d3dy5xaTRqLm9yZy9jb250cmlidXRvcnMuaHRtbCBmb3IgbGlzdCBvZiBvZiBpbmRpdmlkdWFscy4KLUFsc28gc2VlIGVhY2ggZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBDb3B5cmlnaHQgY2xhaW1zLgotCi1RaTRqIGlzIGEgY29tbXVuaXR5IGFnZ3JlZ2F0ZWQgd29ya3MgdW5kZXIgQ29weXJpZ2h0IGxhdy4KLUFsbCBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgd29ya3MgYXQgUWk0aiBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLUFwYWNoZSBMaWNlbnNlIHZlciAyLjAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzCi0KLUJlbG93IGZvbGxvd3MgYSBsaXN0IG9mIGJpbmFyeSBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGxpY2Vuc2VzOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIG1vZHVsZSB1c2VzIEFTTSwgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgSU5SSUEsIEZyYW5jZSBUZWxlY29tLAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gU2VlIGxpY2Vuc2VzL2FzbS5saWNlbnNlCi0KLVRoaXMgbW9kdWxlIHVzZXMgSlVuaXQsIHVuZGVyIENvbW1vbiBQdWJsaWMgTGljZW5zZSAxLjAgZnJvbSB0aGUKLWh0dHA6Ly93d3cuanVuaXQub3JnIGNvbW11bml0eS4gU2VlIGh0dHA6Ly93d3cuanVuaXQub3JnL2xpY2Vuc2UKLQotCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvYnVpbGQuZ3JhZGxlIGIvY29yZS9hcGkvYnVpbGQuZ3JhZGxlCmluZGV4IGNjYWEwZjIuLmFiODk2MTMgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL2J1aWxkLmdyYWRsZQorKysgYi9jb3JlL2FwaS9idWlsZC5ncmFkbGUKQEAgLTEsNCArMSwyMyBAQAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogQ29yZSBBUEkifX0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBDb3JlIEFQSSJ9fQogCiBkZXBlbmRlbmNpZXMgewogCkBAIC0xMCw2ICsyOSw1IEBACiAgIHRlc3RDb21waWxlIHByb2plY3QoICc6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24udmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24nICkKIAogICB0ZXN0UnVudGltZSBwcm9qZWN0KCAnOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lJyApCi0gIHRlc3RSdW50aW1lIGxpYnJhcmllcy5zbGY0al9zaW1wbGUKIAogfQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvZGV2LXN0YXR1cy54bWwgYi9jb3JlL2FwaS9kZXYtc3RhdHVzLnhtbAppbmRleCA1OThlN2RkLi5hMTdlYzZmIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9kZXYtc3RhdHVzLnhtbAorKysgYi9jb3JlL2FwaS9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9kb2NzL2FwaS50eHQgYi9jb3JlL2FwaS9zcmMvZG9jcy9hcGkudHh0CmluZGV4IDRlMDI1NmUuLmUzODI1YjggMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9kb2NzL2FwaS50eHQKKysrIGIvY29yZS9hcGkvc3JjL2RvY3MvYXBpLnR4dApAQCAtMjEsNyArMjEsNyBAQAogc291cmNlPWNvcmUvYXBpL2Rldi1zdGF0dXMueG1sCiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgUWk0aiBDb3JlIEFQSSBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgZm9yIGNsaWVudCBhcHBsaWNhdGlvbiBjb2RlIGR1cmluZyB0aGUgbWFpbiBleGVjdXRpb24gcGhhc2UsIGkuZS4gYWZ0ZXIgdGhlCitUaGUgWmVzdOKEoiBDb3JlIEFQSSBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgZm9yIGNsaWVudCBhcHBsaWNhdGlvbiBjb2RlIGR1cmluZyB0aGUgbWFpbiBleGVjdXRpb24gcGhhc2UsIGkuZS4gYWZ0ZXIgdGhlCiBhcHBsaWNhdGlvbiBoYXMgYmVlbiBhY3RpdmF0ZWQuCiAKIGluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvZG9jcy9hcHBsaWNhdGlvbi50eHQgYi9jb3JlL2FwaS9zcmMvZG9jcy9hcHBsaWNhdGlvbi50eHQKaW5kZXggZTA0NjUzZi4uYmY5N2I1MyAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL2RvY3MvYXBwbGljYXRpb24udHh0CisrKyBiL2NvcmUvYXBpL3NyYy9kb2NzL2FwcGxpY2F0aW9uLnR4dApAQCAtMTUsMTMgKzE1LDEzIEBACiAKIFtbY29yZS1hcGktYXBwbGljYXRpb24sQXBwbGljYXRpb25dXQogPSBBcHBsaWNhdGlvbiA9Ci1UaGVyZSBpcyBvbmUgYW5kIG9ubHkgb25lIEFwcGxpY2F0aW9uIGluc3RhbmNlIHBlciBRaTRqIHJ1bnRpbWUgaW5zdGFuY2UuIEJ1dCB0aGVyZSBpcyBub3RoaW5nIHByZXZlbnRpbmcgY29kZSB0bwotY3JlYXRlIGFkZGl0aW9uYWwgUWk0aiBSdW50aW1lIGluc3RhbmNlcyBpbnNpZGUgdGhlIHNhbWUgSlZNLiBIb3dldmVyLCB0aGVzZSBydW50aW1lcyBhcmUgaXNvbGF0ZWQgZnJvbSBlYWNoIG90aGVyLgorVGhlcmUgaXMgb25lIGFuZCBvbmx5IG9uZSBBcHBsaWNhdGlvbiBpbnN0YW5jZSBwZXIgWmVzdOKEoiBydW50aW1lIGluc3RhbmNlLiBCdXQgdGhlcmUgaXMgbm90aGluZyBwcmV2ZW50aW5nIGNvZGUgdG8KK2NyZWF0ZSBhZGRpdGlvbmFsIFplc3TihKIgUnVudGltZSBpbnN0YW5jZXMgaW5zaWRlIHRoZSBzYW1lIEpWTS4gSG93ZXZlciwgdGhlc2UgcnVudGltZXMgYXJlIGlzb2xhdGVkIGZyb20gZWFjaCBvdGhlci4KIAogVGhlIG1haW4gcHVycG9zZSBvZiB0aGUgQXBwbGljYXRpb24gc3RydWN0dXJlIGFydGlmYWN0IGlzIHRvIGtlZXAgZXZlcnl0aGluZyBpbiB0aGUgc2FtZSBib3gsIGFuZCBhbGxvd2luZyB1cyB0bwogbmF2aWdhdGUgdGhlIFN0cnVjdHVyZS4gU28sIGZyb20gYSBjbGllbnQgY29kZSBwZXJzcGVjdGl2ZSwgdGhlIEFwcGxpY2F0aW9uIGlzIG9mIG5vIHVzZSwgb3RoZXIgdGhhbiBiZWluZyBwYXJ0IG9mCi1icmluZyBRaTRqIHRvIGxpZmUuIFFpNGogZG9lc24ndCBzdGFydCBhdXRvbWF0aWNhbGx5IGFuZCBjYW4gYmUgcnVuIGluIG1vc3QgZW52aXJvbm1lbnRzLCBieSByZXF1aXJpbmcgdGhhdCB0aGUKLWJvb3RzdHJhcHBpbmcgb2YgUWk0aiBpcyBkb25lIGJ5IGNsaWVudCBjb2RlLiBXZSBjYWxsIHRoaXMgdGhlIEJvb3RzdHJhcCBQaGFzZS4gVGhlIGNvZGUgaW4gdGhlIGN1c3RvbSBib290c3RyYXBwZXIKK2JyaW5nIFplc3TihKIgdG8gbGlmZS4gWmVzdOKEoiBkb2Vzbid0IHN0YXJ0IGF1dG9tYXRpY2FsbHkgYW5kIGNhbiBiZSBydW4gaW4gbW9zdCBlbnZpcm9ubWVudHMsIGJ5IHJlcXVpcmluZyB0aGF0IHRoZQorYm9vdHN0cmFwcGluZyBvZiBaZXN04oSiIGlzIGRvbmUgYnkgY2xpZW50IGNvZGUuIFdlIGNhbGwgdGhpcyB0aGUgQm9vdHN0cmFwIFBoYXNlLiBUaGUgY29kZSBpbiB0aGUgY3VzdG9tIGJvb3RzdHJhcHBlcgogd2lsbCBuZWVkIHRvIGFjY2VzcyBhZGRpdGlvbmFsIEphcnMgZnJvbSB0aGUgcmVndWxhciBkb21haW4gY29kZSwgYW5kIHdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGF0IHlvdSBtYWtlIHRoaXMKIHNlcGFyYXRpb24gaW4geW91ciBwcm9qZWN0IGFzIHdlbGwuCiAKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogICAgICogQ3JlYXRlLCBvYnRhaW4gb3IgbG9va3VwIEFzc2VtYmxlcnMuCiAgICAgKiBFc3RhYmxpc2ggdGhlIGFwcGxpY2F0aW9uIHN0cnVjdHVyZXMuCi0gICAgKiBDcmVhdGUgYSBRaTRqIFJ1bnRpbWUgaW5zdGFuY2UuCisgICAgKiBDcmVhdGUgYSBaZXN04oSiIFJ1bnRpbWUgaW5zdGFuY2UuCiAgICAgKiBDcmVhdGUgYW4gQXBwbGljYXRpb25Bc3NlbWJseUZhY3RvcnkuCiAgICAgKiBDcmVhdGUgYW4gQXBwbGljYXRpb25GYWN0b3J5LgogICAgICogQ2FsbCBBcHBsaWNhdGlvbkZhY3RvcnkubmV3QXBwbGljYXRpb24oKSB0byBjcmVhdGUgYW4gQXBwbGljYXRpb25Db250ZXh0LgpAQCAtNzIsNyArNzIsNyBAQAogPSBTaW5nbGUgTW9kdWxlIExheWVyaW5nID0KIAogQmVoaW5kIHRoZSBzY2VuZXMgb2YgdGhlIFNpbmdsZXRvbkFzc2VtYmxlciBhIGxpdHRsZSBiaXQgbW9yZSBlbGFib3JhdGUgYm9vdHN0cmFwIHNlcXVlbmNlIGlzIGhhcHBlbmluZy4gVGhlIGNvZGUgYmVsb3cKLXNob3dzIHdoYXQgaXMgdGhlIGFjdHVhbCByZXF1aXJlZCBzZXF1ZW5jZSB0byBzdGFydCB1cCBRaTRqLgorc2hvd3Mgd2hhdCBpcyB0aGUgYWN0dWFsIHJlcXVpcmVkIHNlcXVlbmNlIHRvIHN0YXJ0IHVwIFplc3QuCiAKIFtzbmlwcGV0LGphdmFdCiAtLS0tLS0tLS0tLQpAQCAtODMsNyArODMsNyBAQAogSW4gdGhlIGFib3ZlIGV4YW1wbGUgd2UgYXJlIG9ubHkgY3JlYXRpbmcgYW4gQXBwbGljYXRpb24gd2l0aCBhIHNpbmdsZSBMYXllciBhbmQgYSBzaW5nbGUgTW9kdWxlIGluIHRoYXQgTGF5ZXIuIFRoaXMgaXMKIGRlcml2ZWQgZnJvbSB0aGUgZmFjdCB0aGF0IHRoZSBmYWN0b3J5Lm5ld0FwcGxpY2F0aW9uQXNzZW1ibHkoKSBtZXRob2QgdGFrZXMgYSBzaW5nbGUgQXNzZW1ibGVyIGFyZ3VtZW50LgogCi1UaGUgQXNzZW1ibGVyLmFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBhc3NlbWJseSApIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgUWk0aiBSdW50aW1lIG5lZWRzIHRvIHBvcHVsYXRlIHRoZQorVGhlIEFzc2VtYmxlci5hc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgYXNzZW1ibHkgKSBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIFplc3TihKIgUnVudGltZSBuZWVkcyB0byBwb3B1bGF0ZSB0aGUKIE1vZHVsZUFzc2VtYmx5IHdpdGggaXRzIENvbXBvc2l0ZXMsIE9iamVjdHMsIFNlcnZpY2VzIGFuZCBvdGhlciBpbmZvcm1hdGlvbi4KIAogPT0gIlBhbmNha2UiIExheWVyaW5nID09CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvZG9jcy9hc3NvY2lhdGlvbi50eHQgYi9jb3JlL2FwaS9zcmMvZG9jcy9hc3NvY2lhdGlvbi50eHQKaW5kZXggZTY5ZGUyOS4uZmM3YWFjNiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL2RvY3MvYXNzb2NpYXRpb24udHh0CisrKyBiL2NvcmUvYXBpL3NyYy9kb2NzL2Fzc29jaWF0aW9uLnR4dApAQCAtMCwwICsxLDE4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9kb2NzL2NvbXBvc2l0aW9uLnR4dCBiL2NvcmUvYXBpL3NyYy9kb2NzL2NvbXBvc2l0aW9uLnR4dAppbmRleCBmZWNlY2UxLi40NjdmZDdhIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvZG9jcy9jb21wb3NpdGlvbi50eHQKKysrIGIvY29yZS9hcGkvc3JjL2RvY3MvY29tcG9zaXRpb24udHh0CkBAIC0yMCwxNCArMjAsMTQgQEAKIDEuIHRoZSBhYmlsaXR5IHRvIGFzc2VtYmxlIChjb21wb3NlKSBvYmplY3RzIGZyb20gc21hbGxlciBwaWVjZXMsIGNhbGxlZCBGcmFnbWVudHMuCiAyLiB0aGUgY29uc3RydWN0aW9uIG9mIGFwcGxpY2F0aW9ucyBieSBhc3NlbWJsaW5nIENvbXBvc2l0ZXMgaW50byBNb2R1bGVzIGFuZCBNb2R1bGVzIGludG8gTGF5ZXJzLgogCi1JbiBRaTRqLCB3ZSB1c2UgdGhlIHRlcm0gQXNzZW1ibHkgZm9yIHRoZSBzZWNvbmQgY2FzZSBvZiBjb21wb3NpdGlvbi4gU2VlIHNlcGFyYXRlIGNoYXB0ZXIuCitJbiBaZXN0LCB3ZSB1c2UgdGhlIHRlcm0gQXNzZW1ibHkgZm9yIHRoZSBzZWNvbmQgY2FzZSBvZiBjb21wb3NpdGlvbi4gU2VlIHNlcGFyYXRlIGNoYXB0ZXIuCiAKIENvbXBvc2l0aW9uIHdpbGwgYWxsb3cgbGlicmFyeSBhdXRob3JzIGEgbmV3IGxldmVsIG9mIGZsZXhpYmlsaXR5IGluIGhvdyBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIHRvIGNsaWVudCBjb2RlLiBNb3JlCiBvbiB0aGF0IGxhdGVyLgogCiA9PSBGcmFnbWVudHMgPT0KIAotVGhlcmUgYXJlIDQgdHlwZXMgb2YgRnJhZ21lbnRzIGluIFFpNGo7CitUaGVyZSBhcmUgNCB0eXBlcyBvZiBGcmFnbWVudHMgaW4gWmVzdDsKIAogICAgICogPDxjb3JlLWFwaS1taXhpbj4+IC0gVGhlIHN0YXRlIGNhcnJ5aW5nIHBhcnQgb2YgYSBDb21wb3NpdGUuCiAgICAgKiA8PGNvcmUtYXBpLWNvbnN0cmFpbnQ+PiAtIFJ1bGVzIGZvciBpbiBhbmQgb3V0IGFyZ3VtZW50cywgdHlwaWNhbGx5IHVzZWQgZm9yIHZhbGlkYXRpb24uCkBAIC00NywxNCArNDcsMTQgQEAKICAgICAqIFNlcnZpY2UgLSBTZXJ2aWNlIGlzIGluamVjdGFibGUgdG8gb3RoZXIgY29tcG9zaXRlcyBhbmQgamF2YSBvYmplY3RzLiBUaGV5IGFyZSBub3QgcGVyc2lzdGFibGUsIGJ1dCBpZgogICAgICAgcmVmZXJlbmNlZCBmcm9tIGFuIEVudGl0eSBvciBWYWx1ZSwgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBTZXJ2aWNlIHdpbGwgYmUgaW5qZWN0ZWQgd2hlbiB0aGUgRW50aXR5L1ZhbHVlIGlzCiAgICAgICBkZXNlcmlhbGl6ZWQuIFNlcnZpY2VzIGFyZSBzaW5nbGV0b25zLiBUaGVyZSBhcmUgJ2hvc3RlZCcgYW5kICdpbXBvcnRlZCcgU2VydmljZXMuIFRoZSAnaG9zdGVkJyBTZXJ2aWNlIGhhcwotICAgICAgQ29uZmlndXJhdGlvbiBhbmQgaXRzIGxpZmUgY3ljbGUgY29udHJvbGxlZCBieSB0aGUgUWk0aiBydW50aW1lLCB3aGVyZWFzIHRoZSAnaW1wb3J0ZWQnIFNlcnZpY2VzIGFyZSBleHRlcm5hbAorICAgICAgQ29uZmlndXJhdGlvbiBhbmQgaXRzIGxpZmUgY3ljbGUgY29udHJvbGxlZCBieSB0aGUgWmVzdOKEoiBydW50aW1lLCB3aGVyZWFzIHRoZSAnaW1wb3J0ZWQnIFNlcnZpY2VzIGFyZSBleHRlcm5hbAogICAgICAgcmVmZXJlbmNlcy4KICAgICAqIFRyYW5zaWVudCAtIFNob3J0LWxpdmVkIGNvbXBvc2l0ZXMgdGhhdCBhcmUgbm90IHBlcnNpc3RhYmxlLiBFcXVhbHMvaGFzaENvZGUvdG9TdHJpbmcgYXJlIGZvcndhcmRlZCB0byB0aGUKICAgICAgIE1peGluIFR5cGUgZGVjbGFyaW5nIHRob3NlIG1ldGhvZHMgZXhwbGljaXRseS4KIAotSW4gdmVyc2lvbnMgb2YgUWk0aiBwcmlvciB0byAyLjAsIGNvbXBvc2l0ZSB0eXBlcyBoYWQgdG8gZXh0ZW5kIG9uZSBvZiB0aGVzZSA0IG1ldGEgdHlwZXMsIGJ1dCBpbiAyLjAgYW5kIGxhdGVyLCB0aGUKK0luIHZlcnNpb25zIG9mIFplc3TihKIgcHJpb3IgdG8gMi4wICh0aGVuIFFpNGopLCBjb21wb3NpdGUgdHlwZXMgaGFkIHRvIGV4dGVuZCBvbmUgb2YgdGhlc2UgNCBtZXRhIHR5cGVzLCBidXQgaW4gMi4wIGFuZCBsYXRlciwgdGhlCiBtZXRhIHR5cGUgaW50ZXJmYWNlIGlzIGFkZGVkIGR5bmFtaWNhbGx5IGR1cmluZyA8PGNvcmUtYm9vdHN0cmFwLWFzc2VtYmx5Pj4uCi1XZSBjYW4gdGhlcmVmb3IgZ2V0IHJpZCBvZiBhIGxvdCBvZiBhZGRpdGlvbmFsIHR5cGVzLCBhbmQgdXNlIFFpNGotZnJlZSBpbnRlcmZhY2VzIGRpcmVjdGx5OworV2UgY2FuIHRoZXJlZm9yIGdldCByaWQgb2YgYSBsb3Qgb2YgYWRkaXRpb25hbCB0eXBlcywgYW5kIHVzZSBaZXN0LWZyZWUgaW50ZXJmYWNlcyBkaXJlY3RseTsKIAogW3NuaXBwZXQsamF2YV0KIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvZG9jcy9jb25jZXJuLnR4dCBiL2NvcmUvYXBpL3NyYy9kb2NzL2NvbmNlcm4udHh0CmluZGV4IDZhOTQxZmIuLjNkNmUzNmYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9kb2NzL2NvbmNlcm4udHh0CisrKyBiL2NvcmUvYXBpL3NyYy9kb2NzL2NvbmNlcm4udHh0CkBAIC0zNCwxMiArMzQsMTIgQEAKIGVuc3VyZSB0aGF0IHRoZSBzdGF0ZSBpbiB0aGUgZW50aXJlIGNvbXBvc2l0ZSBpcyB2YWxpZCksIGNvb3JkaW5hdGluZyBzZXJ2aWNlcywgaGFuZGxpbmcgZXZlbnRzIGFuZCBtdWNoIG1vcmUuCiAKIFR5cGVkIENvbmNlcm5zIGRvZXNuJ3QgaGF2ZSB0byBpbXBsZW1lbnQgYWxsIHRoZSBtZXRob2RzIGluIHRoZSBNaXhpbiBUeXBlLiBCeSBtYWtpbmcgdGhlIGNsYXNzIGFic3RyYWN0IGFuZCBvbmx5Ci1pbXBsZW1lbnRpbmcgdGhlIG1ldGhvZHMgb2YgaW50ZXJlc3QsIFFpNGogd2lsbCBzdWJjbGFzcyB0aGUgY29uY2VybiAob3RoZXJ3aXNlIG5vdCB2YWxpZCBmb3IgdGhlIEpWTSksIGJ1dCB0aGUgZ2VuZXJhdGVkCi1tZXRob2RzIHdpbGwgbmV2ZXIgYmUgaW52b2tlZC4KK2ltcGxlbWVudGluZyB0aGUgbWV0aG9kcyBvZiBpbnRlcmVzdCwgWmVzdOKEoiBydW50aW1lIHdpbGwgc3ViY2xhc3MgdGhlIGNvbmNlcm4gKG90aGVyd2lzZSBub3QgdmFsaWQgZm9yIHRoZSBKVk0pLCBidXQgdGhlCitnZW5lcmF0ZWQgbWV0aG9kcyB3aWxsIG5ldmVyIGJlIGludm9rZWQuCiAKID09IEdlbmVyaWMgQ29uY2VybiA9PQogSW4gY2xhc3NpYyBBT1AsIGFsbCBhZHZpY2UgYXJlIGVmZmVjdGl2ZWx5IF9nZW5lcmljXy4gVGhlcmUgaXMgbm8gdHlwZSBpbmZvcm1hdGlvbiBpbiB0aGUgYWR2aWNlIGltcGxlbWVudGF0aW9uIGFuZCB0aGUKLXBvaW50Y3V0IGNhbiBiZSBkZWZpbmVkIGFueXdoZXJlIGluIHRoZSBjb2RlLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIHVzZXMgcHJveHkgSW52b2NhdGlvbkhhbmRsZXJzLiBRaTRqIHN1cHBvcnRzIHRoaXMKK3BvaW50Y3V0IGNhbiBiZSBkZWZpbmVkIGFueXdoZXJlIGluIHRoZSBjb2RlLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIHVzZXMgcHJveHkgSW52b2NhdGlvbkhhbmRsZXJzLiBaZXN04oSiIHN1cHBvcnRzIHRoaXMKIGNvbnN0cnVjdCBhcyB3ZWxsLCBhbmQgd2UgY2FsbCBpdCAqR2VuZXJpYyBDb25jZXJuKi4KIAogR2VuZXJpYyBDb25jZXJucyB3aWxsIGJlIGFkZGVkIHRvIGFsbCBtZXRob2RzIHRoYXQgdGhlIEFwcGxpZXNUb0ZpbHRlciBldmFsdWF0ZXMgdG8gdHJ1ZS4gQnkgZGVmYXVsdCwgdGhhdCBpcyBhbGwgbWV0aG9kcy4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9kb2NzL2NvbmZpZ3VyYXRpb24udHh0IGIvY29yZS9hcGkvc3JjL2RvY3MvY29uZmlndXJhdGlvbi50eHQKaW5kZXggODQ4M2I1Mi4uNzVjZTU0ZCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL2RvY3MvY29uZmlndXJhdGlvbi50eHQKKysrIGIvY29yZS9hcGkvc3JjL2RvY3MvY29uZmlndXJhdGlvbi50eHQKQEAgLTE1LDE0ICsxNSwxNCBAQAogCiBbW2NvcmUtYXBpLXNlcnZpY2UtY29uZmlndXJhdGlvbixTZXJ2aWNlIENvbmZpZ3VyYXRpb25dXQogPSBTZXJ2aWNlIENvbmZpZ3VyYXRpb24gPQotQ29uZmlndXJhdGlvbiBpbiBRaTRqIGlzIGZvciBRaTRqIDw8Y29yZS1hcGktc2VydmljZT4+IG9ubHkuIFRoZSBDb25maWd1cmF0aW9uIGlzIHN0b3JlZCBpbiBhIHZpc2libGUgRW50aXR5CitDb25maWd1cmF0aW9uIGluIFplc3TihKIgaXMgZm9yIFplc3TihKIgPDxjb3JlLWFwaS1zZXJ2aWNlPj4gb25seS4gVGhlIENvbmZpZ3VyYXRpb24gaXMgc3RvcmVkIGluIGEgdmlzaWJsZSBFbnRpdHkKIFN0b3JlIGFuZCBpcyB0aGVyZWZvciBydW50aW1lIG1vZGlmaWFibGUgYW5kIG5vdCBzdGF0aWMgaW4gcHJvcGVydGllcyBvciBYTUwgZmlsZXMgYXMgaW4gbW9zdCBvdGhlciBkZXBlbmRlbmN5CiBpbmplY3Rpb24gZnJhbWV3b3Jrcy4KIAogVGhlIENvbmZpZ3VyYXRpb24gc3lzdGVtIGl0c2VsZiB3aWxsIGhhbmRsZSBhbGwgdGhlIGRldGFpbHMgd2l0aCBpbnRlcmZhY2luZyB3aXRoIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24uCiBUaGUgbm9ybWFsIFVuaXRPZldvcmsgbWFuYWdlbWVudCBpcyB1c2VkLCBidXQgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4KIAotSW4gUWk0aiwgQ29uZmlndXJhdGlvbiBhcmUgc3Ryb25nbHkgdHlwZWQgYW5kIHJlZmFjdG9yaW5nLWZyaWVuZGx5LiBDb25maWd1cmF0aW9uIGlzIHJlYWQgZnJvbSB0aGUgZW50aXR5IHN0b3JlLCBidXQgaWYKK0luIFplc3QsIENvbmZpZ3VyYXRpb24gYXJlIHN0cm9uZ2x5IHR5cGVkIGFuZCByZWZhY3RvcmluZy1mcmllbmRseS4gQ29uZmlndXJhdGlvbiBpcyByZWFkIGZyb20gdGhlIGVudGl0eSBzdG9yZSwgYnV0IGlmCiBpdCBjYW4gbm90IGJlIGZvdW5kLCB0aGVuIGl0IHdpbGwgdHJ5IHRvIGJvb3RzdHJhcCBpdCBmcm9tIGEgcHJvcGVydGllcyBmaWxlLCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlCiBTZXJ2aWNlRGVzY3JpcHRvci5pZGVudGlmaWVkQnkoKSwgd2hpY2ggaXMgc2V0IGR1cmluZyA8PGNvcmUtYm9vdHN0cmFwLWFzc2VtYmx5Pj4gYW5kIGRlZmF1bHRzIHRvIHRoZSBmdWxseSBxdWFsaWZpZWQKIGNsYXNzbmFtZSBvZiB0aGUgPDxjb3JlLWFwaS1zZXJ2aWNlPj4gdHlwZS4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9kb2NzL2RlcGVuZGVuY3ktaW5qZWN0aW9uLnR4dCBiL2NvcmUvYXBpL3NyYy9kb2NzL2RlcGVuZGVuY3ktaW5qZWN0aW9uLnR4dAppbmRleCBlNjlkZTI5Li5mYzdhYWM2IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvZG9jcy9kZXBlbmRlbmN5LWluamVjdGlvbi50eHQKKysrIGIvY29yZS9hcGkvc3JjL2RvY3MvZGVwZW5kZW5jeS1pbmplY3Rpb24udHh0CkBAIC0wLDAgKzEsMTggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL2RvY3MvZW50aXR5Y29tcG9zaXRlLnR4dCBiL2NvcmUvYXBpL3NyYy9kb2NzL2VudGl0eWNvbXBvc2l0ZS50eHQKaW5kZXggZThiMDZhOS4uYjQ0NWY0YiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL2RvY3MvZW50aXR5Y29tcG9zaXRlLnR4dAorKysgYi9jb3JlL2FwaS9zcmMvZG9jcy9lbnRpdHljb21wb3NpdGUudHh0CkBAIC0yMiw3ICsyMiw3IEBACiBjcmVhdGluZyBvYmplY3RzIHRoYXQgc3Vydml2ZXMgb3ZlciBsb25nIHBlcmlvZHMgb2YgdGltZSBpcyBhIGRpZmZpY3VsdCBvbmUuCiAKIEVyaWMgRXZhbnMgcG9pbnRzIG91dCBpbiBoaXMgYm9vayB0aGF0IEVudGl0aWVzIGlzIGEgdmVyeSBkZWZpbml0ZSBhbmQgZGlzdGluY3QgY29uY2VwdCB0aGF0IG5lZWRzIHRvIGJlIGhhbmRsZWQKLWV4cGxpY2l0bHkuIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBpbiBnZW5lcmFsLCBhbmQgUWk0aiBpbiBwYXJ0aWN1bGFyLCB0YWtlcyB0aGlzIHBvaW50IHZlcnkgc2VyaW91c2x5IGFuZAorZXhwbGljaXRseS4gQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIGluIGdlbmVyYWwsIGFuZCBaZXN04oSiIGluIHBhcnRpY3VsYXIsIHRha2VzIHRoaXMgcG9pbnQgdmVyeSBzZXJpb3VzbHkgYW5kCiBtYWtlcyBFbnRpdGllcyBhIGNlbnRyYWwgcGFydCBvZiB0aGUgd2hvbGUgc3lzdGVtLiBBbmQgbGlrZXdpc2UsIHdlIGFyZSBjb252aW5jZWQgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gZGV2ZWxvcAogZG9tYWluLWtub3dsZWRnZS1yaWNoIGFwcGxpY2F0aW9ucyB3aXRob3V0IGEgY29uc2Npb3VzIGFuZCB3ZWxsLWRlZmluZWQgc3RyYXRlZ3kgb24gRW50aXRpZXMuIFNvLCBpbnN0ZWFkIG9mIHNwZW5kaW5nCiBlbmRsZXNzIGhvdXJzIHRyeWluZyB0byBnZXQgSGliZXJuYXRlIG1hcHBpbmcgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nLCB3ZSBpbnRyb2R1Y2UgYSBDb21wb3NpdGUgbWV0YSB0eXBlIGNhbGxlZApkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL2RvY3MvaW5kZXhpbmcudHh0IGIvY29yZS9hcGkvc3JjL2RvY3MvaW5kZXhpbmcudHh0CmluZGV4IGU2OWRlMjkuLmZjN2FhYzYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9kb2NzL2luZGV4aW5nLnR4dAorKysgYi9jb3JlL2FwaS9zcmMvZG9jcy9pbmRleGluZy50eHQKQEAgLTAsMCArMSwxOCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvZG9jcy9tZXRyaWNzLnR4dCBiL2NvcmUvYXBpL3NyYy9kb2NzL21ldHJpY3MudHh0CmluZGV4IGUxMTZkMzkuLjY1ZjgwYTcgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9kb2NzL21ldHJpY3MudHh0CisrKyBiL2NvcmUvYXBpL3NyYy9kb2NzL21ldHJpY3MudHh0CkBAIC0xNSw3ICsxNSw3IEBACiAKIFtbY29yZS1hcGktbWV0cmljcywgTWV0cmljcyBBUEldXQogPSBNZXRyaWNzIEFQSSA9Ci1UaGUgUWk0aiBwbGF0Zm9ybSBkZWZpbmVzIGFuIGFkdmFuY2VkIE1ldHJpY3MgU1BJIHRvIGNhcHR1cmUgcnVudGltZSBtZXRyaWNzIG9mIFFpNGoncyBpbnRlcm5hbHMgYXMgd2VsbCBiZSB1c2VkIGJ5CitUaGUgWmVzdOKEoiBwbGF0Zm9ybSBkZWZpbmVzIGFuIGFkdmFuY2VkIE1ldHJpY3MgU1BJIHRvIGNhcHR1cmUgcnVudGltZSBtZXRyaWNzIG9mIFplc3QncyBpbnRlcm5hbHMgYXMgd2VsbCBiZSB1c2VkIGJ5CiBhcHBsaWNhdGlvbiBjb2RlICh2aWEgdGhpcyBBUEkpIHRvIHByb3ZpZGUgcHJvZHVjdGlvbiBtZXRyaWNzIGZvciBvcGVyYXRpb25zIHBlcnNvbm5lbCwgZW5zdXJpbmcgaGVhbHRoeSBzdGF0ZSBvZgogdGhlIGFwcGxpY2F0aW9ucy4KIApAQCAtMjUsNyArMjUsNyBAQAogZmFjdG9yeSBmb3IgZWFjaCBjb21wb25lbnQgdHlwZSwgdG8gYWxsb3cgZm9yIGFkZGl0aW9uYWwgY29tcG9uZW50cyB0byBiZSBjcmVhdGVkIGluIHRoZSBmdXR1cmUgd2l0aG91dCBicmVha2luZwogY29tcGF0aWJpbGl0eSBpbiB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zLgogCi1UaGUgTWV0cmljc1Byb3ZpZGVyIGlzIGEgc3RhbmRhcmQgUWk0aiBTZXJ2aWNlIGFuZCBzaW1wbHkgYWNxdWlyZWQgdmlhIHRoZSBAU2VydmljZSBhbm5vdGF0aW9uIG9uIGEgZmllbGQgb3IKK1RoZSBNZXRyaWNzUHJvdmlkZXIgaXMgYSBzdGFuZGFyZCBaZXN04oSiIFNlcnZpY2UgYW5kIHNpbXBseSBhY3F1aXJlZCB2aWEgdGhlIEBTZXJ2aWNlIGFubm90YXRpb24gb24gYSBmaWVsZCBvcgogY29uc3RydWN0b3IgYXJndW1lbnQuCiAKIFtzbmlwcGV0LGphdmFdCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvZG9jcy9taXhpbi50eHQgYi9jb3JlL2FwaS9zcmMvZG9jcy9taXhpbi50eHQKaW5kZXggZDVjYmI4OS4uNjI1Zjg5NCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL2RvY3MvbWl4aW4udHh0CisrKyBiL2NvcmUvYXBpL3NyYy9kb2NzL21peGluLnR4dApAQCAtMTIyLDE2ICsxMjIsMTYgQEAKIHRhZz1wYXJ0aWFsCiAtLS0tLS0tLS0tLQogCi1BYm92ZSB0aGUgU3BlZWRNaXhpbiBvbmx5IGltcGxlbWVudHMgdGhlIGFjY2VsZXJhdGUoKSBtZXRob2QsIGFuZCBRaTRqIHdpbGwgb25seSBtYXAgdGhhdCBtZXRob2QgdG8gdGhpcyBtaXhpbi4gVGhlCitBYm92ZSB0aGUgU3BlZWRNaXhpbiBvbmx5IGltcGxlbWVudHMgdGhlIGFjY2VsZXJhdGUoKSBtZXRob2QsIGFuZCBaZXN04oSiIHdpbGwgb25seSBtYXAgdGhhdCBtZXRob2QgdG8gdGhpcyBtaXhpbi4gVGhlCiBvdGhlciBtZXRob2Qgb2YgdGhlIFNwZWVkTG9jYXRpb24gaW50ZXJmYWNlIGlzIG5vdCBzYXRpc2ZpZWQgYXMgdGhlIGV4YW1wbGUgaXMgd3JpdHRlbiBhbmQgd2lsbCBnZW5lcmF0ZSBhIHJ1bnRpbWUKIGV4Y2VwdGlvbi4KIAogPT0gUHJpdmF0ZSBNaXhpbnMgPT0KLVB1YmxpYyBtaXhpbnMgZXhwb3NlIHRoZWlyIG1ldGhvZHMgaW4gdGhlIGNvbXBvc2l0ZSBpbnRlcmZhY2UsIGFuZCB0aGlzIGlzIG5vdCBhbHdheXMgZGVzaXJhYmxlLiBRaTRqIHN1cHBvcnRzCitQdWJsaWMgbWl4aW5zIGV4cG9zZSB0aGVpciBtZXRob2RzIGluIHRoZSBjb21wb3NpdGUgaW50ZXJmYWNlLCBhbmQgdGhpcyBpcyBub3QgYWx3YXlzIGRlc2lyYWJsZS4gWmVzdOKEoiBzdXBwb3J0cwogX1ByaXZhdGUgTWl4aW5zXywgd2hpY2ggYXJlIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBvc2l0ZSBpdHNlbGYuIFRoYXQgbWVhbnMgdGhhdCBvdGhlciBmcmFnbWVudHMgaW4gdGhlIGNvbXBvc2l0ZQogY2FuIHNlZS91c2UgaXQsIGJ1dCBpdCBpcyBub3QgdmlzaWJsZSB0byB0aGUgY2xpZW50cyBvZiB0aGUgY29tcG9zaXRlLgogCi1Qcml2YXRlIE1peGlucyBhcmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5LiBXaGVuIFFpNGogZGV0ZWN0cyBhIEBUaGlzIGFubm90YXRpb24gcmVmZXJyaW5nIHRvIGEgdHlwZSB0aGF0IGlzIG5vdCBkZWZpbmVkCitQcml2YXRlIE1peGlucyBhcmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5LiBXaGVuIFplc3TihKIgZGV0ZWN0cyBhICtAVGhpcysgYW5ub3RhdGlvbiByZWZlcnJpbmcgdG8gYSB0eXBlIHRoYXQgaXMgbm90IGRlZmluZWQKIGluIHRoZSBDb21wb3NpdGUgaW50ZXJmYWNlLCB0aGVuIHRoYXQgaXMgYSBQcml2YXRlIE1peGluLiBUaGUgTWl4aW4gaW1wbGVtZW50YXRpb24gY2xhc3MsIGhvd2V2ZXIsIG11c3QgZXhpc3QgaW4gdGhlCiBsaXN0IG9mIE1peGlucyBpbiB0aGUgQE1peGlucyBhbm5vdGF0aW9uLiBCdXQgb2Z0ZW4sIHRoZSBQcml2YXRlIE1peGluIG9ubHkgbGlzdCBpbnRlcm5hbCBQcm9wZXJ0eSBtZXRob2RzIGluIHRoZSBNaXhpbgogVHlwZSwgd2hpY2ggd2lsbCBiZSBzYXRpc2ZpZWQgYnkgdGhlIHN0YW5kYXJkIFByb3BlcnR5TWl4aW4gYW5kIGhlbmNlIGFsd2F5cyBhdmFpbGFibGUuCkBAIC0xNzIsNyArMTcyLDcgQEAKIGFuZCBzb21ldGltZXMgR2VuZXJpYyBNaXhpbiBpbXBsZW1lbnRhdGlvbnMgYXJlICJsYXN0IHJlc29ydCIuCiAKIEV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBHZW5lcmljIE1peGluIGltcGxlbWVudGF0aW9ucyBhcmUgcmFyZSwgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gZXh0cmVtZSBjYXNlcy4gVGhleSBhcmUKLWxlc3MgZnJlcXVlbnQgdGhhbiBHZW5lcmljIENvbmNlcm4gb3IgR2VuZXJpYyBTaWRlRWZmZWN0IGltcGxlbWVudGF0aW9ucywgYnV0IGluc2lkZSB0aGUgUWk0aiBBUEkgYXJlIGEgY291cGxlIG9mCitsZXNzIGZyZXF1ZW50IHRoYW4gR2VuZXJpYyBDb25jZXJuIG9yIEdlbmVyaWMgU2lkZUVmZmVjdCBpbXBsZW1lbnRhdGlvbnMsIGJ1dCBpbnNpZGUgdGhlIFplc3TihKIgQVBJIGFyZSBhIGNvdXBsZSBvZgogR2VuZXJpYyBNaXhpbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgYWx3YXlzIHByZXNlbnQgdG8gbWFrZSB0aGUgbGlmZSBvZiB0aGUgZGV2ZWxvcGVyIGVhc2llciwgc3VjaCBhcyBQcm9wZXJ0eU1peGluLAogQXNzb2NpYXRpb25NaXhpbiwgTWFueUFzc29jaWF0aW9uTWl4aW4sIE5vb3BNaXhpbi4gVGhlIGZpcnN0IDMgYXJlIGRlY2xhcmVkIG9uIHRoZSBDb21wb3NpdGUgYW5kIEVudGl0eUNvbXBvc2l0ZQogaW50ZXJmYWNlcyBhbmQgYXV0b21hdGljYWxseSBpbmNsdWRlZCBpZiBuZWVkZWQuIFRoZXkgYWxzbyBzZXJ2ZSBhcyBleGNlbGxlbnQgZXhhbXBsZSBvZiB3aGF0IHRoZXkgY2FuIGJlIHVzZWQgZm9yLgpAQCAtMTkzLDYgKzE5Myw2IEBACiAKIFR5cGVkIE1peGluIGltcGxlbWVudGF0aW9ucyBhcmUgbXVjaCBwcmVmZXJyZWQgaW4gZ2VuZXJhbCBidXNpbmVzcyBsb2dpYywgYXMgdGhleSB3aWxsIGJlIGZpcnN0LWNsYXNzIGNpdGl6ZW5zIG9mCiB0aGUgSURFIGFzIHdlbGwsIGZvciBuYXZpZ2F0aW9uLCBmaW5kIHVzYWdlLCByZWZhY3RvcmluZyBhbmQgbWFueSBvdGhlciBjb21tb24gdGFza3MuIFRoaXMgaXMgb25lIG9mIHRoZSBtYWluCi1hZHZhbnRhZ2VzIG9mIHRoZSBRaTRqIHdheSBvZiBkb2luZyBBT1AgY29tcGFyZWQgdG8gQXNwZWN0SiBldCBhbCwgd2hlcmUgIndlYXZpbmciIGlzIHNvbWV0aGluZyBib2x0ZWQgb250byBhbgorYWR2YW50YWdlcyBvZiB0aGUgWmVzdOKEoiB3YXkgb2YgZG9pbmcgQU9QIGNvbXBhcmVkIHRvIEFzcGVjdEogZXQgYWwsIHdoZXJlICJ3ZWF2aW5nIiBpcyBzb21ldGhpbmcgYm9sdGVkIG9udG8gYW4KIGFwcGxpY2F0aW9uJ3MgY2xhc3NlcyB2aWEgcmVndWxhciBleHByZXNzaW9ucyBhbmQga25vd24gbmFtaW5nIGNvbnZlbnRpb25zLCB3aGljaCBjYW4gY2hhbmdlIGluIGFuIGluc3RhbmNlIGJ5IGEKIGRldmVsb3BlciBiZWluZyB1bmF3YXJlIG9mIHdoaWNoIFBvaW50Q3V0cyBhcHBsaWVzIHRvIGhpcyBjb2RlLgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL2RvY3MvcHJvcGVydHkudHh0IGIvY29yZS9hcGkvc3JjL2RvY3MvcHJvcGVydHkudHh0CmluZGV4IGU2OWRlMjkuLmZjN2FhYzYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9kb2NzL3Byb3BlcnR5LnR4dAorKysgYi9jb3JlL2FwaS9zcmMvZG9jcy9wcm9wZXJ0eS50eHQKQEAgLTAsMCArMSwxOCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvZG9jcy9xdWVyeS50eHQgYi9jb3JlL2FwaS9zcmMvZG9jcy9xdWVyeS50eHQKaW5kZXggZTY5ZGUyOS4uZmM3YWFjNiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL2RvY3MvcXVlcnkudHh0CisrKyBiL2NvcmUvYXBpL3NyYy9kb2NzL3F1ZXJ5LnR4dApAQCAtMCwwICsxLDE4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9kb2NzL3JlZmVyZW5jZS9yZWYtYXBpLnR4dCBiL2NvcmUvYXBpL3NyYy9kb2NzL3JlZmVyZW5jZS9yZWYtYXBpLnR4dAppbmRleCA1MjQ1OGE1Li5lZWMxNmNlIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvZG9jcy9yZWZlcmVuY2UvcmVmLWFwaS50eHQKKysrIGIvY29yZS9hcGkvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1hcGkudHh0CkBAIC0xNCwxMCArMTQsMTAgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogW1tyZWYtY29yZS1hcGksIENvcmUgQVBJXV0KLT0gUWk0aiBDb3JlIEFQSSA9Cis9IFplc3TihKIgQ29yZSBBUEkgPQogCi1UaGUgUWk0aiBDb3JlIEFQSSBpcyBtYWluIEFQSSB0aGF0IFFpNGogZGV2ZWxvcGVycyBpbnRlcmFjdCB3aXRoLiBJbiBmYWN0LCBpZiB5b3UgbmVlZCB0byB1c2UgY2xhc3Nlcy9pbnRlcmZhY2VzCi1pbiB0aGUgUWk0aiBDb3JlIFNQSSBvciBRaTRqIENvcmUgUnVudGltZSwgdGhlbiBwbGVhc2UgY29udGFjdCB0aGUgUWk0aiBDb21tdW5pdHkgYW5kIGV4cGxhaW4geW91ciB1c2UtY2FzZS4KK1RoZSBaZXN04oSiIENvcmUgQVBJIGlzIG1haW4gQVBJIHRoYXQgWmVzdOKEoiBkZXZlbG9wZXJzIGludGVyYWN0IHdpdGguIEluIGZhY3QsIGlmIHlvdSBuZWVkIHRvIHVzZSBjbGFzc2VzL2ludGVyZmFjZXMKK2luIHRoZSBaZXN04oSiIENvcmUgU1BJIG9yIFplc3TihKIgQ29yZSBSdW50aW1lLCB0aGVuIHBsZWFzZSBjb250YWN0IHRoZSBaZXN04oSiIENvbW11bml0eSBhbmQgZXhwbGFpbiB5b3VyIHVzZS1jYXNlLgogCiBUaGUgQ29yZSBBUEkgaXMgc3RyaWN0bHkgbGF5ZXJlZCwgd2l0aCBubyBfc3BhZ2hldHRpXyBjcm9zcyBwYWNrYWdlcy4gVGhlIHBhY2thZ2UgbGlzdCBpcyBmYWlybHkgbG9uZywgYW5kCiB3ZSB3aWxsIGxvb2sgYXQgZWFjaCBvbmUgaW4gZGV0YWlsIGZ1cnRoZXIgZG93bi4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9kb2NzL3NlcnZpY2Vjb21wb3NpdGUudHh0IGIvY29yZS9hcGkvc3JjL2RvY3Mvc2VydmljZWNvbXBvc2l0ZS50eHQKaW5kZXggNGE4NzBkMS4uMDczNmQ5MCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL2RvY3Mvc2VydmljZWNvbXBvc2l0ZS50eHQKKysrIGIvY29yZS9hcGkvc3JjL2RvY3Mvc2VydmljZWNvbXBvc2l0ZS50eHQKQEAgLTE2LDcgKzE2LDcgQEAKIFtbY29yZS1hcGktc2VydmljZSxTZXJ2aWNlQ29tcG9zaXRlXV0KID0gU2VydmljZSBDb21wb3NpdGUgPQogQW55IHNlcnZpY2UgYWRkZWQsIHZpYSB0aGUgTW9kdWxlQXNzZW1ibHkuYWRkU2VydmljZXMoKSwgTW9kdWxlQXNzZW1ibHkuc2VydmljZXMoKSBhbmQgTW9kdWxlQXNzZW1ibHkuaW1wb3J0U2VydmljZXMoKQotbWV0aG9kcywgd2lsbCBoYXZlIHRoZSBTZXJ2aWNlQ29tcG9zaXRlIG1ldGEgdHlwZSBhZGRlZCB0byBpdC4gSW4gUWk0aiwgd2hlbiB3ZSBzcGVhayBvZiBfU2VydmljZXNfIHdlIG1lYW4gaW5zdGFuY2VzCittZXRob2RzLCB3aWxsIGhhdmUgdGhlIFNlcnZpY2VDb21wb3NpdGUgbWV0YSB0eXBlIGFkZGVkIHRvIGl0LiBJbiBaZXN0LCB3aGVuIHdlIHNwZWFrIG9mIF9TZXJ2aWNlc18gd2UgbWVhbiBpbnN0YW5jZXMKIG9mIF9TZXJ2aWNlQ29tcG9zaXRlXy4KIAogTW9zdCBwcm9ncmFtbWVycyBhcmUgZmFtaWxpYXIgd2l0aCB0aGUgdGVybSAiU2VydmljZSIsIGFuZCBhZnRlciB0aGUgZmFpbHVyZSBvZiBPYmplY3QgT3JpZW50ZWQgUHJvZ3JhbW1pbmcncyBwcm9taXNlCkBAIC0yNCw4ICsyNCw4IEBACiBkZWNvdXBsaW5nIGFuZCByZS11c2Ugd2FzIHRvIG1ha2UgdGhlIG9iamVjdHMgaW50byBkYXRhIGNvbnRhaW5lcnMgYW5kIGRlcGxveSBzZXJ2aWNlcyB0aGF0IGFjdGVkIHVwb24gdGhvc2UgZGF0YQogY29udGFpbmVycy4gVmVyeSBtdWNoIHdoYXQgZnVuY3Rpb25zIGRpZCBvbiBzdHJ1Y3RzIGJhY2sgaW4gdGhlIEMgYW5kIFBhc2NhbCBkYXlzLgogCi1RaTRqIHdpbGwgYnJpbmcgYSBsb3Qgb2YgdGhlIGJlaGF2aW9yIGJhY2sgdG8gdGhlIENvbXBvc2l0ZSBpdHNlbGYsIGJ1dCB3ZSBzdGlsbCBuZWVkIFNlcnZpY2VzIGZvciBjcm9zcy1jb21wb3NpdGUKLWZ1bmN0aW9uYWxpdHkuIFRoZSBRaTRqIFNlcnZpY2UgbW9kZWwgaXMgZmFpcmx5IHNpbXBsZSwgeWV0IHBvd2VyZnVsIGFuZCBmbGV4aWJsZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgbW9zdAorWmVzdOKEoiB3aWxsIGJyaW5nIGEgbG90IG9mIHRoZSBiZWhhdmlvciBiYWNrIHRvIHRoZSBDb21wb3NpdGUgaXRzZWxmLCBidXQgd2Ugc3RpbGwgbmVlZCBTZXJ2aWNlcyBmb3IgY3Jvc3MtY29tcG9zaXRlCitmdW5jdGlvbmFsaXR5LiBUaGUgWmVzdOKEoiBTZXJ2aWNlIG1vZGVsIGlzIGZhaXJseSBzaW1wbGUsIHlldCBwb3dlcmZ1bCBhbmQgZmxleGlibGUgZW5vdWdoIHRvIGFjY29tbW9kYXRlIG1vc3QKIHNlcnZpY2Utb3JpZW50ZWQgcGF0dGVybnMgYW5kIGFiaWxpdHkgdG8gaW50ZWdyYXRlIHdlbGwgd2l0aCBleHRlcm5hbCBzeXN0ZW1zIHdoZXRoZXIgdGhleSBhcmUgaW4tSlZNIG9yIHJlbW90ZSwKIHN1Y2ggYXMgU3ByaW5nLCBPU0dpLCBXUy0qLCBSZXN0IGFuZCBvdGhlcnMuCiAKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAqIEl0IGhhcyBhbiBvcHRpb25hbCBDb25maWd1cmF0aW9uLgogCiAKLV9TZXJ2aWNlc18gaW4gUWk0aiBhcmUgX3NpbmdsZXRvbnNfLCBvbmUgaW5zdGFuY2UgcGVyIGRlZmluaXRpb24uIFRoYXQgbWVhbnMgdGhhdCB0aGVyZSBtYXkgZXhpc3QgbXVsdGlwbGUgaW5zdGFuY2VzCitfU2VydmljZXNfIGluIFplc3TihKIgYXJlIF9zaW5nbGV0b25zXywgb25lIGluc3RhbmNlIHBlciBkZWZpbml0aW9uLiBUaGF0IG1lYW5zIHRoYXQgdGhlcmUgbWF5IGV4aXN0IG11bHRpcGxlIGluc3RhbmNlcwogb2YgdGhlIHNhbWUgc2VydmljZSB0eXBlLCBidXQgdGhleSBjYW4gbm90IGJlIGNyZWF0ZWQgb24gdGhlIGZseSBpbiBydW50aW1lLCBidXQgaGFzIHRvIGJlIGV4cGxpY2l0bHkgZGVmaW5lZCBkdXJpbmcKIDw8Y29yZS1ib290c3RyYXAtYXNzZW1ibHk+Pi4KIApAQCAtNDYsNyArNDYsNyBAQAogbmVlZCB0byBkZWNsYXJlL2NhbGwgdGhlIGluc3RhbnRpYXRlT25TdGFydHVwKCkgbWV0aG9kIG9uIHRoZSBfU2VydmljZURlc2NyaXB0b3JfIGR1cmluZyB0aGUgYm9vdHN0cmFwLgogCiA9PSBTZXJ2aWNlIENvbmZpZ3VyYXRpb24gPT0KLVRoZSBjb25maWd1cmF0aW9uIGZvciBhIHNlcnZpY2UgaXMgd2VsbCBzdXBwb3J0ZWQgaW4gUWk0ai4gU2VlIHRoZSA8PGNvcmUtYXBpLXNlcnZpY2UtY29uZmlndXJhdGlvbj4+IGNoYXB0ZXIgZm9yIGRldGFpbHMuCitUaGUgY29uZmlndXJhdGlvbiBmb3IgYSBzZXJ2aWNlIGlzIHdlbGwgc3VwcG9ydGVkIGluIFplc3QuIFNlZSB0aGUgPDxjb3JlLWFwaS1zZXJ2aWNlLWNvbmZpZ3VyYXRpb24+PiBjaGFwdGVyIGZvciBkZXRhaWxzLgogCiA9PSBTZXJ2aWNlIEFjdGl2YXRpb24gPT0KIFNlcnZpY2VzIGFyZSBhY3RpdmF0ZWQgKGluamVjdGVkIGFuZCBpbnN0YW50aWF0ZWQpIGVpdGhlciBvbiBhcHBsaWNhdGlvbiBzdGFydC11cCwgb3IgdXBvbiBmaXJzdCB1c2UuIFRoaXMgaXMgY29udHJvbGxlZApkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL2RvY3Mvc3RydWN0dXJlLnR4dCBiL2NvcmUvYXBpL3NyYy9kb2NzL3N0cnVjdHVyZS50eHQKaW5kZXggMWFiNzY4Ny4uYWM0ZDgxZSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL2RvY3Mvc3RydWN0dXJlLnR4dAorKysgYi9jb3JlL2FwaS9zcmMvZG9jcy9zdHJ1Y3R1cmUudHh0CkBAIC0xNSwxNyArMTUsMTcgQEAKIAogW1tjb3JlLWFwaS1zdHJ1Y3R1cmUsU3RydWN0dXJlXV0KID0gU3RydWN0dXJlID0KLVFpNGogcHJvbW90ZXMgYSBjb252ZW50aW9uYWwgdmlldyBvZiBhcHBsaWNhdGlvbiBzdHJ1Y3R1cmUsIHRoYXQgY29tcHV0ZXIgc2NpZW5jZSBoYXMgYmVlbiB1c2luZyBmb3IgZGVjYWRlcy4KK1plc3TihKIgcHJvbW90ZXMgYSBjb252ZW50aW9uYWwgdmlldyBvZiBhcHBsaWNhdGlvbiBzdHJ1Y3R1cmUsIHRoYXQgY29tcHV0ZXIgc2NpZW5jZSBoYXMgYmVlbiB1c2luZyBmb3IgZGVjYWRlcy4KIAogVGhlIGRlZmluaXRpb24gaXMgYXMgZm9sbG93czsKIAotICAgICogT25lIEFwcGxpY2F0aW9uIHBlciBRaTRqIHJ1bnRpbWUgaW5zdGFuY2UuCisgICAgKiBPbmUgQXBwbGljYXRpb24gcGVyIFplc3TihKIgcnVudGltZSBpbnN0YW5jZS4KICAgICAqIE9uZSBvciBtb3JlIExheWVycyBwZXIgQXBwbGljYXRpb24uCiAgICAgKiBaZXJvLCBvbmUgb3IgbW9yZSBNb2R1bGVzIHBlciBMYXllci4KICAgICAqIFplcm8sIG9uZSBvciBtb3JlIEFzc2VtYmxpZXMgcGVyIE1vZHVsZS4KIAogVGhlIHByaW5jaXBsZSBvZiB0aGlzIFN0cnVjdHVyZSBpcyB0byBhc3Npc3QgdGhlIHByb2dyYW1tZXIgdG8gY3JlYXRlIHdlbGwgbW9kdWxhcml6ZWQgYXBwbGljYXRpb25zLCB0aGF0IGFyZSBlYXNpbHkKLWV4dGVuZGVkIGFuZCBtYWludGFpbmVkLiBRaTRqIHdpbGwgcmVzdHJpY3QgYWNjZXNzIGJldHdlZW4gTW9kdWxlcywgc28gdGhhdCBjb2RlIGNhbiBvbmx5IHJlYWNoIENvbXBvc2l0ZXMgYW5kIE9iamVjdHMKK2V4dGVuZGVkIGFuZCBtYWludGFpbmVkLiBaZXN04oSiIHdpbGwgcmVzdHJpY3QgYWNjZXNzIGJldHdlZW4gTW9kdWxlcywgc28gdGhhdCBjb2RlIGNhbiBvbmx5IHJlYWNoIENvbXBvc2l0ZXMgYW5kIE9iamVjdHMKIGluIE1vZHVsZXMgKGluY2x1ZGluZyBpdHNlbGYpIG9mIHRoZSBzYW1lIG9yIGxvd2VyIExheWVycy4KIAogRWFjaCBMYXllciBoYXMgdG8gYmUgZGVjbGFyZWQgd2hpY2ggbG93ZXIgTGF5ZXIocykgaXQgdXNlcywgYW5kIGl0IGlzIG5vdCBhbGxvd2VkIHRoYXQgYSBsb3dlciBMYXllciB1c2VzIGEgaGlnaGVyCkBAIC0zMywyMCArMzMsMjAgQEAKIAogW1tjb3JlLWFwaS1hcHBsaWNhdGlvbixBcHBsaWNhdGlvbl1dCiA9IEFwcGxpY2F0aW9uID0KLUV2ZXJ5IFFpNGogcnVudGltZSBoYXMgX29uZSBhbmQgb25seSBvbmVfIEFwcGxpY2F0aW9uIGluIGl0LiBJdCBpcyBwb3NzaWJsZSB0byBydW4gbXVsdGlwbGUgUWk0aiBydW50aW1lcyBpbiB0aGUgc2FtZQotSlZNLCBhbmQgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBlbWJlZCBhIFFpNGogcnVudGltZSB3aXRoaW4gYSBRaTRqIEFwcGxpY2F0aW9uLCBidXQgdGhlcmUgY2FuIG9ubHkgYmUgb25lIEFwcGxpY2F0aW9uCi1pbiBhIFFpNGogcnVudGltZS4KK0V2ZXJ5IFplc3TihKIgcnVudGltZSBoYXMgX29uZSBhbmQgb25seSBvbmVfIEFwcGxpY2F0aW9uIGluIGl0LiBJdCBpcyBwb3NzaWJsZSB0byBydW4gbXVsdGlwbGUgWmVzdOKEoiBydW50aW1lcyBpbiB0aGUgc2FtZQorSlZNLCBhbmQgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBlbWJlZCBhIFplc3TihKIgcnVudGltZSB3aXRoaW4gYSBaZXN04oSiIEFwcGxpY2F0aW9uLCBidXQgdGhlcmUgY2FuIG9ubHkgYmUgb25lIEFwcGxpY2F0aW9uCitpbiBhIFplc3TihKIgcnVudGltZS4KIAogQW4gQXBwbGljYXRpb24gaXMgdGhlbiBicm9rZW4gaW50byBsYXllcnMgYW5kIG1vZHVsZXMgYXJlIHBsYWNlZCB3aXRoaW4gdGhvc2UgbGF5ZXJzLiBDb21wb3NpdGVzIGFyZSBwbGFjZWQgd2l0aGluCi1tb2R1bGVzLiBUaGlzIGZvcm1zIHRoZSBBcHBsaWNhdGlvbiBTdHJ1Y3R1cmUgYW5kIGlzIGVuZm9yY2VkIGJ5IHRoZSBRaTRqIHJ1bnRpbWUuCittb2R1bGVzLiBUaGlzIGZvcm1zIHRoZSBBcHBsaWNhdGlvbiBTdHJ1Y3R1cmUgYW5kIGlzIGVuZm9yY2VkIGJ5IHRoZSBaZXN04oSiIHJ1bnRpbWUuCiAKIFtbY29yZS1hcGktbGF5ZXIsTGF5ZXJdXQogPSBMYXllciA9Ci1BIFFpNGogQXBwbGljYXRpb24gbXVzdCBjb25zaXN0IG9mIGF0IGxlYXN0IG9uZSBsYXllci4gTW9yZSBsYXllcnMgYXJlIGNvbW1vbiwgb2Z0ZW4gZGl2aWRpbmcgdGhlIGFwcGxpY2F0aW9uIGFsb25nIHRoZQorQSBaZXN04oSiIEFwcGxpY2F0aW9uIG11c3QgY29uc2lzdCBvZiBhdCBsZWFzdCBvbmUgbGF5ZXIuIE1vcmUgbGF5ZXJzIGFyZSBjb21tb24sIG9mdGVuIGRpdmlkaW5nIHRoZSBhcHBsaWNhdGlvbiBhbG9uZyB0aGUKIGNvbW1vbiBhcmNoaXRlY3R1cmFsIGRpYWdyYW1zIHVzZWQgb24gd2hpdGVib2FyZHMsIHBlcmhhcHMgd2l0aCBhIFVJIGxheWVyIGF0IHRoZSB0b3AsIGZvbGxvd2VkIGJ5IGEgc2VydmljZSBvciBhcHBsaWNhdGlvbgogbGF5ZXIsIHRoZW4gd2l0aCBhIGRvbWFpbiBsYXllciBhbmQgZmluYWxseSBzb21lIHBlcnNpc3RlbmNlIGxheWVyIGF0IHRoZSBib3R0b20uCiAKLVFpNGogZW5mb3JjZXMgdGhpcyBsYXllcmluZyBieSByZXF1aXJpbmcgdGhlIDw8Y29yZS1ib290c3RyYXAtYXNzZW1ibHk+PiB0byBkZWNsYXJlIHdoaWNoIGxheWVyIHVzZXMgd2hpY2ggb3RoZXIgbGF5ZXIuIEFuZAorWmVzdOKEoiBlbmZvcmNlcyB0aGlzIGxheWVyaW5nIGJ5IHJlcXVpcmluZyB0aGUgPDxjb3JlLWJvb3RzdHJhcC1hc3NlbWJseT4+IHRvIGRlY2xhcmUgd2hpY2ggbGF5ZXIgdXNlcyB3aGljaCBvdGhlciBsYXllci4gQW5kCiA8PGNvcmUtYXBpLXZpc2liaWxpdHk+PiBydWxlcyBkZWZpbmUgdGhhdCBsYXllcnMgYmVsb3cgY2FuIG5vdCBsb2NhdGUgY29tcG9zaXRlcyBpbiBsYXllcnMgYWJvdmUuIEFsc28sIGRlZmluaW5nIHRoYXQKICJMYXllcjEgdXNlcyBMYXllcjIiIGFuZCAiTGF5ZXIyIHVzZXMgTGF5ZXIzIiBkb2VzIE5PVCBpbXBseSB0aGF0IExheWVyMSBoYXMgPDxjb3JlLWFwaS12aXNpYmlsaXR5Pj4gdG8gTGF5ZXIzLiBJZiB0aGF0CiBpcyB3YW50ZWQsIHRoZW4gaXQgbXVzdCBiZSBkZWNsYXJlZCBleHBsaWNpdGx5LgpAQCAtNjAsNyArNjAsNyBAQAogICAgICogQ29tcG9zaXRlcyBmcm9tIE1vZHVsZXMgaW4gdGhlIHNhbWUgTGF5ZXIsIHdpdGggVmlzaWJpbGl0eSBzZXQgdG8gVmlzaWJpbGl0eS5sYXllcgogICAgICogQ29tcG9zaXRlcyBmcm9tIE1vZHVsZXMgaW4gTGF5ZXJzIGJlbG93LCB3aXRoIFZpc2liaWxpdHkgc2V0IHRvIFZpc2liaWxpdHkuYXBwbGljYXRpb24KIAotTW9kdWxlcyBjb250YWlucyBhIGxvdCBvZiB0aGUgUWk0aiBpbmZyYXN0cnVjdHVyZSwgd2hpY2ggYXJlIHRoZSBlbmZvcmNlcnMgb2YgdGhlc2Ugd2lzZSBtb2R1bGFyaXphdGlvbiBwcmluY2lwbGVzLgorTW9kdWxlcyBjb250YWlucyBhIGxvdCBvZiB0aGUgWmVzdOKEoiBpbmZyYXN0cnVjdHVyZSwgd2hpY2ggYXJlIHRoZSBlbmZvcmNlcnMgb2YgdGhlc2Ugd2lzZSBtb2R1bGFyaXphdGlvbiBwcmluY2lwbGVzLgogCiBJdCBpcyBub3QgcG9zc2libGUgdG8gbW9kaWZ5IHRoZSBNb2R1bGVzLCB0aGVpciByZXNvbHV0aW9uIG5vciBiaW5kaW5nIGluIGFueSB3YXkgYWZ0ZXIgdGhlIGFwcGxpY2F0aW9uIHN0YXJ0cy4KIApkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL2RvY3MvdHlwZS1sb29rdXAudHh0IGIvY29yZS9hcGkvc3JjL2RvY3MvdHlwZS1sb29rdXAudHh0CmluZGV4IDJlODQxNjcuLjIzNDBmYWIgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9kb2NzL3R5cGUtbG9va3VwLnR4dAorKysgYi9jb3JlL2FwaS9zcmMvZG9jcy90eXBlLWxvb2t1cC50eHQKQEAgLTEsMTAgKzEsMjkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2NvcmUtYXBpLXR5cGUtbG9va3VwLENvbXBvc2l0ZSBUeXBlcyBMb29rdXBdXQogPSBDb21wb3NpdGUgVHlwZXMgTG9va3VwID0KIAogQ29tcG9zaXRlIFR5cGVzIExvb2t1cCBjYW4gb2NjdXJzIHdoZW4geW91IGV4cGxpY2l0ZWx5IGxvb2t1cCBmb3IgYSBDb21wb3NpdGUgYnkgVHlwZQogKGV4LiBTZXJ2aWNlRmluZGVyLmZpbmRTZXJ2aWNlKC4uKSBtZXRob2RzKSwgd2hlbiB5b3UgYXNrIGZvciBhbiBpbmplY3Rpb24gb3Igd2hlbiB5b3UgY3JlYXRlIGEgbmV3IGNvbXBvc2l0ZSBpbnN0YW5jZS4KIAotQWxsIHRoZXNlcyB0eXBlIGxvb2t1cCBzdGFydCBmcm9tIGEgTW9kdWxlLCBhcmUgbGF6eSwgY2FjaGVkIGFuZCBvYmV5IHRoZSBRaTRqIFZpc2liaWxpdHkgcnVsZXMuIFR5cGUgTG9va3VwIHdvcmtzCitBbGwgdGhlc2VzIHR5cGUgbG9va3VwIHN0YXJ0IGZyb20gYSBNb2R1bGUsIGFyZSBsYXp5LCBjYWNoZWQgYW5kIG9iZXkgdGhlIFplc3TihKIgVmlzaWJpbGl0eSBydWxlcy4gVHlwZSBMb29rdXAgd29ya3MKIGVxdWFsbHkgYWNjcm9zcyBDb21wb3NpdGUgVHlwZXMgd2l0aCBzb21lIHN1YnRsZSBkaWZmZXJlbmNlcyB3aGVuIGl0IGNvbWVzIHRvIFNlcnZpY2VzIGFuZCBFbnRpdGllcy4KIAogCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvZG9jcy91bml0b2Z3b3JrLnR4dCBiL2NvcmUvYXBpL3NyYy9kb2NzL3VuaXRvZndvcmsudHh0CmluZGV4IDA0ZTRmMjYuLmQ4YWQzYmMgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9kb2NzL3VuaXRvZndvcmsudHh0CisrKyBiL2NvcmUvYXBpL3NyYy9kb2NzL3VuaXRvZndvcmsudHh0CkBAIC0xOSw3ICsxOSw3IEBACiB0byBvdGhlciB0aHJlYWRzIHVudGlsIHRoZSBVbml0T2ZXb3JrIGlzIGNvbXBsZXRlZC4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkaXNjYXJkIHRoZXNlIG9wZXJhdGlvbnMsIGFzIGlmIHRoZXkgd2VyZQogbmV2ZXIgZXhlY3V0ZWQuCiAKLU5PVEU6IFVuaXRPZldvcmsgaGFzIG1hbnkgc2ltaWxhcml0aWVzIHdpdGggdGhlIFRyYW5zYWN0aW9uIGNvbmNlcHQgdXNlZCB3aXRoIFJEQk1TZXMuIEJ1dCBzaW5jZSBRaTRqIGludHJvZHVjZWQgc2V2ZXJhbCBkZXZpYXRpb25zIHRvIHRoZSBjb21tb24gZGVmaW5pdGlvbnMgb2YgVHJhbnNhY3Rpb25zLCB3ZSBjaG9zZSB0byB1c2UgYSBkaWZmZXJlbnQgdGVybS4KK05PVEU6IFVuaXRPZldvcmsgaGFzIG1hbnkgc2ltaWxhcml0aWVzIHdpdGggdGhlIFRyYW5zYWN0aW9uIGNvbmNlcHQgdXNlZCB3aXRoIFJEQk1TZXMuIEJ1dCBzaW5jZSBaZXN04oSiIGludHJvZHVjZWQgc2V2ZXJhbCBkZXZpYXRpb25zIHRvIHRoZSBjb21tb24gZGVmaW5pdGlvbnMgb2YgVHJhbnNhY3Rpb25zLCB3ZSBjaG9zZSB0byB1c2UgYSBkaWZmZXJlbnQgdGVybS4KIAogVGhlcmUgYXJlIHNldmVyYWwga2V5IGNoYXJhY3RlcmlzdGljcyBvZiBVbml0T2ZXb3JrOwogCkBAIC00NCw1ICs0NCw1IEBACiA8PGNvcmUtYXBpLWxheWVyPj4pCiAKIFNpbmNlIGl0IGlzIHZlcnkgY29tbW9uIHRvIGhhdmUgYWxsLCBvciBuZWFybHkgYWxsLCBtZXRob2RzIGluIHRoZSBfdHJhbnNhY3Rpb24gYm91bmRhcnlfIHRvIGhhbmRsZSB0aGUgY3JlYXRpb24gYW5kCi1jb21wbGV0aW9uLCBwb3NzaWJseSB3aXRoIHJldHJ5LCBpbiB0aGUgc2FtZSBjbGFzcywgbW9kdWxlIG9yIGV2ZW4gbGF5ZXIsIFFpNGogcHJvdmlkZXMgYW5ub3RhdGlvbnMgdG8gZWFzaWx5IGRlY2xhcmUKK2NvbXBsZXRpb24sIHBvc3NpYmx5IHdpdGggcmV0cnksIGluIHRoZSBzYW1lIGNsYXNzLCBtb2R1bGUgb3IgZXZlbiBsYXllciwgWmVzdOKEoiBwcm92aWRlcyBhbm5vdGF0aW9ucyB0byBlYXNpbHkgZGVjbGFyZQogVW5pdE9mV29yayBjb25jZXJuOiBAVW5pdE9mV29ya1Byb3BhZ2F0aW9uLCBAVW5pdE9mV29ya0Rpc2NhcmRPbiBhbmQgQFVuaXRPZldvcmtSZXRyeQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL2RvY3MvdmFsdWVjb21wb3NpdGUudHh0IGIvY29yZS9hcGkvc3JjL2RvY3MvdmFsdWVjb21wb3NpdGUudHh0CmluZGV4IGNjNzE2NmUuLjdmMDZlYzcgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9kb2NzL3ZhbHVlY29tcG9zaXRlLnR4dAorKysgYi9jb3JlL2FwaS9zcmMvZG9jcy92YWx1ZWNvbXBvc2l0ZS50eHQKQEAgLTIxLDcgKzIxLDcgQEAKIHRoZSB2YWx1ZSBleGlzdHMgb3IgaXQgZG9lc24ndCwgbm8gbmVlZCBmb3Igc3luY2hyb25pemF0aW9uLiBWYWx1ZXMgYXJlIHR5cGljYWxseSB2ZXJ5IGVhc3kgdG8gdGVzdCBhbmQgdmVyeSByb2J1c3QgdG8KIHJlZmFjdG9yaW5nLgogCi1RaTRqIGRlZmluZXMgdmFsdWVzIGFzIGEgcHJpbWFyeSBtZXRhIHR5cGUgdGhyb3VnaCB0aGUgVmFsdWVDb21wb3NpdGUsIGFzIHdlIHRoaW5rIHRoZSBiZW5lZml0cyBvZiB2YWx1ZXMgYXJlIGdyZWF0LgorWmVzdOKEoiBkZWZpbmVzIHZhbHVlcyBhcyBhIHByaW1hcnkgbWV0YSB0eXBlIHRocm91Z2ggdGhlIFZhbHVlQ29tcG9zaXRlLCBhcyB3ZSB0aGluayB0aGUgYmVuZWZpdHMgb2YgdmFsdWVzIGFyZSBncmVhdC4KIFRoZSBWYWx1ZUNvbXBvc2l0ZSBpcyB2ZXJ5IGxpZ2h0LXdlaWdodCBjb21wYXJlZCB0byB0aGUgRW50aXR5Q29tcG9zaXRlLCBhbmQgaXRzIHZhbHVlIGNhbiBzdGlsbCBiZSBwZXJzaXN0ZWQgYXMgcGFydAogb2YgYW4gRW50aXR5Q29tcG9zaXRlIHZpYSBhIFByb3BlcnR5LgogCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9RaTRqLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9RaTRqLmphdmEKaW5kZXggMzE3MTUzYy4uY2ZkOGE4OSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvUWk0ai5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL1FpNGouamF2YQpAQCAtMjUsNiArMjUsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuTW9kZWxEZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50RGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5JZGVudGl0eTsKIGltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5RGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlRGVzY3JpcHRvcjsKQEAgLTMzLDcgKzM0LDcgQEAKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRpb24gb2YgdGhlIFFpNGogQVBJLgorICogRW5jYXBzdWxhdGlvbiBvZiB0aGUgWmVzdCBBUEkuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUWk0agogewpAQCAtNDIsOCArNDMsOSBAQAogICAgICAqIHRoZW4gdGhhdCByZWZlcmVuY2UgbXVzdCBiZSBkZXJlZmVyZW5jZWQgdXNpbmcgdGhpcyBtZXRob2QKICAgICAgKiBiZWZvcmUgaGFuZGluZyBpdCBvdXQgZm9yIG90aGVycyB0byB1c2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gPFQ+IFBhcmFtZXRlcml6ZWQgdHlwZSBvZiB0aGUgQ29tcG9zaXRlCisgICAgICogQHBhcmFtIDxUPiAgICAgICBQYXJhbWV0ZXJpemVkIHR5cGUgb2YgdGhlIENvbXBvc2l0ZQogICAgICAqIEBwYXJhbSBjb21wb3NpdGUgaW5zdGFuY2UgcmVmZXJlbmNlIGluamVjdGVkIGluIE1vZGlmaWVkIHVzaW5nIEBUaGlzCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSBkZXJlZmVyZW5jZWQgQ29tcG9zaXRlCiAgICAgICovCiAgICAgPFQ+IFQgZGVyZWZlcmVuY2UoIFQgY29tcG9zaXRlICk7CkBAIC01Myw2ICs1NSw3IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gY29tcG9zaXRlT3JVb3cgVGhlIENvbXBvc2l0ZSAoU2VydmljZSwgVmFsdWUsIEVudGl0eSBvciBUcmFuc2llbnQpIG9yIFVuaXRPZldvcmsgdG8gbG9va3VwIHRoZSBNb2R1bGUgaXQKICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgYmVsb25ncyB0by4KKyAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIE1vZHVsZSBpbnN0YW5jZSB3aGVyZSB0aGUgQ29tcG9zaXRlIG9yIFVuaXRPZldvcmsgYmVsb25ncyB0by4KICAgICAgKi8KICAgICBNb2R1bGUgbW9kdWxlT2YoIE9iamVjdCBjb21wb3NpdGVPclVvdyApOwpAQCAtNjIsNiArNjUsNyBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNvbXBvc2l0ZU9yU2VydmljZVJlZmVyZW5jZSBUaGUgQ29tcG9zaXRlIChTZXJ2aWNlLCBWYWx1ZSwgRW50aXR5IG9yIFRyYW5zaWVudCkgZm9yIHdoaWNoIHRvIGxvb2t1cCB0aGUKICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsRGVzY3JpcHRvcgorICAgICAqCiAgICAgICogQHJldHVybiBUaGUgTW9kZWxEZXNjcmlwdG9yIG9mIHRoZSBDb21wb3NpdGUKICAgICAgKi8KICAgICBNb2RlbERlc2NyaXB0b3IgbW9kZWxEZXNjcmlwdG9yRm9yKCBPYmplY3QgY29tcG9zaXRlT3JTZXJ2aWNlUmVmZXJlbmNlICk7CkBAIC03MSw2ICs3NSw3IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gY29tcG9zaXRlT3JTZXJ2aWNlUmVmZXJlbmNlIFRoZSBDb21wb3NpdGUgKFNlcnZpY2UsIFZhbHVlLCBFbnRpdHkgb3IgVHJhbnNpZW50KSBmb3Igd2hpY2ggdG8gbG9va3VwIHRoZQogICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlRGVzY3JpcHRvcgorICAgICAqCiAgICAgICogQHJldHVybiBUaGUgQ29tcG9zaXRlRGVzY3JpcHRvciBvZiB0aGUgQ29tcG9zaXRlCiAgICAgICovCiAgICAgQ29tcG9zaXRlRGVzY3JpcHRvciBjb21wb3NpdGVEZXNjcmlwdG9yRm9yKCBPYmplY3QgY29tcG9zaXRlT3JTZXJ2aWNlUmVmZXJlbmNlICk7CkBAIC03OSw2ICs4NCw3IEBACiAgICAgICogUmV0dXJucyB0aGUgVHJhbnNpZW50RGVzY3JpcHRvciBvZiB0aGUgVHJhbnNpZW50Q29tcG9zaXRlLgogICAgICAqCiAgICAgICogQHBhcmFtIHRyYW5zc2llbnQgVGhlIFRyYW5zaWVudENvbXBvc2l0ZSBmb3Igd2hpY2ggdG8gbG9va3VwIHRoZSBUcmFuc2llbnREZXNjcmlwdG9yCisgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBUcmFuc2llbnREZXNjcmlwdG9yIG9mIHRoZSBUcmFuc2llbnRDb21wb3NpdGUKICAgICAgKi8KICAgICBUcmFuc2llbnREZXNjcmlwdG9yIHRyYW5zaWVudERlc2NyaXB0b3JGb3IoIE9iamVjdCB0cmFuc3NpZW50ICk7CkBAIC04Nyw2ICs5Myw3IEBACiAgICAgICogUmV0dXJucyB0aGUgRW50aXR5RGVzY3JpcHRvciBvZiB0aGUgRW50aXR5Q29tcG9zaXRlLgogICAgICAqCiAgICAgICogQHBhcmFtIGVudGl0eSBUaGUgRW50aXR5Q29tcG9zaXRlIGZvciB3aGljaCB0byBsb29rdXAgdGhlIEVudGl0eURlc2NyaXB0b3IKKyAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIEVudGl0eURlc2NyaXB0b3Igb2YgdGhlIEVudGl0eUNvbXBvc2l0ZQogICAgICAqLwogICAgIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvckZvciggT2JqZWN0IGVudGl0eSApOwpAQCAtOTUsNiArMTAyLDcgQEAKICAgICAgKiBSZXR1cm5zIHRoZSBWYWx1ZURlc2NyaXB0b3Igb2YgdGhlIFZhbHVlQ29tcG9zaXRlLgogICAgICAqCiAgICAgICogQHBhcmFtIHZhbHVlIFRoZSBWYWx1ZUNvbXBvc2l0ZSBmb3Igd2hpY2ggdG8gbG9va3VwIHRoZSBWYWx1ZURlc2NyaXB0b3IKKyAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIFZhbHVlRGVzY3JpcHRvciBvZiB0aGUgVmFsdWVDb21wb3NpdGUKICAgICAgKi8KICAgICBWYWx1ZURlc2NyaXB0b3IgdmFsdWVEZXNjcmlwdG9yRm9yKCBPYmplY3QgdmFsdWUgKTsKQEAgLTEwMyw2ICsxMTEsNyBAQAogICAgICAqIFJldHVybnMgdGhlIFNlcnZpY2VEZXNjcmlwdG9yIG9mIHRoZSBTZXJ2aWNlQ29tcG9zaXRlLgogICAgICAqCiAgICAgICogQHBhcmFtIHNlcnZpY2UgVGhlIFNlcnZpY2VDb21wb3NpdGUgZm9yIHdoaWNoIHRvIGxvb2t1cCB0aGUgU2VydmljZURlc2NyaXB0b3IKKyAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIFNlcnZpY2VEZXNjcmlwdG9yIG9mIHRoZSBTZXJ2aWNlQ29tcG9zaXRlCiAgICAgICovCiAgICAgU2VydmljZURlc2NyaXB0b3Igc2VydmljZURlc2NyaXB0b3JGb3IoIE9iamVjdCBzZXJ2aWNlICk7CkBAIC0xMTEsNiArMTIwLDcgQEAKICAgICAgKiBSZXR1cm5zIHRoZSBQcm9wZXJ0eURlc2NyaXB0b3Igb2YgdGhlIFByb3BlcnR5LgogICAgICAqCiAgICAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBQcm9wZXJ0eSBmb3Igd2hpY2ggdG8gbG9va3VwIHRoZSBQcm9wZXJ0eURlc2NyaXB0b3IKKyAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIFByb3BlcnR5RGVzY3JpcHRvciBvZiB0aGUgUHJvcGVydHkKICAgICAgKi8KICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHlEZXNjcmlwdG9yRm9yKCBQcm9wZXJ0eTw/PiBwcm9wZXJ0eSApOwpAQCAtMTE5LDYgKzEyOSw3IEBACiAgICAgICogUmV0dXJucyB0aGUgQXNzb2NpYXRpb25EZXNjcmlwdG9yIG9mIHRoZSBBc3NvY2lhdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBhc3NvY2lhdGlvbiBUaGUgQXNzb2NpYXRpb24gZm9yIHdoaWNoIHRvIGxvb2t1cCB0aGUgQXNzb2NpYXRpb25EZXNjcmlwdG9yCisgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBBc3NvY2lhdGlvbkRlc2NyaXB0b3Igb2YgdGhlIEFzc29jaWF0aW9uCiAgICAgICovCiAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIGFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggQWJzdHJhY3RBc3NvY2lhdGlvbiBhc3NvY2lhdGlvbiApOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYWN0aXZhdGlvbi9BY3RpdmF0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hY3RpdmF0aW9uL0FjdGl2YXRpb24uamF2YQppbmRleCA1YjQxM2RjLi4zMmYyNmU0IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hY3RpdmF0aW9uL0FjdGl2YXRpb24uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hY3RpdmF0aW9uL0FjdGl2YXRpb24uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogLyoqCiAgKiBJbnRlcmZhY2UgdXNlZCBieSBTdHJ1Y3R1cmUgZWxlbWVudHMgYW5kIFNlcnZpY2VzIHRoYXQgY2FuIGJlIGFjdGl2YXRlZCBhbmQgcGFzc2l2YXRlZC4KICAqIDxwPkFwcGxpY2F0aW9uIGFuZCBMYXllciBleHBvc2UgdGhpcyBpbnRlcmZhY2Ugc28geW91IGNhbiBhY3RpdmF0ZSBhbmQgcGFzc2l2YXRlIHRoZW0uPC9wPgotICogPHA+TW9kdWxlIGFuZCBTZXJ2aWNlQ29tcG9zaXRlIGFjdGl2YXRpb24vcGFzc2l2YXRpb24gaXMgaGFuZGxlZCBieSB0aGUgUWk0aiBydW50aW1lLjwvcD4KKyAqIDxwPk1vZHVsZSBhbmQgU2VydmljZUNvbXBvc2l0ZSBhY3RpdmF0aW9uL3Bhc3NpdmF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIFplc3QgcnVudGltZS48L3A+CiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgQWN0aXZhdGlvbgogewpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYWN0aXZhdGlvbi9BY3RpdmF0aW9uRXZlbnQuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2FjdGl2YXRpb24vQWN0aXZhdGlvbkV2ZW50LmphdmEKaW5kZXggZTNmZGY3MC4uMTg1MjI1MSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYWN0aXZhdGlvbi9BY3RpdmF0aW9uRXZlbnQuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hY3RpdmF0aW9uL0FjdGl2YXRpb25FdmVudC5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uOwogCiAvKioKLSAqIEFjdGl2YXRpb25FdmVudHMgYXJlIGZpcmVkIGR1cmluZyBhY3RpdmF0aW9uIGFuZCBwYXNzaXZhdGlvbiBvZiBpbnN0YW5jZXMgaW4gUWk0ai4KKyAqIEFjdGl2YXRpb25FdmVudHMgYXJlIGZpcmVkIGR1cmluZyBhY3RpdmF0aW9uIGFuZCBwYXNzaXZhdGlvbiBvZiBpbnN0YW5jZXMgaW4gWmVzdC4KICAqLwogcHVibGljIGZpbmFsIGNsYXNzIEFjdGl2YXRpb25FdmVudAogewpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYWN0aXZhdGlvbi9BcHBsaWNhdGlvblBhc3NpdmF0aW9uVGhyZWFkLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hY3RpdmF0aW9uL0FwcGxpY2F0aW9uUGFzc2l2YXRpb25UaHJlYWQuamF2YQppbmRleCBmYWNlYzRmLi42MmIxZjY3IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hY3RpdmF0aW9uL0FwcGxpY2F0aW9uUGFzc2l2YXRpb25UaHJlYWQuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hY3RpdmF0aW9uL0FwcGxpY2F0aW9uUGFzc2l2YXRpb25UaHJlYWQuamF2YQpAQCAtMTgsOCArMTgsOSBAQAogcGFja2FnZSBvcmcucWk0ai5hcGkuYWN0aXZhdGlvbjsKIAogaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb247Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKIAogLyoqCiAgKiBBcHBsaWNhdGlvbiBQYXNzaXZhdGlvbiBUaHJlYWQgdG8gdXNlIGFzIGEgU2h1dGRvd24gSG9vay4KQEAgLTkyLDcgKzkzLDcgQEAKICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IGFwcGxpY2F0aW9uLm5hbWUoKSArICIgIiArIGV4LmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgICAgICBpZiggbG9nZ2VyICE9IG51bGwgKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCBtZXNzYWdlLCBleCApOworICAgICAgICAgICAgICAgICAgICBsb2dnZXIubG9nKCBMZXZlbC5TRVZFUkUsIG1lc3NhZ2UsIGV4ICk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYoIG91dHB1dCAhPSBudWxsICkKICAgICAgICAgICAgICAgICB7CkBAIC0xMDEsOCArMTAyLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCBtZXNzYWdlICk7Ci0gICAgICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSggU3lzdGVtLmVyciApOworICAgICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2FjdGl2YXRpb24vcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYWN0aXZhdGlvbi9wYWNrYWdlLmh0bWwKaW5kZXggZmMwYzFjNS4uNDdiMzMzYSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYWN0aXZhdGlvbi9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYWN0aXZhdGlvbi9wYWNrYWdlLmh0bWwKQEAgLTEsOCArMSwyNCBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkFjdGl2YXRpb24gQVBJLjwvaDI+CiAgICAgICAgIDxwPgotICAgICAgICAgICAgVGhlIEFjdGl2YXRpb24gQVBJIHBhY2thZ2UgY29udGFpbnMgdHlwZXMgdXNlZCBieSBjbGllbnQgY29kZSB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgUWk0aiBSdW50aW1lIGFjdGl2YXRpb24KKyAgICAgICAgICAgIFRoZSBBY3RpdmF0aW9uIEFQSSBwYWNrYWdlIGNvbnRhaW5zIHR5cGVzIHVzZWQgYnkgY2xpZW50IGNvZGUgdG8gaW50ZWdyYXRlIHdpdGggdGhlIFplc3TihKIgUnVudGltZSBhY3RpdmF0aW9uCiAgICAgICAgICAgICBtZWNoYW5pc20uIEluIGFzc2VtYmx5LCBjbGllbnQgY29kZSBjYW4gZWFzaWx5IGxpc3RlbiB0byBTdHJ1Y3R1cmUgKEFwcGxpY2F0aW9uLCBMYXllcnMgYW5kIE1vZHVsZXMpIGFuZAogICAgICAgICAgICAgU2VydmljZXMgYWN0aXZhdGlvbiBldmVudHMsIG9yLCBkZWNsYXJlIFN0cnVjdHVyZSBhbmQgU2VydmljZSBBY3RpdmF0b3JzLgogICAgICAgICA8L3A+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYXNzb2NpYXRpb24vQXNzb2NpYXRpb24uamF2YQppbmRleCBmMjYyYThjLi5hY2Q0MDZmIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL0Fzc29jaWF0aW9uLmphdmEKQEAgLTE0LDYgKzE0LDggQEAKIAogcGFja2FnZSBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb247CiAKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKKwogLyoqCiAgKiBBc3NvY2lhdGlvbiB0byBhIHNpbmdsZSBFbnRpdHlDb21wb3NpdGUuCiAgKi8KQEAgLTM2LDQgKzM4LDkgQEAKICAgICAgKi8KICAgICB2b2lkIHNldCggVCBhc3NvY2lhdGVkICkKICAgICAgICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uOworCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgdGhlIHJlZmVyZW5jZSBvZiB0aGUgYXNzb2NpYXRlZCBlbnRpdHkuCisgICAgICovCisgICAgRW50aXR5UmVmZXJlbmNlIHJlZmVyZW5jZSgpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYXNzb2NpYXRpb24vQXNzb2NpYXRpb25XcmFwcGVyLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbldyYXBwZXIuamF2YQppbmRleCA0ZTkwN2RlLi42ODc3N2IzIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbldyYXBwZXIuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbldyYXBwZXIuamF2YQpAQCAtMSw4ICsxLDI4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb247CiAKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKKwogLyoqCiAgKiBJZiB5b3Ugd2FudCB0byBjYXRjaCBnZXR0aW5nIGFuZCBzZXR0aW5nIGFzc29jaWF0aW9uLCB0aGVuIGNyZWF0ZSBhIEdlbmVyaWNDb25jZXJuCi0gKiB0aGF0IHdyYXBzIHRoZSBRaTRqLXN1cHBsaWVkIEFzc29jaWF0aW9uIGluc3RhbmNlIHdpdGggQXNzb2NpYXRpb25XcmFwcGVycy4gT3ZlcnJpZGUKKyAqIHRoYXQgd3JhcHMgdGhlIFplc3Qtc3VwcGxpZWQgQXNzb2NpYXRpb24gaW5zdGFuY2Ugd2l0aCBBc3NvY2lhdGlvbldyYXBwZXJzLiBPdmVycmlkZQogICogZ2V0KCkgYW5kL29yIHNldCgpIHRvIHBlcmZvcm0geW91ciBjdXN0b20gY29kZS4KICAqLwogcHVibGljIGNsYXNzIEFzc29jaWF0aW9uV3JhcHBlcgpAQCAtMzQsNiArNTQsMTIgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIHJlZmVyZW5jZSgpCisgICAgeworICAgICAgICByZXR1cm4gbmV4dC5yZWZlcmVuY2UoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXh0Lmhhc2hDb2RlKCk7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9NYW55QXNzb2NpYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL01hbnlBc3NvY2lhdGlvbi5qYXZhCmluZGV4IDcwN2Q1M2EuLjM3ZDcyMTEgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL01hbnlBc3NvY2lhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL01hbnlBc3NvY2lhdGlvbi5qYXZhCkBAIC0xNiwxMiArMTYsMTcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CiAKIC8qKgogICogQXNzb2NpYXRpb24gdG8gYSBjb2xsZWN0aW9uIG9mIGVudGl0aWVzLgogICovCiBwdWJsaWMgaW50ZXJmYWNlIE1hbnlBc3NvY2lhdGlvbjxUPiBleHRlbmRzIEl0ZXJhYmxlPFQ+LCBBYnN0cmFjdEFzc29jaWF0aW9uCiB7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMgaW4gdGhpcyBhc3NvY2lhdGlvbi4KKyAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyBpbiB0aGlzIGFzc29jaWF0aW9uLgorICAgICAqLwogICAgIGludCBjb3VudCgpOwogCiAgICAgYm9vbGVhbiBjb250YWlucyggVCBlbnRpdHkgKTsKQEAgLTM3LDQgKzQyLDEwIEBACiAgICAgTGlzdDxUPiB0b0xpc3QoKTsKIAogICAgIFNldDxUPiB0b1NldCgpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiB1bm1vZGlmaWFibGUgSXRlcmFibGUgb2YgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGFzc29jaWF0ZWQgZW50aXRpZXMuCisgICAgICogQHJldHVybiB0aGUgcmVmZXJlbmNlcyB0byB0aGUgYXNzb2NpYXRlZCBlbnRpdGllcy4KKyAgICAgKi8KKyAgICBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+IHJlZmVyZW5jZXMoKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL01hbnlBc3NvY2lhdGlvbldyYXBwZXIuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL01hbnlBc3NvY2lhdGlvbldyYXBwZXIuamF2YQppbmRleCA3NDhhZjgzLi5hZWU3ODA0IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9NYW55QXNzb2NpYXRpb25XcmFwcGVyLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYXNzb2NpYXRpb24vTWFueUFzc29jaWF0aW9uV3JhcHBlci5qYXZhCkBAIC0xLDEyICsxLDMxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb247CiAKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKIAogLyoqCiAgKiBJZiB5b3Ugd2FudCB0byBjYXRjaCBjYWxscyB0byBNYW55QXNzb2NpYXRpb25zLCB0aGVuIGNyZWF0ZSBhIEdlbmVyaWNDb25jZXJuCi0gKiB0aGF0IHdyYXBzIHRoZSBRaTRqLXN1cHBsaWVkIE1hbnlBc3NvY2lhdGlvbiBpbnN0YW5jZSB3aXRoIE1hbnlBc3NvY2lhdGlvbldyYXBwZXJzLiBPdmVycmlkZQorICogdGhhdCB3cmFwcyB0aGUgWmVzdC1zdXBwbGllZCBNYW55QXNzb2NpYXRpb24gaW5zdGFuY2Ugd2l0aCBNYW55QXNzb2NpYXRpb25XcmFwcGVycy4gT3ZlcnJpZGUKICAqIG1ldGhvZHMgdG8gcGVyZm9ybSB5b3VyIGN1c3RvbSBjb2RlLgogICovCiBwdWJsaWMgY2xhc3MgTWFueUFzc29jaWF0aW9uV3JhcHBlcgpAQCAtNzMsNiArOTIsMTIgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSXRlcmFibGU8RW50aXR5UmVmZXJlbmNlPiByZWZlcmVuY2VzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXh0LnJlZmVyZW5jZXMoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgSXRlcmF0b3I8T2JqZWN0PiBpdGVyYXRvcigpCiAgICAgewogICAgICAgICByZXR1cm4gbmV4dC5pdGVyYXRvcigpOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYXNzb2NpYXRpb24vTmFtZWRBc3NvY2lhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYXNzb2NpYXRpb24vTmFtZWRBc3NvY2lhdGlvbi5qYXZhCmluZGV4IGU4YWJlMzIuLjYxYzljOWEgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL05hbWVkQXNzb2NpYXRpb24uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9OYW1lZEFzc29jaWF0aW9uLmphdmEKQEAgLTE5LDYgKzE5LDcgQEAKIHBhY2thZ2Ugb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uOwogCiBpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKIAogLyoqCiAgKiBBc3NvY2lhdGlvbiB0byBuYW1lZCBFbnRpdGllcy4KQEAgLTc1LDQgKzc2LDE2IEBACiAgICAgICovCiAgICAgTWFwPFN0cmluZywgVD4gdG9NYXAoKTsKIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gdW5tb2RpZmlhYmxlIEl0ZXJhYmxlIG9mIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBhc3NvY2lhdGVkIGVudGl0aWVzLgorICAgICAqIEByZXR1cm4gdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGFzc29jaWF0ZWQgZW50aXRpZXMuCisgICAgICovCisgICAgSXRlcmFibGU8RW50aXR5UmVmZXJlbmNlPiByZWZlcmVuY2VzKCk7CisKKyAgICAvKiogUmV0dXJucyB0aGUgRW50aXR5UmVmZXJlbmNlIGZvciB0aGUgQXNzb2NpYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhc3NvY2lhdGlvbiB0byByZXR1cm4gdGhlIEVudGl0eVJlZmVyZW5jZSBmb3IKKyAgICAgKiBAcmV0dXJuIFRoZSBFbnRpdHlSZWZlcmVuY2Ugb2YgdGhlIGFzc29jaWF0aW9uLgorICAgICAqLworICAgIEVudGl0eVJlZmVyZW5jZSByZWZlcmVuY2VPZiggU3RyaW5nIG5hbWUgKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL05hbWVkQXNzb2NpYXRpb25XcmFwcGVyLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9OYW1lZEFzc29jaWF0aW9uV3JhcHBlci5qYXZhCmluZGV4IDU4MTk0OGUuLjgxNDY0NGEgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL05hbWVkQXNzb2NpYXRpb25XcmFwcGVyLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYXNzb2NpYXRpb24vTmFtZWRBc3NvY2lhdGlvbldyYXBwZXIuamF2YQpAQCAtMjAsMTAgKzIwLDExIEBACiAKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKIAogLyoqCiAgKiBJZiB5b3Ugd2FudCB0byBjYXRjaCBjYWxscyB0byBOYW1lZEFzc29jaWF0aW9ucywgdGhlbiBjcmVhdGUgYSBHZW5lcmljQ29uY2VybgotICogdGhhdCB3cmFwcyB0aGUgUWk0ai1zdXBwbGllZCBOYW1lZEFzc29jaWF0aW9ucyBpbnN0YW5jZSB3aXRoIE5hbWVkQXNzb2NpYXRpb25zV3JhcHBlci4gT3ZlcnJpZGUKKyAqIHRoYXQgd3JhcHMgdGhlIFplc3Qtc3VwcGxpZWQgTmFtZWRBc3NvY2lhdGlvbnMgaW5zdGFuY2Ugd2l0aCBOYW1lZEFzc29jaWF0aW9uc1dyYXBwZXIuIE92ZXJyaWRlCiAgKiBtZXRob2RzIHRvIHBlcmZvcm0geW91ciBjdXN0b20gY29kZS4KICAqLwogcHVibGljIGNsYXNzIE5hbWVkQXNzb2NpYXRpb25XcmFwcGVyCkBAIC05MCw2ICs5MSwxOCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+IHJlZmVyZW5jZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5leHQucmVmZXJlbmNlcygpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBFbnRpdHlSZWZlcmVuY2UgcmVmZXJlbmNlT2YoIFN0cmluZyBuYW1lICkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXh0LnJlZmVyZW5jZU9mKCBuYW1lICk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV4dC5oYXNoQ29kZSgpOwpAQCAtMTA2LDUgKzExOSw0IEBACiAgICAgewogICAgICAgICByZXR1cm4gbmV4dC50b1N0cmluZygpOwogICAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYXNzb2NpYXRpb24vcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvYXNzb2NpYXRpb24vcGFja2FnZS5odG1sCmluZGV4IDhlOTdlMzkuLmNmNDg1OTYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2Fzc29jaWF0aW9uL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9hc3NvY2lhdGlvbi9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkFzc29jaWF0aW9uIEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY2FjaGUvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY2FjaGUvcGFja2FnZS5odG1sCmluZGV4IDk3ZWYyYTcuLmE2MmRhMzQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NhY2hlL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jYWNoZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkNhY2hlIEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL0FwcGxpZXNUby5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL0FwcGxpZXNUby5qYXZhCmluZGV4IGNjZGZmMDMuLmIyM2YyMDQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9BcHBsaWVzVG8uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vQXBwbGllc1RvLmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAqIDwvcD4KICAqIDxwcmU+PGNvZGU+CiAgKgotICogJiM2NDtBcHBsaWVzVG8oIFNlc3Npb25hbC5jbGFzcyApICAgLy8gVGVsbHMgUWk0aiB0byBhcHBseSB0aGlzIGNvbmNlcm4gb24gbWV0aG9kcyB3aXRoICYjNjQ7U2Vzc2lvbmFsIGFubm90YXRpb24KKyAqICYjNjQ7QXBwbGllc1RvKCBTZXNzaW9uYWwuY2xhc3MgKSAgIC8vIFRlbGxzIFplc3QgdG8gYXBwbHkgdGhpcyBjb25jZXJuIG9uIG1ldGhvZHMgd2l0aCAmIzY0O1Nlc3Npb25hbCBhbm5vdGF0aW9uCiAgKiBwdWJsaWMgY2xhc3MgU2Vzc2lvbkNvbmNlcm4gZXh0ZW5kcyBHZW5lcmljQ29uY2VybgogICogewogICogICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKCBPYmplY3QgcHJveHksIE1ldGhvZCBtZXRob2QsIE9iamVjdFtdIGFyZ3MgKQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL0FwcGxpZXNUb0ZpbHRlci5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL0FwcGxpZXNUb0ZpbHRlci5qYXZhCmluZGV4IDJhMDdjMDAuLmYzNTZjZjQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9BcHBsaWVzVG9GaWx0ZXIuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vQXBwbGllc1RvRmlsdGVyLmphdmEKQEAgLTE5LDkgKzE5LDkgQEAKIC8qKgogICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgaW50ZXJmYWNlIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlICYjNjQ7QXBwbGllc1RvLgogICogPHA+Ci0gKiBBcHBsaWVzVG8gZmlsdGVycyBhcmUgb25lIG9mIHRoZSBkcml2aW5nIHRlY2hub2xvZ2llcyBpbiBRaTRqLiBUaGV5IGFsbG93IHlvdSB0byBhcHBseSBmcmFnbWVudHMgKE1peGlucywKKyAqIEFwcGxpZXNUbyBmaWx0ZXJzIGFyZSBvbmUgb2YgdGhlIGRyaXZpbmcgdGVjaG5vbG9naWVzIGluIFplc3QuIFRoZXkgYWxsb3cgeW91IHRvIGFwcGx5IGZyYWdtZW50cyAoTWl4aW5zLAogICogQ29uY2VybnMsIFNpZGVFZmZlY3RzKSwgb2Z0ZW4gZ2VuZXJpYyBvbmVzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgdGhhdCB0aGV5IGFyZSBldmFsdWF0ZWQgdW5kZXIuIFRoaXMKLSAqIG1lY2hhbmlzbSBpcyBoZWF2aWx5IHVzZWQgaW50ZXJuYWxseSBpbiBRaTRqIHRvIGFjaGlldmUgbWFueSBvdGhlciBmZWF0dXJlcy4KKyAqIG1lY2hhbmlzbSBpcyBoZWF2aWx5IHVzZWQgaW50ZXJuYWxseSBpbiBaZXN0IHRvIGFjaGlldmUgbWFueSBvdGhlciBmZWF0dXJlcy4KICAqIDwvcD4KICAqIDxwPgogICogVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBiYXNpYyB1c2Ugb2YgQXBwbGllc1RvRmlsdGVyLCB3aGVyZSB0aGUgJiM2NDtBcHBsaWVzVG8gYW5ub3RhdGlvbiBpcyBnaXZlbiBhbgpAQCAtNTcsNyArNTcsNyBAQAogICAgICAqIGZyYWdtZW50LgogICAgICAqIDxwPgogICAgICAqIFRoZXJlIGlzIG5vIHJlYXNvbiBmb3IgdXNlciBjb2RlIHRvIHVzZSB0aGlzIEFwcGxpZXNUb0ZpbHRlciBkaXJlY3RseSwgYW5kIHNob3VsZCBiZSBwZXJjZWl2ZWQgYXMgYW4KLSAgICAgKiBpbnRlcm5hbCBjbGFzcyBpbiBRaTRqLgorICAgICAqIGludGVybmFsIGNsYXNzIGluIFplc3QuCiAgICAgICogPC9wPgogICAgICAqLwogICAgIEFwcGxpZXNUb0ZpbHRlciBBTFdBWVMgPSBuZXcgQXBwbGllc1RvRmlsdGVyKCkKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9PcHRpb25hbC5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL09wdGlvbmFsLmphdmEKaW5kZXggMGE4NWIzMi4uM2EwNzBjMyAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL09wdGlvbmFsLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL09wdGlvbmFsLmphdmEKQEAgLTM3LDggKzM3LDggQEAKICAqIDwvbGk+CiAgKiA8L3VsPgogICogPHA+Ci0gKiBPcHRpb25hbGl0eSBpcyBub3QgdGhlIGRlZmF1bHQgaW4gUWk0aiwgYW5kIGlmIGluamVjdGlvbnMsIHByb3BlcnR5IHZhbHVlcyBhbmQgcGFyYW1ldGVycyBpbiBtZXRob2RzIGFyZSBub3QKLSAqIG5vbi1udWxsLCB0aGUgUWk0aiBydW50aW1lIHdpbGwgdGhyb3cgYW4ge0BsaW5rIG9yZy5xaTRqLmFwaS5jb25zdHJhaW50LkNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb259LCBpbmRpY2F0aW5nCisgKiBPcHRpb25hbGl0eSBpcyBub3QgdGhlIGRlZmF1bHQgaW4gWmVzdCwgYW5kIGlmIGluamVjdGlvbnMsIHByb3BlcnR5IHZhbHVlcyBhbmQgcGFyYW1ldGVycyBpbiBtZXRob2RzIGFyZSBub3QKKyAqIG5vbi1udWxsLCB0aGUgWmVzdCBydW50aW1lIHdpbGwgdGhyb3cgYW4ge0BsaW5rIG9yZy5xaTRqLmFwaS5jb25zdHJhaW50LkNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb259LCBpbmRpY2F0aW5nCiAgKiB3aGljaCBmaWVsZC9wcm9wZXJ0eS9wYXJhbWV0ZXIgaW4gd2hpY2ggY29tcG9zaXRlIGFuZCBtaXhpbiB0aGUgcHJvYmxlbSBoYXMgYmVlbiBkZXRlY3RlZC4KICAqIDwvcD4KICAqIDxwPgpAQCAtNTEsNyArNTEsNyBAQAogICoKICAqICYjNjQ7U2VydmljZQogICogWW91clNlcnZpY2Ugb3RoZXI7ICAgLy8gSWYgbm8gWW91clNlcnZpY2UgaW5zdGFuY2UgaXMgZGVjbGFyZWQgYW5kIHZpc2libGUgdG8gdGhpcyBzZXJ2aWNlIGluamVjdGlvbiBwb2ludAotICogICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFFpNGogcnVudGltZSB3aWxsIHRocm93IGEgQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbi4KKyAqICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBaZXN0IHJ1bnRpbWUgd2lsbCB0aHJvdyBhIENvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24uCiAgKgogICogPC9jb2RlPjwvcHJlPgogICovCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vUXVhbGlmaWVkTmFtZS5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL1F1YWxpZmllZE5hbWUuamF2YQppbmRleCBjYjY2MjA1Li5hODY5NzkxIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vUXVhbGlmaWVkTmFtZS5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9RdWFsaWZpZWROYW1lLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAqIDwvcD4KICAqIDxwPgogICogPHN0cm9uZz5OT1RFOiBVbmxlc3MgeW91IGRvIHZlcnkgZ2VuZXJpYyBsaWJyYXJpZXMsIGVudGl0eSBzdG9yZXMgYW5kIG90aGVyIGV4dGVuc2lvbnMgdGhhdCBpcyBkZWVwbHkgY291cGxlZCBpbnRvCi0gKiB0aGUgUWk0aiBydW50aW1lLCBpdCBpcyB2ZXJ5IHVubGlrZWx5IHlvdSB3aWxsIG5lZWQgdG8gdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHkuPC9zdHJvbmc+CisgKiB0aGUgWmVzdCBydW50aW1lLCBpdCBpcyB2ZXJ5IHVubGlrZWx5IHlvdSB3aWxsIG5lZWQgdG8gdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHkuPC9zdHJvbmc+CiAgKiA8L3A+CiAgKiA8cD4KICAqIEl0IGlzIGFsc28gaW1wb3J0YW50IHRvIG5vdGljZSB0aGF0IHRoZSBRdWFsaWZpZWROYW1lIG5lZWRzIHRvIGJlIGxvbmctdGVybSBzdGFibGUsIGFzIHRoZSBuYW1lcyBhcmUgd3JpdHRlbgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL1R5cGVOYW1lLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vVHlwZU5hbWUuamF2YQppbmRleCBkZjlkNmM1Li42YTQ4NWU2IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vVHlwZU5hbWUuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vVHlwZU5hbWUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkuY29tbW9uOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vVXNlRGVmYXVsdHMuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9Vc2VEZWZhdWx0cy5qYXZhCmluZGV4IDg0NzhkOTkuLjk0ZjQ0NDYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9Vc2VEZWZhdWx0cy5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9Vc2VEZWZhdWx0cy5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgKiA8L3A+CiAgKiA8cD4KICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgQ29tcG9zaXRlcyBkdXJpbmcgdGhlIGFzc2VtYmx5LiBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyB0aGUKLSAqIHtAbGluayBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHkjZm9yTWl4aW4oQ2xhc3MpfSBtZXRob2QuCisgKiB7QGNvZGUgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5I2Zvck1peGluKENsYXNzKX0gbWV0aG9kLgogICogPC9wPgogICogPHA+CiAgKiBFeGFtcGxlOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL1Zpc2liaWxpdHkuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9WaXNpYmlsaXR5LmphdmEKaW5kZXggYTkxMGE4MC4uMGYzOGYzNiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL1Zpc2liaWxpdHkuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vVmlzaWJpbGl0eS5qYXZhCkBAIC0xNCw3ICsxNCw3IEBACiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5jb21tb247CiAKIC8qKgotICogVmlzaWJpbGl0eSBpcyBhIGNvcmUgY29uY2VwdCBpbiB0aGUgUWk0aiBzdHJ1Y3R1cmUgc3lzdGVtLiBJdCBkZWZpbmVzIHRoZSBsb2NhbGUgb2YgY29tcG9zaXRlcyBhbmQgb2JqZWN0cywgaS5lLgorICogVmlzaWJpbGl0eSBpcyBhIGNvcmUgY29uY2VwdCBpbiB0aGUgWmVzdCBzdHJ1Y3R1cmUgc3lzdGVtLiBJdCBkZWZpbmVzIHRoZSBsb2NhbGUgb2YgY29tcG9zaXRlcyBhbmQgb2JqZWN0cywgaS5lLgogICogaG93IGZhciB0aGV5IGNhbiBiZSAnc2VlbicgYW5kIHRoZXJlZm9yIGJlIHVzZWQuCiAgKiA8cD4KICAqIFdoZW4gYSBDb21wb3NpdGUgb3IgT2JqZWN0IGlzIGRlY2xhcmVkIGluIHRoZSBhc3NlbWJseSBwaGFzZSwgYW5kIG5vIHZpc2liaWxpdHkgaXMgc2V0LCBvbmx5IG90aGVyCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL3BhY2thZ2UuaHRtbAppbmRleCBkODRlMGJkLi5mMjlkZTVkIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9wYWNrYWdlLmh0bWwKQEAgLTEsOCArMSwyNCBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkNvbW1vbiBBUEkuPC9oMj4KICAgICAgICAgPHA+Ci0gICAgICAgICAgICBUaGUgQ29tbW9uIEFQSSBwYWNrYWdlIGlzIGEgY29sbGVjdGlvbiBvZiByZWFsbHkgbG93LWxldmVsIHR5cGVzIG5lZWRlZCBhdCB0aGUgY29yZSBvZiB0aGUgUWk0aiBSdW50aW1lLiBJdCBpcyBhbHNvCisgICAgICAgICAgICBUaGUgQ29tbW9uIEFQSSBwYWNrYWdlIGlzIGEgY29sbGVjdGlvbiBvZiByZWFsbHkgbG93LWxldmVsIHR5cGVzIG5lZWRlZCBhdCB0aGUgY29yZSBvZiB0aGUgWmVzdOKEoiBSdW50aW1lLiBJdCBpcyBhbHNvCiAgICAgICAgICAgICBhIGNvbGxlY3Rpb24gb2YgdHlwZXMgdGhhdCBhcmUgbm90IHBhcnRpY3VsYXJseSBjb2hlc2l2ZSwgYW5kIGVmZmVjdGl2ZWx5IHRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgbG9vc2UgZW5kcwogICAgICAgICAgICAgdGhhdCBkb2VzIG5vdCBiZWxvbmcgZWxzZXdoZXJlLgogICAgICAgICA8L3A+CkBAIC0xNCw3ICszMCw3IEBACiAgICAgICAgICAgICA8bGk+UXVhbGlmaWVkTmFtZTwvbGk+CiAgICAgICAgICAgICA8bGk+VHlwZU5hbWU8L2xpPgogICAgICAgICA8L3VsPgotICAgICAgICA8cD5VTkxFU1MgeW91IGFyZSBpbnRvIGRlZXAgaW50ZWdyYXRpb24gaW50byB0aGUgUWk0aiBSdW50aW1lLjwvcD4KKyAgICAgICAgPHA+VU5MRVNTIHlvdSBhcmUgaW50byBkZWVwIGludGVncmF0aW9uIGludG8gdGhlIFplc3TihKIgUnVudGltZS48L3A+CiAKICAgICAgICAgPGgzPiYjNjQ7QXBwbGllc1RvIGFuZCBBcHBsaWVzVG9GaWx0ZXI8L2gzPgogICAgICAgICA8cD4KQEAgLTI0LDcgKzQwLDcgQEAKIAogICAgICAgICA8aDM+JiM2NDtPcHRpb25hbDwvaDM+CiAgICAgICAgIDxwPgotICAgICAgICAgICAgSW4gUWk0aiwgbWV0aG9kIGFyZ3VtZW50cywgcHJvcGVydHkgdmFsdWVzIGFuZCBpbmplY3RlZCBmaWVsZHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIG51bGwgYnkgZGVmYXVsdC4gVG8gYWxsb3cKKyAgICAgICAgICAgIEluIFplc3TihKIsIG1ldGhvZCBhcmd1bWVudHMsIHByb3BlcnR5IHZhbHVlcyBhbmQgaW5qZWN0ZWQgZmllbGRzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBudWxsIGJ5IGRlZmF1bHQuIFRvIGFsbG93CiAgICAgICAgICAgICBhbnkgb2YgdGhlc2UgdG8gYmUgbnVsbCwgaS5lLiB1bmRlY2xhcmVkLCBpdCBpcyByZXF1aXJlZCB0aGF0IHRoZSBhcmd1bWVudCwgZmllbGQgb3IgbWV0aG9kIGlzIG1hcmtlZCB3aXRoIHRoZQogICAgICAgICAgICAgJiM2NDtPcHRpb25hbCBhbm5vdGF0aW9uLgogICAgICAgICA8L3A+CkBAIC0zMiwxNCArNDgsMTQgQEAKICAgICAgICAgPGgzPiYjNjQ7VXNlRGVmYXVsdHM8L2gzPgogICAgICAgICA8cD4KICAgICAgICAgICAgIFNpbmNlIG51bGwgaXMgbm90IGFsbG93ZWQgd2l0aG91dCB0aGUgJiM2NDtPcHRpb25hbCBhbm5vdGF0aW9uLCBpdCBjYW4gc29tZXRpbWVzIGJ5IHRlZGlvdXMgdG8gaW5pdGlhbGl6ZSBhbGwKLSAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSB2YWx1ZXMuIEFuZCB0aGUgJiM2NDtVc2VEZWZhdWx0cyBhbm5vdGF0aW9uIGFsbG93cyB1cyB0byBkZWNsYXJlIHRoYXQgUWk0aiBzaG91bGQgc2V0IHRoZSBQcm9wZXJ0eQorICAgICAgICAgICAgdGhlIHByb3BlcnR5IHZhbHVlcy4gQW5kIHRoZSAmIzY0O1VzZURlZmF1bHRzIGFubm90YXRpb24gYWxsb3dzIHVzIHRvIGRlY2xhcmUgdGhhdCBaZXN04oSiIHNob3VsZCBzZXQgdGhlIFByb3BlcnR5CiAgICAgICAgICAgICB0byBhIGRlZmF1bHQgdmFsdWUuIFRoZXNlIGFyZSBlaXRoZXIgdGhlIHByZS1kZWZpbmVkIG9uZXMsIG9yIGNhbiBiZSBzZXQgcGVyIHByb3BlcnR5IGRlY2xhcmF0aW9uIGR1cmluZyB0aGUKICAgICAgICAgICAgIGFzc2VtYmx5LgogICAgICAgICA8L3A+CiAKICAgICAgICAgPGgzPiYjNjQ7VmlzaWJpbGl0eTwvaDM+CiAgICAgICAgIDxwPgotICAgICAgICAgICAgVmlzaWJpbGl0eSBpcyBhbm90aGVyIGlubm92YXRpdmUgY29uY2VwdCBpbiBRaTRqLCB3aGljaCBsZXZlcmFnZSB0aGUgc3RydWN0dXJlIHN5c3RlbSAoQXBwbGljYXRpb24sIExheWVyLCBNb2R1bGUpCisgICAgICAgICAgICBWaXNpYmlsaXR5IGlzIGFub3RoZXIgaW5ub3ZhdGl2ZSBjb25jZXB0IGluIFplc3TihKIsIHdoaWNoIGxldmVyYWdlIHRoZSBzdHJ1Y3R1cmUgc3lzdGVtIChBcHBsaWNhdGlvbiwgTGF5ZXIsIE1vZHVsZSkKICAgICAgICAgICAgIHRvIGxpbWl0IHRoZSAncmVhY2gnIHdoZW4gcmVxdWVzdGluZyBjb21wb3NpdGVzIGFuZCBvYmplY3RzLiBUaGUgVmlzaWJpbGl0eSBpcyBkZWNsYXJlZCBwZXIgQ29tcG9zaXRlL09iamVjdCwKICAgICAgICAgICAgIHByZWZlcmFibHkgaW4gdGhlIG1vc3QgcmVzdHJpY3RpdmUgbW9kZSBwb3NzaWJsZSwgYW5kIHRoZSB2aXNpYmlsaXR5IHJlc29sdmVyIHdpbGwgZW5zdXJlIGEgcHJlZGljdGFibGUgcmVzb2x1dGlvbgogICAgICAgICAgICAgYWxnb3JpdGhtOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tcG9zaXRlL01vZGVsRGVzY3JpcHRvci5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tcG9zaXRlL01vZGVsRGVzY3JpcHRvci5qYXZhCmluZGV4IGFiNzY0OTMuLmIwNjUxZjAgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbXBvc2l0ZS9Nb2RlbERlc2NyaXB0b3IuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21wb3NpdGUvTW9kZWxEZXNjcmlwdG9yLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLmNvbXBvc2l0ZTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbXBvc2l0ZS9Qcm9wZXJ0eU1hcHBlci5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tcG9zaXRlL1Byb3BlcnR5TWFwcGVyLmphdmEKaW5kZXggMzU0MzI2MC4uMDU0YTM2OSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tcG9zaXRlL1Byb3BlcnR5TWFwcGVyLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tcG9zaXRlL1Byb3BlcnR5TWFwcGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLmNvbXBvc2l0ZTsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21wb3NpdGUvU3RhdGVmdWxDb21wb3NpdGVEZXNjcmlwdG9yLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21wb3NpdGUvU3RhdGVmdWxDb21wb3NpdGVEZXNjcmlwdG9yLmphdmEKaW5kZXggMTNlY2Y3MC4uYmE0NDQ5NCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tcG9zaXRlL1N0YXRlZnVsQ29tcG9zaXRlRGVzY3JpcHRvci5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbXBvc2l0ZS9TdGF0ZWZ1bENvbXBvc2l0ZURlc2NyaXB0b3IuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkuY29tcG9zaXRlOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbXBvc2l0ZS9wYWNrYWdlLmh0bWwgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb21wb3NpdGUvcGFja2FnZS5odG1sCmluZGV4IDlmMTk1MWMuLjAwZmVhZWQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbXBvc2l0ZS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29tcG9zaXRlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+Q29tcG9zaXRlIEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29uY2Vybi9pbnRlcm5hbC9wYWNrYWdlLmh0bWwgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb25jZXJuL2ludGVybmFsL3BhY2thZ2UuaHRtbAppbmRleCA0MGFjOWY5Li45MzUxZjEwIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb25jZXJuL2ludGVybmFsL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb25jZXJuL2ludGVybmFsL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDE+SW50ZXJuYWwvUHJpdmF0ZSBwYWNrYWdlIGZvciB0aGUgQ29uY2VybiBBUEkuPC9oMT4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmNlcm4vcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29uY2Vybi9wYWNrYWdlLmh0bWwKaW5kZXggMGEwMjVhZC4uZmNjN2VmNyAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29uY2Vybi9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29uY2Vybi9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkNvbmNlcm4gQVBJLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5qYXZhCmluZGV4IGJiOTc2NDAuLjc3YzM3M2QgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5qYXZhCkBAIC0yMCwxMiArMjAsMTcgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuUWk0ajsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlByb3BlcnR5TWFwcGVyOworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25zdHJhaW50LkNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlCdWlsZGVyOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHk7CitpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TZXJ2aWNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKIGltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VDb21wb3NpdGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5xdWFsaWZpZXIuU2VydmljZVRhZ3M7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLk5vU3VjaEVudGl0eUV4Y2VwdGlvbjsKQEAgLTMzLDYgKzM4LDcgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrQ29tcGxldGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2VCdWlsZGVyOworaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6YXRpb247CiAKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMuZmlyc3Q7CiAKQEAgLTUyLDcgKzU4LDcgQEAKICAqIDxwPgogICogSWYgYSBuZXcgQ29uZmlndXJhdGlvbiBpbnN0YW5jZSBpcyBjcmVhdGVkIHRoZW4gaXQgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCBwcm9wZXJ0aWVzCiAgKiBmcm9tIHRoZSBwcm9wZXJ0aWVzIGZpbGUgd2hvc2UgZmlsZXN5c3RlbSBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBpZGVudGl0eSAoZS5nLiAiTXlTZXJ2aWNlLnByb3BlcnRpZXMiKS4KLSAqIElmIGEgc2VydmljZSBpcyBub3QgZ2l2ZW4gYSBuYW1lIHZpYSB0aGUge0BsaW5rIG9yZy5xaTRqLmJvb3RzdHJhcC5TZXJ2aWNlRGVjbGFyYXRpb24jaWRlbnRpZmllZEJ5KFN0cmluZyl9LCB0aGUKKyAqIElmIGEgc2VydmljZSBpcyBub3QgZ2l2ZW4gYSBuYW1lIHZpYSB0aGUge0Bjb2RlIG9yZy5xaTRqLmJvb3RzdHJhcC5TZXJ2aWNlRGVjbGFyYXRpb24jaWRlbnRpZmllZEJ5KFN0cmluZyl9LCB0aGUKICAqIG5hbWUgd2lsbCBkZWZhdWx0IHRvIHRoZSBGUUNOIG9mIHRoZSBTZXJ2aWNlQ29tcG9zaXRlIHR5cGUuCiAgKiA8L3A+CiAgKiA8cD4KQEAgLTYyLDcgKzY4LDcgQEAKICAqIGEgcmVxdWVzdC4KICAqIDwvcD4KICAqIDxwPgotICogVGhlIENvbmZpZ3VyYXRpb24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlZnJlc2hlZCB3aGVuIHRoZSBTZXJ2aWNlIGlzIGFjdGl2YXRlZCBieSB0aGUgUWk0aiBydW50aW1lLgorICogVGhlIENvbmZpZ3VyYXRpb24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlZnJlc2hlZCB3aGVuIHRoZSBTZXJ2aWNlIGlzIGFjdGl2YXRlZCBieSB0aGUgWmVzdCBydW50aW1lLgogICogQW55IHJlZnJlc2hlcyBhdCBvdGhlciBwb2ludHMgd2lsbCBoYXZlIHRvIGJlIGRvbmUgbWFudWFsbHkgb3IgdHJpZ2dlcmVkIHRocm91Z2ggc29tZSBvdGhlcgogICogbWVjaGFuaXNtLgogICogPC9wPgpAQCAtMTA3LDcgKzExMyw2IEBACiAgKiAgICAgOgogICogfQogICogPC9jb2RlPjwvcHJlPgotICoKICAqLwogQFN1cHByZXNzV2FybmluZ3MoICJKYXZhZG9jUmVmZXJlbmNlIiApCiBATWl4aW5zKCBDb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb25NaXhpbi5jbGFzcyApCkBAIC0xMTYsNyArMTIxLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgY29uZmlndXJhdGlvbiBpbnN0YW5jZSBtYW5hZ2VkIGJ5IHRoaXMgQ29uZmlndXJhdGlvbi4KICAgICAgKiA8cD4KLSAgICAgKiBFdmVuIGlmIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gaXMgaW5pdGlhbGl6ZWQgZnJvbSBwcm9wZXJ0aWVzIGZpbGUsIHRoZSBjb25zaXN0ZW5jeSBydWxlcyBvZiBRaTRqIGNvbXBvc2l0ZXMKKyAgICAgKiBFdmVuIGlmIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gaXMgaW5pdGlhbGl6ZWQgZnJvbSBwcm9wZXJ0aWVzIGZpbGUsIHRoZSBjb25zaXN0ZW5jeSBydWxlcyBvZiBaZXN0IGNvbXBvc2l0ZXMKICAgICAgKiBzdGlsbCBhcHBsaWVzLiBJZiB0aGUgdGhlIHByb3BlcnRpZXMgZmlsZSBpcyBtaXNzaW5nIGEgdmFsdWUsIHRoZW4gdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgZmFpbCB3aXRoIGEKICAgICAgKiBSdW50aW1lRXhjZXB0aW9uLiBJZiBDb25zdHJhaW50cyBoYXMgYmVlbiBkZWZpbmVkLCB0aG9zZSB3aWxsIG5lZWQgdG8gYmUgc2F0aXNmaWVkIGFzIHdlbGwuIFRoZSB1c2VyCiAgICAgICogY29uZmlndXJhdGlvbiBpbnN0YW5jZSByZXR1cm5lZCB3aWxsIGZ1bGZpbGwgdGhlIGNvbnN0cmFpbnRzIGFuZCBjb25zaXN0ZW5jeSBub3JtYWwgdG8gYWxsIGNvbXBvc2l0ZXMsIGFuZApAQCAtMTI5LDcgKzEzNCw3IEBACiAKICAgICAvKioKICAgICAgKiBVcGRhdGVzIHRoZSB2YWx1ZXMgb2YgdGhlIG1hbmFnZWQgdXNlciBDb25maWd1cmF0aW9uQ29tcG9zaXRlIGluc3RhbmNlIGZyb20gdGhlIHVuZGVybHlpbmcKLSAgICAgKiB7QGxpbmsgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlfS4gIEFueSBtb2RpZmllZCB2YWx1ZXMgaW4gdGhlIGN1cnJlbnQgdXNlciBjb25maWd1cmF0aW9uIHRoYXQKKyAgICAgKiB7QGNvZGUgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlfS4gIEFueSBtb2RpZmllZCB2YWx1ZXMgaW4gdGhlIGN1cnJlbnQgdXNlciBjb25maWd1cmF0aW9uIHRoYXQKICAgICAgKiBoYXMgbm90IGJlZW4gc2F2ZWQsIHZpYSB7QGxpbmsgI3NhdmUoKX0gbWV0aG9kLCB3aWxsIGJlIGxvc3QuCiAgICAgICovCiAgICAgdm9pZCByZWZyZXNoKCk7CkBAIC0xNDIsNyArMTQ3LDcgQEAKICAgICAvKioKICAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBDb25maWd1cmF0aW9uLgogICAgICAqIDxwPgotICAgICAqIFRoaXMgaXMgZWZmZWN0aXZlbHkgYW4gaW50ZXJuYWwgY2xhc3MgaW4gUWk0aiBhbmQgc2hvdWxkIG5ldmVyIGJlIHVzZWQgZGlyZWN0bHkgYnkgdXNlciBjb2RlLgorICAgICAqIFRoaXMgaXMgZWZmZWN0aXZlbHkgYW4gaW50ZXJuYWwgY2xhc3MgaW4gWmVzdCBhbmQgc2hvdWxkIG5ldmVyIGJlIHVzZWQgZGlyZWN0bHkgYnkgdXNlciBjb2RlLgogICAgICAqIDwvcD4KICAgICAgKgogICAgICAqIEBwYXJhbSA8VD4KQEAgLTE2Miw2ICsxNjcsOSBAQAogICAgICAgICBAU3RydWN0dXJlCiAgICAgICAgIHByaXZhdGUgTW9kdWxlIG1vZHVsZTsKIAorICAgICAgICBAU2VydmljZQorICAgICAgICBwcml2YXRlIEl0ZXJhYmxlPFNlcnZpY2VSZWZlcmVuY2U8VmFsdWVTZXJpYWxpemF0aW9uPj4gdmFsdWVTZXJpYWxpemF0aW9uOworCiAgICAgICAgIHB1YmxpYyBDb25maWd1cmF0aW9uTWl4aW4oKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTIzOCwxMCArMjQ2LDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQotICAgICAgICBwcml2YXRlIDxWPiBWIGluaXRpYWxpemVDb25maWd1cmF0aW9uSW5zdGFuY2UoIFNlcnZpY2VDb21wb3NpdGUgc2VydmljZUNvbXBvc2l0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml0T2ZXb3JrIHVvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlRGVzY3JpcHRvciBzZXJ2aWNlTW9kZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGlkZW50aXR5CisgICAgICAgIHByaXZhdGUgPFYgZXh0ZW5kcyBJZGVudGl0eT4gViBpbml0aWFsaXplQ29uZmlndXJhdGlvbkluc3RhbmNlKCBTZXJ2aWNlQ29tcG9zaXRlIHNlcnZpY2VDb21wb3NpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml0T2ZXb3JrIHVvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VEZXNjcmlwdG9yIHNlcnZpY2VNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZGVudGl0eQogICAgICAgICApCiAgICAgICAgICAgICB0aHJvd3MgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbgogICAgICAgICB7CkBAIC0yNDksMjIgKzI1Nyw2OCBAQAogICAgICAgICAgICAgVXNlY2FzZSB1c2VjYXNlID0gVXNlY2FzZUJ1aWxkZXIubmV3VXNlY2FzZSggIkNvbmZpZ3VyYXRpb246IiArIG1lLmlkZW50aXR5KCkuZ2V0KCkgKTsKICAgICAgICAgICAgIFVuaXRPZldvcmsgYnVpbGRVb3cgPSBtb2R1bGUubmV3VW5pdE9mV29yayggdXNlY2FzZSApOwogCi0gICAgICAgICAgICBFbnRpdHlCdWlsZGVyPFY+IGNvbmZpZ0J1aWxkZXIgPSBidWlsZFVvdy5uZXdFbnRpdHlCdWlsZGVyKCBzZXJ2aWNlTW9kZWwuPFY+Y29uZmlndXJhdGlvblR5cGUoKSwgaWRlbnRpdHkgKTsKKyAgICAgICAgICAgIENsYXNzPD8+IHR5cGUgPSBmaXJzdCggYXBpLnNlcnZpY2VEZXNjcmlwdG9yRm9yKCBzZXJ2aWNlQ29tcG9zaXRlICkudHlwZXMoKSApOworICAgICAgICAgICAgQ2xhc3M8Vj4gY29uZmlnVHlwZSA9IHNlcnZpY2VNb2RlbC5jb25maWd1cmF0aW9uVHlwZSgpOwogCiAgICAgICAgICAgICAvLyBDaGVjayBmb3IgZGVmYXVsdHMKLSAgICAgICAgICAgIFN0cmluZyBzID0gaWRlbnRpdHkgKyAiLnByb3BlcnRpZXMiOwotICAgICAgICAgICAgQ2xhc3M8Pz4gdHlwZSA9IGZpcnN0KCBhcGkuc2VydmljZURlc2NyaXB0b3JGb3IoIHNlcnZpY2VDb21wb3NpdGUgKS50eXBlcygpICk7Ci0gICAgICAgICAgICAvLyBMb2FkIGRlZmF1bHRzIGZyb20gY2xhc3NwYXRoIHJvb3QgaWYgYXZhaWxhYmxlCi0gICAgICAgICAgICBpZiAoIHR5cGUuZ2V0UmVzb3VyY2UoIHMgKSA9PSBudWxsICYmIHR5cGUuZ2V0UmVzb3VyY2UoICIvIiArIHMgKSAhPSBudWxsICkKKyAgICAgICAgICAgIFYgY29uZmlnID0gdHJ5TG9hZFByb3BlcnRpZXNGaWxlKCBidWlsZFVvdywgdHlwZSwgY29uZmlnVHlwZSwgaWRlbnRpdHkgKTsKKyAgICAgICAgICAgIGlmKCBjb25maWcgPT0gbnVsbCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcyA9ICIvIiArIHM7CisgICAgICAgICAgICAgICAgY29uZmlnID0gdHJ5TG9hZEpzb25GaWxlKCBidWlsZFVvdywgdHlwZSwgY29uZmlnVHlwZSwgaWRlbnRpdHkgKTsKKyAgICAgICAgICAgICAgICBpZiggY29uZmlnID09IG51bGwgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gdHJ5TG9hZFlhbWxGaWxlKCBidWlsZFVvdywgdHlwZSwgY29uZmlnVHlwZSwgaWRlbnRpdHkgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoIGNvbmZpZyA9PSBudWxsICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gdHJ5TG9hZFhtbEZpbGUoIGJ1aWxkVW93LCB0eXBlLCBjb25maWdUeXBlLCBpZGVudGl0eSApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGNvbmZpZyA9PSBudWxsICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eUJ1aWxkZXI8Vj4gY29uZmlnQnVpbGRlciA9IGJ1aWxkVW93Lm5ld0VudGl0eUJ1aWxkZXIoIHNlcnZpY2VNb2RlbC48Vj5jb25maWd1cmF0aW9uVHlwZSgpLCBpZGVudGl0eSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdCdWlsZGVyLm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKCBDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uIGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaENvbmZpZ3VyYXRpb25FeGNlcHRpb24oIGNvbmZpZ1R5cGUsIGlkZW50aXR5LCBlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgSW5wdXRTdHJlYW0gYXNTdHJlYW0gPSB0eXBlLmdldFJlc291cmNlQXNTdHJlYW0oIHMgKTsKKworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnVpbGRVb3cuY29tcGxldGUoKTsKKworICAgICAgICAgICAgICAgIC8vIFRyeSBhZ2FpbgorICAgICAgICAgICAgICAgIHJldHVybiAoVikgZmluZENvbmZpZ3VyYXRpb25JbnN0YW5jZUZvciggc2VydmljZUNvbXBvc2l0ZSwgdW93ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGV4ID0gbmV3IEluc3RhbnRpYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgaW5zdGFudGlhdGUgY29uZmlndXJhdGlvbiwgYW5kIG5vIGNvbmZpZ3VyYXRpb24gaW5pdGlhbGl6YXRpb24gZmlsZSB3YXMgZm91bmQgKCIgKyBpZGVudGl0eSArICIpIiApOworICAgICAgICAgICAgICAgIGV4LmluaXRDYXVzZSggZTEgKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgPEMsIFY+IFYgdHJ5TG9hZFByb3BlcnRpZXNGaWxlKCBVbml0T2ZXb3JrIGJ1aWxkVW93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Qz4gY29tcG9zaXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPFY+IGNvbmZpZ1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaWRlbnRpdHkKKyAgICAgICAgKQorICAgICAgICAgICAgdGhyb3dzIEluc3RhbnRpYXRpb25FeGNlcHRpb24KKyAgICAgICAgeworICAgICAgICAgICAgRW50aXR5QnVpbGRlcjxWPiBjb25maWdCdWlsZGVyID0gYnVpbGRVb3cubmV3RW50aXR5QnVpbGRlciggY29uZmlnVHlwZSwgaWRlbnRpdHkgKTsKKyAgICAgICAgICAgIFN0cmluZyByZXNvdXJjZU5hbWUgPSBpZGVudGl0eSArICIucHJvcGVydGllcyI7CisgICAgICAgICAgICBJbnB1dFN0cmVhbSBhc1N0cmVhbSA9IGdldFJlc291cmNlKCBjb21wb3NpdGVUeXBlLCByZXNvdXJjZU5hbWUgKTsKICAgICAgICAgICAgIGlmKCBhc1N0cmVhbSAhPSBudWxsICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5TWFwcGVyLm1hcCggYXNTdHJlYW0sIChDb21wb3NpdGUpIGNvbmZpZ0J1aWxkZXIuaW5zdGFuY2UoKSApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnQnVpbGRlci5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXRjaCggSU9FeGNlcHRpb24gZTEgKQogICAgICAgICAgICAgICAgIHsKQEAgLTI3NCwyMiArMzI4LDY5IEBACiAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4Y2VwdGlvbjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB0cnkKKyAgICAgICAgcHJpdmF0ZSBJbnB1dFN0cmVhbSBnZXRSZXNvdXJjZSggQ2xhc3M8Pz4gdHlwZSwgU3RyaW5nIHJlc291cmNlTmFtZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIExvYWQgZGVmYXVsdHMgZnJvbSBjbGFzc3BhdGggcm9vdCBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgIGlmKCB0eXBlLmdldFJlc291cmNlKCByZXNvdXJjZU5hbWUgKSA9PSBudWxsICYmIHR5cGUuZ2V0UmVzb3VyY2UoICIvIiArIHJlc291cmNlTmFtZSApICE9IG51bGwgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbmZpZ0J1aWxkZXIubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgICAgICBidWlsZFVvdy5jb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZSA9ICIvIiArIHJlc291cmNlTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0eXBlLmdldFJlc291cmNlQXNTdHJlYW0oIHJlc291cmNlTmFtZSApOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBUcnkgYWdhaW4KLSAgICAgICAgICAgICAgICByZXR1cm4gKFYpIGZpbmRDb25maWd1cmF0aW9uSW5zdGFuY2VGb3IoIHNlcnZpY2VDb21wb3NpdGUsIHVvdyApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlMSApCisgICAgICAgIHByaXZhdGUgPEMsIFYgZXh0ZW5kcyBJZGVudGl0eT4gViB0cnlMb2FkSnNvbkZpbGUoIFVuaXRPZldvcmsgdW93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczxDPiBjb21wb3NpdGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczxWPiBjb25maWdUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaWRlbnRpdHkKKyAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVhZENvbmZpZyggdW93LCBjb21wb3NpdGVUeXBlLCBjb25maWdUeXBlLCBpZGVudGl0eSwgVmFsdWVTZXJpYWxpemF0aW9uLkZvcm1hdHMuSlNPTiwgIi5qc29uIiApOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSA8QywgViBleHRlbmRzIElkZW50aXR5PiBWIHRyeUxvYWRZYW1sRmlsZSggVW5pdE9mV29yayB1b3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPEM+IGNvbXBvc2l0ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPFY+IGNvbmZpZ1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZGVudGl0eQorICAgICAgICApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZWFkQ29uZmlnKCB1b3csIGNvbXBvc2l0ZVR5cGUsIGNvbmZpZ1R5cGUsIGlkZW50aXR5LCBWYWx1ZVNlcmlhbGl6YXRpb24uRm9ybWF0cy5ZQU1MLCAiLnlhbWwiICk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIDxDLCBWIGV4dGVuZHMgSWRlbnRpdHk+IFYgdHJ5TG9hZFhtbEZpbGUoIFVuaXRPZldvcmsgdW93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPEM+IGNvbXBvc2l0ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Vj4gY29uZmlnVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaWRlbnRpdHkKKyAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVhZENvbmZpZyggdW93LCBjb21wb3NpdGVUeXBlLCBjb25maWdUeXBlLCBpZGVudGl0eSwgVmFsdWVTZXJpYWxpemF0aW9uLkZvcm1hdHMuWE1MLCAiLnhtbCIgKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgPEMsIFYgZXh0ZW5kcyBJZGVudGl0eT4gViByZWFkQ29uZmlnKCBVbml0T2ZXb3JrIHVvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPEM+IGNvbXBvc2l0ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczxWPiBjb25maWdUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGlkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb24KKyAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIFNlcnZpY2VSZWZlcmVuY2U8VmFsdWVTZXJpYWxpemF0aW9uPiBzZXJpYWxpemVyUmVmIDogdmFsdWVTZXJpYWxpemF0aW9uICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGV4ID0gbmV3IEluc3RhbnRpYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgaW5zdGFudGlhdGUgY29uZmlndXJhdGlvbiwgYW5kIG5vIFByb3BlcnRpZXMgZmlsZSB3YXMgZm91bmQgKCIgKyBzICsgIikiICk7Ci0gICAgICAgICAgICAgICAgZXguaW5pdENhdXNlKCBlMSApOwotICAgICAgICAgICAgICAgIHRocm93IGV4OworICAgICAgICAgICAgICAgIFNlcnZpY2VUYWdzIHNlcnZpY2VUYWdzID0gc2VyaWFsaXplclJlZi5tZXRhSW5mbyggU2VydmljZVRhZ3MuY2xhc3MgKTsKKyAgICAgICAgICAgICAgICBpZiggc2VydmljZVRhZ3MuaGFzVGFnKCBmb3JtYXQgKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzb3VyY2VOYW1lID0gaWRlbnRpdHkgKyBleHRlbnNpb247CisgICAgICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGFzU3RyZWFtID0gZ2V0UmVzb3VyY2UoIGNvbXBvc2l0ZVR5cGUsIHJlc291cmNlTmFtZSApOworICAgICAgICAgICAgICAgICAgICBpZiggYXNTdHJlYW0gIT0gbnVsbCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFYgY29uZmlnT2JqZWN0ID0gc2VyaWFsaXplclJlZi5nZXQoKS5kZXNlcmlhbGl6ZSggY29uZmlnVHlwZSwgYXNTdHJlYW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1b3cudG9FbnRpdHkoIGNvbmZpZ1R5cGUsIGNvbmZpZ09iamVjdCApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25Db21wb3NpdGUuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbkNvbXBvc2l0ZS5qYXZhCmluZGV4IGEyOTE5ZjIuLjM5ZmIxNDkgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbkNvbXBvc2l0ZS5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbkNvbXBvc2l0ZS5qYXZhCkBAIC0xNCw3ICsxNCw5IEBACiAKIHBhY2thZ2Ugb3JnLnFpNGouYXBpLmNvbmZpZ3VyYXRpb247CiAKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LklkZW50aXR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuUXVlcnlhYmxlOwogCiAvKioKQEAgLTI1LDYgKzI3LDYgQEAKICAqLwogQFF1ZXJ5YWJsZSggZmFsc2UgKQogcHVibGljIGludGVyZmFjZSBDb25maWd1cmF0aW9uQ29tcG9zaXRlCi0gICAgZXh0ZW5kcyBFbnRpdHlDb21wb3NpdGUKKyAgICBleHRlbmRzIElkZW50aXR5LCBDb21wb3NpdGUKIHsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vTm9TdWNoQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29uZmlndXJhdGlvbi9Ob1N1Y2hDb25maWd1cmF0aW9uRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkM2VkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vTm9TdWNoQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqLworCitwYWNrYWdlIG9yZy5xaTRqLmFwaS5jb25maWd1cmF0aW9uOworCitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbnN0cmFpbnQuQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LklkZW50aXR5OworCitwdWJsaWMgY2xhc3MgTm9TdWNoQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24KK3sKKyAgICBwcml2YXRlIGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBJZGVudGl0eT4gY29uZmlnVHlwZTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBpZGVudGl0eTsKKworICAgIHB1YmxpYyBOb1N1Y2hDb25maWd1cmF0aW9uRXhjZXB0aW9uKCBDbGFzczw/IGV4dGVuZHMgSWRlbnRpdHk+IGNvbmZpZ1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbiBjYXVzZQorICAgICkKKyAgICB7CisgICAgICAgIHN1cGVyKCAiTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJyIgKyBpZGVudGl0eSArICInIGFuZCBjb25maWd1cmF0aW9uICIgKyBjb25maWdUeXBlLmdldE5hbWUoKSArICIgaGFzIG9uZSBvciBtb3JlIG5vbi1PcHRpb25hbCBwcm9wZXJ0aWVzLiIsIGNhdXNlICk7CisgICAgICAgIHRoaXMuY29uZmlnVHlwZSA9IGNvbmZpZ1R5cGU7CisgICAgICAgIHRoaXMuaWRlbnRpdHkgPSBpZGVudGl0eTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIElkZW50aXR5PiBjb25maWdUeXBlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb25maWdUeXBlOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgaWRlbnRpdHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlkZW50aXR5OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29uZmlndXJhdGlvbi9wYWNrYWdlLmh0bWwKaW5kZXggMjhkZTQxMC4uN2Y4YTg5MiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29uZmlndXJhdGlvbi9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvY29uZmlndXJhdGlvbi9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkNvbmZpZ3VyYXRpb24gQVBJLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9jb25zdHJhaW50L3BhY2thZ2UuaHRtbCBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbnN0cmFpbnQvcGFja2FnZS5odG1sCmluZGV4IDUwZWMxZmMuLjJlNGQzNDAgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbnN0cmFpbnQvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2NvbnN0cmFpbnQvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5Db25zdHJhaW50IEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9EYXRhU2V0LmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9kYXRhc2V0L0RhdGFTZXQuamF2YQppbmRleCBjNjJkYjljLi4yZTRiZGMzIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9kYXRhc2V0L0RhdGFTZXQuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9kYXRhc2V0L0RhdGFTZXQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkuZGF0YXNldDsKIAogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuRnVuY3Rpb247CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9kYXRhc2V0L0RhdGFTZXRTb3VyY2UuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvRGF0YVNldFNvdXJjZS5qYXZhCmluZGV4IDkwZTNlZDUuLjRjZjY4ZjEgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvRGF0YVNldFNvdXJjZS5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvRGF0YVNldFNvdXJjZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5kYXRhc2V0OwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvUXVlcnkuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvUXVlcnkuamF2YQppbmRleCA2NTE0NjJmLi42MWVkZDczIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9kYXRhc2V0L1F1ZXJ5LmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9RdWVyeS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5kYXRhc2V0OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9pdGVyYWJsZS9JdGVyYWJsZURhdGFTZXQuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvaXRlcmFibGUvSXRlcmFibGVEYXRhU2V0LmphdmEKaW5kZXggODgwODQyNy4uMzMwMGVhNCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9pdGVyYWJsZS9JdGVyYWJsZURhdGFTZXQuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9kYXRhc2V0L2l0ZXJhYmxlL0l0ZXJhYmxlRGF0YVNldC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5kYXRhc2V0Lml0ZXJhYmxlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmRhdGFzZXQuRGF0YVNldDsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvaXRlcmFibGUvSXRlcmFibGVRdWVyeS5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9pdGVyYWJsZS9JdGVyYWJsZVF1ZXJ5LmphdmEKaW5kZXggZDYzZTZmOC4uYjgxNmEyNSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9pdGVyYWJsZS9JdGVyYWJsZVF1ZXJ5LmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9pdGVyYWJsZS9JdGVyYWJsZVF1ZXJ5LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLmRhdGFzZXQuaXRlcmFibGU7CiAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvaXRlcmFibGUvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9pdGVyYWJsZS9wYWNrYWdlLmh0bWwKaW5kZXggMTIyNDRkYy4uOTg3NGNiNSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9pdGVyYWJsZS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZGF0YXNldC9pdGVyYWJsZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkl0ZXJhYmxlIERhdGFTZXRzLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9kYXRhc2V0L3BhY2thZ2UuaHRtbCBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvcGFja2FnZS5odG1sCmluZGV4IGY3YmY3NTIuLmYzMjQ2ODIgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5EYXRhU2V0IEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZW50aXR5L0VudGl0eUJ1aWxkZXJUZW1wbGF0ZS5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZW50aXR5L0VudGl0eUJ1aWxkZXJUZW1wbGF0ZS5qYXZhCmluZGV4IDBlYmVkZmYuLjQ0NzM4NDQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2VudGl0eS9FbnRpdHlCdWlsZGVyVGVtcGxhdGUuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9lbnRpdHkvRW50aXR5QnVpbGRlclRlbXBsYXRlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLmVudGl0eTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZW50aXR5L0VudGl0eVJlZmVyZW5jZS5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZW50aXR5L0VudGl0eVJlZmVyZW5jZS5qYXZhCmluZGV4IDYwYzRkMWIuLjk2NzY0N2MgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2VudGl0eS9FbnRpdHlSZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9lbnRpdHkvRW50aXR5UmVmZXJlbmNlLmphdmEKQEAgLTU1LDYgKzU1LDEzIEBACiAgICAgICAgIHJldHVybiBuZXcgRW50aXR5UmVmZXJlbmNlKCAoRW50aXR5Q29tcG9zaXRlKSBvYmplY3QgKTsKICAgICB9CiAKKyAgICBwdWJsaWMgc3RhdGljIEVudGl0eVJlZmVyZW5jZSBjcmVhdGUoIElkZW50aXR5IGlkZW50aXR5ICkKKyAgICB7CisgICAgICAgIGlmKCBpZGVudGl0eSA9PSBudWxsICkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICByZXR1cm4gbmV3IEVudGl0eVJlZmVyZW5jZSggaWRlbnRpdHkuaWRlbnRpdHkoKS5nZXQoKSApOworICAgIH0KKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgaWRlbnRpdHk7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9lbnRpdHkvSWRlbnRpdHkuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2VudGl0eS9JZGVudGl0eS5qYXZhCmluZGV4IDBjODJjYTkuLmI0YWRiYzUgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2VudGl0eS9JZGVudGl0eS5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2VudGl0eS9JZGVudGl0eS5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogRGVmYXVsdCBJZGVudGl0eSBpbXBsZW1lbnRhdGlvbi4KICAgICAgKi8KLSAgICBwdWJsaWMgY2xhc3MgSWRlbnRpdHlNaXhpbgorICAgIGNsYXNzIElkZW50aXR5TWl4aW4KICAgICAgICAgaW1wbGVtZW50cyBJZGVudGl0eQogICAgIHsKICAgICAgICAgQFN0YXRlCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9lbnRpdHkvTGlmZWN5Y2xlLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9lbnRpdHkvTGlmZWN5Y2xlLmphdmEKaW5kZXggNjUwZjQ1Ni4uM2VhYmQ3OCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZW50aXR5L0xpZmVjeWNsZS5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2VudGl0eS9MaWZlY3ljbGUuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogLyoqDQogICogTGlmZWN5Y2xlIGludGVyZmFjZSBmb3IgYWxsIENvbXBvc2l0ZXMuDQogICogPHA+DQotICogVGhpcyBMaWZlY3ljbGUgaW50ZXJmYWNlIGlzIGEgYnVpbHQtaW4gZmVhdHVyZSBvZiB0aGUgUWk0aiBydW50aW1lLCBzaW1pbGFyIHRvIHRoZSBJbml0aWFsaXphYmxlIGludGVyZmFjZS4NCisgKiBUaGlzIExpZmVjeWNsZSBpbnRlcmZhY2UgaXMgYSBidWlsdC1pbiBmZWF0dXJlIG9mIHRoZSBaZXN0IHJ1bnRpbWUsIHNpbWlsYXIgdG8gdGhlIEluaXRpYWxpemFibGUgaW50ZXJmYWNlLg0KICAqIEFueSBNaXhpbiB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgQU5EIGlzIHBhcnQgb2YgYW4gRW50aXR5Q29tcG9zaXRlIHdpbGwgaGF2ZSB0aGVzZSB0d28gbWV0aG9kcyBjYWxsZWQNCiAgKiB1cG9uIGNyZWF0aW9uL3JlbW92YWwgb2YgdGhlIEVudGl0eUNvbXBvc2l0ZSBpbnN0YW5jZSB0by9mcm9tIHRoZSBFbnRpdHlTdG9yZS4gTWVhbmluZywgdGhlIGNyZWF0ZSBtZXRob2QgaXMgY2FsbGVkDQogICogb25seSB3aGVuIHRoZSBpZGVudGlmaWFibGUgRW50aXR5Q29tcG9zaXRlIGlzIGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUsIGFuZCBub3Qgd2hlbiBpdCBpcyByZWFkIGZyb20gaXRzIHBlcnNpc3RlZA0KQEAgLTY0LDcgKzY0LDcgQEAKICAgICAvKioNCiAgICAgICogQ3JlYXRpb24gY2FsbGJhY2sgbWV0aG9kLg0KICAgICAgKiA8cD4NCi0gICAgICogQ2FsbGVkIGJ5IHRoZSBRaTRqIHJ1bnRpbWUgYmVmb3JlIHRoZSBuZXdJbnN0YW5jZSBvZiB0aGUgZW50aXR5IGNvbXBsZXRlcywgYmVmb3JlIHRoZSBjb25zdHJhaW50cyBhcmUgY2hlY2tlZCwNCisgICAgICogQ2FsbGVkIGJ5IHRoZSBaZXN0IHJ1bnRpbWUgYmVmb3JlIHRoZSBuZXdJbnN0YW5jZSBvZiB0aGUgZW50aXR5IGNvbXBsZXRlcywgYmVmb3JlIHRoZSBjb25zdHJhaW50cyBhcmUgY2hlY2tlZCwNCiAgICAgICogYWxsb3dpbmcgZm9yIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24uDQogICAgICAqIDwvcD4NCiAgICAgICogQHRocm93cyBMaWZlY3ljbGVFeGNlcHRpb24gaWYgdGhlIGVudGl0eSBjb3VsZCBub3QgYmUgY3JlYXRlZA0KQEAgLTc1LDcgKzc1LDcgQEAKICAgICAvKioNCiAgICAgICogUmVtb3ZhbCBjYWxsYmFjayBtZXRob2QuDQogICAgICAqIDxwPg0KLSAgICAgKiBDYWxsZWQgYnkgdGhlIFFpNGogcnVudGltZSBiZWZvcmUgdGhlIGVudGl0eSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSwgYWxsb3dpbmcNCisgICAgICogQ2FsbGVkIGJ5IHRoZSBaZXN0IHJ1bnRpbWUgYmVmb3JlIHRoZSBlbnRpdHkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0sIGFsbG93aW5nDQogICAgICAqIGZvciBjbGVhbi11cCBvcGVyYXRpb25zLg0KICAgICAgKiA8L3A+DQogICAgICAqIEB0aHJvd3MgTGlmZWN5Y2xlRXhjZXB0aW9uIGlmIHRoZSBlbnRpdHkgY291bGQgbm90IGJlIHJlbW92ZWQNCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9lbnRpdHkvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZW50aXR5L3BhY2thZ2UuaHRtbAppbmRleCA4MjljN2I3Li4wMzg2ZDhjIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9lbnRpdHkvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2VudGl0eS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkVudGl0eSBBUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2V2ZW50L3BhY2thZ2UuaHRtbCBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2V2ZW50L3BhY2thZ2UuaHRtbAppbmRleCAxNjc5MzUwLi5hNWVkMGE3IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9ldmVudC9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvZXZlbnQvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5FdmVudCBBUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2luamVjdGlvbi9wYWNrYWdlLmh0bWwgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9pbmplY3Rpb24vcGFja2FnZS5odG1sCmluZGV4IDc1N2MyMDAuLmM0MWI0OTUgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2luamVjdGlvbi9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvaW5qZWN0aW9uL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RGVwZW5kZW5jeSBJbmplY3Rpb24gQVBJLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9pbmplY3Rpb24vc2NvcGUvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvaW5qZWN0aW9uL3Njb3BlL3BhY2thZ2UuaHRtbAppbmRleCA4YjU1NDM2Li5iMGVjNDk2IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9pbmplY3Rpb24vc2NvcGUvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL2luamVjdGlvbi9zY29wZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkRlcGVuZGVuY3kgSW5qZWN0aW9uIFNjb3Blcy48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvbWV0cmljcy9NZXRyaWNzTm90U3VwcG9ydGVkRXhjZXB0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9tZXRyaWNzL01ldHJpY3NOb3RTdXBwb3J0ZWRFeGNlcHRpb24uamF2YQppbmRleCBkMzMxMmE0Li5hZWM3ODU5IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9tZXRyaWNzL01ldHJpY3NOb3RTdXBwb3J0ZWRFeGNlcHRpb24uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9tZXRyaWNzL01ldHJpY3NOb3RTdXBwb3J0ZWRFeGNlcHRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkubWV0cmljczsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9tZXRyaWNzL01ldHJpY3NQcm92aWRlci5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvbWV0cmljcy9NZXRyaWNzUHJvdmlkZXIuamF2YQppbmRleCA0MDRiMzFkLi5jMTE5OTZiIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9tZXRyaWNzL01ldHJpY3NQcm92aWRlci5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL21ldHJpY3MvTWV0cmljc1Byb3ZpZGVyLmphdmEKQEAgLTE4LDE2ICsxOCwzOSBAQAogCiAvKioKICAqIE1ldHJpY3MgUHJvdmlkZXIgU1BJLgorICogPHA+CisgKiBUaGUgWmVzdCBSdW50aW1lIHdpbGwgYXV0b21hdGljYWxseSBvb2sgZm9yIGEgc2VydmljZSB0aGF0IGltcGxlbWVudHMgdGhlIE1ldHJpY3NQcm92aWRlciBpbnRlcmRhY2UKKyAqIGFuZCB1c2UgaXQgZm9yIGludGVybmFsIFJ1bnRpbWUgbWV0cmljcywgc3VjaCBhcyB0aGUgVW5pdE9mV29yayBtZWFzdXJpbmcgdGhlIHRpbWUgZnJvbSBjcmVhdGlvbiB0byBjbG9zZS4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIE1ldHJpY3MgTGlicmFyeSBpcyBhdmFpbGFibGUgdG8gYWRkIG1ldHJpYyBmdW5jdGlvbmFsaXR5IHRvIGFwcGxpY2F0aW9ucyBpbiB0aGUgc2FtZSB3YXksIGFuZAorICogd2lsbCB1c2UgdGhlIHNhbWUgTWV0cmljc1Byb3ZpZGVyLgorICogPC9wPgorICogPHA+CisgKiBOb3RlIHRoYXQgdGhlIHVzdWFsIHZpc2liaXRsaXR5IHJ1bGVzIGFwcGxpZXMsIHNvIHlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgTWV0cmljc1Byb3ZpZGVyIHNlcnZlciwKKyAqIHBlcmhhcHMgcGVyIGxheWVyLgorICogPC9wPgogICovCiBwdWJsaWMgaW50ZXJmYWNlIE1ldHJpY3NQcm92aWRlcgogewogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgZmFjdG9yeSBpbnN0YW5jZS4KICAgICAgKgorICAgICAqIFRoZSBpbnN0YW5jdGlhdGlvbiBpcyBkb25lIGJ5IHByb3ZpZGluZyBhIE1ldHJpYyB0eXBlLCB3aGljaCBpcyBvbmUgb2YKKyAgICAgKiA8dWw+CisgICAgICogPGxpPntAbGluayBNZXRyaWNzQ291bnRlcn08L2xpPgorICAgICAqIDxsaT57QGxpbmsgTWV0cmljc0dhdWdlfTwvbGk+CisgICAgICogPGxpPntAbGluayBNZXRyaWNzSGVhbHRoQ2hlY2t9PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rIE1ldHJpY3NIaXN0b2dyYW19PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rIE1ldHJpY3NNZXRlcn08L2xpPgorICAgICAqIDxsaT57QGxpbmsgTWV0cmljc1RpbWVyfTwvbGk+CisgICAgICogPC91bD4KKyAgICAgKgogICAgICAqIEBwYXJhbSBmYWN0b3J5VHlwZSBUaGUgY2xhc3Mgb2YgdGhlIG1ldHJpYyB0eXBlIG5lZWRlZC4KICAgICAgKiBAcGFyYW0gPFQ+ICAgICAgICAgVGhlIG1ldHJpYyB0eXBlIHJlcXVlc3RlZC4KICAgICAgKgogICAgICAqIEByZXR1cm4gQSBmYWN0b3J5IGluc3RhbmNlCisgICAgICoKICAgICAgKiBAdGhyb3dzIE1ldHJpY3NOb3RTdXBwb3J0ZWRFeGNlcHRpb24gd2hlbiB0aGUgTWV0cmljc1Byb3ZpZGVyIGlzIG5vdCBzdXBwb3J0aW5nIHRoZSBmYWN0b3J5IHR5cGUgcmVxdWVzdGVkLgogICAgICAqLwogICAgIDxUIGV4dGVuZHMgTWV0cmljc0ZhY3Rvcnk+IFQgY3JlYXRlRmFjdG9yeSggQ2xhc3M8VD4gZmFjdG9yeVR5cGUgKQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvbWV0cmljcy9wYWNrYWdlLmh0bWwgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9tZXRyaWNzL3BhY2thZ2UuaHRtbAppbmRleCBhMDY1NjdmLi5kMDI4MGJkIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9tZXRyaWNzL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9tZXRyaWNzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+TWV0cmljcyBBUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL21peGluL3BhY2thZ2UuaHRtbCBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL21peGluL3BhY2thZ2UuaHRtbAppbmRleCAxNzIzYjY4Li5hMGViZTA3IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5NaXhpbiBBUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL29iamVjdC9wYWNrYWdlLmh0bWwgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9vYmplY3QvcGFja2FnZS5odG1sCmluZGV4IDg3NzUzNWMuLjFlMDY1MDQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL29iamVjdC9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvb2JqZWN0L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+T2JqZWN0IEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcGFja2FnZS5odG1sCmluZGV4IDgwZjc3ZDcuLmZmN2Q5YWYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9wYWNrYWdlLmh0bWwKQEAgLTEsNSArMSwyMSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KLSAgICAgICAgPGgyPlFpNGogQVBJLjwvaDI+CisgICAgICAgIDxoMj5BcGFjaGUgWmVzdOKEoiBBUEkuPC9oMj4KICAgICA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9wcm9wZXJ0eS9JbnZhbGlkUHJvcGVydHlUeXBlRXhjZXB0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9wcm9wZXJ0eS9JbnZhbGlkUHJvcGVydHlUeXBlRXhjZXB0aW9uLmphdmEKaW5kZXggYzk4MDA3ZS4uNmFmZWU0ZCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcHJvcGVydHkvSW52YWxpZFByb3BlcnR5VHlwZUV4Y2VwdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3Byb3BlcnR5L0ludmFsaWRQcm9wZXJ0eVR5cGVFeGNlcHRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkucHJvcGVydHk7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5BY2Nlc3NpYmxlT2JqZWN0OwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcHJvcGVydHkvUHJvcGVydHlXcmFwcGVyLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9wcm9wZXJ0eS9Qcm9wZXJ0eVdyYXBwZXIuamF2YQppbmRleCBhZmUzMjkyLi5kYzIyNTlkIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9wcm9wZXJ0eS9Qcm9wZXJ0eVdyYXBwZXIuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9wcm9wZXJ0eS9Qcm9wZXJ0eVdyYXBwZXIuamF2YQpAQCAtMSw4ICsxLDI2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkucHJvcGVydHk7CiAKIC8qKgogICogSWYgeW91IHdhbnQgdG8gY2F0Y2ggZ2V0dGluZyBhbmQgc2V0dGluZyBwcm9wZXJ0aWVzLCB0aGVuIGNyZWF0ZSBhIEdlbmVyaWNDb25jZXJuCi0gKiB0aGF0IHdyYXBzIHRoZSBRaTRqLXN1cHBsaWVkIFByb3BlcnR5IGluc3RhbmNlIHdpdGggUHJvcGVydHlXcmFwcGVycy4gT3ZlcnJpZGUKKyAqIHRoYXQgd3JhcHMgdGhlIFplc3Qtc3VwcGxpZWQgUHJvcGVydHkgaW5zdGFuY2Ugd2l0aCBQcm9wZXJ0eVdyYXBwZXJzLiBPdmVycmlkZQogICogZ2V0KCkgYW5kL29yIHNldCgpIHRvIHBlcmZvcm0geW91ciBjdXN0b20gY29kZS4KICAqLwogcHVibGljIGNsYXNzIFByb3BlcnR5V3JhcHBlcgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcHJvcGVydHkvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcHJvcGVydHkvcGFja2FnZS5odG1sCmluZGV4IDQ0YWI1OGQuLjhmYzJhOTMgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3Byb3BlcnR5L3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9wcm9wZXJ0eS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlByb3BlcnR5IEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvUXVlcnlFeHByZXNzaW9ucy5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvUXVlcnlFeHByZXNzaW9ucy5qYXZhCmluZGV4IDc1Mjc2YTAuLjQ1NTAxZWUgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L1F1ZXJ5RXhwcmVzc2lvbnMuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9RdWVyeUV4cHJlc3Npb25zLmphdmEKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXRjaCggTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvciggIlFpNGogQ29yZSBBUEkgY29kZWJhc2UgaXMgY29ycnVwdGVkLiBDb250YWN0IFFpNGogdGVhbTogUXVlcnlFeHByZXNzaW9ucyIgKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCAiWmVzdCBDb3JlIEFQSSBjb2RlYmFzZSBpcyBjb3JydXB0ZWQuIENvbnRhY3QgWmVzdCB0ZWFtOiBRdWVyeUV4cHJlc3Npb25zIiApOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0FuZFNwZWNpZmljYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQW5kU3BlY2lmaWNhdGlvbi5qYXZhCmluZGV4IDk2NDQyMzUuLjEzOGFkMDAgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQW5kU3BlY2lmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQW5kU3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5xdWVyeS5ncmFtbWFyOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5Db21wb3NpdGU7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0Fzc29jaWF0aW9uTm90TnVsbFNwZWNpZmljYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQXNzb2NpYXRpb25Ob3ROdWxsU3BlY2lmaWNhdGlvbi5qYXZhCmluZGV4IDg2Nzk3ZGYuLjY0ZDZkZWYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQXNzb2NpYXRpb25Ob3ROdWxsU3BlY2lmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQXNzb2NpYXRpb25Ob3ROdWxsU3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5xdWVyeS5ncmFtbWFyOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Bc3NvY2lhdGlvbk51bGxTcGVjaWZpY2F0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0Fzc29jaWF0aW9uTnVsbFNwZWNpZmljYXRpb24uamF2YQppbmRleCA1ODM0ZDRiLi45ZjA2Yjk4IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0Fzc29jaWF0aW9uTnVsbFNwZWNpZmljYXRpb24uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0Fzc29jaWF0aW9uTnVsbFNwZWNpZmljYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkucXVlcnkuZ3JhbW1hcjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbjsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQmluYXJ5U3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9CaW5hcnlTcGVjaWZpY2F0aW9uLmphdmEKaW5kZXggZjI1MWY5OS4uMDdjNWQ5OSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9CaW5hcnlTcGVjaWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9CaW5hcnlTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXI7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQ29tcGFyaXNvblNwZWNpZmljYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQ29tcGFyaXNvblNwZWNpZmljYXRpb24uamF2YQppbmRleCBiOGM3NDNlLi5mODU1MDU0IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0NvbXBhcmlzb25TcGVjaWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Db21wYXJpc29uU3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5xdWVyeS5ncmFtbWFyOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5Db21wb3NpdGU7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0NvbnRhaW5zQWxsU3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Db250YWluc0FsbFNwZWNpZmljYXRpb24uamF2YQppbmRleCBhZGY5Yzc2Li43ZmYzZTFiIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0NvbnRhaW5zQWxsU3BlY2lmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQ29udGFpbnNBbGxTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXI7CiAKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQ29udGFpbnNTcGVjaWZpY2F0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0NvbnRhaW5zU3BlY2lmaWNhdGlvbi5qYXZhCmluZGV4IDE2MjJjNTIuLmVhMDQ5ZGUgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvQ29udGFpbnNTcGVjaWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Db250YWluc1NwZWNpZmljYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkucXVlcnkuZ3JhbW1hcjsKIAogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9FcVNwZWNpZmljYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvRXFTcGVjaWZpY2F0aW9uLmphdmEKaW5kZXggZTE5NTM4MC4uYjRjMWQ5MCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9FcVNwZWNpZmljYXRpb24uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0VxU3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5xdWVyeS5ncmFtbWFyOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvRXhwcmVzc2lvblNwZWNpZmljYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvRXhwcmVzc2lvblNwZWNpZmljYXRpb24uamF2YQppbmRleCBkMTMzOGEyLi45ODg2Y2E5IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0V4cHJlc3Npb25TcGVjaWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9FeHByZXNzaW9uU3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5xdWVyeS5ncmFtbWFyOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5Db21wb3NpdGU7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0dlU3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9HZVNwZWNpZmljYXRpb24uamF2YQppbmRleCBiYzY4NDU2Li44MmU5ZTM4IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0dlU3BlY2lmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvR2VTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXI7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9HdFNwZWNpZmljYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvR3RTcGVjaWZpY2F0aW9uLmphdmEKaW5kZXggMzM5NDZiNi4uODgzMTIwYiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9HdFNwZWNpZmljYXRpb24uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0d0U3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5xdWVyeS5ncmFtbWFyOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvTGVTcGVjaWZpY2F0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0xlU3BlY2lmaWNhdGlvbi5qYXZhCmluZGV4IGY3NGJhYmQuLjM3MTVmZmQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvTGVTcGVjaWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9MZVNwZWNpZmljYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkucXVlcnkuZ3JhbW1hcjsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0x0U3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9MdFNwZWNpZmljYXRpb24uamF2YQppbmRleCAwNmY1YzFhLi42ZDMwMDJhIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL0x0U3BlY2lmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvTHRTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXI7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9NYXRjaGVzU3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9NYXRjaGVzU3BlY2lmaWNhdGlvbi5qYXZhCmluZGV4IDEwMWQ2NGQuLjZjZGU1NzcgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvTWF0Y2hlc1NwZWNpZmljYXRpb24uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL01hdGNoZXNTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXI7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvTmVTcGVjaWZpY2F0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL05lU3BlY2lmaWNhdGlvbi5qYXZhCmluZGV4IGI5YzkzODAuLmU4NjQxODQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvTmVTcGVjaWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9OZVNwZWNpZmljYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkucXVlcnkuZ3JhbW1hcjsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL05vdFNwZWNpZmljYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvTm90U3BlY2lmaWNhdGlvbi5qYXZhCmluZGV4IGExN2VhODIuLmE4NTUwMGQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvTm90U3BlY2lmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvTm90U3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5xdWVyeS5ncmFtbWFyOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5Db21wb3NpdGU7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL09yU3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9PclNwZWNpZmljYXRpb24uamF2YQppbmRleCAxYzY0NTRhLi5hYzc3NWQ2IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL09yU3BlY2lmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvT3JTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXI7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvUHJvcGVydHlOb3ROdWxsU3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Qcm9wZXJ0eU5vdE51bGxTcGVjaWZpY2F0aW9uLmphdmEKaW5kZXggZDkyYmIwMi4uYzczYWZhOCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Qcm9wZXJ0eU5vdE51bGxTcGVjaWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Qcm9wZXJ0eU5vdE51bGxTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXI7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvUHJvcGVydHlOdWxsU3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Qcm9wZXJ0eU51bGxTcGVjaWZpY2F0aW9uLmphdmEKaW5kZXggNjViMzNiNS4uN2Y3OTA4ZiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Qcm9wZXJ0eU51bGxTcGVjaWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Qcm9wZXJ0eU51bGxTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXI7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvUHJvcGVydHlSZWZlcmVuY2UuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvUHJvcGVydHlSZWZlcmVuY2UuamF2YQppbmRleCA5YjhmNzNkLi43Yjg2NWRlIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL1Byb3BlcnR5UmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9Qcm9wZXJ0eVJlZmVyZW5jZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5xdWVyeS5ncmFtbWFyOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5Db21wb3NpdGU7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL1F1ZXJ5U3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9RdWVyeVNwZWNpZmljYXRpb24uamF2YQppbmRleCBjZGMzODYxLi4zYzAzM2Q3IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL1F1ZXJ5U3BlY2lmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvUXVlcnlTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXI7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvVmFyaWFibGUuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvVmFyaWFibGUuamF2YQppbmRleCBlZmNlZjUxLi4yMDUzNDdiIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9ncmFtbWFyL1ZhcmlhYmxlLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9WYXJpYWJsZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5xdWVyeS5ncmFtbWFyOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L2dyYW1tYXIvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9wYWNrYWdlLmh0bWwKaW5kZXggZjg2YWJiMi4uZTBiODBmNiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvZ3JhbW1hci9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlF1ZXJ5IEdyYW1tYXIuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L3BhY2thZ2UuaHRtbCBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3F1ZXJ5L3BhY2thZ2UuaHRtbAppbmRleCBhNGI3MjY1Li4yN2U0NDU1IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9xdWVyeS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvcXVlcnkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5RdWVyeSBBUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3NlcnZpY2UvQXZhaWxhYmlsaXR5LmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL0F2YWlsYWJpbGl0eS5qYXZhCmluZGV4IDgxMjVlYmMuLjM5MDVhMWQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3NlcnZpY2UvQXZhaWxhYmlsaXR5LmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2VydmljZS9BdmFpbGFiaWxpdHkuamF2YQpAQCAtMTUsNyArMTUsNyBAQAogcGFja2FnZSBvcmcucWk0ai5hcGkuc2VydmljZTsKIAogLyoqCi0gKiBTZXJ2aWNlcyBjYW4gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIGluIG9yZGVyIHRvIGFsbG93IFFpNGogdG8gYXNrCisgKiBTZXJ2aWNlcyBjYW4gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIGluIG9yZGVyIHRvIGFsbG93IFplc3QgdG8gYXNrCiAgKiBpdCB3aGV0aGVyIGl0IGlzIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHVzZSBvciBub3QuIFRoaXMgaXMgYWNjZXNzZWQKICAqIGJ5IGNsaWVudHMgdGhyb3VnaCB0aGUgU2VydmljZVJlZmVyZW5jZSBvZiB0aGUgc2VydmljZS4gU2VydmljZXMgdGhhdCBkbyBub3QKICAqIGltcGxlbWVudCB0aGlzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBiZSBhdmFpbGFibGUuCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL0lkZW50aXR5RGVzY3JpcHRvci5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2VydmljZS9JZGVudGl0eURlc2NyaXB0b3IuamF2YQppbmRleCAxZmMzZTU5Li4xM2UwZWU1IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL0lkZW50aXR5RGVzY3JpcHRvci5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3NlcnZpY2UvSWRlbnRpdHlEZXNjcmlwdG9yLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnNlcnZpY2U7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2VydmljZS9TZXJ2aWNlRmluZGVyLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL1NlcnZpY2VGaW5kZXIuamF2YQppbmRleCBlZmFhZmY5Li4zZmZiMjEzIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL1NlcnZpY2VGaW5kZXIuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL1NlcnZpY2VGaW5kZXIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICogc2hvdWxkIGJlIGluY2x1ZGVkPC9saT4KICAqIDwvb2w+CiAgKiA8cD4KLSAqIEJvdGggbmF0aXZlIFFpNGogc2VydmljZXMgYW5kIGltcG9ydGVkIHNlcnZpY2VzIGFyZSBjb25zaWRlcmVkLCB3aXRoIHByZWZlcmVuY2UgdG8gbmF0aXZlIHNlcnZpY2VzLgorICogQm90aCBuYXRpdmUgWmVzdCBzZXJ2aWNlcyBhbmQgaW1wb3J0ZWQgc2VydmljZXMgYXJlIGNvbnNpZGVyZWQsIHdpdGggcHJlZmVyZW5jZSB0byBuYXRpdmUgc2VydmljZXMuCiAgKiA8L3A+CiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgU2VydmljZUZpbmRlcgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2VydmljZS9pbXBvcnRlci9wYWNrYWdlLmh0bWwgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL2ltcG9ydGVyL3BhY2thZ2UuaHRtbAppbmRleCA2YWY5MjZhLi5kOTYwYjNkIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL2ltcG9ydGVyL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL2ltcG9ydGVyL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U2VydmljZSBJbXBvcnRlcnMuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3NlcnZpY2UvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2VydmljZS9wYWNrYWdlLmh0bWwKaW5kZXggODBlMzg2NS4uNTg3OTM3YyAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2VydmljZS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2VydmljZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNlcnZpY2UgQVBJLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL3F1YWxpZmllci9wYWNrYWdlLmh0bWwgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zZXJ2aWNlL3F1YWxpZmllci9wYWNrYWdlLmh0bWwKaW5kZXggMTAzNTQxZS4uZWMwZWRkMyAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2VydmljZS9xdWFsaWZpZXIvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3NlcnZpY2UvcXVhbGlmaWVyL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U2VydmljZSBRdWFsaWZpZXJzLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zaWRlZWZmZWN0L2ludGVybmFsL3BhY2thZ2UuaHRtbCBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3NpZGVlZmZlY3QvaW50ZXJuYWwvcGFja2FnZS5odG1sCmluZGV4IDExOGJiMjIuLjI2OTc3NGUgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3NpZGVlZmZlY3QvaW50ZXJuYWwvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3NpZGVlZmZlY3QvaW50ZXJuYWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMT5JbnRlcm5hbC9Qcml2YXRlIHBhY2thZ2UgZm9yIHRoZSBBUEkuPC9oMT4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3NpZGVlZmZlY3QvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2lkZWVmZmVjdC9wYWNrYWdlLmh0bWwKaW5kZXggODdkY2Q4MS4uYTY1OGFkYiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2lkZWVmZmVjdC9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc2lkZWVmZmVjdC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNpZGVFZmZlY3QgQVBJLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zdHJ1Y3R1cmUvQXBwbGljYXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3N0cnVjdHVyZS9BcHBsaWNhdGlvbi5qYXZhCmluZGV4IDBlNTdmZmYuLjYwMjM5NDIgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3N0cnVjdHVyZS9BcHBsaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3N0cnVjdHVyZS9BcHBsaWNhdGlvbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmFjdGl2YXRpb24uQWN0aXZhdGlvbkV2ZW50TGlzdGVuZXJSZWdpc3RyYXRpb247CiAKIC8qKgotICogVGhlIEFwcGxpY2F0aW9uIHJlcHJlc2VudHMgYSB3aG9sZSBRaTRqIGFwcGxpY2F0aW9uLgorICogVGhlIEFwcGxpY2F0aW9uIHJlcHJlc2VudHMgYSB3aG9sZSBaZXN0IGFwcGxpY2F0aW9uLgogICovCiBwdWJsaWMgaW50ZXJmYWNlIEFwcGxpY2F0aW9uCiAgICAgZXh0ZW5kcyBBY3RpdmF0aW9uRXZlbnRMaXN0ZW5lclJlZ2lzdHJhdGlvbiwgQWN0aXZhdGlvbiwgTWV0YUluZm9Ib2xkZXIKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3N0cnVjdHVyZS9BcHBsaWNhdGlvbkRlc2NyaXB0b3IuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3N0cnVjdHVyZS9BcHBsaWNhdGlvbkRlc2NyaXB0b3IuamF2YQppbmRleCA0MmU3YjYxLi5iMzNmMTM0IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zdHJ1Y3R1cmUvQXBwbGljYXRpb25EZXNjcmlwdG9yLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc3RydWN0dXJlL0FwcGxpY2F0aW9uRGVzY3JpcHRvci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiB7CiAgICAgLyoqCiAgICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBcHBsaWNhdGlvbi4KLSAgICAgKiBAcGFyYW0gcnVudGltZSBRaTRqIFJ1bnRpbWUKKyAgICAgKiBAcGFyYW0gcnVudGltZSBaZXN0IFJ1bnRpbWUKICAgICAgKiBAcGFyYW0gaW1wb3J0ZWRTZXJ2aWNlSW5zdGFuY2VzIEltcG9ydGVkIFNlcnZpY2VzIGluc3RhbmNlcwogICAgICAqIEByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFwcGxpY2F0aW9uLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc3RydWN0dXJlL0xheWVyLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zdHJ1Y3R1cmUvTGF5ZXIuamF2YQppbmRleCBmYmRlOGM0Li40MjY4NzY0IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zdHJ1Y3R1cmUvTGF5ZXIuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zdHJ1Y3R1cmUvTGF5ZXIuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRpb25FdmVudExpc3RlbmVyUmVnaXN0cmF0aW9uOwogCiAvKioKLSAqIFRoZSBMYXllciByZXByZXNlbnRzIGEgc2luZ2xlIGxheWVyIGluIGEgUWk0aiBhcHBsaWNhdGlvbi4KKyAqIFRoZSBMYXllciByZXByZXNlbnRzIGEgc2luZ2xlIGxheWVyIGluIGEgWmVzdCBhcHBsaWNhdGlvbi4KICAqLwogcHVibGljIGludGVyZmFjZSBMYXllcgogICAgIGV4dGVuZHMgQWN0aXZhdGlvbkV2ZW50TGlzdGVuZXJSZWdpc3RyYXRpb24sIEFjdGl2YXRpb24sIE1ldGFJbmZvSG9sZGVyCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zdHJ1Y3R1cmUvTW9kdWxlLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zdHJ1Y3R1cmUvTW9kdWxlLmphdmEKaW5kZXggNzM2MGY5Ni4uNDdmZmFiOCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc3RydWN0dXJlL01vZHVsZS5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3N0cnVjdHVyZS9Nb2R1bGUuamF2YQpAQCAtMjYsNiArMjYsOSBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtGYWN0b3J5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZUJ1aWxkZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLlZpc2l0YWJsZTsKK2ltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLlZpc2l0b3I7CiAKIC8qKgogICogQVBJIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgTW9kdWxlLiBJbnN0YW5jZXMKQEAgLTc2LDQgKzc5LDUgQEAKICAgICAgKiBAcmV0dXJuIHRoZSBkZXNjcmlwdG9yIGZvciBhIHZhbHVlIGNvbXBvc2l0ZSBvciBudWxsIGlmIHRoZSBjbGFzcyBjb3VsZCBub3QgYmUgZm91bmQgb3IgdGhlIHZhbHVlIGNvbXBvc2l0ZSBpcyBub3QgdmlzaWJsZQogICAgICAqLwogICAgIFZhbHVlRGVzY3JpcHRvciB2YWx1ZURlc2NyaXB0b3IoIFN0cmluZyB0eXBlTmFtZSApOworCiB9CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zdHJ1Y3R1cmUvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvc3RydWN0dXJlL3BhY2thZ2UuaHRtbAppbmRleCBmOThlMmQzLi4zMTM0YTkwIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS9zdHJ1Y3R1cmUvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3N0cnVjdHVyZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkFwcGxpY2F0aW9uIFN0cnVjdHVyZSBBUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3R5cGUvSGFzVHlwZXMuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3R5cGUvSGFzVHlwZXMuamF2YQppbmRleCA1MjFlYmM2Li4wYWQzNmE0IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS90eXBlL0hhc1R5cGVzLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdHlwZS9IYXNUeXBlcy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS50eXBlOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3R5cGUvTWFwVHlwZS5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdHlwZS9NYXBUeXBlLmphdmEKaW5kZXggZGRmMDNjNS4uMWNiMTcwMCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdHlwZS9NYXBUeXBlLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdHlwZS9NYXBUeXBlLmphdmEKQEAgLTI3LDYgKzI3LDcgQEAKIAogICAgIHByaXZhdGUgVmFsdWVUeXBlIGtleVR5cGU7CiAgICAgcHJpdmF0ZSBWYWx1ZVR5cGUgdmFsdWVUeXBlOworICAgIHByaXZhdGUgZmluYWwgU2VyaWFsaXphdGlvbi5WYXJpYW50IHZhcmlhbnQ7CiAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNNYXAoIFR5cGUgdHlwZSApCiAgICAgewpAQCAtMzksMTEgKzQwLDIyIEBACiAgICAgICAgIHJldHVybiBuZXcgTWFwVHlwZSggTWFwLmNsYXNzLCBWYWx1ZVR5cGUub2YoIGtleVR5cGUgKSwgVmFsdWVUeXBlLm9mKCB2YWx1ZVR5cGUgKSApOwogICAgIH0KIAorICAgIHB1YmxpYyBzdGF0aWMgTWFwVHlwZSBvZiggQ2xhc3M8Pz4ga2V5VHlwZSwgQ2xhc3M8Pz4gdmFsdWVUeXBlLCBTZXJpYWxpemF0aW9uLlZhcmlhbnQgdmFyaWFudCApCisgICAgeworICAgICAgICByZXR1cm4gbmV3IE1hcFR5cGUoIE1hcC5jbGFzcywgVmFsdWVUeXBlLm9mKCBrZXlUeXBlICksIFZhbHVlVHlwZS5vZiggdmFsdWVUeXBlICksIHZhcmlhbnQgKTsKKyAgICB9CisKICAgICBwdWJsaWMgTWFwVHlwZSggQ2xhc3M8Pz4gdHlwZSwgVmFsdWVUeXBlIGtleVR5cGUsIFZhbHVlVHlwZSB2YWx1ZVR5cGUgKQogICAgIHsKKyAgICAgICAgdGhpcyggdHlwZSwga2V5VHlwZSwgdmFsdWVUeXBlLCBTZXJpYWxpemF0aW9uLlZhcmlhbnQuZW50cnkgKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWFwVHlwZSggQ2xhc3M8Pz4gdHlwZSwgVmFsdWVUeXBlIGtleVR5cGUsIFZhbHVlVHlwZSB2YWx1ZVR5cGUsIFNlcmlhbGl6YXRpb24uVmFyaWFudCB2YXJpYW50ICkKKyAgICB7CiAgICAgICAgIHN1cGVyKCB0eXBlICk7CiAgICAgICAgIHRoaXMua2V5VHlwZSA9IGtleVR5cGU7CiAgICAgICAgIHRoaXMudmFsdWVUeXBlID0gdmFsdWVUeXBlOworICAgICAgICB0aGlzLnZhcmlhbnQgPSB2YXJpYW50OwogICAgICAgICBpZiggIWlzTWFwKCB0eXBlICkgKQogICAgICAgICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCB0eXBlICsgIiBpcyBub3QgYSBNYXAuIiApOwpAQCAtNjAsNiArNzIsMTEgQEAKICAgICAgICAgcmV0dXJuIHZhbHVlVHlwZTsKICAgICB9CiAKKyAgICBwdWJsaWMgU2VyaWFsaXphdGlvbi5WYXJpYW50IHZhcmlhbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhcmlhbnQ7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICAgewpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdHlwZS9TZXJpYWxpemF0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS90eXBlL1NlcmlhbGl6YXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzE4NGEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdHlwZS9TZXJpYWxpemF0aW9uLmphdmEKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgUmlja2FyZCDDlmJlcmcuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGouYXBpLnR5cGU7CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OworCisvKioKKyAqIFNlcmlhbGl6YXRpb24gb3B0aW9ucyBmb3IgUHJvcGVydHkgaW50c3RhbmNlcy4KKyAqIDxwPgorICogVGhlIHtAY29kZSBlbnRyeX0gdHlwZSByZXByZXNlbnRzIHRoZSBleHBsaWNpdCBrZXk9a2V5VmFsdWUsIHZhbHVlPXZhbHVlVmFsdWUuIEZvciBKU09OIHNlcmlhbGl6YXRpb247CisgKiA8L3A+CisgKiA8cHJlPgorICogICAgIFsKKyAqICAgICAgICAgeyAia2V5MSIgOiAidmFsdWUxIiB9LAorICogICAgICAgICB7ICJrZXkyIiA6ICJ2YWx1ZTIiIH0KKyAqICAgICBdCisgKiA8L3ByZT4KKyAqIDxwPgorICogRm9yIFhNTCBzZXJpYWxpemF0aW9uOworICogPC9wPgorICogPHByZT4KKyAqICAgICAmbHQ7b2JqZWN0Jmd0OworICogICAgICAgICAmbHQ7CisgKiAgICAgJmx0Oy9vYmplY3QmZ3Q7CisgKiA8L3ByZT4KKyAqIDxwPgorICogVGhlIHtAY29kZSBvYmplY3R9IHR5cGUgcmVwcmVzZW50cyB0aGUgZXhwbGljaXQga2V5VmFsdWU9dmFsdWVWYWx1ZS4KKyAqIDwvcD4KKyAqLworQFJldGVudGlvbiggUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUgKQorQFRhcmdldCggeyBFbGVtZW50VHlwZS5UWVBFLCBFbGVtZW50VHlwZS5NRVRIT0QgfSApCitARG9jdW1lbnRlZAorcHVibGljIEBpbnRlcmZhY2UgU2VyaWFsaXphdGlvbgoreworICAgIFZhcmlhbnQgdmFsdWUoKTsKKworICAgIGVudW0gVmFyaWFudAorICAgIHsKKyAgICAgICAgZW50cnksIG9iamVjdAorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3R5cGUvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdHlwZS9wYWNrYWdlLmh0bWwKaW5kZXggZmFjNzA0ZC4uZDQyYmFhMyAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdHlwZS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdHlwZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlR5cGUgQVBJLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL0VudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbi5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9FbnRpdHlUeXBlTm90Rm91bmRFeGNlcHRpb24uamF2YQppbmRleCAzMTFkYTYyLi4zOTc2NWZkIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL0VudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uLmphdmEKQEAgLTE1LDggKzE1LDEyIEBACiAgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnVuaXRvZndvcms7CiAKK2ltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uOworCitpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLmZvbGQ7CisKIC8qKgotICogUWk0aiBleGNlcHRpb24gdG8gYmUgdGhyb3duIGluIGNhc2UgdGhhdCBhbiBlbnRpdHkgY29tcG9zaXRlCisgKiBaZXN0IGV4Y2VwdGlvbiB0byBiZSB0aHJvd24gaW4gY2FzZSB0aGF0IGFuIGVudGl0eSBjb21wb3NpdGUKICAqIHdhcyBub3QgZm91bmQgZHVyaW5nIGEgbG9va3VwIGNhbGwuCiAgKi8KIHB1YmxpYyBjbGFzcyBFbnRpdHlUeXBlTm90Rm91bmRFeGNlcHRpb24KQEAgLTI0LDEyICsyOCwzMiBAQAogewogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGNvbXBvc2l0ZVR5cGU7CiAKLSAgICBwdWJsaWMgRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uKCBTdHJpbmcgZW50aXR5VHlwZSApCisgICAgcHVibGljIEVudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbiggU3RyaW5nIGVudGl0eVR5cGUsIFN0cmluZyBtb2R1bGVOYW1lLCBJdGVyYWJsZTxTdHJpbmc+IHZpc2liaWxpdHkgKQogICAgIHsKLSAgICAgICAgc3VwZXIoIkNvdWxkIG5vdCBmaW5kIGFuIEVudGl0eUNvbXBvc2l0ZSBvZiB0eXBlICIgKyBlbnRpdHlUeXBlKTsKKyAgICAgICAgc3VwZXIoICJDb3VsZCBub3QgZmluZCBhbiBFbnRpdHlDb21wb3NpdGUgb2YgdHlwZSAiICsgZW50aXR5VHlwZSArICIgaW4gbW9kdWxlIFsiICsgbW9kdWxlTmFtZSArICJdLlxuIiArCisgICAgICAgICAgICAgICAiXHRUaGUgZm9sbG93aW5nIGVudGl0eSB0eXBlcyBhcmUgdmlzaWJsZTpcbiIgKyBqb2luKHZpc2liaWxpdHkpICk7CiAgICAgICAgIHRoaXMuY29tcG9zaXRlVHlwZSA9IGVudGl0eVR5cGU7CiAgICAgfQogCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGpvaW4oIEl0ZXJhYmxlPFN0cmluZz4gdmlzaWJpbGl0eSApCisgICAgeworICAgICAgICByZXR1cm4gZm9sZCggbmV3IEZ1bmN0aW9uPFN0cmluZywgU3RyaW5nPigpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFN0cmluZyBtYXAoIFN0cmluZyB0eXBlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCB0eXBlICk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCggIlxuIiApOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgdmlzaWJpbGl0eSApOworICAgIH0KKwogICAgIHB1YmxpYyBTdHJpbmcgY29tcG9zaXRlVHlwZSgpCiAgICAgewogICAgICAgICByZXR1cm4gY29tcG9zaXRlVHlwZTsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvTm9TdWNoRW50aXR5RXhjZXB0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL05vU3VjaEVudGl0eUV4Y2VwdGlvbi5qYXZhCmluZGV4IGFmZjNiZmEuLmNiZmZlOWQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvTm9TdWNoRW50aXR5RXhjZXB0aW9uLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9Ob1N1Y2hFbnRpdHlFeGNlcHRpb24uamF2YQpAQCAtMTQsNiArMTQsNyBAQAogcGFja2FnZSBvcmcucWk0ai5hcGkudW5pdG9md29yazsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOworaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2U7CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlczsKIApAQCAtMjUsMjUgKzI2LDI4IEBACiAgICAgZXh0ZW5kcyBVbml0T2ZXb3JrRXhjZXB0aW9uCiB7CiAgICAgcHJpdmF0ZSBmaW5hbCBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHk7CisgICAgcHJpdmF0ZSBmaW5hbCBVc2VjYXNlIHVzZWNhc2U7CiAgICAgcHJpdmF0ZSBmaW5hbCBDbGFzczw/PltdIG1peGluVHlwZXM7CiAKLSAgICBwdWJsaWMgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHksIENsYXNzPD8+IG1peGluVHlwZSApCisgICAgcHVibGljIE5vU3VjaEVudGl0eUV4Y2VwdGlvbiggRW50aXR5UmVmZXJlbmNlIGlkZW50aXR5LCBDbGFzczw/PiBtaXhpblR5cGUsIFVzZWNhc2UgdXNlY2FzZSApCiAgICAgewotICAgICAgICBzdXBlciggIkNvdWxkIG5vdCBmaW5kIGVudGl0eSAoIiArIGlkZW50aXR5ICsgIikgb2YgdHlwZSAiICsgbWl4aW5UeXBlLmdldE5hbWUoKSApOworICAgICAgICBzdXBlciggIkNvdWxkIG5vdCBmaW5kIGVudGl0eSAoIiArIGlkZW50aXR5ICsgIikgb2YgdHlwZSAiICsgbWl4aW5UeXBlLmdldE5hbWUoKSArICIgaW4gdXNlY2FzZSAnIiArIHVzZWNhc2UubmFtZSgpICsgIiciICk7CiAgICAgICAgIHRoaXMuaWRlbnRpdHkgPSBpZGVudGl0eTsKKyAgICAgICAgdGhpcy51c2VjYXNlID0gdXNlY2FzZTsKICAgICAgICAgdGhpcy5taXhpblR5cGVzID0gbmV3IENsYXNzPD8+W117IG1peGluVHlwZSB9OwogICAgIH0KIAotICAgIHB1YmxpYyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSwgQ2xhc3M8Pz5bXSBtaXhpblR5cGVzICkKKyAgICBwdWJsaWMgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHksIENsYXNzPD8+W10gbWl4aW5UeXBlcywgVXNlY2FzZSB1c2VjYXNlICkKICAgICB7Ci0gICAgICAgIHN1cGVyKCAiQ291bGQgbm90IGZpbmQgZW50aXR5ICgiICsgaWRlbnRpdHkgKyAiKSBvZiB0eXBlICIgKyB0b1N0cmluZyggbWl4aW5UeXBlcyApICk7CisgICAgICAgIHN1cGVyKCAiQ291bGQgbm90IGZpbmQgZW50aXR5ICgiICsgaWRlbnRpdHkgKyAiKSBvZiB0eXBlICIgKyB0b1N0cmluZyggbWl4aW5UeXBlcyApICsgIiBpbiB1c2VjYXNlICciICsgdXNlY2FzZS5uYW1lKCkgKyAiJyIgKTsKICAgICAgICAgdGhpcy5pZGVudGl0eSA9IGlkZW50aXR5OwogICAgICAgICB0aGlzLm1peGluVHlwZXMgPSBtaXhpblR5cGVzOworICAgICAgICB0aGlzLnVzZWNhc2UgPSB1c2VjYXNlOwogICAgIH0KIAotICAgIHB1YmxpYyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSwgSXRlcmFibGU8Q2xhc3M8Pz4+IHR5cGVzICkKKyAgICBwdWJsaWMgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHksIEl0ZXJhYmxlPENsYXNzPD8+PiB0eXBlcywgVXNlY2FzZSB1c2VjYXNlICkKICAgICB7Ci0gICAgICAgIHRoaXMoIGlkZW50aXR5LCBjYXN0VG9BcnJheSggdHlwZXMgKSApOworICAgICAgICB0aGlzKCBpZGVudGl0eSwgY2FzdFRvQXJyYXkoIHR5cGVzICksIHVzZWNhc2UgKTsKICAgICB9CiAKICAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIGlkZW50aXR5KCkKQEAgLTU2LDYgKzYwLDExIEBACiAgICAgICAgIHJldHVybiBtaXhpblR5cGVzOwogICAgIH0KIAorICAgIHB1YmxpYyBVc2VjYXNlIHVzZWNhc2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVzZWNhc2U7CisgICAgfQorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3M8Pz5bXSBjYXN0VG9BcnJheSggSXRlcmFibGU8Q2xhc3M8Pz4+IGl0ZXJhYmxlQ2xhc3NlcyApCiAgICAgewogICAgICAgICBJdGVyYWJsZTxDbGFzcz4gdHlwZXMgPSBJdGVyYWJsZXMuY2FzdCggaXRlcmFibGVDbGFzc2VzICk7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL1VuaXRPZldvcmsuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvVW5pdE9mV29yay5qYXZhCmluZGV4IGUxN2JjMDcuLjJjZTY4NTUgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvVW5pdE9mV29yay5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvVW5pdE9mV29yay5qYXZhCkBAIC0yMCw2ICsyMCw3IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5BbWJpZ3VvdXNUeXBlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5QnVpbGRlcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LklkZW50aXR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuTGlmZWN5Y2xlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eURlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnF1ZXJ5LlF1ZXJ5OwpAQCAtMzQ4LDQgKzM0OSw4MSBAQAogICAgICAqIEBwYXJhbSBjYWxsYmFjayBhIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZCB3aXRoIHRoaXMgVW5pdE9mV29yawogICAgICAqLwogICAgIHZvaWQgcmVtb3ZlVW5pdE9mV29ya0NhbGxiYWNrKCBVbml0T2ZXb3JrQ2FsbGJhY2sgY2FsbGJhY2sgKTsKKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIHRoZSBwcm92aWRlZCBFbnRpdHkgdG8gYSBWYWx1ZSBvZiB0aGUgc2FtZSB0eXBlLgorICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gY29udmVydCBhbiBFbnRpdHlDb21wb3NpdGUgdG8gYSBWYWx1ZUNvbXBvc2l0ZS4KKyAgICAgKiA8cD4KKyAgICAgKiBBbGwgUHJvcGVydHkgdmFsdWVzIGFyZSB0cmFuc2ZlcnJlZCBhY3Jvc3MgYXMtaXMsIGFuZCB0aGUgQXNzb2NpYXRpb24sIE1hbnlBc3NvY2lhdGlvbgorICAgICAqIGFuZCBOYW1lZEFzc29jaWF0aW5vIHZhbHVlcyBhcmUga2VwdCBpbiB0aGUgVmFsdWVDb21wb3NpdGUgYXMgRW50aXR5UmVmZXJlbmNlcworICAgICAqIHVudGlsIHRoZXkgYXJlIGRlcmVmZXJlbmNlZCAoZ2V0KCkgYW5kIG90aGVyIG1ldGhvZHMpLCBhbmQgSUYgYSBVbml0T2ZXb3JrIGlzCisgICAgICogcHJlc2VudCBhdCBkZXJlZmVyZW5jaW5nIHRoZSBjb3JyZXNwb25kaW5nIEVudGl0eUNvbXBvaXN0ZSBpcyByZXRyaWV2ZWQgZnJvbSB0aGUKKyAgICAgKiBFbnRpdHlTdG9yZS4gSWYgdGhlcmUgaXMgbm90IGFuIFVuaXRPZldvcmsgcHJlc2VudCwgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogRm9yIHRoaXMgdG8gd29yaywgdGhlIENvbXBvc2l0ZXMgKGJvdGggRW50aXR5IGFuZCBWYWx1ZSkgbXVzdCBub3QgZGVjbGFyZSB0aGUKKyAgICAgKiBFbnRpdHlDb21wb3NpdGUgYW5kIFZhbHVlQ29tcG9zaXRlIHN1cGVyIHR5cGVzLCBidXQgcmVseSBvbiB0aGUgZGVjbGFyYXRpb24gaW4KKyAgICAgKiB0aGUgYXNzZW1ibHksIGFuZCBhbHNvIGV4dGVuZCB0aGUgSWRlbnRpdHkgc3VwZXJ0eXBlLgorICAgICAqIDwvcD4KKyAgICAgKiBFeGFtcGxlOworICAgICAqIDxwcmU+PGNvZGU+CisgICAgICogICAgIHB1YmxpYyBpbnRlcmZhY2UgUGVyc29uIGV4dGVuZHMgSWRlbnRpdHkgeyAuLi4gfTsKKyAgICAgKiAgICAgcHVibGljIGNsYXNzIE15QXNzZW1ibGVyCisgICAgICogICAgIHsKKyAgICAgKiAgICAgICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQorICAgICAqICAgICAgICAgeworICAgICAqICAgICAgICAgICAgIG1vZHVsZS52YWx1ZXMoIFBlcnNvbi5jbGFzcyApOworICAgICAqICAgICAgICAgICAgIG1vZHVsZS5lbnRpdGllcyggUGVyc29uLmNsYXNzICk7CisgICAgICogICAgICAgICB9CisgICAgICogICAgIH0KKyAgICAgKiA8L2NvZGU+PC9wcmU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbWFyeVR5cGUgVGhlIHNoYXJlZCB0eXBlIGZvciB3aGljaCB0aGUgcHJvcGVydGllcyBhbmQgYXNzb2NpYXRpb25zIHdpbGwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgYmUgY29udmVydGVkLiBQcm9wZXJ0aWVzIG91dHNpZGUgdGhpcyB0eXBlIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgKiBAcGFyYW0gZW50aXR5Q29tcG9zaXRlIFRoZSBlbnRpdHkgdG8gYmUgY29udmVyZWQuCisgICAgICovCisgICAgPFQgZXh0ZW5kcyBJZGVudGl0eT4gVCB0b1ZhbHVlKCBDbGFzczxUPiBwcmltYXJ5VHlwZSwgVCBlbnRpdHlDb21wb3NpdGUgKTsKKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIHRoZSBwcm92aWRlZCBWYWx1ZSB0byBhbiBFbnRpdHkgb2YgdGhlIHNhbWUgdHlwZS4KKyAgICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGNvbnZlcnQgYSBWYWx1ZUNvbXBvc2l0ZSB0byBhbiBFbnRpdHlDb21wb3NpdGUuCisgICAgICogPHA+CisgICAgICogQWxsIFByb3BlcnR5IHZhbHVlcyBhcmUgdHJhbnNmZXJyZWQgYWNyb3NzIGFzLWlzIChubyBkZWVwIGNvcHkgaW4gY2FzZSBtdXRhYmxlCisgICAgICogdHlwZXMgKERJU0NPVVJBR0VEISkgYXJlIHVzZWQpLCBhbmQgdGhlIEFzc29jaWF0aW9uLCBNYW55QXNzb2NpYXRpb24KKyAgICAgKiBhbmQgTmFtZWRBc3NvY2lhdGlubyB0aGF0IHdlcmUgaW4gdGhlIFZhbHVlQ29tcG9zaXRlIGFzIEVudGl0eVJlZmVyZW5jZXMgYXJlCisgICAgICogdHJhbnNmZXJyZWQgaW50byB0aGUgRW50aXR5Q29tcG9zaXRlIGNvcnJlY3RseSwgYW5kIGNhbiBiZSBkZXJlZmVyZW5jZWQuCisgICAgICogPC9wPgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgY2FsbGVkIHdpdGhpbiBhIFVuaXRPZldvcmsuCisgICAgICogPC9wPgorICAgICAqIDxwPgorICAgICAqIElmIGFuIEVudGl0eSB3aXRoIHRoZSBJZGVudGl0eSBpbiB0aGUgVmFsdWVDb21wb3NpdGUgYWxyZWFkeSBleGlzdHMsIHRoZW4gdGhhdAorICAgICAqIEVudGl0eSBpcyB1cGRhdGVkIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBWYWx1ZUNvbXBvc2l0ZS4gSWYgYW4gRW50aXR5IG9mCisgICAgICogdGhhdCBJZGVudGl0eSBkb2Vzbid0IGV4aXN0IGFuZCBuZXcgb25lIGlzIGNyZWF0ZWQuCisgICAgICogPC9wPgorICAgICAqIDxwPgorICAgICAqIEZvciB0aGlzIHRvIHdvcmssIHRoZSBDb21wb3NpdGVzIChib3RoIEVudGl0eSBhbmQgVmFsdWUpIG11c3Qgbm90IGRlY2xhcmUgdGhlCisgICAgICogRW50aXR5Q29tcG9zaXRlIGFuZCBWYWx1ZUNvbXBvc2l0ZSBzdXBlciB0eXBlcywgYnV0IHJlbHkgb24gdGhlIGRlY2xhcmF0aW9uIGluCisgICAgICogdGhlIGFzc2VtYmx5LCBhbmQgYWxzbyBleHRlbmQgdGhlIElkZW50aXR5IHN1cGVydHlwZS4KKyAgICAgKiA8L3A+CisgICAgICogRXhhbXBsZTsKKyAgICAgKiA8cHJlPjxjb2RlPgorICAgICAqICAgICBwdWJsaWMgaW50ZXJmYWNlIFBlcnNvbiBleHRlbmRzIElkZW50aXR5IHsgLi4uIH07CisgICAgICogICAgIHB1YmxpYyBjbGFzcyBNeUFzc2VtYmxlcgorICAgICAqICAgICB7CisgICAgICogICAgICAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgKiAgICAgICAgIHsKKyAgICAgKiAgICAgICAgICAgICBtb2R1bGUudmFsdWVzKCBQZXJzb24uY2xhc3MgKTsKKyAgICAgKiAgICAgICAgICAgICBtb2R1bGUuZW50aXRpZXMoIFBlcnNvbi5jbGFzcyApOworICAgICAqICAgICAgICAgfQorICAgICAqICAgICB9CisgICAgICogPC9jb2RlPjwvcHJlPgorICAgICAqCisgICAgICogQHBhcmFtIHByaW1hcnlUeXBlIFRoZSBzaGFyZWQgdHlwZSBmb3Igd2hpY2ggdGhlIHByb3BlcnRpZXMgYW5kIGFzc29jaWF0aW9ucyB3aWxsCisgICAgICogICAgICAgICAgICAgICAgICAgIGJlIGNvbnZlcnRlZC4gUHJvcGVydGllcyBvdXRzaWRlIHRoaXMgdHlwZSB3aWxsIGJlIGlnbm9yZWQuCisgICAgICogQHBhcmFtIHZhbHVlQ29tcG9zaXRlIFRoZSBWYWx1ZSB0byBiZSBjb252ZXJlZCBpbnRvIGFuIEVudGl0eS4KKyAgICAgKi8KKyAgICA8VCBleHRlbmRzIElkZW50aXR5PiBUIHRvRW50aXR5KCBDbGFzczxUPiBwcmltYXJ5VHlwZSwgVCB2YWx1ZUNvbXBvc2l0ZSApOworCisKIH0KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvVW5pdE9mV29ya09wdGlvbnMuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvVW5pdE9mV29ya09wdGlvbnMuamF2YQppbmRleCAxMTUwODU0Li4zM2U1NDRkIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL1VuaXRPZldvcmtPcHRpb25zLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9Vbml0T2ZXb3JrT3B0aW9ucy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvVW5pdE9mV29ya1RlbXBsYXRlLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL1VuaXRPZldvcmtUZW1wbGF0ZS5qYXZhCmluZGV4IGRhMjA4YWIuLmU4NjYzYjQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvVW5pdE9mV29ya1RlbXBsYXRlLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9Vbml0T2ZXb3JrVGVtcGxhdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkudW5pdG9md29yazsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9jb25jZXJuL1VuaXRPZldvcmtDb25jZXJuLmphdmEgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL2NvbmNlcm4vVW5pdE9mV29ya0NvbmNlcm4uamF2YQppbmRleCAzYzgwYjFkLi5jNjg0Mzg1IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL2NvbmNlcm4vVW5pdE9mV29ya0NvbmNlcm4uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL2NvbmNlcm4vVW5pdE9mV29ya0NvbmNlcm4uamF2YQpAQCAtMjIsNiArMjIsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25jZXJuLkdlbmVyaWNDb25jZXJuOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuSW52b2NhdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlVzZXM7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuQ29uY3VycmVudEVudGl0eU1vZGlmaWNhdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9jb25jZXJuL1VuaXRPZldvcmtSZXRyeS5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9jb25jZXJuL1VuaXRPZldvcmtSZXRyeS5qYXZhCmluZGV4IDRiMmJkZWEuLmRlMzg2ZjkgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvY29uY2Vybi9Vbml0T2ZXb3JrUmV0cnkuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL2NvbmNlcm4vVW5pdE9mV29ya1JldHJ5LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuY29uY2VybjsKIAogaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQ7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL2NvbmNlcm4vcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9jb25jZXJuL3BhY2thZ2UuaHRtbAppbmRleCBhZGI4MzhhLi42OGNiZTBlIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL2NvbmNlcm4vcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvY29uY2Vybi9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlVuaXRPZldvcmsgQ29uY2VybnMuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VuaXRvZndvcmsvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9wYWNrYWdlLmh0bWwKaW5kZXggNGE2Y2Y2OS4uMWJjMDhmYSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlVuaXRPZldvcmsgQVBJLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91c2VjYXNlL3BhY2thZ2UuaHRtbCBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VzZWNhc2UvcGFja2FnZS5odG1sCmluZGV4IDcyM2JhZjYuLjcxYzY5NmEgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VzZWNhc2UvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3VzZWNhc2UvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5Vc2VjYXNlIEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdXRpbC9Db25zdHJ1Y3RvcnMuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3V0aWwvQ29uc3RydWN0b3JzLmphdmEKaW5kZXggYzlhNTBkNi4uMTcwNjJjYSAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdXRpbC9Db25zdHJ1Y3RvcnMuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91dGlsL0NvbnN0cnVjdG9ycy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS51dGlsOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91dGlsL0ZpZWxkcy5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdXRpbC9GaWVsZHMuamF2YQppbmRleCBlYThkNmUyLi5jNjhkMTMxIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91dGlsL0ZpZWxkcy5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3V0aWwvRmllbGRzLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnV0aWw7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3V0aWwvTWV0aG9kcy5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdXRpbC9NZXRob2RzLmphdmEKaW5kZXggZDU5NjMyZi4uOTNiNzhjZiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdXRpbC9NZXRob2RzLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdXRpbC9NZXRob2RzLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnV0aWw7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS91dGlsL3BhY2thZ2UuaHRtbCBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3V0aWwvcGFja2FnZS5odG1sCmluZGV4IGJjNDdlMzEuLmVhNzVkYjMgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3V0aWwvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3V0aWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5BUEkgVXRpbGl0aWVzLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS92YWx1ZS9WYWx1ZUJ1aWxkZXJUZW1wbGF0ZS5qYXZhIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdmFsdWUvVmFsdWVCdWlsZGVyVGVtcGxhdGUuamF2YQppbmRleCAzYWVkYmU2Li4xMWNiZGRiIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS92YWx1ZS9WYWx1ZUJ1aWxkZXJUZW1wbGF0ZS5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3ZhbHVlL1ZhbHVlQnVpbGRlclRlbXBsYXRlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLnZhbHVlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS92YWx1ZS9WYWx1ZVNlcmlhbGl6YXRpb24uamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3ZhbHVlL1ZhbHVlU2VyaWFsaXphdGlvbi5qYXZhCmluZGV4IDUwM2FhNWMuLjMxYTRhZjAgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3ZhbHVlL1ZhbHVlU2VyaWFsaXphdGlvbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3ZhbHVlL1ZhbHVlU2VyaWFsaXphdGlvbi5qYXZhCkBAIC00Myw2ICs0MywxMCBAQAogICAgICAgICAgKiBUYWcgYSBWYWx1ZVNlcmlhbGl6YXRpb24gc2VydmljZSB0aGF0IHN1cHBvcnQgdGhlIFhNTCBmb3JtYXQuCiAgICAgICAgICAqLwogICAgICAgICBTdHJpbmcgWE1MID0gInhtbCI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUYWcgYSBWYWx1ZVNlcmlhbGl6YXRpb24gc2VydmljZSB0aGF0IHN1cHBvcnQgdGhlIFlBTUwgZm9ybWF0LgorICAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIFlBTUwgPSAieWFtbCI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS92YWx1ZS9WYWx1ZVNlcmlhbGl6ZXIuamF2YSBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3ZhbHVlL1ZhbHVlU2VyaWFsaXplci5qYXZhCmluZGV4IDEzYTg4MzEuLjMzN2MzN2UgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3ZhbHVlL1ZhbHVlU2VyaWFsaXplci5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3ZhbHVlL1ZhbHVlU2VyaWFsaXplci5qYXZhCkBAIC0xNzQsNiArMTc0LDcgQEAKICAgICAgICAgICogRGVmYXVsdCB0byBUUlVFLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5DTFVERV9UWVBFX0lORk8gPSAiaW5jbHVkZVR5cGVJbmZvIjsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQX0VOVFJJRVNfQVNfT0JKRUNUUyA9ICJtYXBlbnRyaWVzYXNvYmplY3RzIjsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDw+KCk7CiAKICAgICAgICAgLyoqCkBAIC0xODEsMTcgKzE4Miw4IEBACiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgT3B0aW9ucygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG9wdGlvbnMucHV0KCBJTkNMVURFX1RZUEVfSU5GTywgInRydWUiICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlIG5ldyBWYWx1ZVNlcmlhbGl6ZXIgT3B0aW9ucyBmcm9tIGdpdmVuIE1hcC4KLSAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBjb3B5IGluIHRoZSBuZXcgT3B0aW9ucyBpbnN0YW5jZQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIE9wdGlvbnMoIE1hcDxTdHJpbmcsIFN0cmluZz4gb3B0aW9ucyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMoKTsKLSAgICAgICAgICAgIG9wdGlvbnMucHV0QWxsKCBvcHRpb25zICk7CisgICAgICAgICAgICB0aGlzLm9wdGlvbnMucHV0KCBJTkNMVURFX1RZUEVfSU5GTywgInRydWUiICk7CisgICAgICAgICAgICB0aGlzLm9wdGlvbnMucHV0KCBNQVBfRU5UUklFU19BU19PQkpFQ1RTLCAiZmFsc2UiICk7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTIxMiw2ICsyMDQsMTYgQEAKICAgICAgICAgICAgIHJldHVybiBwdXQoIElOQ0xVREVfVFlQRV9JTkZPLCBmYWxzZSApOwogICAgICAgICB9CiAKKyAgICAgICAgcHVibGljIE9wdGlvbnMgd2l0aE1hcEVudHJpZXNBc09iamVjdHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHV0KCBNQVBfRU5UUklFU19BU19PQkpFQ1RTLCB0cnVlICk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgT3B0aW9ucyB3aXRoTWFwRW50cmllc0FzS2V5VmFsdWVQYWlycygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwdXQoIE1BUF9FTlRSSUVTX0FTX09CSkVDVFMsIGZhbHNlICk7CisgICAgICAgIH0KKwogICAgICAgICAvKioKICAgICAgICAgICogR2V0IEJvb2xlYW4gb3B0aW9uIHZhbHVlLgogICAgICAgICAgKiBAcGFyYW0gb3B0aW9uIFRoZSBvcHRpb24KQEAgLTMxOCw1ICszMjAsNCBAQAogICAgICAgICAgICAgcmV0dXJuIG5ldyBIYXNoTWFwPD4oIG9wdGlvbnMgKTsKICAgICAgICAgfQogICAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdmFsdWUvcGFja2FnZS5odG1sIGIvY29yZS9hcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9hcGkvdmFsdWUvcGFja2FnZS5odG1sCmluZGV4IDNmMjAzYWQuLjU0MGIzZjYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYXBpL3ZhbHVlL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL2FwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2FwaS92YWx1ZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlZhbHVlIEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvT3BlcmF0b3JzVGVzdC5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvT3BlcmF0b3JzVGVzdC5qYXZhCmluZGV4IDFmZmFhOTIuLjZmNDY3ZTUgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL09wZXJhdG9yc1Rlc3QuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9PcGVyYXRvcnNUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpOwogCiBpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2FjdGl2YXRpb24vUGFzc2l2YXRpb25FeGNlcHRpb25UZXN0LmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9hY3RpdmF0aW9uL1Bhc3NpdmF0aW9uRXhjZXB0aW9uVGVzdC5qYXZhCmluZGV4IDQ2YWUwMjYuLjM0OGUzMmQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2FjdGl2YXRpb24vUGFzc2l2YXRpb25FeGNlcHRpb25UZXN0LmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvYWN0aXZhdGlvbi9QYXNzaXZhdGlvbkV4Y2VwdGlvblRlc3QuamF2YQpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIE1vZHVsZSBtb2R1bGVBID0gYXBwLmZpbmRNb2R1bGUoICJMYXllciAxIiwgIk1vZHVsZSBBIiApOwogICAgICAgICAgICAgVGVzdFNlcnZpY2Ugc2VydmljZSA9IG1vZHVsZUEuZmluZFNlcnZpY2UoIFRlc3RTZXJ2aWNlLmNsYXNzICkuZ2V0KCk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KCBzZXJ2aWNlLmhlbGxvKCksIGVxdWFsVG8oICJIZWxsbyBRaTRqISIgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggc2VydmljZS5oZWxsbygpLCBlcXVhbFRvKCAiSGVsbG8gWmVzdCEiICkgKTsKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgICAgICAgcHVibGljIFN0cmluZyBoZWxsbygpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbW9kdWxlLm5hbWUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIkhlbGxvIFFpNGohIjsKKyAgICAgICAgICAgICAgICByZXR1cm4gIkhlbGxvIFplc3QhIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vUXVhbGlmaWVkTmFtZVRlc3QuamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9RdWFsaWZpZWROYW1lVGVzdC5qYXZhCmluZGV4IGM5YzA1ODMuLjQ0MDE1ZTAgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9RdWFsaWZpZWROYW1lVGVzdC5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2NvbW1vbi9RdWFsaWZpZWROYW1lVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5jb21tb247CiAKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2NvbmNlcm4vRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2NvbmNlcm4vRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQppbmRleCA3ZDliZjZhLi42OWNmYzVjIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9jb25jZXJuL0RvY3VtZW50YXRpb25TdXBwb3J0LmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvY29uY2Vybi9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5jb25jZXJuOwogCiBpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZDsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblRlc3QuamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblRlc3QuamF2YQppbmRleCBjNmVhN2EyLi5jNzJhZmU3IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25UZXN0LmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5jb25maWd1cmF0aW9uOwogCiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9kYXRhc2V0L2l0ZXJhYmxlL0l0ZXJhYmxlRGF0YVNldFRlc3QuamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvaXRlcmFibGUvSXRlcmFibGVEYXRhU2V0VGVzdC5qYXZhCmluZGV4IDM4MzBmMWUuLjZhNmMzYjggMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvaXRlcmFibGUvSXRlcmFibGVEYXRhU2V0VGVzdC5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2RhdGFzZXQvaXRlcmFibGUvSXRlcmFibGVEYXRhU2V0VGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5kYXRhc2V0Lml0ZXJhYmxlOwogCiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2RvY3N1cHBvcnQvQXBwbGljYXRpb25Eb2NzLmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9kb2NzdXBwb3J0L0FwcGxpY2F0aW9uRG9jcy5qYXZhCmluZGV4IDg3MjI1ZWUuLjBkYjg2MjAgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2RvY3N1cHBvcnQvQXBwbGljYXRpb25Eb2NzLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvZG9jc3VwcG9ydC9BcHBsaWNhdGlvbkRvY3MuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkuZG9jc3VwcG9ydDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb247CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9kb2NzdXBwb3J0L0NvbXBvc2l0aW9uRG9jcy5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvZG9jc3VwcG9ydC9Db21wb3NpdGlvbkRvY3MuamF2YQppbmRleCBmNGE4ZTM3Li5hNmEzNjZjIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9kb2NzdXBwb3J0L0NvbXBvc2l0aW9uRG9jcy5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL2RvY3N1cHBvcnQvQ29tcG9zaXRpb25Eb2NzLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLmRvY3N1cHBvcnQ7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvZG9jc3VwcG9ydC9wYWNrYWdlLmh0bWwgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9kb2NzdXBwb3J0L3BhY2thZ2UuaHRtbAppbmRleCBmZTY1ZDY2Li5mNmZhMTE1IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9kb2NzdXBwb3J0L3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9kb2NzdXBwb3J0L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogPGJvZHk+CiBUaGlzIHBhY2thZ2UgZXhpc3RzIHRvIGNvbnRhaW4gc25pcHBldHMgZm9yIGRvY3VtZW50YXRpb24uCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9CYW5rQWNjb3VudC5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vQmFua0FjY291bnQuamF2YQppbmRleCBjZTI3NTUzLi4yMThhNzljIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9CYW5rQWNjb3VudC5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL0JhbmtBY2NvdW50LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLm1peGluOwogCiAKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL0Nhci5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vQ2FyLmphdmEKaW5kZXggNDQyYTk3OS4uNDM0OTUyYiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vQ2FyLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vQ2FyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLm1peGluOwogCiAvLyBTVEFSVCBTTklQUEVUOiBtaXhpbnMKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL1NvbWV0aGluZy5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vU29tZXRoaW5nLmphdmEKaW5kZXggODZkZTQxOC4uMDI3NDA0ZiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vU29tZXRoaW5nLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vU29tZXRoaW5nLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLm1peGluOwogCiAvLyBTVEFSVCBTTklQUEVUOiBzb21ldGhpbmcKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL1NvbWV0aGluZ01peGluLmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9Tb21ldGhpbmdNaXhpbi5qYXZhCmluZGV4IGE3OWFmOWYuLjYzMTUzYzQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL1NvbWV0aGluZ01peGluLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vU29tZXRoaW5nTWl4aW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkubWl4aW47CiAKIC8vIFNUQVJUIFNOSVBQRVQ6IHNvbWV0aGluZwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vU3RhcnRNaXhpbi5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vU3RhcnRNaXhpbi5qYXZhCmluZGV4IDcxYjMyMDIuLmRiZTEwNzYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL1N0YXJ0TWl4aW4uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9TdGFydE1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLm1peGluOwogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhcnRNaXhpbiBpbXBsZW1lbnRzIFN0YXJ0YWJsZQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vU3RhcnRhYmxlLmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9TdGFydGFibGUuamF2YQppbmRleCA1OTMwMzZjLi4zNjAzY2EyIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9TdGFydGFibGUuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9TdGFydGFibGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkubWl4aW47CiAKIC8vIFNUQVJUIFNOSVBQRVQ6IG1peGlucwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vVmVoaWNsZS5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vVmVoaWNsZS5qYXZhCmluZGV4IDNkOWQ0NDIuLjIyNzA1YjYgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL1ZlaGljbGUuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9WZWhpY2xlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLm1peGluOwogCiAvLyBTVEFSVCBTTklQUEVUOiBtaXhpbnMKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL1ZlaGljbGVNaXhpbi5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vVmVoaWNsZU1peGluLmphdmEKaW5kZXggMDMxMGYzNC4uYWQxOWQ0NiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vVmVoaWNsZU1peGluLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vVmVoaWNsZU1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLm1peGluOwogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVmVoaWNsZU1peGluCmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9kZWNvcmF0b3JNaXhpbi9EZWNvcmF0b3JNaXhpblRlc3QuamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL0RlY29yYXRvck1peGluVGVzdC5qYXZhCmluZGV4IDhiMmEyN2YuLmQ3NjFkMWEgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL0RlY29yYXRvck1peGluVGVzdC5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL0RlY29yYXRvck1peGluVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5taXhpbi5kZWNvcmF0b3JNaXhpbjsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vZGVjb3JhdG9yTWl4aW4vRm9vTW9kZWwuamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL0Zvb01vZGVsLmphdmEKaW5kZXggN2YwNTFlNy4uYmY3NGRiNCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vZGVjb3JhdG9yTWl4aW4vRm9vTW9kZWwuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9kZWNvcmF0b3JNaXhpbi9Gb29Nb2RlbC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5taXhpbi5kZWNvcmF0b3JNaXhpbjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuRGVjb3JhdG9yTWl4aW47CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9kZWNvcmF0b3JNaXhpbi9Gb29Nb2RlbEltcGwuamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL0Zvb01vZGVsSW1wbC5qYXZhCmluZGV4IGMyOGUwNWYuLjFhZDVhZWUgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL0Zvb01vZGVsSW1wbC5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL0Zvb01vZGVsSW1wbC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5taXhpbi5kZWNvcmF0b3JNaXhpbjsKIAogcHVibGljIGNsYXNzIEZvb01vZGVsSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vZGVjb3JhdG9yTWl4aW4vRm9vTW9kZWxJbnZvY2F0aW9uSGFuZGxlci5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vZGVjb3JhdG9yTWl4aW4vRm9vTW9kZWxJbnZvY2F0aW9uSGFuZGxlci5qYXZhCmluZGV4IDI5NGI2MGMuLmVjYTE3ZjMgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL0Zvb01vZGVsSW52b2NhdGlvbkhhbmRsZXIuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9kZWNvcmF0b3JNaXhpbi9Gb29Nb2RlbEludm9jYXRpb25IYW5kbGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLm1peGluLmRlY29yYXRvck1peGluOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvbkhhbmRsZXI7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9kZWNvcmF0b3JNaXhpbi9WaWV3MS5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vZGVjb3JhdG9yTWl4aW4vVmlldzEuamF2YQppbmRleCAyYWI0MTk0Li5hODkwNDMzIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9kZWNvcmF0b3JNaXhpbi9WaWV3MS5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL1ZpZXcxLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLm1peGluLmRlY29yYXRvck1peGluOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5UaGlzOwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vZGVjb3JhdG9yTWl4aW4vVmlldzIuamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL2RlY29yYXRvck1peGluL1ZpZXcyLmphdmEKaW5kZXggNDgyNGZjZC4uNDAzMzA3MiAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vZGVjb3JhdG9yTWl4aW4vVmlldzIuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9kZWNvcmF0b3JNaXhpbi9WaWV3Mi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5taXhpbi5kZWNvcmF0b3JNaXhpbjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL3BhcnRpYWwvQ2FyLmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL0Nhci5qYXZhCmluZGV4IGVjYTAxMTcuLmNkMmE2NjggMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL3BhcnRpYWwvQ2FyLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcGFydGlhbC9DYXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkubWl4aW4ucGFydGlhbDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL0NyYXNoUmVzdWx0TWl4aW4uamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL3BhcnRpYWwvQ3Jhc2hSZXN1bHRNaXhpbi5qYXZhCmluZGV4IGMwMDY0ZDEuLjgzMGNiNzQgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL3BhcnRpYWwvQ3Jhc2hSZXN1bHRNaXhpbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL3BhcnRpYWwvQ3Jhc2hSZXN1bHRNaXhpbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5taXhpbi5wYXJ0aWFsOwogCiBwdWJsaWMgY2xhc3MgQ3Jhc2hSZXN1bHRNaXhpbiBpbXBsZW1lbnRzIENyYXNoYWJsZQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcGFydGlhbC9DcmFzaGFibGUuamF2YSBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL3BhcnRpYWwvQ3Jhc2hhYmxlLmphdmEKaW5kZXggODM4YTMxMS4uN2NhMDdkMCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcGFydGlhbC9DcmFzaGFibGUuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL0NyYXNoYWJsZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmFwaS5taXhpbi5wYXJ0aWFsOwogCiBwdWJsaWMgaW50ZXJmYWNlIENyYXNoYWJsZQpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcGFydGlhbC9TcGVlZExvY2F0aW9uLmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL1NwZWVkTG9jYXRpb24uamF2YQppbmRleCA2M2ZkNzQ5Li5lODExOWRhIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL1NwZWVkTG9jYXRpb24uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL1NwZWVkTG9jYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkubWl4aW4ucGFydGlhbDsKIAogLy8gU1RBUlQgU05JUFBFVDogcGFydGlhbApkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcGFydGlhbC9TcGVlZE1peGluLmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL1NwZWVkTWl4aW4uamF2YQppbmRleCAyM2JiNzQwLi4zZjJjZjZkIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL1NwZWVkTWl4aW4uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL1NwZWVkTWl4aW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkubWl4aW4ucGFydGlhbDsKIAogLy8gU1RBUlQgU05JUFBFVDogcGFydGlhbApkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcGFydGlhbC9WZWhpY2xlLmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL1ZlaGljbGUuamF2YQppbmRleCBlNzE1MzdkLi40ZmEzNTk3IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL1ZlaGljbGUuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wYXJ0aWFsL1ZlaGljbGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkubWl4aW4ucGFydGlhbDsKIAogLy8gU1RBUlQgU05JUFBFVDogcGFydGlhbApkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcHJpdmF0ZU1peGluL0NhcmdvLmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wcml2YXRlTWl4aW4vQ2FyZ28uamF2YQppbmRleCBmNDYyODg5Li5kOGE4ZGNjIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wcml2YXRlTWl4aW4vQ2FyZ28uamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wcml2YXRlTWl4aW4vQ2FyZ28uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkubWl4aW4ucHJpdmF0ZU1peGluOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlDb21wb3NpdGU7CmRpZmYgLS1naXQgYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wcml2YXRlTWl4aW4vQ2FyZ29NaXhpbi5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcHJpdmF0ZU1peGluL0NhcmdvTWl4aW4uamF2YQppbmRleCBiZGU2ZjJiLi40YmIwNTlhIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wcml2YXRlTWl4aW4vQ2FyZ29NaXhpbi5qYXZhCisrKyBiL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL3ByaXZhdGVNaXhpbi9DYXJnb01peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYXBpLm1peGluLnByaXZhdGVNaXhpbjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL3ByaXZhdGVNaXhpbi9DYXJnb1N0YXRlLmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9taXhpbi9wcml2YXRlTWl4aW4vQ2FyZ29TdGF0ZS5qYXZhCmluZGV4IDY1ZDQ5NWMuLmYzNDhhZWUgMTAwNjQ0Ci0tLSBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL21peGluL3ByaXZhdGVNaXhpbi9DYXJnb1N0YXRlLmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvbWl4aW4vcHJpdmF0ZU1peGluL0NhcmdvU3RhdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkubWl4aW4ucHJpdmF0ZU1peGluOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvdW5pdG9md29yay9Vbml0T2ZXb3JrVGVtcGxhdGVUZXN0LmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL1VuaXRPZldvcmtUZW1wbGF0ZVRlc3QuamF2YQppbmRleCA3NTI3Yzk2Li4yMTIxMmFlIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL1VuaXRPZldvcmtUZW1wbGF0ZVRlc3QuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS91bml0b2Z3b3JrL1VuaXRPZldvcmtUZW1wbGF0ZVRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkudW5pdG9md29yazsKIAogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwpkaWZmIC0tZ2l0IGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvdmFsdWUvVmFsdWVCdWlsZGVyVGVtcGxhdGVUZXN0LmphdmEgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS92YWx1ZS9WYWx1ZUJ1aWxkZXJUZW1wbGF0ZVRlc3QuamF2YQppbmRleCAxOWU2MmYyLi40MjBkNDhlIDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS92YWx1ZS9WYWx1ZUJ1aWxkZXJUZW1wbGF0ZVRlc3QuamF2YQorKysgYi9jb3JlL2FwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS92YWx1ZS9WYWx1ZUJ1aWxkZXJUZW1wbGF0ZVRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5hcGkudmFsdWU7CiAKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYXBpL3ZhbHVlL1ZhbHVlQ29tcG9zaXRlVGVzdC5qYXZhIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvdmFsdWUvVmFsdWVDb21wb3NpdGVUZXN0LmphdmEKaW5kZXggOWQ0NzE3ZS4uMWM1NDVhNCAxMDA2NDQKLS0tIGEvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvdmFsdWUvVmFsdWVDb21wb3NpdGVUZXN0LmphdmEKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvdmFsdWUvVmFsdWVDb21wb3NpdGVUZXN0LmphdmEKQEAgLTI0MCw5ICsyNDAsMTEgQEAKICAgICAgICAgICAgIHVuaXRPZldvcmsuZGlzY2FyZCgpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gU2hvdWxkIGFsbG93IHRoZSB0b1N0cmluZygpIHRvIHByaW50IHRoZSBlbnRpdHlSZWZzLgorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIGFzc29jaWF0aW9uVmFsdWUudG9TdHJpbmcoKSApOwogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBhc3NvY2lhdGlvblZhbHVlLnRvU3RyaW5nKCkgKTsKKyAgICAgICAgICAgIGFzc29jaWF0aW9uVmFsdWUuc29tZSgpLmdldCgpOwogICAgICAgICAgICAgZmFpbCggIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24iICk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKZGlmZiAtLWdpdCBhL2NvcmUvYXBpL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9hcGkvY29uZmlndXJhdGlvbi9NeVNlcnZpY2UucHJvcGVydGllcyBiL2NvcmUvYXBpL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9hcGkvY29uZmlndXJhdGlvbi9NeVNlcnZpY2UucHJvcGVydGllcwppbmRleCBkY2I2MzUzLi42ZWQ1ZmY2IDEwMDY0NAotLS0gYS9jb3JlL2FwaS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovYXBpL2NvbmZpZ3VyYXRpb24vTXlTZXJ2aWNlLnByb3BlcnRpZXMKKysrIGIvY29yZS9hcGkvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2FwaS9jb25maWd1cmF0aW9uL015U2VydmljZS5wcm9wZXJ0aWVzCkBAIC0xICsxLDE2IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBtZSA9IHsgbmFtZSA6IE5pY2xhcywgYWRkcmVzcz17IHN0cmVldDEgOiAiSGVuYW4gTHUgNTU1Iiwgc3RyZWV0MiA6ICJCbG9jayAxNSIsIGNpdHkgOiB7IGNpdHlOYW1lIDogIlNoYW5naGFpIiwgY291bnRyeSA6IHsgY291bnRyeU5hbWUgOiAiQ2hpbmEiIH0gfSB9IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9idWlsZC5ncmFkbGUgYi9jb3JlL2Jvb3RzdHJhcC9idWlsZC5ncmFkbGUKaW5kZXggMGQyZjg4Mi4uN2Y0M2NkYyAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvYnVpbGQuZ3JhZGxlCisrKyBiL2NvcmUvYm9vdHN0cmFwL2J1aWxkLmdyYWRsZQpAQCAtMSwxMCArMSwyOCBAQAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogQ29yZSBCb290c3RyYXAifX0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBDb3JlIEJvb3RzdHJhcCJ9fQogCiBkZXBlbmRlbmNpZXMgewogCiAgIGNvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuc3BpJyApCiAKICAgdGVzdFJ1bnRpbWUgcHJvamVjdCggJzpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZScgKQotICB0ZXN0UnVudGltZSBsaWJyYXJpZXMuc2xmNGpfc2ltcGxlCiAKIH0KZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL2Rldi1zdGF0dXMueG1sIGIvY29yZS9ib290c3RyYXAvZGV2LXN0YXR1cy54bWwKaW5kZXggNTUwNDhmZS4uNGYwMzRkYyAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvZGV2LXN0YXR1cy54bWwKKysrIGIvY29yZS9ib290c3RyYXAvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9zcmMvZG9jcy9ib290c3RyYXAudHh0IGIvY29yZS9ib290c3RyYXAvc3JjL2RvY3MvYm9vdHN0cmFwLnR4dAppbmRleCA4MGRhNDhlLi41NmJlMmQwIDEwMDY0NAotLS0gYS9jb3JlL2Jvb3RzdHJhcC9zcmMvZG9jcy9ib290c3RyYXAudHh0CisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy9kb2NzL2Jvb3RzdHJhcC50eHQKQEAgLTIyLDE1ICsyMiwxNiBAQAogc291cmNlPWNvcmUvYm9vdHN0cmFwL2Rldi1zdGF0dXMueG1sCiAtLS0tLS0tLS0tLS0tLQogCi1RaTRqIGhhcyBhIGRpc3RpbmN0IGJvb3RzdHJhcCBwaGFzZSwgYWxzbyBrbm93biBhcyB0aGUgX0Fzc2VtYmx5XyBvZiBhbiBhcHBsaWNhdGlvbiwgd2hlcmUgdGhlIGFwcGxpY2F0aW9ucyBzdHJ1Y3R1cmUKK1plc3TihKIgaGFzIGEgZGlzdGluY3QgYm9vdHN0cmFwIHBoYXNlLCBhbHNvIGtub3duIGFzIHRoZSBfQXNzZW1ibHlfIG9mIGFuIGFwcGxpY2F0aW9uLCB3aGVyZSB0aGUgYXBwbGljYXRpb25zIHN0cnVjdHVyZQogaXMgZGVmaW5lZCBwcm9ncmFtbWF0aWNhbGx5LiBPbmNlIGFsbCB0aGUgbGF5ZXJzLCBtb2R1bGVzIGFuZCBhbGwgdGhlIGNvbXBvc2l0ZSB0eXBlcyBpbiBlYWNoIG1vZHVsZSBoYXZlIGJlZW4gZGVmaW5lZAotdGhlIG1vZGVsIGlzIGluc3RhbnRpYXRlZCBpbnRvIGFuIGFwcGxpY2F0aW9uLiBUaGlzIGVuYWJsZXMgdGhlIGVudGlyZSBfc3RydWN0dXJlXyBzeXN0ZW0gaW4gUWk0aiwgd2hlcmUgdHlwZXMgImJlbG9uZ3MiCit0aGUgbW9kZWwgaXMgaW5zdGFudGlhdGVkIGludG8gYW4gYXBwbGljYXRpb24uIFRoaXMgZW5hYmxlcyB0aGUgZW50aXJlIF9zdHJ1Y3R1cmVfIHN5c3RlbSBpbiBaZXN0LCB3aGVyZSB0eXBlcyAiYmVsb25ncyIKIHRvIGEgbW9kdWxlIGFuZCB2aXNpYmlsaXR5IHJ1bGVzIGRlZmluZSBkZWZhdWx0IGJlaGF2aW9ycywgZW5mb3JjZW1lbnQgb2YgYXJjaGl0ZWN0dXJhbCBpbnRlZ3JpdHkgYW5kIG11Y2ggbW9yZS4KIAogVGhlIF9hc3NlbWJseV8gaXMgcHJlY2VlZGVkIGJ5IHRoZSBjcmVhdGlvbiBvZiB0aGUgX1FpNGogUnVudGltZV8uIFRoZSBfYXNzZW1ibHlfIGNhbiBiZSBkZWNsYXJlZCBmdWxseSBieSBkZWZpbmluZwogYWxsIG1vZHVsZXMgYW5kIGxheWVycywgYW5kIGhvdyB0aGUgbGF5ZXJzIGFyZSBzaXR0aW5nIG9uIHRvcCBvZiBlYWNoIG90aGVyLCBPUiBvbmUgY2FuIHV0aWxpemUgb25lIG9mIHRoZSB0d28KIGNvbnZlbmllbmNlIGFzc2VtYmxpZXMsIG9uZSBmb3IgYSBfcGFuY2FrZV8gcGF0dGVybiwgd2hlcmUgYWxsIGxheWVycyBhcmUgdG9wIG9uIGVhY2ggb3RoZXIsIG9yIG9uZSB3aXRoIGEgc2luZ2xlIG1vZHVsZQotaW4gYSBzaW5nbGUgbGF5ZXIsIHVzZWZ1bCBmb3Igc21hbGwgYXBwbGljYXRpb25zLCBzcGlrZXMgYW5kIHRlc3RzLgoraW4gYSBzaW5nbGUgbGF5ZXIsIHVzZWZ1bCBmb3Igc21hbGwgYXBwbGljYXRpb25zLCBzcGlrZXMgYW5kIHRlc3RzLiBUaGUgK2Jvb3RzdHJhcCsgc3lzdGVtIGhhcyBzZXZlcmFsIHdheXMgdG8gYWNoZWl2ZQordGhpcywgYW5kIHRoZXkgYXJlIGxpc3RlZCBiZWxvdyBpbiA8PGNvcmUtYm9vdHN0cmFwLWFzc2VtYmx5LWxheWVyZWQ+Pi4KIAogRHVyaW5nIF9hc3NlbWJseV8sIHRoZSBhcHBsaWNhdGlvbiAoSlZNIGxldmVsKSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBhcHBsaWNhdGlvbiBtb2RlbCBpcyBkZWZpbmVkLiBZb3UgZGVmaW5lIHdoaWNoCiBsYXllcnMgZXhpc3QgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyLiBGb3IgZWFjaCBsYXllciwgeW91IGRlZmluZSB3aGljaCBtb2R1bGVzIGl0IGNvbnRhaW5zLiBBbmQgZm9yIGVhY2gKQEAgLTQyLDcgKzQzLDcgQEAKICAgICAqIEFkZCBhZGRpdGlvbmFsIGludGVyZmFjZXMgdG8gY29tcG9zaXRlcyBkeW5hbWljYWxseS4KICAgICAqIEFkZCBjb25jZXJucywgbWl4aW5zLCBjb25zdHJhaW50cyBhbmQgc2lkZSBlZmZlY3RzIGR5bmFtaWNhbGx5LgogICAgICogU2V0IF9tZXRhIGluZm9ybWF0aW9uXyBvbiBkZWZpbmVkIHR5cGVzLgotICAgICogSW1wb3J0IGV4dGVybmFsIHNlcnZpY2VzIHRvIGJlIGF2YWlsYWJsZSBhcyBRaTRqIHNlcnZpY2VzLgorICAgICogSW1wb3J0IGV4dGVybmFsIHNlcnZpY2VzIHRvIGJlIGF2YWlsYWJsZSBhcyBaZXN04oSiIHNlcnZpY2VzLgogICAgICogVGFnIHNlcnZpY2VzIHdpdGggbWFya2VycwogCiBpbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQpAQCAtMTI1LDE1ICsxMjYsNiBAQAogPT0gU2V0dGluZyBtZXRhIGluZm9ybWF0aW9uIG9uIGFzc2VtYmxlZCB0eXBlcyA9PQogCiAKLT09IEZhY2lsaXRpZXMgPT0KLQotPT09IEFzc2VtYmx5IFNwZWNpZmljYXRpb25zID09PQotCi09PT0gQ2xhc3MgU2Nhbm5lciA9PT0KLQotPT09IEFwcGxpY2F0aW9uIEJ1aWxkZXIgPT09Ci0KLQogPT0gVXNpbmcgQXNzZW1ibGVycyA9PQogTWFueSA8PGxpYnJhcmllcyxsaWJyYXJpZXM+PiBhbmQgPDxleHRlbnNpb25zLGV4dGVuc2lvbnM+PiBwcm92aWRlcyBhIGNvb2tpZS1jdXR0ZXIgX0Fzc2VtYmxlcl8sIHRvIHNpbXBsaWZ5IHRoZSBzZXQgdXAKIG9mIHN1Y2ggY29tcG9uZW50LiBPZnRlbiB0aGVzZSBhcmUgc3VpdGFibGUsIGJ1dCBzb21ldGltZXMgdGhleSB3b24ndCBmaXQgdGhlIGFwcGxpY2F0aW9uIGluIGhhbmQsIGluIHdoaWNoIGNhc2UgdGhlCkBAIC0xNzMsMTAgKzE2NSw0OCBAQAogLS0tLS0tLS0tLS0tLS0KIAogCitbW2NvcmUtYm9vdHN0cmFwLWFzc2VtYmx5LWxheWVyZWQsTGF5ZXJlZCBBcHBsaWNhdGlvbiBBc3NlbWJsZXJdXQorPT0gTGF5ZXJlZCBBcHBsaWNhdGlvbiBBc3NlbWJsZXIgKFJFQ09NTUVOREVEISkgPT0KKworSW4gMi4xLCBhIG5ldyB3YXkgdG8gaW5zdGFudGlhdGUgWmVzdOKEoiBhcHBsaWNhdGlvbnMgd2FzIGludHJvZHVjZWQuIEl0IHN0YXJ0cyB3aXRoIHN1YmNsYXNzaW5nIHRoZQorK0xheWVyZWRBcHBsaWNhdGlvbkFzc2VtYmxlcissIGFuZCBpbXBsZW1lbnRpbmcgdGhlICthc3NlbWJsZUxheWVycygpKyBtZXRob2QuCisKK0luIHRoZSArYXNzZW1ibGVMYXllcnMoKSsgbWV0aG9kLCBvbmUgaXMgZXBlY3RlZCB0byBlaXRoZXIgY2FsbCB0aGUgK2NyZWF0ZUxheWVyKCkrIG1ldGhvZCBpbiB0aGUgc3VwZXIgY2xhc3MKK3dpdGggdGhlIENsYXNzIG9mIHRoZSBMYXllckFzc2VtYmxlciwKKworW3NvdXJjZSxqYXZhXQorLS0tLQorICAgIExheWVyQXNzZW1ibHkgZG9tYWluTGF5ZXIgPSBjcmVhdGVMYXllciggRG9tYWluTGF5ZXIuY2xhc3MgKTsKKy0tLS0KKworT1IgbWFudWFsbHkgaW5zdGFudGlhdGUgYW5kIGNhbGwgdGhlIExheWVyQXNzZW1ibGVyLgorCitbc291cmNlLGphdmFdCistLS0tCisgICAgTGF5ZXJBc3NlbWJseSBpbmZyYUxheWVyID0gbmV3IEluZnJhc3RydWN0dXJlTGF5ZXIoIGNvbmZpZ01vZHVsZSApLmFzc2VtYmxlKCBhc3NlbWJseS5sYXllciggSW5mcmFzdHJ1Y3R1cmVMYXllci5OQU1FICApKTsKKy0tLS0KKworVGhpcyBpcyB0byBtYWtlIHRoZSBub3JtYWwgY2FzZSBhcyBzaW1wbGUgYXMgcG9zc2libGUsIHlldCBhbGxvdyB0aGUgc3BlY2lhbCBuZWVkcyB0aGF0IG9jY3NzaW9uYWxseSBzdXJmYWNlcy4KKworRWFjaCBMYXllckFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbiBtYXkgb3B0aW9uYWxseSBleHRlbmQgdGhlICtMYXllcmVkTGF5ZXJBc3NlbWJsZXIrLCB0byBnZXQgYWNjZXNzIHRvIHRoZQorK2NyZWF0ZU1vZHVsZSgpKyBtZXRob2QsIHdoaWNoIGFnYWluIHNpbXBsaWZpZXMgdGhlIGNyZWF0aW9uIG9mIG1vZHVsZXMgaW4gdGhlICthc3NlbWJsZSgpKyBtZXRob2QuCisKK1tzb3VyY2UsamF2YV0KKy0tLS0KKyAgICBjcmVhdGVNb2R1bGUoIGxheWVyLCBJbnZvaWNpbmdNb2R1bGUuY2xhc3MgKTsKKy0tLS0KKworK01vZHVsZUFzc2VtYmxlcisgaW1wbGVtZW50YXRpb25zIHR5cGljYWxseSB1c2UgK0Fzc2VtYmxlcisgY2xhc3NlcyB0byBwdXQgdG9nZXRoZXIsIG9yIGNhbGwgdGhlICtlbnRpdGllcygpKywKKyt2YWx1ZXMoKSsgbWV0aG9kcyBkZXNjcmliZWQgZWxzZXdoZXJlIG9uIHRoaXMgcGFnZS4gVGhlcmUgaXMgbm8gc3VwZXJjbGFzcyB0byB1c2UuCisKKytNb2R1bGVBc3NlbWJsZXIrIGltcGxlbWVudGF0aW9ucyBzaG91bGQgaGF2ZSBhIG5hbWUgZW5kaW5nIHdpdGggIk1vZHVsZSIgYW5kIHRoZSBuYW1pbmcgd2lsbCBpbnNlcnQgYSBodW1hbi1yZWFkYWJsZQorc3BhY2Ugd2l0aGluIHRoZSBtb2R1bGUgbmFtZSwgZS5nLiArSW52b2ljaW5nTW9kdWxlKyB3aWxsIGJlIG5hbWVkICJJbnZvaWNpbmcgTW9kdWxlIi4KKworRm9yIGV4YW1wbGUgY29kZSwgc2VlIHRoZSB0dXRvcmlhbCA8PGhvd3RvLWFzc2VtYmxlLWFwcGxpY2F0aW9uPj4uCiAKIAogPT0gU2luZ2xldG9uIEFzc2VtYmxlciA9PQotRXZlcnkgUWk0aiBydW50aW1lIGluc3RhbmNlIGNvbnNpc3Qgb2YgT25lIEFwcGxpY2F0aW9uLCB3aXRoIG9uZSBvciBtb3JlIExheWVycyBhbmQgb25lIG9yIG1vcmUgTW9kdWxlcyBpbiBlYWNoIExheWVyLgorRXZlcnkgWmVzdOKEoiBydW50aW1lIGluc3RhbmNlIGNvbnNpc3Qgb2YgT25lIEFwcGxpY2F0aW9uLCB3aXRoIG9uZSBvciBtb3JlIExheWVycyBhbmQgb25lIG9yIG1vcmUgTW9kdWxlcyBpbiBlYWNoIExheWVyLgogU28gdGhlIG1pbmltYWwgYXBwbGljYXRpb24gaXMgc3RpbGwgb25lIGxheWVyIHdpdGggb25lIG1vZHVsZS4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgb3RoZXIgdGhhbiBmb3IgdGVzdGluZyBwdXJwb3NlcwogYW5kIHJlYWxseSB0cml2aWFsIGFwcGxpY2F0aW9ucy4KIApAQCAtMTg4LDEyICsyMTgsNDQgQEAKIHRhZz1zaW5nbGV0b24KIC0tLS0tLS0tLS0tLS0tCiAKLU9uY2UgdGhlIFNpbmdsZXRvbkFzc2VtYmxlciBjb25zdHJ1Y3RvciByZXR1cm5zLCB0aGUgUWk0aiBhcHBsaWNhdGlvbiBpcyB1cCBhbmQgcnVubmluZy4KK09uY2UgdGhlIFNpbmdsZXRvbkFzc2VtYmxlciBjb25zdHJ1Y3RvciByZXR1cm5zLCB0aGUgWmVzdOKEoiBhcHBsaWNhdGlvbiBpcyB1cCBhbmQgcnVubmluZy4KIAogVGhlIFNpbmdsZXRvbkFzc2VtYmxlciBhbHNvIG1ha2VzIGNvbW1vbiBzeXN0ZW0gcmVzb3VyY2VzIGF2YWlsYWJsZSBmcm9tIHRoZSBib290c3RyYXAgY29kZSwgc3VjaCBhcwogTW9kdWxlLCBVbml0T2ZXb3JrRmFjdG9yeSBhbmQgb3RoZXJzLiBUaGlzIGlzIHBvc3NpYmxlIHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIE1vZHVsZS4KIAorPT0gQXBwbGljYXRpb24gQnVpbGRlciA9PQorU29tZSBhcHBsaWNhdGlvbnMgaGFzIG5vIG5lZWQgZm9yIHJ1bnRpbWUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgZXhhY3QgYXBwbGljYXRpb24gc3RydWN0dXJlLCBhbmQgbm8gbmVlZCBmb3IKK2FkdmFuY2VkIGFsdGVyYXRpb25zIHRvIGEgc3RhcmlnaHQtZm9yd2FyZCBsYXllcmVkIGFwcGxpY2F0aW9uIHN0cnVjdHVyZS4gQnkgdXNpbmcgdGhlICtBcHBsaWNhdGlvbkJ1aWxkZXIrCitpdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgdGhlIGFwcGxpY2F0aW9uIHN0cnVjdHVyZSBmcm9tIGEgSlNPTiBkb2N1bWVudCwgQU5EIGNhbGwgdGhlIHByb3ZpZGVkICttYWluKCkrIGNsYXNzLAordGFraW5nIHRoZSBKU09OIGRvY3VtZW50IGFzIGlucHV0IG9uICtTeXN0ZW0uaW4rLgogCitUaGUgZm9ybWF0IG9mIHRoZSBKU09OIGRvY3VtZW50LCBkaXJlY3RseSByZWZsZWN0cyB0aGUgYXBwbGljYXRpb24gc3RydWN0dXJlLCBzdWNoIGFzCitbc291cmNlLGpzb25dCistLS0tCit7CisgICAgIm5hbWUiOiAiQnVpbGQgZnJvbSBKU09OIHRlc3QuIiwKKyAgICAibGF5ZXJzIjogWworICAgICAgICB7ICJuYW1lIjogInNlcnZpY2UiLCAidXNlcyI6IFsgImRvbWFpbiIsICJjb25maWciXSB9LAorICAgICAgICB7ICJuYW1lIjogImRvbmZpZyIgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZG9tYWluIiwKKyAgICAgICAgICAgICJtb2R1bGVzIiA6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJJbnZvaWNpbmciLAorICAgICAgICAgICAgICAgICAgICAiYXNzZW1ibGVycyIgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmhlZGhtYW4ubmljbGFzLmJvb3RzdHJhcC5JbnZvaWNpbmdBc3NlbWJsZXIiCisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CistLS0tCisKK0F0IHRoZSBtb21lbnQsIHRoZSBKU09OIGZvcm1hdCBvbmx5IHN1cHBvcnQgK0Fzc2VtYmxlcisgY2xhc3NlcyB0byBkbyB0aGUgd29yay4KKworQW5vdGhlciB3YXkgdG8gdXNlIHRoZSArQXBwbGljYXRpb25CdWlsZGVyKyBpcyB0byBzdWJjbGFzcyBpdCwgb3B0aW9uYWxseSB1c2UgdGhlICtjb25maWd1cmVGcm9tSlNPTigpKyBtZXRob2QsCithbmQgdGhlbiBwcm9ncmFtbWF0aWNhbGx5IGVuaGFuY2UgdGhlIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyArbmV3QXBwbGljYXRpb24oKSsuCiAKID09IFBhbmNha2UgQXNzZW1ibHkgPT0KIFRoZXJlIGlzIG9uZSBjYXNlIHRoYXQgc3RhbmRzIG91dCBhcyBhIGNvbW1vbiBjYXNlLCBhbmQgZm9ybXMgYSByZWFzb25hYmxlIG1pZGRsZS1ncm91bmQuIEl0IGlzIHdoZXJlIGVhY2ggbGF5ZXIgc2l0cwpAQCAtMjEwLDE0ICsyNzIsMTIgQEAKIHRhZz1wYW5jYWtlCiAtLS0tLS0tLS0tLS0tLQogCi0KLQogPT0gRnVsbCBBc3NlbWJseSA9PQogRnVsbCBBc3NlbWJseSBtZWFucyB0aGF0IHlvdSBoYXZlIHRoZSBvcHBvcnR1bml0eSB0byBjcmVhdGUgYW55IGxheWVyL21vZHVsZSBoaWVyYXJjaHkgdGhhdCBhcmUgd2l0aGluIHRoZSBydWxlcyBvZiB0aGUKLVFpNGogcnVudGltZS4gSXQgcmVxdWlyZXMgbW9yZSBzdXBwb3J0IGluIHlvdXIgY29kZSB0byBiZSB1c2VmdWwsIGFuZCB0aGUgZXhhbXBsZSBiZWxvdyBpcyBieSBubyBtZWFucyBhIHJlY29tbWVuZGVkIHdheQorWmVzdOKEoiBydW50aW1lLiBJdCByZXF1aXJlcyBtb3JlIHN1cHBvcnQgaW4geW91ciBjb2RlIHRvIGJlIHVzZWZ1bCwgYW5kIHRoZSBleGFtcGxlIGJlbG93IGlzIGJ5IG5vIG1lYW5zIGEgcmVjb21tZW5kZWQgd2F5CiB0byBvcmdhbml6ZSBsYXJnZSBhcHBsaWNhdGlvbiBhc3NlbWJsaWVzLgogCi1JbiBwcmluY2lwbGUsIHlvdSBmaXJzdCBzdGFydCB0aGUgUWk0aiBydW50aW1lLCBjYWxsIG5ld0FwcGxpY2F0aW9uIHdpdGggYW4gQXBwbGljYXRpb25Bc3NlbWJsZXIgaW5zdGFuY2UgYW5kIGNhbGwKK0luIHByaW5jaXBsZSwgeW91IGZpcnN0IHN0YXJ0IHRoZSBaZXN04oSiIHJ1bnRpbWUsIGNhbGwgbmV3QXBwbGljYXRpb24gd2l0aCBhbiBBcHBsaWNhdGlvbkFzc2VtYmxlciBpbnN0YW5jZSBhbmQgY2FsbAogYWN0aXZhdGUoKSBvbiB0aGUgcmV0dXJuZWQgYXBwbGljYXRpb24uIFRoZSBBcHBsaWNhdGlvbkFzc2VtYmxlciBpbnN0YW5jZSB3aWxsIGJlIGNhbGxlZCB3aXRoIGFuCiBBcHBsaWNhdGlvbkFzc2VtYmx5RmFjdG9yeSwgd2hpY2ggaXMgdXNlZCB0byBjcmVhdGUgYW4gQXBwbGljYXRpb25Bc3NlbWJseSBkZXNjcmliaW5nIHRoZSBhcHBsaWNhdGlvbiBzdHJ1Y3R1cmUuCiAKZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9kb2NzL3JlZmVyZW5jZS9yZWYtYm9vdHN0cmFwLnR4dCBiL2NvcmUvYm9vdHN0cmFwL3NyYy9kb2NzL3JlZmVyZW5jZS9yZWYtYm9vdHN0cmFwLnR4dAppbmRleCBlNjlkZTI5Li5mYzdhYWM2IDEwMDY0NAotLS0gYS9jb3JlL2Jvb3RzdHJhcC9zcmMvZG9jcy9yZWZlcmVuY2UvcmVmLWJvb3RzdHJhcC50eHQKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1ib290c3RyYXAudHh0CkBAIC0wLDAgKzEsMTggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQXBwbGljYXRpb25Bc3NlbWJseUZhY3RvcnkuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0FwcGxpY2F0aW9uQXNzZW1ibHlGYWN0b3J5LmphdmEKaW5kZXggOTc3NjI3Yy4uNWQ4NmJmOSAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQXBwbGljYXRpb25Bc3NlbWJseUZhY3RvcnkuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9BcHBsaWNhdGlvbkFzc2VtYmx5RmFjdG9yeS5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcDsKIAogLyoqCi0gKiBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgUWk0aiBhcHBsaWNhdGlvbiBhc3NlbWJsaWVzLiBUeXBpY2FsbHkKKyAqIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBaZXN0IGFwcGxpY2F0aW9uIGFzc2VtYmxpZXMuIFR5cGljYWxseQogICogeW91IHdpbGwgaW1wbGVtZW50IG9uZSBvciBtb3JlIEFzc2VtYmxlcnMsIHdyYXAgdGhlbSBpbiBhbiBBcHBsaWNhdGlvbkFzc2VtYmxlciwKICAqIHdoaWNoIHRoZW4gdXNlcyB0aGlzIGZhY3RvcnkgdG8gYXNzZW1ibGUgYW5kIGNyZWF0ZSBhcHBsaWNhdGlvbnMuCiAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0Fzc2VtYmxlci5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQXNzZW1ibGVyLmphdmEKaW5kZXggNTkxNGE4Ny4uYjJmZmUzNCAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQXNzZW1ibGVyLmphdmEKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQXNzZW1ibGVyLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKICAqIE1vZHVsZUFzc2VtYmxpZXMgYXJlIGNvbmZpZ3VyZWQgYnkgQXNzZW1ibGVycy4gVGhpcwogICogaXMgdGhlIGludGVyZmFjZSB5b3Ugd291bGQgaW1wbGVtZW50IGluIG9yZGVyIHRvIHByb3ZpZGUKICAqIGFsbCBjb25maWd1cmF0aW9uIGFuZCBhZGRpdGlvbmFsIG1ldGFpbmZvIHRoYXQgaXMgbmVlZGVkCi0gKiB0byBpbnN0YW50aWF0ZSBhIFFpNGogYXBwbGljYXRpb24uCisgKiB0byBpbnN0YW50aWF0ZSBhIFplc3QgYXBwbGljYXRpb24uCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgQXNzZW1ibGVyCiB7CmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9Bc3NlbWJseVNwZWNpZmljYXRpb25zLmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9Bc3NlbWJseVNwZWNpZmljYXRpb25zLmphdmEKaW5kZXggYTgyOTRkOC4uNjZmYWZjNyAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQXNzZW1ibHlTcGVjaWZpY2F0aW9ucy5qYXZhCisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0Fzc2VtYmx5U3BlY2lmaWNhdGlvbnMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXA7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5IYXNUeXBlczsKZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0JpbmRpbmdFeGNlcHRpb24uamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0JpbmRpbmdFeGNlcHRpb24uamF2YQppbmRleCBjM2Q5MDA0Li5kYmFkYmZkIDEwMDY0NAotLS0gYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9CaW5kaW5nRXhjZXB0aW9uLmphdmEKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQmluZGluZ0V4Y2VwdGlvbi5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiBwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcDsKIAogLyoqCi0gKiBUaHJvd24gYnkgdGhlIFFpNGogcnVudGltZSBpZiBhIGRlcGVuZGVuY3kgY2FuIG5vdCBiZSBib3VuZC4KKyAqIFRocm93biBieSB0aGUgWmVzdCBydW50aW1lIGlmIGEgZGVwZW5kZW5jeSBjYW4gbm90IGJlIGJvdW5kLgogICovCiBwdWJsaWMgY2xhc3MgQmluZGluZ0V4Y2VwdGlvbgogICAgIGV4dGVuZHMgRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9Db25maWd1cmF0aW9uQXNzZW1ibHkuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0NvbmZpZ3VyYXRpb25Bc3NlbWJseS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNDUzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9Db25maWd1cmF0aW9uQXNzZW1ibHkuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwOworCitpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuSGFzVHlwZXM7CisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIHRoZSBhc3NlbWJseSBpbmZvcm1hdGlvbiBvZiBhIHNpbmdsZSBDb25maWd1cmF0aW9uQ29tcG9zaXRlIGluIGEgTW9kdWxlLgorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbmZpZ3VyYXRpb25Bc3NlbWJseQorICAgIGV4dGVuZHMgSGFzVHlwZXMKK3sKK30KZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0NvbmZpZ3VyYXRpb25EZWNsYXJhdGlvbi5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxMGMzNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0NvbmZpZ3VyYXRpb25EZWNsYXJhdGlvbi5qYXZhCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqLworCitwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcDsKKworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKKworLyoqCisgKiBGbHVlbnQgQVBJIGZvciBkZWNsYXJpbmcgY29uZmlndXJhdGlvbnMuIEluc3RhbmNlcworICogb2YgdGhpcyBBUEkgYXJlIGFjcXVpcmVkIGJ5IGNhbGxpbmcge0BsaW5rIE1vZHVsZUFzc2VtYmx5I2NvbmZpZ3VyYXRpb25zKENsYXNzW10pfS4KKyAqLworcHVibGljIGludGVyZmFjZSBDb25maWd1cmF0aW9uRGVjbGFyYXRpb24KK3sKKyAgICAvKioKKyAgICAgKiBTZXQgYWRkaXRpb25hbCBtZXRhaW5mbyBmb3IgdGhpcyBjb25maWd1cmF0aW9uIGRlY2xhcmF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGluZm8gbWV0YWluZm8gdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIENvbXBvc2l0ZURlc2NyaXB0b3IuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoaXMgaW5zdGFuY2UgZm9yIGEgZmx1aWQgRFNMCisgICAgICovCisgICAgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHNldE1ldGFJbmZvKCBPYmplY3QgaW5mbyApOworCisgICAgLyoqCisgICAgICogU2V0IHZpc2liaWxpdHkgZm9yIGRlY2xhcmVkIGVudGl0aWVzLgorICAgICAqCisgICAgICogQHBhcmFtIHZpc2liaWxpdHkgVGhlIHtAbGluayBWaXNpYmlsaXR5fSB0aGF0IHRoaXMgQ29uZmlndXJhdGlvbkNvbXBvc2l0ZSB3aWxsIGhhdmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoaXMgaW5zdGFuY2UgZm9yIGEgZmx1aWQgRFNMCisgICAgICovCisgICAgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHZpc2libGVJbiggVmlzaWJpbGl0eSB2aXNpYmlsaXR5ICk7CisKKyAgICAvKioKKyAgICAgKiBEZWNsYXJlIGFkZGl0aW9uYWwgY29uY2VybnMgZm9yIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbmNlcm5zIFRoZSBjb25jZXJucyB0aGF0IGFyZSB0byBiZSBhZGRlZCB0byB0aGUgQ29uZmlndXJhdGlvbkNvbXBvc2l0ZSBiZXlvbmQgdGhlIHN0YXRpY2FsbHkgZGVjbGFyZWQgb25lcy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhpcyBpbnN0YW5jZSBmb3IgYSBmbHVpZCBEU0wKKyAgICAgKi8KKyAgICBDb25maWd1cmF0aW9uRGVjbGFyYXRpb24gd2l0aENvbmNlcm5zKCBDbGFzczw/Pi4uLiBjb25jZXJucyApOworCisgICAgLyoqCisgICAgICogRGVjbGFyZSBhZGRpdGlvbmFsIHNpZGUtZWZmZWN0cyBmb3IgdGhlc2UgY29uZmlndXJhdGlvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc2lkZUVmZmVjdHMgVGhlIHNpZGVlZmZlY3RzIHRoYXQgYXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBDb25maWd1cmF0aW9uQ29tcG9zaXRlIGJleW9uZCB0aGUgc3RhdGljYWxseSBkZWNsYXJlZCBvbmVzLgorICAgICAqCisgICAgICogQHJldHVybiBUaGlzIGluc3RhbmNlIGZvciBhIGZsdWlkIERTTAorICAgICAqLworICAgIENvbmZpZ3VyYXRpb25EZWNsYXJhdGlvbiB3aXRoU2lkZUVmZmVjdHMoIENsYXNzPD8+Li4uIHNpZGVFZmZlY3RzICk7CisKKyAgICAvKioKKyAgICAgKiBEZWNsYXJlIGFkZGl0aW9uYWwgbWl4aW5zIGZvciB0aGVzZSBjb25maWd1cmF0aW9ucy4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gb3ZlcnJpZGUgYW55IGRlZmF1bHQgbWl4aW5zIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgorICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gbWl4aW5zIFRoZSBtaXhpbnMgdGhhdCBhcmUgdG8gYmUgYWRkZWQgdG8gdGhlIENvbmZpZ3VyYXRpb25Db21wb3NpdGUgYmV5b25kIHRoZSBzdGF0aWNhbGx5IGRlY2xhcmVkIG9uZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoaXMgaW5zdGFuY2UgZm9yIGEgZmx1aWQgRFNMCisgICAgICovCisgICAgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHdpdGhNaXhpbnMoIENsYXNzPD8+Li4uIG1peGlucyApOworCisgICAgLyoqCisgICAgICogRGVjbGFyZSBhZGRpdGlvbmFsIGludGVyZmFjZXMgZm9yIHRoZXNlIGRlY2xhcmVkIGludGVyZmFjZXMuCisgICAgICogPHA+CisgICAgICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGFkZCB0eXBlcyB0aGF0IHRoZSBDb25maWd1cmF0aW9uIHNob3VsZCBpbXBsZW1lbnQsIGJ1dAorICAgICAqIHdoaWNoIHlvdSBkbyBub3Qgd2FudCB0byBpbmNsdWRlIGluIHRoZSBlbnRpdHkgaW50ZXJmYWNlIGl0c2VsZi4KKyAgICAgKiA8L3A+CisgICAgICogQHBhcmFtIHR5cGVzIGxpc3Qgb2YgaW50ZXJmYWNlcyB0byBhZGQKKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhpcyBpbnN0YW5jZSBmb3IgYSBmbHVpZCBEU0wKKyAgICAgKi8KKyAgICBDb25maWd1cmF0aW9uRGVjbGFyYXRpb24gd2l0aFR5cGVzKCBDbGFzczw/Pi4uLiB0eXBlcyApOworfQpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvRW5lcmd5NEphdmEuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0VuZXJneTRKYXZhLmphdmEKaW5kZXggNzFkZDUyNS4uZDljZGMxOCAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvRW5lcmd5NEphdmEuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9FbmVyZ3k0SmF2YS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgb3JnLnFpNGouc3BpLlFpNGpTUEk7CiAKIC8qKgotICogTWFpbiBib290c3RyYXAgY2xhc3MgZm9yIHN0YXJ0aW5nIFFpNGogYW5kIGNyZWF0aW5nIG5ldyBhcHBsaWNhdGlvbnMuCisgKiBNYWluIGJvb3RzdHJhcCBjbGFzcyBmb3Igc3RhcnRpbmcgWmVzdCBhbmQgY3JlYXRpbmcgbmV3IGFwcGxpY2F0aW9ucy4KICAqIDxwPgogICogSW5zdGFudGlhdGUgdGhpcyBhbmQgY2FsbCBvbmUgb2YgdGhlIGZhY3RvcnkgbWV0aG9kcyB0byBnZXQgc3RhcnRlZC4KICAqIDwvcD4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICB7CiAgICAgICAgIGlmKCBydW50aW1lID09IG51bGwgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQm9vdHN0cmFwRXhjZXB0aW9uKCAiQ2FuIG5vdCBjcmVhdGUgUWk0aiB3aXRob3V0IGEgUWk0aiBSdW50aW1lLiIgKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBCb290c3RyYXBFeGNlcHRpb24oICJDYW4gbm90IGNyZWF0ZSBaZXN0IHdpdGhvdXQgYSBaZXN0IFJ1bnRpbWUuIiApOwogICAgICAgICB9CiAgICAgICAgIHRoaXMucnVudGltZSA9IHJ1bnRpbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvRW50aXR5QXNzZW1ibHkuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0VudGl0eUFzc2VtYmx5LmphdmEKaW5kZXggZmU4ZGZmMS4uZWY2MDhlZCAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvRW50aXR5QXNzZW1ibHkuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9FbnRpdHlBc3NlbWJseS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS50eXBlLkhhc1R5cGVzOwpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvSW1wb3J0ZWRTZXJ2aWNlQXNzZW1ibHkuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0ltcG9ydGVkU2VydmljZUFzc2VtYmx5LmphdmEKaW5kZXggZmI0NmRlZC4uMmQ5MzIwZSAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvSW1wb3J0ZWRTZXJ2aWNlQXNzZW1ibHkuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9JbXBvcnRlZFNlcnZpY2VBc3NlbWJseS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS50eXBlLkhhc1R5cGVzOwpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvSW5qZWN0aW9uRXhjZXB0aW9uLmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9JbmplY3Rpb25FeGNlcHRpb24uamF2YQppbmRleCBhMmVkM2I2Li5iYjBkNzgyIDEwMDY0NAotLS0gYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9JbmplY3Rpb25FeGNlcHRpb24uamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9JbmplY3Rpb25FeGNlcHRpb24uamF2YQpAQCAtMTUsNyArMTUsNyBAQAogcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXA7CiAKIC8qKgotICogVGhyb3duIGJ5IHRoZSBRaTRqIHJ1bnRpbWUgaWYgYSBkZXBlbmRlbmN5IGNhbiBub3QgYmUgaW5qZWN0ZWQuCisgKiBUaHJvd24gYnkgdGhlIFplc3QgcnVudGltZSBpZiBhIGRlcGVuZGVuY3kgY2FuIG5vdCBiZSBpbmplY3RlZC4KICAqLwogcHVibGljIGNsYXNzIEluamVjdGlvbkV4Y2VwdGlvbgogICAgIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvSW52YWxpZEluamVjdGlvbkV4Y2VwdGlvbi5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvSW52YWxpZEluamVjdGlvbkV4Y2VwdGlvbi5qYXZhCmluZGV4IDBjMjUxMmMuLmQzZjE4ZDkgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0ludmFsaWRJbmplY3Rpb25FeGNlcHRpb24uamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9JbnZhbGlkSW5qZWN0aW9uRXhjZXB0aW9uLmphdmEKQEAgLTEsNyArMSwyNSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwOwogCiAvKioKLSAqIFRocm93biBieSB0aGUgUWk0aiBydW50aW1lIGlmIGEgZGVwZW5kZW5jeSBpbmplY3Rpb24gZGVjbGFyYXRpb24gaXMgaW52YWxpZC4KKyAqIFRocm93biBieSB0aGUgWmVzdCBydW50aW1lIGlmIGEgZGVwZW5kZW5jeSBpbmplY3Rpb24gZGVjbGFyYXRpb24gaXMgaW52YWxpZC4KICAqLwogcHVibGljIGNsYXNzIEludmFsaWRJbmplY3Rpb25FeGNlcHRpb24KICAgICBleHRlbmRzIEV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvTW9kdWxlQXNzZW1ibHkuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL01vZHVsZUFzc2VtYmx5LmphdmEKaW5kZXggODA1YjIzMi4uNGU0NzNiNCAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvTW9kdWxlQXNzZW1ibHkuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9Nb2R1bGVBc3NlbWJseS5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiAKIGltcG9ydCBvcmcucWk0ai5hcGkuYWN0aXZhdGlvbi5BY3RpdmF0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CitpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuSGFzVHlwZXM7CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5TcGVjaWZpY2F0aW9uOwogCiAvKioKQEAgLTY2LDYgKzY3LDggQEAKICAgICAgKi8KICAgICBTdHJpbmcgbmFtZSgpOwogCisgICAgTW9kdWxlQXNzZW1ibHkgc2V0TWV0YUluZm8oIE9iamVjdCBpbmZvICk7CisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIG1vZHVsZSBhY3RpdmF0b3JzLiBBY3RpdmF0b3JzIGFyZSBleGVjdXRlZCBpbiBvcmRlciBhcm91bmQgdGhlCiAgICAgICogTW9kdWxlIGFjdGl2YXRpb24gYW5kIHBhc3NpdmF0aW9uLgpAQCAtMTM4LDYgKzE0MSwyNyBAQAogICAgIEVudGl0eURlY2xhcmF0aW9uIGVudGl0aWVzKCBTcGVjaWZpY2F0aW9uPD8gc3VwZXIgRW50aXR5QXNzZW1ibHk+IHNwZWNpZmljYXRpb24gKTsKIAogICAgIC8qKgorICAgICAqIERlY2xhcmUgYSBsaXN0IG9mIENvbmZpZ3VyYXRpb24gQ29tcG9zaXRlcyBmb3IgdGhpcyBNb2R1bGUuIFVzZSB0aGUgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHRoYXQgaXMgcmV0dXJuZWQgdG8KKyAgICAgKiBkZWNsYXJlIGZ1cnRoZXIgc2V0dGluZ3MuIE5vdGUgdGhhdCB0aGUgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHdvcmtzIG9uIGFsbCBvZiB0aGUgdHlwZXMgc3BlY2lmaWVkLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb25UeXBlcyBUaGUgdHlwZXMgdGhhdCBzcGVjaWZpZXMgdGhlIENvbmZpZ3VyYXRpb24gdHlwZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEFuIENvbmZpZ3VyYXRpb25EZWNsYXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBDb25maWd1cmF0aW9uIHR5cGVzLgorICAgICAqLworICAgIENvbmZpZ3VyYXRpb25EZWNsYXJhdGlvbiBjb25maWd1cmF0aW9ucyggQ2xhc3M8Pz4uLi4gY29uZmlndXJhdGlvblR5cGVzICk7CisKKyAgICAvKioKKyAgICAgKiBHaXZlbiBhIFNwZWNpZmljYXRpb24gZm9yIENvbmZpZ3VyYXRpb25Bc3NlbWJseSdzLCByZXR1cm5zIGEgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHRoYXQgY2FuCisgICAgICogYmUgdXNlZCB0byB3b3JrIHdpdGggYWxsIG9mIHRoZSBhc3NlbWJsaWVzIG1hdGNoZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3BlY2lmaWNhdGlvbiBUaGUgU3BlY2lmaWNhdGlvbiB0aGF0IHNwZWNpZmllcyB0aGUgQ29uZmlndXJhdGlvbkNvbXBvc2l0ZSB0eXBlcyBvZiBpbnRlcmVzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQW4gQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEVudGl0eUNvbXBvc2l0ZSB0eXBlcy4KKyAgICAgKi8KKyAgICBDb25maWd1cmF0aW9uRGVjbGFyYXRpb24gY29uZmlndXJhdGlvbnMoIFNwZWNpZmljYXRpb248SGFzVHlwZXM+IHNwZWNpZmljYXRpb24gKTsKKworCisgICAgLyoqCiAgICAgICogRGVjbGFyZSBhIGxpc3Qgb2Ygb2JqZWN0IGNsYXNzZXMgZm9yIHRoaXMgTW9kdWxlLiBVc2UgdGhlIE9iamVjdERlY2xhcmF0aW9uIHRoYXQgaXMgcmV0dXJuZWQgdG8KICAgICAgKiBkZWNsYXJlIGZ1cnRoZXIgc2V0dGluZ3MuIE5vdGUgdGhhdCB0aGUgT2JqZWN0RGVjbGFyYXRpb24gd29ya3Mgb24gYWxsIG9mIHRoZSB0eXBlcyBzcGVjaWZpZWQuCiAgICAgICoKZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL09iamVjdEFzc2VtYmx5LmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9PYmplY3RBc3NlbWJseS5qYXZhCmluZGV4IDNlMTVlZGIuLmU0MjRjZjYgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL09iamVjdEFzc2VtYmx5LmphdmEKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvT2JqZWN0QXNzZW1ibHkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXA7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5IYXNUeXBlczsKZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1FpNGpSdW50aW1lLmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9RaTRqUnVudGltZS5qYXZhCmluZGV4IGZjZjRkMWMuLjc2ZTYxMzAgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1FpNGpSdW50aW1lLmphdmEKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvUWk0alJ1bnRpbWUuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogaW1wb3J0IG9yZy5xaTRqLnNwaS5RaTRqU1BJOwogCiAvKioKLSAqIFRoaXMgaW50ZXJmYWNlIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBieSBRaTRqIHJ1bnRpbWVzLgorICogVGhpcyBpbnRlcmZhY2UgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFplc3QgcnVudGltZXMuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUWk0alJ1bnRpbWUKIHsKZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1J1bnRpbWVGYWN0b3J5LmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9SdW50aW1lRmFjdG9yeS5qYXZhCmluZGV4IDZkZDVkMmEuLmI0ZWZkMjQgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1J1bnRpbWVGYWN0b3J5LmphdmEKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvUnVudGltZUZhY3RvcnkuamF2YQpAQCAtMSwxNCArMSwzMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwOwogCiAvKioKLSAqIFFpNGogcnVudGltZSBmYWN0b3J5LgorICogWmVzdCBydW50aW1lIGZhY3RvcnkuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUnVudGltZUZhY3RvcnkKIHsKICAgICBRaTRqUnVudGltZSBjcmVhdGVSdW50aW1lKCk7CiAKICAgICAvKioKLSAgICAgKiBTdGFuZGFsb25lIGFwcGxpY2F0aW9uIFFpNGogcnVudGltZSBmYWN0b3J5LgorICAgICAqIFN0YW5kYWxvbmUgYXBwbGljYXRpb24gWmVzdCBydW50aW1lIGZhY3RvcnkuCiAgICAgICovCiAgICAgcHVibGljIGZpbmFsIGNsYXNzIFN0YW5kYWxvbmVBcHBsaWNhdGlvblJ1bnRpbWVGYWN0b3J5CiAgICAgICAgIGltcGxlbWVudHMgUnVudGltZUZhY3RvcnkKQEAgLTI0LDExICs0MiwxMSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2F0Y2goIENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiUWk0aiBSdW50aW1lIGphciBpcyBub3QgcHJlc2VudCBpbiB0aGUgY2xhc3NwYXRoLiIgKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJaZXN0IFJ1bnRpbWUgamFyIGlzIG5vdCBwcmVzZW50IGluIHRoZSBjbGFzc3BhdGguIiApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2F0Y2goIEluc3RhbnRpYXRpb25FeGNlcHRpb24gfCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIkludmFsaWQgUWk0aiBSdW50aW1lIGNsYXNzLiBJZiB5b3UgYXJlIHByb3ZpZGluZyB5b3VyIG93biBRaTRqIFJ1bnRpbWUsIHBsZWFzZSAiICsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJJbnZhbGlkIFplc3QgUnVudGltZSBjbGFzcy4gSWYgeW91IGFyZSBwcm92aWRpbmcgeW91ciBvd24gWmVzdCBSdW50aW1lLCBwbGVhc2UgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGFjdCBxaTRqLWRldiBhdCBHb29nbGUgR3JvdXBzIGZvciBhc3Npc3RhbmNlLiIgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBudWxsOwpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvU2VydmljZUFzc2VtYmx5LmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9TZXJ2aWNlQXNzZW1ibHkuamF2YQppbmRleCBjNDVkMmJmLi4yN2NlNjk4IDEwMDY0NAotLS0gYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9TZXJ2aWNlQXNzZW1ibHkuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9TZXJ2aWNlQXNzZW1ibHkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXA7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5IYXNUeXBlczsKZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1NlcnZpY2VEZWNsYXJhdGlvbi5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvU2VydmljZURlY2xhcmF0aW9uLmphdmEKaW5kZXggYmRiZGVlYS4uYzU2NmM1OSAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvU2VydmljZURlY2xhcmF0aW9uLmphdmEKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvU2VydmljZURlY2xhcmF0aW9uLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHk7CiAKIC8qKgotICogRmx1ZW50IEFQSSBmb3IgZGVjbGFyaW5nIHNlcnZpY2VzIGhvc3RlZCBpbiBRaTRqLiBJbnN0YW5jZXMKKyAqIEZsdWVudCBBUEkgZm9yIGRlY2xhcmluZyBzZXJ2aWNlcyBob3N0ZWQgaW4gWmVzdC4gSW5zdGFuY2VzCiAgKiBvZiB0aGlzIEFQSSBhcmUgYWNxdWlyZWQgYnkgY2FsbGluZyB7QGxpbmsgTW9kdWxlQXNzZW1ibHkjc2VydmljZXMoQ2xhc3NbXSl9LgogICovCiBwdWJsaWMgaW50ZXJmYWNlIFNlcnZpY2VEZWNsYXJhdGlvbgpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvU2luZ2xldG9uQXNzZW1ibGVyLmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9TaW5nbGV0b25Bc3NlbWJsZXIuamF2YQppbmRleCAyNTViZDI5Li43ZDI1NDJkIDEwMDY0NAotLS0gYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9TaW5nbGV0b25Bc3NlbWJsZXIuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9TaW5nbGV0b25Bc3NlbWJsZXIuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICAgIHByaXZhdGUgZmluYWwgTW9kdWxlIG1vZHVsZUluc3RhbmNlOwogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIFFpNGogUnVudGltZSBpbnN0YW5jZSBjb250YWluaW5nIG9uZSBMYXllciB3aXRoIG9uZSBNb2R1bGUuCisgICAgICogQ3JlYXRlcyBhIFplc3QgUnVudGltZSBpbnN0YW5jZSBjb250YWluaW5nIG9uZSBMYXllciB3aXRoIG9uZSBNb2R1bGUuCiAgICAgICogVGhlIExheWVyIHdpbGwgYmUgbmFtZWQgIkxheWVyIDEiIGFuZCB0aGUgTW9kdWxlIHdpbGwgYmUgbmFtZWQgIk1vZHVsZSAxIi4gSXQgaXMgcG9zc2libGUgdG8gYWRkCiAgICAgICogYWRkaXRpb25hbCBsYXllcnMgYW5kIG1vZHVsZXMgdmlhIHRoZSBBc3NlbWJsZXIgaW50ZXJmYWNlIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgc3ViY2xhc3Mgb2YgdGhpcwogICAgICAqIGNsYXNzLgpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvVHJhbnNpZW50QXNzZW1ibHkuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1RyYW5zaWVudEFzc2VtYmx5LmphdmEKaW5kZXggMmQ5ZjBkOS4uZjNlMmE1OCAxMDA2NDQKLS0tIGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvVHJhbnNpZW50QXNzZW1ibHkuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9UcmFuc2llbnRBc3NlbWJseS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS50eXBlLkhhc1R5cGVzOwpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvVmFsdWVBc3NlbWJseS5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvVmFsdWVBc3NlbWJseS5qYXZhCmluZGV4IGUxNjU5MWMuLjlmOTg0MDYgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1ZhbHVlQXNzZW1ibHkuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9WYWx1ZUFzc2VtYmx5LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuSGFzVHlwZXM7CmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9idWlsZGVyL0FwcGxpY2F0aW9uQnVpbGRlci5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYnVpbGRlci9BcHBsaWNhdGlvbkJ1aWxkZXIuamF2YQppbmRleCBjMDA4ZTVmLi5kNjhhM2Q1IDEwMDY0NAotLS0gYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9idWlsZGVyL0FwcGxpY2F0aW9uQnVpbGRlci5qYXZhCisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2J1aWxkZXIvQXBwbGljYXRpb25CdWlsZGVyLmphdmEKQEAgLTE4MCw2ICsxODAsMTkgQEAKICAgICB7CiAgICAgICAgIFN0cmluZyBhcHBsaWNhdGlvbk5hbWUgPSByb290LmdldFN0cmluZyggIm5hbWUiICk7CiAgICAgICAgIEFwcGxpY2F0aW9uQnVpbGRlciBidWlsZGVyID0gbmV3IEFwcGxpY2F0aW9uQnVpbGRlciggYXBwbGljYXRpb25OYW1lICk7CisgICAgICAgIGJ1aWxkZXIuY29uZmlndXJlV2l0aEpzb24oIHJvb3QgKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisgICAgfQorCisgICAgLyoqIENvbmZpZ3VyZXMgdGhlIGFwcGxpY2F0aW9uIHN0cnV1Y3R1cmUgZnJvbSBhIEpTT04gZG9jdW1lbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcm9vdCBUaGUgSlNPTiBkb2N1bWVudCByb290LgorICAgICAqIEB0aHJvd3MgSlNPTkV4Y2VwdGlvbiBpZiB0aGUgSlNPTiBkb2N1bWVudCBpc24ndCB2YWxpZC4KKyAgICAgKiBAdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uIGlmIHByb2JlbG1zIGluIHRoZSBBc3NlbWJsZXJzIHByb3ZpZGVkIGluIHRoZSBKU09OIGRvY3VtZW50LgorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVdpdGhKc29uKCBKU09OT2JqZWN0IHJvb3QgKQorICAgICAgICB0aHJvd3MgSlNPTkV4Y2VwdGlvbiwgQXNzZW1ibHlFeGNlcHRpb24KKyAgICB7CiAgICAgICAgIEpTT05BcnJheSBsYXllcnMgPSByb290Lm9wdEpTT05BcnJheSggImxheWVycyIgKTsKICAgICAgICAgaWYoIGxheWVycyAhPSBudWxsICkKICAgICAgICAgewpAQCAtMTg3LDcgKzIwMCw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgSlNPTk9iamVjdCBsYXllck9iamVjdCA9IGxheWVycy5nZXRKU09OT2JqZWN0KCBpICk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGxheWVyTmFtZSA9IGxheWVyT2JqZWN0LmdldFN0cmluZyggIm5hbWUiICk7Ci0gICAgICAgICAgICAgICAgTGF5ZXJEZWNsYXJhdGlvbiBsYXllckRlY2xhcmF0aW9uID0gYnVpbGRlci53aXRoTGF5ZXIoIGxheWVyTmFtZSApOworICAgICAgICAgICAgICAgIExheWVyRGVjbGFyYXRpb24gbGF5ZXJEZWNsYXJhdGlvbiA9IHdpdGhMYXllciggbGF5ZXJOYW1lICk7CiAgICAgICAgICAgICAgICAgSlNPTkFycmF5IHVzaW5nID0gbGF5ZXJPYmplY3Qub3B0SlNPTkFycmF5KCAidXNlcyIgKTsKICAgICAgICAgICAgICAgICBpZiggdXNpbmcgIT0gbnVsbCApCiAgICAgICAgICAgICAgICAgewpAQCAtMjA5LDE0ICsyMjIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIGludCBtID0gMDsgbSA8IGFzc2VtYmxlcnMubGVuZ3RoKCk7IG0rKyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVEZWNsYXJhdGlvbi53aXRoQXNzZW1ibGVyKCBhc3NlbWJsZXJzLmdldFN0cmluZyggbSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBhc3NlbWJsZXJzLmdldFN0cmluZyggbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVEZWNsYXJhdGlvbi53aXRoQXNzZW1ibGVyKCBzdHJpbmcgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9idWlsZGVyL3BhY2thZ2UuaHRtbCBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2J1aWxkZXIvcGFja2FnZS5odG1sCmluZGV4IDgxODhkMzUuLjY2M2IwMTYgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2J1aWxkZXIvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2J1aWxkZXIvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5BcHBsaWNhdGlvbiBCdWlsZGVyLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1jb2RlYmVoaW5kL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMtcGx1Z2luLnhtbCBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2xheWVyZWQvTGF5ZXJBc3NlbWJsZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDYxJQpjb3B5IGZyb20gbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLXBsdWdpbi54bWwKY29weSB0byBjb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9sYXllcmVkL0xheWVyQXNzZW1ibGVyLmphdmEKaW5kZXggY2NmMmM0Mi4uYzhhN2I4OCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLXBsdWdpbi54bWwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvbGF5ZXJlZC9MYXllckFzc2VtYmxlci5qYXZhCkBAIC0xLDggKzEsNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCiAvKgotICogJElkOiBwb20ueG1sIDU1OTIwNiAyMDA3LTA3LTI0IDIxOjAxOjE4WiBhcGV0cmVsbGkgJAotICoKICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KQEAgLTExLDcgKzcsNyBAQAogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgogICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KQEAgLTIwLDEzICsxNiwxNCBAQAogICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KLS0tPgorcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXAubGF5ZXJlZDsKIAotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjAuZHRkIj4KK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXBwbGljYXRpb25Bc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkxheWVyQXNzZW1ibHk7CiAKLTxzdHJ1dHM+Ci0gIDxiZWFuIHR5cGU9ImNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5QYWNrYWdlUHJvdmlkZXIiIG5hbWU9InFpNGoiCi0gICAgICAgIGNsYXNzPSJvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuY29kZWJlaGluZC5RaTRqQ29kZWJlaGluZFBhY2thZ2VQcm92aWRlciIvPgotPC9zdHJ1dHM+CitwdWJsaWMgaW50ZXJmYWNlIExheWVyQXNzZW1ibGVyCit7CisgICAgTGF5ZXJBc3NlbWJseSBhc3NlbWJsZSggTGF5ZXJBc3NlbWJseSBsYXllciApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbjsKK30KZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2xheWVyZWQvTGF5ZXJlZEFwcGxpY2F0aW9uQXNzZW1ibGVyLmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9sYXllcmVkL0xheWVyZWRBcHBsaWNhdGlvbkFzc2VtYmxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTk3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9sYXllcmVkL0xheWVyZWRBcHBsaWNhdGlvbkFzc2VtYmxlci5qYXZhCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXAubGF5ZXJlZDsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLmFjdGl2YXRpb24uUGFzc2l2YXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5BcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkFwcGxpY2F0aW9uRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXBwbGljYXRpb25Bc3NlbWJsZXI7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFwcGxpY2F0aW9uQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFwcGxpY2F0aW9uQXNzZW1ibHlGYWN0b3J5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuRW5lcmd5NEphdmE7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkxheWVyQXNzZW1ibHk7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYXllcmVkQXBwbGljYXRpb25Bc3NlbWJsZXIKKyAgICBpbXBsZW1lbnRzIEFwcGxpY2F0aW9uQXNzZW1ibGVyCit7CisgICAgcHJvdGVjdGVkIEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uOworICAgIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIHZlcnNpb247CisgICAgcHJpdmF0ZSBmaW5hbCBBcHBsaWNhdGlvbi5Nb2RlIG1vZGU7CisgICAgcHJpdmF0ZSBBcHBsaWNhdGlvbkFzc2VtYmx5IGFzc2VtYmx5OworCisgICAgcHJpdmF0ZSBIYXNoTWFwPENsYXNzPD8gZXh0ZW5kcyBMYXllckFzc2VtYmxlcj4sIExheWVyQXNzZW1ibGVyPiBhc3NlbWJsZXJzID0gbmV3IEhhc2hNYXA8PigpOworCisgICAgcHVibGljIExheWVyZWRBcHBsaWNhdGlvbkFzc2VtYmxlciggU3RyaW5nIG5hbWUsIFN0cmluZyB2ZXJzaW9uLCBBcHBsaWNhdGlvbi5Nb2RlIG1vZGUgKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgICAgICAgIHRoaXMubW9kZSA9IG1vZGU7CisgICAgICAgIEVuZXJneTRKYXZhIHFpNGogPSBuZXcgRW5lcmd5NEphdmEoKTsKKyAgICAgICAgQXBwbGljYXRpb25EZXNjcmlwdG9yIG1vZGVsID0gcWk0ai5uZXdBcHBsaWNhdGlvbk1vZGVsKCB0aGlzICk7CisgICAgICAgIG9uTW9kZWxDcmVhdGVkKCBtb2RlbCApOworICAgICAgICBpbnN0YW50aWF0ZUFwcGxpY2F0aW9uKCBxaTRqLCBtb2RlbCApOworICAgIH0KKworICAgIHB1YmxpYyBBcHBsaWNhdGlvbkFzc2VtYmx5IGFzc2VtYmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhc3NlbWJseTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgdG8gaW5zdGFudGlhdGUgdGhlIFplc3QgYXBwbGljYXRpb24gZnJvbSB0aGUgYXBwbGljYXRpb24gbW9kZWwuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHM7CisgICAgICogPC9wPgorICAgICAqIDxwcmU+PGNvZGU+CisgICAgICogICBhcHBsaWNhdGlvbiA9IG1vZGVsLm5ld0luc3RhbmNlKCBxaTRqLnNwaSgpICk7CisgICAgICogPC9jb2RlPjwvcHJlPgorICAgICAqCisgICAgICogQHBhcmFtIHFpNGogIFRoZSBaZXN0IHJ1bnRpbWUgZW5naW5lLgorICAgICAqIEBwYXJhbSBtb2RlbCBUaGUgYXBwbGljYXRpb24gbW9kZWwgZGVzY3JpcHRvci4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBpbnN0YW50aWF0ZUFwcGxpY2F0aW9uKCBFbmVyZ3k0SmF2YSBxaTRqLCBBcHBsaWNhdGlvbkRlc2NyaXB0b3IgbW9kZWwgKQorICAgIHsKKyAgICAgICAgYXBwbGljYXRpb24gPSBtb2RlbC5uZXdJbnN0YW5jZSggcWk0ai5zcGkoKSApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciB0aGUgQXBwbGljYXRpb24gTW9kZWwgaGFzIGJlZW4gY3JlYXRlZCwgYmVmb3JlIHRoZSBpbnN0YW50aWF0aW9uIG9mIHRoZSBaZXN0CisgICAgICogYXBwbGljYXRpb24uCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIEFwcGxpY2F0aW9ucyBtYXkgaGF2ZSBhZHZhbmNlZCBmZWF0dXJlcyB0byBpbnNwZWN0IG9yCisgICAgICogbW9kaWZ5IHRoZSBtb2RlbCBwcmlvciB0byBpbnN0YW50aWF0aW9uLCBhbmQgdGhpcyBpcyB0aGUgcGxhY2Ugd2hlcmUgc3VjaCBhZHZhbmNlZCBtYW5pcHVsYXRpb24gaXMKKyAgICAgKiBleHBlY3RlZCB0byB0YWtlIHBsYWNlLgorICAgICAqIDwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtb2RlbAorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIG9uTW9kZWxDcmVhdGVkKCBBcHBsaWNhdGlvbkRlc2NyaXB0b3IgbW9kZWwgKQorICAgIHsKKyAgICB9CisKKyAgICBwdWJsaWMgQXBwbGljYXRpb24gYXBwbGljYXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkKKyAgICAgICAgdGhyb3dzIEFjdGl2YXRpb25FeGNlcHRpb24KKyAgICB7CisgICAgICAgIGFwcGxpY2F0aW9uLmFjdGl2YXRlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RvcCgpCisgICAgICAgIHRocm93cyBQYXNzaXZhdGlvbkV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgYXBwbGljYXRpb24ucGFzc2l2YXRlKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEFwcGxpY2F0aW9uQXNzZW1ibHkgYXNzZW1ibGUoIEFwcGxpY2F0aW9uQXNzZW1ibHlGYWN0b3J5IGFwcGxpY2F0aW9uRmFjdG9yeSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgYXNzZW1ibHkgPSBhcHBsaWNhdGlvbkZhY3RvcnkubmV3QXBwbGljYXRpb25Bc3NlbWJseSgpOworICAgICAgICBhc3NlbWJseS5zZXROYW1lKCBuYW1lICk7CisgICAgICAgIGFzc2VtYmx5LnNldFZlcnNpb24oIHZlcnNpb24gKTsKKyAgICAgICAgYXNzZW1ibHkuc2V0TW9kZSggbW9kZSApOworICAgICAgICBhc3NlbWJsZUxheWVycyggYXNzZW1ibHkgKTsKKyAgICAgICAgcmV0dXJuIGFzc2VtYmx5OworICAgIH0KKworICAgIHByb3RlY3RlZCBMYXllckFzc2VtYmx5IGNyZWF0ZUxheWVyKCBDbGFzczw/IGV4dGVuZHMgTGF5ZXJBc3NlbWJsZXI+IGxheWVyQXNzZW1ibGVyQ2xhc3MgKQorICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGNsYXNzbmFtZSA9IGxheWVyQXNzZW1ibGVyQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpOworICAgICAgICAgICAgaWYoIGNsYXNzbmFtZS5lbmRzV2l0aCggIkxheWVyIiApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbGFzc25hbWUgPSBjbGFzc25hbWUuc3Vic3RyaW5nKCAwLCBjbGFzc25hbWUubGVuZ3RoKCkgLSA1ICkgKyAiIExheWVyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldE5hbWVJZlByZXNlbnQoIGxheWVyQXNzZW1ibGVyQ2xhc3MsIGNsYXNzbmFtZSApOworICAgICAgICAgICAgTGF5ZXJBc3NlbWJseSBsYXllciA9IGFzc2VtYmx5LmxheWVyKCBjbGFzc25hbWUgKTsKKworICAgICAgICAgICAgTGF5ZXJBc3NlbWJsZXIgbGF5ZXJBc3NlbWJsZXIgPSBpbnN0YW50aWF0ZUFzc2VtYmxlciggbGF5ZXJBc3NlbWJsZXJDbGFzcywgbGF5ZXIgKTsKKyAgICAgICAgICAgIGFzc2VtYmxlcnMucHV0KCBsYXllckFzc2VtYmxlckNsYXNzLCBsYXllckFzc2VtYmxlciApOworICAgICAgICAgICAgTGF5ZXJBc3NlbWJseSBhc3NlbWJseSA9IGxheWVyQXNzZW1ibGVyLmFzc2VtYmxlKCBsYXllciApOworICAgICAgICAgICAgaWYoIGFzc2VtYmx5ID09IG51bGwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHBlb3BsZSBmb3Jnb3QsIGFuZCBsZXQncyBub3QgcmVxdWlyZSBhICJyZXR1cm4gbGF5ZXIiLCBzaW5jZSB3ZSBjYW4gZG8gdGhhdCBvdXJzZWx2ZXMuCisgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFzc2VtYmx5OworICAgICAgICB9CisgICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJVbmFibGUgdG8gaW5zdGFudGlhdGUgbGF5ZXIgd2l0aCAiICsgbGF5ZXJBc3NlbWJsZXJDbGFzcy5nZXRTaW1wbGVOYW1lKCksIGUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgTGF5ZXJBc3NlbWJsZXIgaW5zdGFudGlhdGVBc3NlbWJsZXIoIENsYXNzPD8gZXh0ZW5kcyBMYXllckFzc2VtYmxlcj4gbGF5ZXJBc3NlbWJsZXJDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllckFzc2VtYmx5IGxheWVyCisgICAgKQorICAgICAgICB0aHJvd3MgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgTGF5ZXJBc3NlbWJsZXIgbGF5ZXJBc3NlbWJsZXI7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBDb25zdHJ1Y3Rvcjw/IGV4dGVuZHMgTGF5ZXJBc3NlbWJsZXI+IGFzc2VtYmx5Q29uc3RydWN0b3IgPSBsYXllckFzc2VtYmxlckNsYXNzLmdldENvbnN0cnVjdG9yKCBMYXllckFzc2VtYmx5LmNsYXNzICk7CisgICAgICAgICAgICBsYXllckFzc2VtYmxlciA9IGFzc2VtYmx5Q29uc3RydWN0b3IubmV3SW5zdGFuY2UoIGxheWVyICk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVXNlIGRlZmF1bHQgY29uc3RydWN0b3IgdGhlbi4KKyAgICAgICAgICAgIGxheWVyQXNzZW1ibGVyID0gbGF5ZXJBc3NlbWJsZXJDbGFzcy5uZXdJbnN0YW5jZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsYXllckFzc2VtYmxlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBzZXROYW1lSWZQcmVzZW50KCBDbGFzczw/PiBjbGF6eiwgU3RyaW5nIGNsYXNzbmFtZSApCisgICAgICAgIHRocm93cyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgRmllbGQgZmllbGQgPSBjbGF6ei5nZXREZWNsYXJlZEZpZWxkKCAiTkFNRSIgKTsKKyAgICAgICAgICAgIGlmKCBNb2RpZmllci5pc1N0YXRpYyggZmllbGQuZ2V0TW9kaWZpZXJzKCkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmllbGQuc2V0QWNjZXNzaWJsZSggdHJ1ZSApOworICAgICAgICAgICAgICAgIGZpZWxkLnNldCggbnVsbCwgY2xhc3NuYW1lICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWdub3JlIGFuZCBjb25zaWRlciBub3JtYWwuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQorICAgIHByb3RlY3RlZCA8VCBleHRlbmRzIExheWVyQXNzZW1ibGVyPiBUIGFzc2VtYmxlck9mKCBDbGFzczxUPiBsYXllckFzc2VtYmxlckNsYXNzICkKKyAgICB7CisgICAgICAgIHJldHVybiAoVCkgYXNzZW1ibGVycy5nZXQoIGxheWVyQXNzZW1ibGVyQ2xhc3MgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgdG8gYXNzZW1ibGUgdGhlIGxheWVycyBpbiB0aGUgYXBwbGNhdGlvbi4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQsIGFuZCBpcyB0eXBpY2FsbHkgYSBsaXN0IG9mIExheWVyQXNzbWVibGVyIGluc3RhbnRpdGF0aW9ucywgZm9sbG93ZWQKKyAgICAgKiBieSB7QGxpbmsgTGF5ZXJBc3NlbWJseSN1c2VzKExheWVyQXNzZW1ibHkuLi4pfSBkZWNsYXJhdGlvbnMuCisgICAgICogPC9wPgorICAgICAqIDxwcmU+PGNvZGU+CisgICAgICoKKyAgICAgKiA8L2NvZGU+PC9wcmU+CisgICAgICovCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgYXNzZW1ibGVMYXllcnMoIEFwcGxpY2F0aW9uQXNzZW1ibHkgYXNzZW1ibHkgKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb247Cit9CmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9sYXllcmVkL0xheWVyZWRMYXllckFzc2VtYmxlci5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvbGF5ZXJlZC9MYXllcmVkTGF5ZXJBc3NlbWJsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWY0YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvbGF5ZXJlZC9MYXllcmVkTGF5ZXJBc3NlbWJsZXIuamF2YQpAQCAtMCwwICsxLDg2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXAubGF5ZXJlZDsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5MYXllckFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIExheWVyZWRMYXllckFzc2VtYmxlcgorICAgIGltcGxlbWVudHMgTGF5ZXJBc3NlbWJsZXIKK3sKKyAgICBwcml2YXRlIEhhc2hNYXA8Q2xhc3M8PyBleHRlbmRzIE1vZHVsZUFzc2VtYmxlcj4sIE1vZHVsZUFzc2VtYmxlcj4gYXNzZW1ibGVycyA9IG5ldyBIYXNoTWFwPD4oKTsKKworICAgIHByb3RlY3RlZCBNb2R1bGVBc3NlbWJseSBjcmVhdGVNb2R1bGUoIExheWVyQXNzZW1ibHkgbGF5ZXIsIENsYXNzPD8gZXh0ZW5kcyBNb2R1bGVBc3NlbWJsZXI+IG1vZHVsZXJBc3NlbWJsZXJDbGFzcyApCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgTW9kdWxlQXNzZW1ibGVyIG1vZHVsZUFzc2VtYmxlciA9IGluc3RhbnRpYXRlQXNzZW1ibGVyKCBsYXllciwgbW9kdWxlckFzc2VtYmxlckNsYXNzICk7CisgICAgICAgICAgICBTdHJpbmcgbW9kdWxlTmFtZSA9IGNyZWF0ZU1vZHVsZU5hbWUoIG1vZHVsZXJBc3NlbWJsZXJDbGFzcyApOworICAgICAgICAgICAgTGF5ZXJlZEFwcGxpY2F0aW9uQXNzZW1ibGVyLnNldE5hbWVJZlByZXNlbnQoIG1vZHVsZXJBc3NlbWJsZXJDbGFzcywgbW9kdWxlTmFtZSApOworICAgICAgICAgICAgTW9kdWxlQXNzZW1ibHkgbW9kdWxlID0gbGF5ZXIubW9kdWxlKCBtb2R1bGVOYW1lICk7CisgICAgICAgICAgICBhc3NlbWJsZXJzLnB1dCggbW9kdWxlckFzc2VtYmxlckNsYXNzLCBtb2R1bGVBc3NlbWJsZXIgKTsKKyAgICAgICAgICAgIE1vZHVsZUFzc2VtYmx5IGFzc2VtYmx5ID0gbW9kdWxlQXNzZW1ibGVyLmFzc2VtYmxlKCBsYXllciwgbW9kdWxlICk7CisgICAgICAgICAgICBpZiggYXNzZW1ibHkgPT0gbnVsbCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhc3NlbWJseTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUgKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiVW5hYmxlIHRvIGluc3RhbnRpYXRlIG1vZHVsZSB3aXRoICIgKyBtb2R1bGVyQXNzZW1ibGVyQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpLCBlICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZU1vZHVsZU5hbWUoIENsYXNzPD8gZXh0ZW5kcyBNb2R1bGVBc3NlbWJsZXI+IG1vZHVsZXJBc3NlbWJsZXJDbGFzcyApCisgICAgeworICAgICAgICBTdHJpbmcgbW9kdWxlTmFtZSA9IG1vZHVsZXJBc3NlbWJsZXJDbGFzcy5nZXRTaW1wbGVOYW1lKCk7CisgICAgICAgIGlmKCBtb2R1bGVOYW1lLmVuZHNXaXRoKCAiTW9kdWxlIiApICkKKyAgICAgICAgeworICAgICAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUuc3Vic3RyaW5nKCAwLCBtb2R1bGVOYW1lLmxlbmd0aCgpIC0gNiApICsgIiBNb2R1bGUiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtb2R1bGVOYW1lOworICAgIH0KKworICAgIHByaXZhdGUgTW9kdWxlQXNzZW1ibGVyIGluc3RhbnRpYXRlQXNzZW1ibGVyKCBMYXllckFzc2VtYmx5IGxheWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczw/IGV4dGVuZHMgTW9kdWxlQXNzZW1ibGVyPiBtb2R1bGVyQXNzZW1ibGVyQ2xhc3MKKyAgICApCisgICAgICAgIHRocm93cyBJbnN0YW50aWF0aW9uRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uLCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uCisgICAgeworICAgICAgICBNb2R1bGVBc3NlbWJsZXIgbW9kdWxlQXNzZW1ibGVyOworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgQ29uc3RydWN0b3I8PyBleHRlbmRzIE1vZHVsZUFzc2VtYmxlcj4gYXNzZW1ibHlDb25zdHJ1Y3RvciA9IG1vZHVsZXJBc3NlbWJsZXJDbGFzcy5nZXRDb25zdHJ1Y3RvciggTW9kdWxlQXNzZW1ibHkuY2xhc3MgKTsKKyAgICAgICAgICAgIG1vZHVsZUFzc2VtYmxlciA9IGFzc2VtYmx5Q29uc3RydWN0b3IubmV3SW5zdGFuY2UoIGxheWVyICk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlICkKKyAgICAgICAgeworICAgICAgICAgICAgbW9kdWxlQXNzZW1ibGVyID0gbW9kdWxlckFzc2VtYmxlckNsYXNzLm5ld0luc3RhbmNlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1vZHVsZUFzc2VtYmxlcjsKKyAgICB9CisKKyAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQorICAgIHByb3RlY3RlZCA8VCBleHRlbmRzIE1vZHVsZUFzc2VtYmxlcj4gVCBhc3NlbWJsZXJPZiggQ2xhc3M8VD4gbW9kdWxlQXNzZW1ibGVyVHlwZSApCisgICAgeworICAgICAgICByZXR1cm4gKFQpIGFzc2VtYmxlcnMuZ2V0KCBtb2R1bGVBc3NlbWJsZXJUeXBlICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLXBsdWdpbi54bWwgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9sYXllcmVkL01vZHVsZUFzc2VtYmxlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNjElCnJlbmFtZSBmcm9tIGxpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sCnJlbmFtZSB0byBjb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9sYXllcmVkL01vZHVsZUFzc2VtYmxlci5qYXZhCmluZGV4IGNjZjJjNDIuLjE3Yzg3NjUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sCisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2xheWVyZWQvTW9kdWxlQXNzZW1ibGVyLmphdmEKQEAgLTEsOCArMSw0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0KIC8qCi0gKiAkSWQ6IHBvbS54bWwgNTU5MjA2IDIwMDctMDctMjQgMjE6MDE6MThaIGFwZXRyZWxsaSAkCi0gKgogICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTEsNyArNyw3IEBACiAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgpAQCAtMjAsMTMgKzE2LDE0IEBACiAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwotLS0+CitwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcC5sYXllcmVkOwogCi08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgoraW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CiAKLTxzdHJ1dHM+Ci0gIDxiZWFuIHR5cGU9ImNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5QYWNrYWdlUHJvdmlkZXIiIG5hbWU9InFpNGoiCi0gICAgICAgIGNsYXNzPSJvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuY29kZWJlaGluZC5RaTRqQ29kZWJlaGluZFBhY2thZ2VQcm92aWRlciIvPgotPC9zdHJ1dHM+CitwdWJsaWMgaW50ZXJmYWNlIE1vZHVsZUFzc2VtYmxlcgoreworICAgIE1vZHVsZUFzc2VtYmx5IGFzc2VtYmxlKCBMYXllckFzc2VtYmx5IGxheWVyLCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb247Cit9CmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9sYXllcmVkL3BhY2thZ2UuaHRtbCBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2xheWVyZWQvcGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwY2RlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9sYXllcmVkL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxodG1sPgorICAgIDxib2R5PgorICAgICAgICA8aDI+TGF5ZXJlZCBBc3NlbWJseS48L2gyPgorICAgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL3BhY2thZ2UuaHRtbCBiL2NvcmUvYm9vdHN0cmFwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL3BhY2thZ2UuaHRtbAppbmRleCBhMGJkYjc4Li4wNDU4NzYxIDEwMDY0NAotLS0gYS9jb3JlL2Jvb3RzdHJhcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ib290c3RyYXAvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5Bc3NlbWJseSBhbmQgQm9vdHN0cmFwIEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQ2xhc3NTY2FubmVyVGVzdC5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQ2xhc3NTY2FubmVyVGVzdC5qYXZhCmluZGV4IDQ3NmIwOTcuLjMzYzllMjEgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0NsYXNzU2Nhbm5lclRlc3QuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9DbGFzc1NjYW5uZXJUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwOwogCiBpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0RvY3VtZW50YXRpb25TdXBwb3J0LmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhCmluZGV4IDU0N2NmODcuLmFlNTczMDUgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0RvY3VtZW50YXRpb25TdXBwb3J0LmphdmEKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXA7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuYWN0aXZhdGlvbi5BY3RpdmF0aW9uRXhjZXB0aW9uOwpAQCAtMzA5LDcgKzMyNyw3IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIFFpNGogUnVudGltZQorICAgICAgICAgICAgLy8gQ3JlYXRlIGEgWmVzdCBSdW50aW1lCiAgICAgICAgICAgICBxaTRqID0gbmV3IEVuZXJneTRKYXZhKCk7CiAgICAgICAgICAgICBhcHBsaWNhdGlvbiA9IHFpNGoubmV3QXBwbGljYXRpb24oIG5ldyBBcHBsaWNhdGlvbkFzc2VtYmxlcigpCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9UZXN0VmFsdWUuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1Rlc3RWYWx1ZS5qYXZhCmluZGV4IDhjMmJiODQuLmM5NGIxZmYgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1Rlc3RWYWx1ZS5qYXZhCisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL1Rlc3RWYWx1ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZUNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L0xheWVyZWRBcHBsaWNhdGlvbkFzc2VtYmxlclRlc3QuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L0xheWVyZWRBcHBsaWNhdGlvbkFzc2VtYmxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTIxMmFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvTGF5ZXJlZEFwcGxpY2F0aW9uQXNzZW1ibGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcC5hc3NlbWJseTsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5BcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CisKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNFcXVhbC5lcXVhbFRvOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRoYXQ7CisKK3B1YmxpYyBjbGFzcyBMYXllcmVkQXBwbGljYXRpb25Bc3NlbWJsZXJUZXN0Cit7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVRoYXRBc3NlbWJsZXJDcmVhdGVzQXBwbGljYXRpb24oKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24sIEFjdGl2YXRpb25FeGNlcHRpb24KKyAgICB7CisgICAgICAgIFRlc3RBcHBsaWNhdGlvbiBhc3NlbWJsZXIgPSBuZXcgVGVzdEFwcGxpY2F0aW9uKCAiVGVzdCBBcHBsaWNhdGlvbiIsICIxLjAuMSIsIEFwcGxpY2F0aW9uLk1vZGUudGVzdCApOworICAgICAgICBhc3NlbWJsZXIuc3RhcnQoKTsKKworICAgICAgICBhc3NlcnRUaGF0KCBhc3NlbWJsZXIuYXBwbGljYXRpb24oKS5uYW1lKCksIGVxdWFsVG8oIlRlc3QgQXBwbGljYXRpb24iKSApOworICAgICAgICBhc3NlcnRUaGF0KCBhc3NlbWJsZXIuYXBwbGljYXRpb24oKS52ZXJzaW9uKCksIGVxdWFsVG8oIjEuMC4xIikgKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9hc3NlbWJseS9UZXN0QXBwbGljYXRpb24uamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L1Rlc3RBcHBsaWNhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDIyY2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9hc3NlbWJseS9UZXN0QXBwbGljYXRpb24uamF2YQpAQCAtMCwwICsxLDYxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXAuYXNzZW1ibHk7CisKK2ltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkFwcGxpY2F0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5BcHBsaWNhdGlvbkFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAubGF5ZXJlZC5MYXllcmVkQXBwbGljYXRpb25Bc3NlbWJsZXI7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkxheWVyQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5hc3NlbWJseS5jb25maWcuQ29uZmlndXJhdGlvbkxheWVyOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5hc3NlbWJseS5jb25uZWN0aXZpdHkuQ29ubmVjdGl2aXR5TGF5ZXI7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLmFzc2VtYmx5LmRvbWFpbi5Eb21haW5MYXllcjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuYXNzZW1ibHkuaW5mcmFzdHJ1Y3R1cmUuSW5mcmFzdHJ1Y3R1cmVMYXllcjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuYXNzZW1ibHkuc2VydmljZS5TZXJ2aWNlTGF5ZXI7CisKKy8vIFNUQVJUIFNOSVBQRVQ6IGFwcGxpY2F0aW9uCitwdWJsaWMgY2xhc3MgVGVzdEFwcGxpY2F0aW9uIGV4dGVuZHMgTGF5ZXJlZEFwcGxpY2F0aW9uQXNzZW1ibGVyCit7CisKKyAgICBwdWJsaWMgVGVzdEFwcGxpY2F0aW9uKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHZlcnNpb24sIEFwcGxpY2F0aW9uLk1vZGUgbW9kZSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgc3VwZXIoIG5hbWUsIHZlcnNpb24sIG1vZGUgKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBhc3NlbWJsZUxheWVycyggQXBwbGljYXRpb25Bc3NlbWJseSBhc3NlbWJseSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgTGF5ZXJBc3NlbWJseSBjb25maWdMYXllciA9IGNyZWF0ZUxheWVyKCBDb25maWd1cmF0aW9uTGF5ZXIuY2xhc3MgKTsKKyAgICAgICAgTW9kdWxlQXNzZW1ibHkgY29uZmlnTW9kdWxlID0gY29uZmlnTGF5ZXIubW9kdWxlKCAiQ29uZmlndXJhdGlvbiBNb2R1bGUiICk7CisgICAgICAgIExheWVyQXNzZW1ibHkgaW5mcmFMYXllciA9IG5ldyBJbmZyYXN0cnVjdHVyZUxheWVyKCBjb25maWdNb2R1bGUgKS5hc3NlbWJsZSggYXNzZW1ibHkubGF5ZXIoIEluZnJhc3RydWN0dXJlTGF5ZXIuTkFNRSAgKSk7CisgICAgICAgIExheWVyQXNzZW1ibHkgZG9tYWluTGF5ZXIgPSBjcmVhdGVMYXllciggRG9tYWluTGF5ZXIuY2xhc3MgKTsKKyAgICAgICAgTGF5ZXJBc3NlbWJseSBzZXJ2aWNlTGF5ZXIgPSBjcmVhdGVMYXllciggU2VydmljZUxheWVyLmNsYXNzICk7CisgICAgICAgIExheWVyQXNzZW1ibHkgY29ubmVjdGl2aXR5TGF5ZXIgPSBjcmVhdGVMYXllciggQ29ubmVjdGl2aXR5TGF5ZXIuY2xhc3MgKTsKKworICAgICAgICBjb25uZWN0aXZpdHlMYXllci51c2VzKCBzZXJ2aWNlTGF5ZXIgKTsKKyAgICAgICAgY29ubmVjdGl2aXR5TGF5ZXIudXNlcyggZG9tYWluTGF5ZXIgKTsKKyAgICAgICAgc2VydmljZUxheWVyLnVzZXMoIGRvbWFpbkxheWVyICk7CisgICAgICAgIGRvbWFpbkxheWVyLnVzZXMoIGluZnJhTGF5ZXIgKTsKKyAgICAgICAgaW5mcmFMYXllci51c2VzKCBjb25maWdMYXllciApOworICAgIH0KK30KKy8vIEVORCBTTklQUEVUOiBhcHBsaWNhdGlvbgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLXBsdWdpbi54bWwgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9hc3NlbWJseS9jb25maWcvQ29uZmlndXJhdGlvbkxheWVyLmphdmEKc2ltaWxhcml0eSBpbmRleCA2MSUKY29weSBmcm9tIGxpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sCmNvcHkgdG8gY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvY29uZmlnL0NvbmZpZ3VyYXRpb25MYXllci5qYXZhCmluZGV4IGNjZjJjNDIuLjFhMzU4NzkgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sCisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L2NvbmZpZy9Db25maWd1cmF0aW9uTGF5ZXIuamF2YQpAQCAtMSw4ICsxLDQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQogLyoKLSAqICRJZDogcG9tLnhtbCA1NTkyMDYgMjAwNy0wNy0yNCAyMTowMToxOFogYXBldHJlbGxpICQKLSAqCiAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC0xMSw3ICs3LDcgQEAKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCkBAIC0yMCwxMyArMTYsMTggQEAKICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCi0tLT4KK3BhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwLmFzc2VtYmx5LmNvbmZpZzsKIAotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjAuZHRkIj4KK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLmxheWVyZWQuTGF5ZXJBc3NlbWJsZXI7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkxheWVyQXNzZW1ibHk7CiAKLTxzdHJ1dHM+Ci0gIDxiZWFuIHR5cGU9ImNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5QYWNrYWdlUHJvdmlkZXIiIG5hbWU9InFpNGoiCi0gICAgICAgIGNsYXNzPSJvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuY29kZWJlaGluZC5RaTRqQ29kZWJlaGluZFBhY2thZ2VQcm92aWRlciIvPgotPC9zdHJ1dHM+CitwdWJsaWMgY2xhc3MgQ29uZmlndXJhdGlvbkxheWVyIGltcGxlbWVudHMgTGF5ZXJBc3NlbWJsZXIKK3sKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTGF5ZXJBc3NlbWJseSBhc3NlbWJsZSggTGF5ZXJBc3NlbWJseSBsYXllciApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgcmV0dXJuIGxheWVyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvY29ubmVjdGl2aXR5L0Nvbm5lY3Rpdml0eUxheWVyLmphdmEKc2ltaWxhcml0eSBpbmRleCA2MCUKY29weSBmcm9tIGxpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sCmNvcHkgdG8gY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvY29ubmVjdGl2aXR5L0Nvbm5lY3Rpdml0eUxheWVyLmphdmEKaW5kZXggY2NmMmM0Mi4uMTAwMmQzNyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLXBsdWdpbi54bWwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvY29ubmVjdGl2aXR5L0Nvbm5lY3Rpdml0eUxheWVyLmphdmEKQEAgLTEsOCArMSw0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0KIC8qCi0gKiAkSWQ6IHBvbS54bWwgNTU5MjA2IDIwMDctMDctMjQgMjE6MDE6MThaIGFwZXRyZWxsaSAkCi0gKgogICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTEsNyArNyw3IEBACiAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgpAQCAtMjAsMTMgKzE2LDIwIEBACiAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwotLS0+CitwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcC5hc3NlbWJseS5jb25uZWN0aXZpdHk7CiAKLTwhRE9DVFlQRSBzdHJ1dHMgUFVCTElDCi0gICItLy9BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi8vRFREIFN0cnV0cyBDb25maWd1cmF0aW9uIDIuMC8vRU4iCi0gICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5sYXllcmVkLkxheWVyQXNzZW1ibGVyOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5MYXllckFzc2VtYmx5OwogCi08c3RydXRzPgotICA8YmVhbiB0eXBlPSJjb20ub3BlbnN5bXBob255Lnh3b3JrMi5jb25maWcuUGFja2FnZVByb3ZpZGVyIiBuYW1lPSJxaTRqIgotICAgICAgICBjbGFzcz0ib3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmNvZGViZWhpbmQuUWk0akNvZGViZWhpbmRQYWNrYWdlUHJvdmlkZXIiLz4KLTwvc3RydXRzPgorcHVibGljIGNsYXNzIENvbm5lY3Rpdml0eUxheWVyIGltcGxlbWVudHMgTGF5ZXJBc3NlbWJsZXIKK3sKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FID0gIkNvbm5lY3Rpdml0eSI7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTGF5ZXJBc3NlbWJseSBhc3NlbWJsZSggTGF5ZXJBc3NlbWJseSBsYXllciApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvZG9tYWluL0RvbWFpbkxheWVyLmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9hc3NlbWJseS9kb21haW4vRG9tYWluTGF5ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWFjODhiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvZG9tYWluL0RvbWFpbkxheWVyLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwLmFzc2VtYmx5LmRvbWFpbjsKKworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAubGF5ZXJlZC5MYXllcmVkTGF5ZXJBc3NlbWJsZXI7CisKK3B1YmxpYyBjbGFzcyBEb21haW5MYXllciBleHRlbmRzIExheWVyZWRMYXllckFzc2VtYmxlcgoreworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBMYXllckFzc2VtYmx5IGFzc2VtYmxlKCBMYXllckFzc2VtYmx5IGxheWVyICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBjcmVhdGVNb2R1bGUoIGxheWVyLCBJbnZvaWNpbmdNb2R1bGUuY2xhc3MgKTsKKyAgICAgICAgY3JlYXRlTW9kdWxlKCBsYXllciwgT3JkZXJNb2R1bGUuY2xhc3MgKTsKKyAgICAgICAgcmV0dXJuIGxheWVyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L2RvbWFpbi9JbnZvaWNpbmdNb2R1bGUuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L2RvbWFpbi9JbnZvaWNpbmdNb2R1bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmE0NjQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvZG9tYWluL0ludm9pY2luZ01vZHVsZS5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcC5hc3NlbWJseS5kb21haW47CisKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkxheWVyQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5sYXllcmVkLk1vZHVsZUFzc2VtYmxlcjsKKworcHVibGljIGNsYXNzIEludm9pY2luZ01vZHVsZQorICAgIGltcGxlbWVudHMgTW9kdWxlQXNzZW1ibGVyCit7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE1vZHVsZUFzc2VtYmx5IGFzc2VtYmxlKCBMYXllckFzc2VtYmx5IGxheWVyLCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHJldHVybiBtb2R1bGU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvZG9tYWluL09yZGVyTW9kdWxlLmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9hc3NlbWJseS9kb21haW4vT3JkZXJNb2R1bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTUwNmUzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvZG9tYWluL09yZGVyTW9kdWxlLmphdmEKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwLmFzc2VtYmx5LmRvbWFpbjsKKworaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5MYXllckFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAubGF5ZXJlZC5Nb2R1bGVBc3NlbWJsZXI7CisKK3B1YmxpYyBjbGFzcyBPcmRlck1vZHVsZQorICAgIGltcGxlbWVudHMgTW9kdWxlQXNzZW1ibGVyCit7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE1vZHVsZUFzc2VtYmx5IGFzc2VtYmxlKCBMYXllckFzc2VtYmx5IGxheWVyLCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICB7CisgICAgICAgIG1vZHVsZS5lbnRpdGllcyggT3JkZXIuY2xhc3MsIEN1c3RvbWVyLmNsYXNzICk7CisgICAgICAgIG1vZHVsZS52YWx1ZXMoIEFkZHJlc3MuY2xhc3MgKTsKKyAgICAgICAgcmV0dXJuIG1vZHVsZTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIE9yZGVyCisgICAgeworICAgICAgICBBc3NvY2lhdGlvbjxDdXN0b21lcj4gY3VzdG9tZXIoKTsKKworICAgICAgICBQcm9wZXJ0eTxBZGRyZXNzPiBpbnZvaWNpbmdBZGRyZXNzKCk7CisKKyAgICAgICAgUHJvcGVydHk8QWRkcmVzcz4gZGVsaXZlcnlBZGRyZXNzKCk7CisgICAgfQorCisgICAgcHVibGljIGludGVyZmFjZSBDdXN0b21lcgorICAgIHsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIEFkZHJlc3MKKyAgICB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvaW5mcmFzdHJ1Y3R1cmUvSW5kZXhpbmdNb2R1bGUuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L2luZnJhc3RydWN0dXJlL0luZGV4aW5nTW9kdWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3ZjRmOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L2luZnJhc3RydWN0dXJlL0luZGV4aW5nTW9kdWxlLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwLmFzc2VtYmx5LmluZnJhc3RydWN0dXJlOworCitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLmxheWVyZWQuTW9kdWxlQXNzZW1ibGVyOworCitwdWJsaWMgY2xhc3MgSW5kZXhpbmdNb2R1bGUKKyAgICBpbXBsZW1lbnRzIE1vZHVsZUFzc2VtYmxlcgoreworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUUgPSAiSW5kZXhpbmcgTW9kdWxlIjsKKyAgICBwcml2YXRlIGZpbmFsIE1vZHVsZUFzc2VtYmx5IGNvbmZpZ01vZHVsZTsKKworICAgIHB1YmxpYyBJbmRleGluZ01vZHVsZSggTW9kdWxlQXNzZW1ibHkgY29uZmlnTW9kdWxlICkKKyAgICB7CisgICAgICAgIHRoaXMuY29uZmlnTW9kdWxlID0gY29uZmlnTW9kdWxlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNb2R1bGVBc3NlbWJseSBhc3NlbWJsZSggTGF5ZXJBc3NlbWJseSBsYXllciwgTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICByZXR1cm4gbW9kdWxlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L2luZnJhc3RydWN0dXJlL0luZnJhc3RydWN0dXJlTGF5ZXIuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L2luZnJhc3RydWN0dXJlL0luZnJhc3RydWN0dXJlTGF5ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzVlZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvaW5mcmFzdHJ1Y3R1cmUvSW5mcmFzdHJ1Y3R1cmVMYXllci5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcC5hc3NlbWJseS5pbmZyYXN0cnVjdHVyZTsKKworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLmxheWVyZWQuTGF5ZXJBc3NlbWJsZXI7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLmxheWVyZWQuTGF5ZXJlZExheWVyQXNzZW1ibGVyOworCitwdWJsaWMgY2xhc3MgSW5mcmFzdHJ1Y3R1cmVMYXllciBleHRlbmRzIExheWVyZWRMYXllckFzc2VtYmxlcgorICAgIGltcGxlbWVudHMgTGF5ZXJBc3NlbWJsZXIKK3sKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FID0gIkluZnJhc3RydWN0dXJlIExheWVyIjsKKyAgICBwcml2YXRlIGZpbmFsIE1vZHVsZUFzc2VtYmx5IGNvbmZpZ01vZHVsZTsKKworICAgIHB1YmxpYyBJbmZyYXN0cnVjdHVyZUxheWVyKCBNb2R1bGVBc3NlbWJseSBjb25maWdNb2R1bGUgKQorICAgIHsKKyAgICAgICAgdGhpcy5jb25maWdNb2R1bGUgPSBjb25maWdNb2R1bGU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIExheWVyQXNzZW1ibHkgYXNzZW1ibGUoIExheWVyQXNzZW1ibHkgbGF5ZXIgKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICB7CisgICAgICAgIG5ldyBTdG9yYWdlTW9kdWxlKCBjb25maWdNb2R1bGUgKS5hc3NlbWJsZSggbGF5ZXIsIGxheWVyLm1vZHVsZSggU3RvcmFnZU1vZHVsZS5OQU1FICkgKTsKKyAgICAgICAgbmV3IEluZGV4aW5nTW9kdWxlKCBjb25maWdNb2R1bGUgKS5hc3NlbWJsZSggbGF5ZXIsIGxheWVyLm1vZHVsZSggSW5kZXhpbmdNb2R1bGUuTkFNRSApICk7CisgICAgICAgIGNyZWF0ZU1vZHVsZSggbGF5ZXIsIFNlcmlhbGl6YXRpb25Nb2R1bGUuY2xhc3MgKTsKKyAgICAgICAgcmV0dXJuIGxheWVyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L2luZnJhc3RydWN0dXJlL1NlcmlhbGl6YXRpb25Nb2R1bGUuamF2YSBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L2luZnJhc3RydWN0dXJlL1NlcmlhbGl6YXRpb25Nb2R1bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDMzYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvaW5mcmFzdHJ1Y3R1cmUvU2VyaWFsaXphdGlvbk1vZHVsZS5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcC5hc3NlbWJseS5pbmZyYXN0cnVjdHVyZTsKKworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLmxheWVyZWQuTW9kdWxlQXNzZW1ibGVyOworCitwdWJsaWMgY2xhc3MgU2VyaWFsaXphdGlvbk1vZHVsZQorICAgIGltcGxlbWVudHMgTW9kdWxlQXNzZW1ibGVyCit7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE1vZHVsZUFzc2VtYmx5IGFzc2VtYmxlKCBMYXllckFzc2VtYmx5IGxheWVyLCBNb2R1bGVBc3NlbWJseSBtb2R1bGUKKyAgICApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvaW5mcmFzdHJ1Y3R1cmUvU3RvcmFnZU1vZHVsZS5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvaW5mcmFzdHJ1Y3R1cmUvU3RvcmFnZU1vZHVsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNTEyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9hc3NlbWJseS9pbmZyYXN0cnVjdHVyZS9TdG9yYWdlTW9kdWxlLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwLmFzc2VtYmx5LmluZnJhc3RydWN0dXJlOworCitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLmxheWVyZWQuTW9kdWxlQXNzZW1ibGVyOworCitwdWJsaWMgY2xhc3MgU3RvcmFnZU1vZHVsZQorICAgIGltcGxlbWVudHMgTW9kdWxlQXNzZW1ibGVyCit7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJTdG9yYWdlIE1vZHVsZSI7CisgICAgcHJpdmF0ZSBmaW5hbCBNb2R1bGVBc3NlbWJseSBjb25maWdNb2R1bGU7CisKKyAgICBwdWJsaWMgU3RvcmFnZU1vZHVsZSggTW9kdWxlQXNzZW1ibHkgY29uZmlnTW9kdWxlICkKKyAgICB7CisgICAgICAgIHRoaXMuY29uZmlnTW9kdWxlID0gY29uZmlnTW9kdWxlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNb2R1bGVBc3NlbWJseSBhc3NlbWJsZSggTGF5ZXJBc3NlbWJseSBsYXllciwgTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICByZXR1cm4gbW9kdWxlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYXNzZW1ibHkvc2VydmljZS9TZXJ2aWNlTGF5ZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDYxJQpjb3B5IGZyb20gbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLXBsdWdpbi54bWwKY29weSB0byBjb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9hc3NlbWJseS9zZXJ2aWNlL1NlcnZpY2VMYXllci5qYXZhCmluZGV4IGNjZjJjNDIuLjg1ZTI5YTEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sCisrKyBiL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL2Fzc2VtYmx5L3NlcnZpY2UvU2VydmljZUxheWVyLmphdmEKQEAgLTEsOCArMSw0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0KIC8qCi0gKiAkSWQ6IHBvbS54bWwgNTU5MjA2IDIwMDctMDctMjQgMjE6MDE6MThaIGFwZXRyZWxsaSAkCi0gKgogICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpAQCAtMTEsNyArNyw3IEBACiAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgpAQCAtMjAsMTMgKzE2LDIwIEBACiAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwotLS0+CitwYWNrYWdlIG9yZy5xaTRqLmJvb3RzdHJhcC5hc3NlbWJseS5zZXJ2aWNlOwogCi08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgoraW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAubGF5ZXJlZC5MYXllckFzc2VtYmxlcjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKIAotPHN0cnV0cz4KLSAgPGJlYW4gdHlwZT0iY29tLm9wZW5zeW1waG9ueS54d29yazIuY29uZmlnLlBhY2thZ2VQcm92aWRlciIgbmFtZT0icWk0aiIKLSAgICAgICAgY2xhc3M9Im9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5jb2RlYmVoaW5kLlFpNGpDb2RlYmVoaW5kUGFja2FnZVByb3ZpZGVyIi8+Ci08L3N0cnV0cz4KK3B1YmxpYyBjbGFzcyBTZXJ2aWNlTGF5ZXIgaW1wbGVtZW50cyBMYXllckFzc2VtYmxlcgoreworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUUgPSAiU2VydmljZSI7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTGF5ZXJBc3NlbWJseSBhc3NlbWJsZSggTGF5ZXJBc3NlbWJseSBsYXllciApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvYnVpbGRlci9BcHBsaWNhdGlvbkJ1aWxkZXJUZXN0LmphdmEgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9idWlsZGVyL0FwcGxpY2F0aW9uQnVpbGRlclRlc3QuamF2YQppbmRleCAyNTMzZjA1Li41NmYxN2Y3IDEwMDY0NAotLS0gYS9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9idWlsZGVyL0FwcGxpY2F0aW9uQnVpbGRlclRlc3QuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9idWlsZGVyL0FwcGxpY2F0aW9uQnVpbGRlclRlc3QuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBBcHBsaWNhdGlvbiBhcHBsaWNhdGlvbiA9IGJ1aWxkZXIubmV3QXBwbGljYXRpb24oKTsKICAgICAgICAgTW9kdWxlIG1vZHVsZSA9IGFwcGxpY2F0aW9uLmZpbmRNb2R1bGUoICJsYXllcjMiLCAidGVzdCBtb2R1bGUiICk7CiAgICAgICAgIFRlc3RTZXJ2aWNlIHNlcnZpY2UgPSBtb2R1bGUuZmluZFNlcnZpY2UoIFRlc3RTZXJ2aWNlLmNsYXNzICkuZ2V0KCk7Ci0gICAgICAgIGFzc2VydFRoYXQoIHNlcnZpY2Uuc2F5SGVsbG8oKSwgZXF1YWxUbyggIkhlbGxvIFFpNGohIiApICk7CisgICAgICAgIGFzc2VydFRoYXQoIHNlcnZpY2Uuc2F5SGVsbG8oKSwgZXF1YWxUbyggIkhlbGxvIFplc3QhIiApICk7CiAgICAgfQogCiAgICAgQFRlc3QKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgQXBwbGljYXRpb24gYXBwbGljYXRpb24gPSBidWlsZGVyLm5ld0FwcGxpY2F0aW9uKCk7CiAgICAgICAgIE1vZHVsZSBtb2R1bGUgPSBhcHBsaWNhdGlvbi5maW5kTW9kdWxlKCAibGF5ZXIzIiwgInRlc3QgbW9kdWxlIiApOwogICAgICAgICBUZXN0U2VydmljZSBzZXJ2aWNlID0gbW9kdWxlLmZpbmRTZXJ2aWNlKCBUZXN0U2VydmljZS5jbGFzcyApLmdldCgpOwotICAgICAgICBhc3NlcnRUaGF0KCBzZXJ2aWNlLnNheUhlbGxvKCksIGVxdWFsVG8oICJIZWxsbyBRaTRqISIgKSApOworICAgICAgICBhc3NlcnRUaGF0KCBzZXJ2aWNlLnNheUhlbGxvKCksIGVxdWFsVG8oICJIZWxsbyBaZXN0ISIgKSApOwogICAgIH0KIAogICAgIEBUZXN0CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uID0gYnVpbGRlci5uZXdBcHBsaWNhdGlvbigpOwogICAgICAgICBNb2R1bGUgbW9kdWxlID0gYXBwbGljYXRpb24uZmluZE1vZHVsZSggImxheWVyMyIsICJ0ZXN0IG1vZHVsZSIgKTsKICAgICAgICAgVGVzdFNlcnZpY2Ugc2VydmljZSA9IG1vZHVsZS5maW5kU2VydmljZSggVGVzdFNlcnZpY2UuY2xhc3MgKS5nZXQoKTsKLSAgICAgICAgYXNzZXJ0VGhhdCggc2VydmljZS5zYXlIZWxsbygpLCBlcXVhbFRvKCAiSGVsbG8gUWk0aiEiICkgKTsKKyAgICAgICAgYXNzZXJ0VGhhdCggc2VydmljZS5zYXlIZWxsbygpLCBlcXVhbFRvKCAiSGVsbG8gWmVzdCEiICkgKTsKICAgICB9CiAKIApAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAiSGVsbG8gUWk0aiEiOworICAgICAgICAgICAgICAgIHJldHVybiAiSGVsbG8gWmVzdCEiOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvc29tZXBhY2thZ2UvVGVzdDJWYWx1ZS5qYXZhIGIvY29yZS9ib290c3RyYXAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvc29tZXBhY2thZ2UvVGVzdDJWYWx1ZS5qYXZhCmluZGV4IGFmM2RhZDMuLjViMGQ2YzkgMTAwNjQ0Ci0tLSBhL2NvcmUvYm9vdHN0cmFwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL3NvbWVwYWNrYWdlL1Rlc3QyVmFsdWUuamF2YQorKysgYi9jb3JlL2Jvb3RzdHJhcC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9zb21lcGFja2FnZS9UZXN0MlZhbHVlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouYm9vdHN0cmFwLnNvbWVwYWNrYWdlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQ29tcG9zaXRlOwpkaWZmIC0tZ2l0IGEvY29yZS9mdW5jdGlvbmFsL2J1aWxkLmdyYWRsZSBiL2NvcmUvZnVuY3Rpb25hbC9idWlsZC5ncmFkbGUKaW5kZXggNjg3MmQ0My4uZTg0MDhiMyAxMDA2NDQKLS0tIGEvY29yZS9mdW5jdGlvbmFsL2J1aWxkLmdyYWRsZQorKysgYi9jb3JlL2Z1bmN0aW9uYWwvYnVpbGQuZ3JhZGxlCkBAIC0xLDkgKzEsMjQgQEAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEZ1bmN0aW9uYWwifX0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBGdW5jdGlvbmFsIn19CiAKIGRlcGVuZGVuY2llcyB7CiAKLSAgY29tcGlsZSBsaWJyYXJpZXMuc2xmNGpfYXBpCi0KLSAgdGVzdFJ1bnRpbWUgbGlicmFyaWVzLnNsZjRqX3NpbXBsZQotCiB9CmRpZmYgLS1naXQgYS9jb3JlL2Z1bmN0aW9uYWwvZGV2LXN0YXR1cy54bWwgYi9jb3JlL2Z1bmN0aW9uYWwvZGV2LXN0YXR1cy54bWwKaW5kZXggNDFmYTIyZi4uZWQ5MzgwMCAxMDA2NDQKLS0tIGEvY29yZS9mdW5jdGlvbmFsL2Rldi1zdGF0dXMueG1sCisrKyBiL2NvcmUvZnVuY3Rpb25hbC9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2NvcmUvZnVuY3Rpb25hbC9zcmMvZG9jcy9mdW5jdGlvbmFsLnR4dCBiL2NvcmUvZnVuY3Rpb25hbC9zcmMvZG9jcy9mdW5jdGlvbmFsLnR4dAppbmRleCAzMGEyYTJiLi40NjFlMDkxIDEwMDY0NAotLS0gYS9jb3JlL2Z1bmN0aW9uYWwvc3JjL2RvY3MvZnVuY3Rpb25hbC50eHQKKysrIGIvY29yZS9mdW5jdGlvbmFsL3NyYy9kb2NzL2Z1bmN0aW9uYWwudHh0CkBAIC0yMSw5ICsyMSw5IEBACiBzb3VyY2U9Y29yZS9mdW5jdGlvbmFsL2Rldi1zdGF0dXMueG1sCiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgUWk0aiBDb3JlIEZ1bmN0aW9uYWwgQVBJIGlzIGEgZ2VuZXJpYyBwYWNrYWdlIHRvIHdvcmsgd2l0aCBJdGVyYWJsZXMgaW4gYSAiZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBsYW5ndWFnZSIgc3R5bGUuCitUaGUgWmVzdOKEoiBDb3JlIEZ1bmN0aW9uYWwgQVBJIGlzIGEgZ2VuZXJpYyBwYWNrYWdlIHRvIHdvcmsgd2l0aCBJdGVyYWJsZXMgaW4gYSAiZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBsYW5ndWFnZSIgc3R5bGUuCiAKLVRoaXMgcGFja2FnZSBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIGV2ZXJ5dGhpbmcgZWxzZSBpbiBRaTRqIGFuZCBtYXkgYmUgdXNlZCBvbiBpdHMgb3duIGluIGFueSBraW5kIG9mIGVudmlyb25tZW50CitUaGlzIHBhY2thZ2UgaXMgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiBldmVyeXRoaW5nIGVsc2UgaW4gWmVzdOKEoiBhbmQgbWF5IGJlIHVzZWQgb24gaXRzIG93biBpbiBhbnkga2luZCBvZiBlbnZpcm9ubWVudAogc3VjaCBhcyBTcHJpbmcgb3IgSmF2YSBFRSBhcHBsaWNhdGlvbnMuCiAKIGluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCkBAIC0zOCw3ICszOCw3IEBACiB0YWc9ZnVuYzEKIC0tLS0tLS0tLS0tCiAKLVdpdGggdGhlIFFpNGogQ29yZSBGdW5jdGlvbmFsIEFQSSwgeW91IGdvIGFib3V0IGl0IGluIGEgZGlmZmVyZW50IHdheS4gVGhlIGNvZGUgZW5kcyB1cCBsb29raW5nIGxpa2UgdGhpczsKK1dpdGggdGhlIFplc3TihKIgQ29yZSBGdW5jdGlvbmFsIEFQSSwgeW91IGdvIGFib3V0IGl0IGluIGEgZGlmZmVyZW50IHdheS4gVGhlIGNvZGUgZW5kcyB1cCBsb29raW5nIGxpa2UgdGhpczsKIAogW3NuaXBwZXQsamF2YV0KIC0tLS0tLS0tLS0tCkBAIC01MCwxMSArNTAsMTEgQEAKIAogPT0gVGhlIEJpZyBQaWN0dXJlID09CiAKLVRoZSBRaTRqIENvcmUgRnVuY3Rpb25hbCBBUEkgYXJlIGRpdmlkZWQgYSBoYW5kZnVsIG9mIHBvd2VyZnVsIGNvbmNlcHRzLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCB0b2dldGhlcjsKK1RoZSBaZXN04oSiIENvcmUgRnVuY3Rpb25hbCBBUEkgYXJlIGRpdmlkZWQgYSBoYW5kZnVsIG9mIHBvd2VyZnVsIGNvbmNlcHRzLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCB0b2dldGhlcjsKIAogICAgKiAqSXRlcmFibGVzKiAtIG1hbnkgbWV0aG9kcyB0byBkZWFsIHdpdGggSXRlcmFibGUgZGF0YSwgc28gdGhhdCB0aGUgbG9vcHMgaW4geW91ciBwcm9ncmFtcyBjYW4gbGFyZ2VseSBiZSByZW1vdmVkLgogCi0gICAqICpGdW5jdGlvbnMqIC0gZih4KSBhbmQgZih4LHkpIGFyZSB3ZWxsLWtub3cgZnJvbSBtYXRoZW1hdGljcyBhbmQgdXNlZCBpbiBmdW5jdGlvbmFsIHByb2dyYW1taW5nIGxhbmd1YWdlcy4gUWk0aiBpcworICAgKiAqRnVuY3Rpb25zKiAtIGYoeCkgYW5kIGYoeCx5KSBhcmUgd2VsbC1rbm93IGZyb20gbWF0aGVtYXRpY3MgYW5kIHVzZWQgaW4gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuIFplc3TihKIgaXMKICAgICAgbm90IGNhcGFibGUgb2YgaW50cm9kdWNpbmcgbGFtYmRhIGNhbGN1bHVzIGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBKYXZhIGl0c2VsZiwgYnV0IHdlIGNhbiBzaW11bGF0ZSBhIGxvdCB0byBhbGxvdwogICAgICBwZW9wbGUgdG8gY3JlYXRlIG1vcmUgcmVhZGFibGUgY29kZS4KIApkaWZmIC0tZ2l0IGEvY29yZS9mdW5jdGlvbmFsL3NyYy9kb2NzL3JlZmVyZW5jZS9yZWYtZnVuY3Rpb25hbC50eHQgYi9jb3JlL2Z1bmN0aW9uYWwvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1mdW5jdGlvbmFsLnR4dAppbmRleCBlNjlkZTI5Li5mYzdhYWM2IDEwMDY0NAotLS0gYS9jb3JlL2Z1bmN0aW9uYWwvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1mdW5jdGlvbmFsLnR4dAorKysgYi9jb3JlL2Z1bmN0aW9uYWwvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1mdW5jdGlvbmFsLnR4dApAQCAtMCwwICsxLDE4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvSGllcmFyY2hpY2FsVmlzaXRvckFkYXB0ZXIuamF2YSBiL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvSGllcmFyY2hpY2FsVmlzaXRvckFkYXB0ZXIuamF2YQppbmRleCBlZWEzYTE1Li4yMDIzNjU1IDEwMDY0NAotLS0gYS9jb3JlL2Z1bmN0aW9uYWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL0hpZXJhcmNoaWNhbFZpc2l0b3JBZGFwdGVyLmphdmEKKysrIGIvY29yZS9mdW5jdGlvbmFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9IaWVyYXJjaGljYWxWaXNpdG9yQWRhcHRlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmZ1bmN0aW9uYWw7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9mdW5jdGlvbmFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9JdGVyYWJsZXMuamF2YSBiL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvSXRlcmFibGVzLmphdmEKaW5kZXggYTNkYWY1Ni4uZWM1YWU0MyAxMDA2NDQKLS0tIGEvY29yZS9mdW5jdGlvbmFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9JdGVyYWJsZXMuamF2YQorKysgYi9jb3JlL2Z1bmN0aW9uYWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL0l0ZXJhYmxlcy5qYXZhCkBAIC0yNiwxNiArMjYsMTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKIC8qKgogICogVXRpbGl0eSBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggSXRlcmFibGVzLiBTZWUgdGVzdCBmb3IgZXhhbXBsZXMgb2YgaG93IHRvIHVzZS4KICAqLwogcHVibGljIGZpbmFsIGNsYXNzIEl0ZXJhYmxlcwogewotICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBkZWJ1Z0xvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCBJdGVyYWJsZXMuY2xhc3MgKTsKLQogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAicmF3IiApCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSXRlcmFibGUgRU1QVFkgPSBuZXcgSXRlcmFibGUoKQogICAgIHsKQEAgLTU4MCwyMSArNTc2LDE1IEBACiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBUIG1hcCggVCB0ICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiggZnVuY3Rpb25zLmxlbmd0aCA9PSAwICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnTG9nZ2VyLmluZm8oIG1zZ0Zvcm1hdC5mb3JtYXQoIG5ldyBPYmplY3RbXXsgdCB9ICkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmKCBmdW5jdGlvbnMubGVuZ3RoICE9IDAgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gbWFwcGVkID0gbmV3IFN0cmluZ1sgZnVuY3Rpb25zLmxlbmd0aCBdOwogICAgICAgICAgICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5sZW5ndGg7IGkrKyApCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uPFQsIFN0cmluZz4gZnVuY3Rpb24gPSBmdW5jdGlvbnNbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRbaV0gPSBmdW5jdGlvbi5tYXAoIHQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnTG9nZ2VyLmluZm8oIG1zZ0Zvcm1hdC5mb3JtYXQoIG1hcHBlZCApICk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwgaXRlcmFibGUgKTsKZGlmZiAtLWdpdCBhL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvVmlzaXRhYmxlLmphdmEgYi9jb3JlL2Z1bmN0aW9uYWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL1Zpc2l0YWJsZS5qYXZhCmluZGV4IDQwODVjODcuLmIxZWQ4YmEgMTAwNjQ0Ci0tLSBhL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvVmlzaXRhYmxlLmphdmEKKysrIGIvY29yZS9mdW5jdGlvbmFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9WaXNpdGFibGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5mdW5jdGlvbmFsOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvVmlzaXRhYmxlSGllcmFyY2h5LmphdmEgYi9jb3JlL2Z1bmN0aW9uYWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL1Zpc2l0YWJsZUhpZXJhcmNoeS5qYXZhCmluZGV4IDhmYTA0YzguLmZlMzdkMWYgMTAwNjQ0Ci0tLSBhL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvVmlzaXRhYmxlSGllcmFyY2h5LmphdmEKKysrIGIvY29yZS9mdW5jdGlvbmFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9WaXNpdGFibGVIaWVyYXJjaHkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5mdW5jdGlvbmFsOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvVmlzaXRvci5qYXZhIGIvY29yZS9mdW5jdGlvbmFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9WaXNpdG9yLmphdmEKaW5kZXggZjMxOWRmYy4uM2NmNjAwNSAxMDA2NDQKLS0tIGEvY29yZS9mdW5jdGlvbmFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9WaXNpdG9yLmphdmEKKysrIGIvY29yZS9mdW5jdGlvbmFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9WaXNpdG9yLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouZnVuY3Rpb25hbDsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2Z1bmN0aW9uYWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL3BhY2thZ2UuaHRtbCBiL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvcGFja2FnZS5odG1sCmluZGV4IDgyNDIxYzUuLjkyMGE5ZWYgMTAwNjQ0Ci0tLSBhL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvZnVuY3Rpb25hbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2Z1bmN0aW9uYWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5GdW5jdGlvbmFsIEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9mdW5jdGlvbmFsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9GdW5jdGlvbnNUZXN0LmphdmEgYi9jb3JlL2Z1bmN0aW9uYWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL0Z1bmN0aW9uc1Rlc3QuamF2YQppbmRleCA1ZjEzNDU5Li5hNWUxOTU2IDEwMDY0NAotLS0gYS9jb3JlL2Z1bmN0aW9uYWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL0Z1bmN0aW9uc1Rlc3QuamF2YQorKysgYi9jb3JlL2Z1bmN0aW9uYWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL0Z1bmN0aW9uc1Rlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5mdW5jdGlvbmFsOwogCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwpkaWZmIC0tZ2l0IGEvY29yZS9mdW5jdGlvbmFsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZnVuY3Rpb25hbC9kb2NzdXBwb3J0L0Z1bmN0aW9uYWxEb2NzLmphdmEgYi9jb3JlL2Z1bmN0aW9uYWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL2RvY3N1cHBvcnQvRnVuY3Rpb25hbERvY3MuamF2YQppbmRleCAzMGJiMzFiLi43MTEwYTIxIDEwMDY0NAotLS0gYS9jb3JlL2Z1bmN0aW9uYWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL2RvY3N1cHBvcnQvRnVuY3Rpb25hbERvY3MuamF2YQorKysgYi9jb3JlL2Z1bmN0aW9uYWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9mdW5jdGlvbmFsL2RvY3N1cHBvcnQvRnVuY3Rpb25hbERvY3MuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5mdW5jdGlvbmFsLmRvY3N1cHBvcnQ7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpkaWZmIC0tZ2l0IGEvY29yZS9pby9idWlsZC5ncmFkbGUgYi9jb3JlL2lvL2J1aWxkLmdyYWRsZQppbmRleCAyYzRkZDlkLi5lNjc4NjZmIDEwMDY0NAotLS0gYS9jb3JlL2lvL2J1aWxkLmdyYWRsZQorKysgYi9jb3JlL2lvL2J1aWxkLmdyYWRsZQpAQCAtMSw0ICsxLDIzIEBACi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBJL08ifX0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBJL08ifX0KIAogZGVwZW5kZW5jaWVzIHsKIApkaWZmIC0tZ2l0IGEvY29yZS9pby9kZXYtc3RhdHVzLnhtbCBiL2NvcmUvaW8vZGV2LXN0YXR1cy54bWwKaW5kZXggNDFmYTIyZi4uZWQ5MzgwMCAxMDA2NDQKLS0tIGEvY29yZS9pby9kZXYtc3RhdHVzLnhtbAorKysgYi9jb3JlL2lvL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvY29yZS9pby9zcmMvZG9jcy9pby50eHQgYi9jb3JlL2lvL3NyYy9kb2NzL2lvLnR4dAppbmRleCA2ZTAyODk2Li5kOGZmZWY4IDEwMDY0NAotLS0gYS9jb3JlL2lvL3NyYy9kb2NzL2lvLnR4dAorKysgYi9jb3JlL2lvL3NyYy9kb2NzL2lvLnR4dApAQCAtMjEsMTAgKzIxLDEwIEBACiBzb3VyY2U9Y29yZS9pby9kZXYtc3RhdHVzLnhtbAogLS0tLS0tLS0tLS0tLS0KIAotVGhlIFFpNGogQ29yZSBJL08gQVBJIGlzIGNvbXBsZXRlbHkgZ2VuZXJpYyBhbmQgbm90IHRpZWQgdG8gdGhlIFFpNGogcHJvZ3JhbW1pbmcgbW9kZWwgYXMgYSB3aG9sZS4gSXQgY2FuIGJlIHVzZWQKLWluZGVwZW5kZW50bHkgb2YgUWk0aiwgdG9nZXRoZXIgd2l0aCB0aGUgUWk0aiBDb3JlIEZ1bmN0aW9uYWwgQVBJLCB3aGljaCB0aGUgQ29yZSBJL08gQVBJIGRlcGVuZHMgb24uCitUaGUgWmVzdOKEoiBDb3JlIEkvTyBBUEkgaXMgY29tcGxldGVseSBnZW5lcmljIGFuZCBub3QgdGllZCB0byB0aGUgWmVzdOKEoiBwcm9ncmFtbWluZyBtb2RlbCBhcyBhIHdob2xlLiBJdCBjYW4gYmUgdXNlZAoraW5kZXBlbmRlbnRseSBvZiBaZXN0LCB0b2dldGhlciB3aXRoIHRoZSBaZXN04oSiIENvcmUgRnVuY3Rpb25hbCBBUEksIHdoaWNoIHRoZSBDb3JlIEkvTyBBUEkgZGVwZW5kcyBvbi4KIAotVGhlIFFpNGogQ29yZSBJL08gQVBJIHRyaWVzIHRvIGFkZHJlc3MgdGhlIHByb2JsZW0gYXJvdW5kIHNodWZmbGluZyBkYXRhIGFyb3VuZCBmcm9tIHZhcmlvdXMgSS9PIGlucHV0cyBhbmQgb3V0cHV0cywKK1RoZSBaZXN04oSiIENvcmUgSS9PIEFQSSB0cmllcyB0byBhZGRyZXNzIHRoZSBwcm9ibGVtIGFyb3VuZCBzaHVmZmxpbmcgZGF0YSBhcm91bmQgZnJvbSB2YXJpb3VzIEkvTyBpbnB1dHMgYW5kIG91dHB1dHMsCiBwb3NzaWJseSB3aXRoIHRyYW5zZm9ybWF0aW9ucyBhbmQgZmlsdGVyaW5nIGFsb25nIHRoZSB3YXkuIEl0IHdhcyBpZGVudGlmaWVkIHRoYXQgdGhlcmUgaXMgYSBnZW5lcmFsIG1peC11cCBvZiBjb25jZXJucwogaW4gdGhlIHN0ZXJlb3R5cGljYWwgSS9PIGhhbmRsaW5nIGNvZGViYXNlcyB0aGF0IHBlb3BsZSBkZWFsIHdpdGggYWxsIHRoZSB0aW1lLiBUaGUgcmVhc29uaW5nIGFyb3VuZCB0aGlzLCBjYW4gYmUgZm91bmQKIGluIHRoZSA8PGhvd3RvLXVzZS1pbz4+LCBhbmQgaXMgcmVjb21tZW5kZWQgcmVhZGluZy4KQEAgLTQ0LDcgKzQ0LDcgQEAKIAogSXQgc2VlbXMgbmF0dXJhbCB0byBkbywgeWV0IGl0IGlzIG5vdCBwcmVzZW50IGZvciB1cy4gV2UgbmVlZCB0byBpbnZvbHZlIEZpbGVJbnB1dFN0cmVhbS9GaWxlT3V0cHV0U3RyZWFtLCB3cmFwIHRoZW0KIGluIEJ1ZmZlcmVkIHZlcnNpb25zIG9mIGl0LCBkbyBvdXIgb3duIGxvb3BpbmcsIGNsb3NlIHRoZSBzdHJlYW1zIGFmdGVyd2FyZHMgYW5kIHdoYXQgbm90LiBTbywgdGhlIGphdmEuaW8uRmlsZSBkb2VzCi1ub3QgaGF2ZSB0aGlzIHNpbXBsZSBmZWF0dXJlIGFuZCBpbiB0aGUgUWk0aiBDb3JlIEFQSSwgd2UgbmVlZCB0byB3b3JrIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24uIFdlIGFsc28gd2FudCB0bworbm90IGhhdmUgdGhpcyBzaW1wbGUgZmVhdHVyZSBhbmQgaW4gdGhlIFplc3TihKIgQ29yZSBBUEksIHdlIG5lZWQgdG8gd29yayBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLiBXZSBhbHNvIHdhbnQgdG8KIG1ha2UgdGhlIGFic3RyYWN0aW9uIGEgbGl0dGxlIGJpdCBtb3JlIGVuY29tcGFzc2luZyB0aGFuICJqdXN0IiBmaWxlcy4gU28gaG93IGRvZXMgdGhhdCBsb29rIGxpa2UgdGhlbj8KIAogPT0gRmlyc3QgRXhhbXBsZXMgPT0KQEAgLTYwLDcgKzYwLDcgQEAKIC0tLS0tLS0tLS0tCiAKIFByZXR0eSBtdWNoIHNlbGYtZXhwbGFuYXRvcnksIHdvdWxkbid0IHlvdSBzYXk/IEJ1dCB3aGF0IGhhcHBlbmVkIHRvIHRoZSBoYW5kbGluZyBvZiBleGNlcHRpb25zIGFuZCBjbG9zaW5nIG9mCi1yZXNvdXJjZXM/IEl0IGlzIGFsbCBoYW5kbGVkIGluc2lkZSB0aGUgUWk0aiBDb3JlIEkvTyBBUEkuIFRoZXJlIGlzIG5vdGhpbmcgeW91IGNhbiBmb3JnZXQgdG8gZG8uCityZXNvdXJjZXM/IEl0IGlzIGFsbCBoYW5kbGVkIGluc2lkZSB0aGUgWmVzdOKEoiBDb3JlIEkvTyBBUEkuIFRoZXJlIGlzIG5vdGhpbmcgeW91IGNhbiBmb3JnZXQgdG8gZG8uCiAKIEFub3RoZXIgc2ltcGxlIGV4YW1wbGUsIHdoZXJlIHdlIHdhbnQgdG8gY291bnQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgdGV4dDsKIApAQCAtMTI3LDcgKzEyNyw3IEBACiBTZW5kZXIvUmVjZWl2ZXIgYXJlIGVmZmVjdGl2ZWx5IGRlYWxpbmcgd2l0aCB0aGUgZGF0YSBpdHNlbGYuCiAKID09IG9yZy5xaTRqLmlvLlRyYW5zZm9ybXMgPT0KLVRoZSAzIGNvbXBvbmVudCBpbiB0aGUgUWk0aiBDb3JlIEkvTyBBUEkgaXMgdGhlIHRyYW5zZm9ybWF0aW9ucyB0aGF0IGFyZSBwb3NzaWJsZS4gSW50ZXJlc3RpbmdseSBlbm91Z2gsIHdpdGggdGhlCitUaGUgMyBjb21wb25lbnQgaW4gdGhlIFplc3TihKIgQ29yZSBJL08gQVBJIGlzIHRoZSB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBhcmUgcG9zc2libGUuIEludGVyZXN0aW5nbHkgZW5vdWdoLCB3aXRoIHRoZQogYWJvdmUgc2VwYXJhdGlvbiBvZiBjb25jZXJucywgd2UgZG9uJ3QgbmVlZCBhbiBJbnB1dE91dHB1dCB0eXBlIHRoYXQgY2FuIGJvdGggcmVjZWl2ZSBhbmQgc2VuZCBkYXRhLiBJbnN0ZWFkLCB3ZQogc2ltcGx5IG5lZWQgdG8gcHJlcGFyZSBlYXN5IHRvIHVzZSBzdGF0aWMgZmFjdG9yeSBtZXRob2RzLCB3aGljaCBhcmUgZm91bmQgaW4gdGhlIG9yZy5xaTRqLmlvLlRyYW5zZm9ybXMgY2xhc3MuIEFnYWluLAogaXQgaXMgZmFpcmx5IHN0cmFpZ2h0IGZvcndhcmQgdG8gY3JlYXRlIHlvdXIgb3duIFRyYW5zZm9ybXMgaWYgeW91IG5lZWQgc29tZXRoaW5nIG5vdCBwcm92aWRlZCBoZXJlLgpAQCAtMTc2LDcgKzE3Niw3IEBACiAKIEl0IGNvbWJpbmVzIHRoZSBDb3VudGVyIGFuZCB0aGUgTG9nIGltcGxlbWVudGF0aW9ucywgc28gdGhhdCB0aGUgY291bnQgaXMgZm9yd2FyZGVkIHRvIHRoZSBMb2cgYXQgYSBnaXZlbiBpbnRlcnZhbCwgc3VjaAogYXMgZXZlcnkgMTAwMCBpdGVtcy4gVGhpcyBtYXkgbm90IGJlIHdoYXQgeW91IHRoaW5rIGEgUHJvZ3Jlc3NMb2cgc2hvdWxkIGxvb2sgbGlrZSwgYnV0IGl0IHNlcnZlcyBhcyBhIGdvb2QgZXhhbXBsZSBvbgotaG93IHlvdSBjYW4gY29tYmluZSB0aGUgZ2VuZXJhbCBwcmluY2lwbGVzIGZvdW5kIGluIHRoZSBRaTRqIENvcmUgQVBJIHBhY2thZ2UuCitob3cgeW91IGNhbiBjb21iaW5lIHRoZSBnZW5lcmFsIHByaW5jaXBsZXMgZm91bmQgaW4gdGhlIFplc3TihKIgQ29yZSBBUEkgcGFja2FnZS4KIAogPT0gSG93IHRvIHdyaXRlIGEgZmlsdGVyIHNwZWNpZmljYXRpb24/ID09CiBUaGUgZmlsdGVyIHRyYW5zZm9ybSB0YWtlcyBhIHNwZWNpZmljYXRpb24gaW1wbGVtZW50YXRpb24gd2hpY2ggaGFzIGEgdmVyeSBzaW1wbGUgbWV0aG9kLCBpc1NhdGlzZmllZEJ5KCkgKHJlYWQgbW9yZQpkaWZmIC0tZ2l0IGEvY29yZS9pby9zcmMvZG9jcy9yZWZlcmVuY2UvcmVmLWlvLnR4dCBiL2NvcmUvaW8vc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1pby50eHQKaW5kZXggZTY5ZGUyOS4uZmM3YWFjNiAxMDA2NDQKLS0tIGEvY29yZS9pby9zcmMvZG9jcy9yZWZlcmVuY2UvcmVmLWlvLnR4dAorKysgYi9jb3JlL2lvL3NyYy9kb2NzL3JlZmVyZW5jZS9yZWYtaW8udHh0CkBAIC0wLDAgKzEsMTggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvY29yZS9pby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2lvL0ZpbGVzLmphdmEgYi9jb3JlL2lvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW8vRmlsZXMuamF2YQppbmRleCA0ZTE2ZGM3Li41NjJkMDNjIDEwMDY0NAotLS0gYS9jb3JlL2lvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW8vRmlsZXMuamF2YQorKysgYi9jb3JlL2lvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW8vRmlsZXMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5pbzsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKZGlmZiAtLWdpdCBhL2NvcmUvaW8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9pby9UcmFuc2Zvcm1zLmphdmEgYi9jb3JlL2lvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW8vVHJhbnNmb3Jtcy5qYXZhCmluZGV4IDcxYjk0YTguLmE1ZDAwNDAgMTAwNjQ0Ci0tLSBhL2NvcmUvaW8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9pby9UcmFuc2Zvcm1zLmphdmEKKysrIGIvY29yZS9pby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2lvL1RyYW5zZm9ybXMuamF2YQpAQCAtMTksOSArMTksOSBAQAogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2s7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuRnVuY3Rpb247CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5TcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiAKIC8qKgogICogVXRpbGl0eSBjbGFzcyBmb3IgSS9PIHRyYW5zZm9ybXMKZGlmZiAtLWdpdCBhL2NvcmUvaW8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9pby9wYWNrYWdlLmh0bWwgYi9jb3JlL2lvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW8vcGFja2FnZS5odG1sCmluZGV4IGM2MzVjODguLmFhYzhhNTQgMTAwNjQ0Ci0tLSBhL2NvcmUvaW8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9pby9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9pby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2lvL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+SS9PIEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9pby9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2lvL0lucHV0T3V0cHV0VGVzdC5qYXZhIGIvY29yZS9pby9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2lvL0lucHV0T3V0cHV0VGVzdC5qYXZhCmluZGV4IDcyZjI4ODUuLjIyMGU4NTYgMTAwNjQ0Ci0tLSBhL2NvcmUvaW8vc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9pby9JbnB1dE91dHB1dFRlc3QuamF2YQorKysgYi9jb3JlL2lvL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovaW8vSW5wdXRPdXRwdXRUZXN0LmphdmEKQEAgLTMzLDEyICszMywxMiBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2s7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jazsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVyczsKIGltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuRnVuY3Rpb247CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5WaXNpdG9yOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuYXNMaXN0OwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5pdGVyYWJsZTsKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICBGaWxlIHNvdXJjZSA9IHNvdXJjZUZpbGUoKTsKIAogICAgICAgICB0ZXh0KCBzb3VyY2UgKS50cmFuc2ZlclRvKAotICAgICAgICAgICAgVHJhbnNmb3Jtcy5tYXAoIG5ldyBUcmFuc2Zvcm1zLkxvZzxTdHJpbmc+KCBMb2dnZXJGYWN0b3J5LmdldExvZ2dlciggZ2V0Q2xhc3MoKSApLCAiTGluZTogezB9IiApLAorICAgICAgICAgICAgVHJhbnNmb3Jtcy5tYXAoIG5ldyBUcmFuc2Zvcm1zLkxvZzxTdHJpbmc+KCBMb2dnZXIuZ2V0TG9nZ2VyKCBnZXRDbGFzcygpLmdldE5hbWUoKSApLCAiTGluZTogezB9IiApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dHMuPFN0cmluZz5ub29wKCkgKSApOwogICAgIH0KIApAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICAgIElucHV0cy5pdGVyYWJsZSggaXRlcmFibGUoIGRhdGEgKSApLnRyYW5zZmVyVG8oCiAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1hcCgKICAgICAgICAgICAgICAgICBuZXcgVHJhbnNmb3Jtcy5Qcm9ncmVzc0xvZzxJbnRlZ2VyPigKLSAgICAgICAgICAgICAgICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoIElucHV0T3V0cHV0VGVzdC5jbGFzcyApLCAiRGF0YSB0cmFuc2ZlcnJlZDogezB9IiwgMTAgKSwKKyAgICAgICAgICAgICAgICAgICAgTG9nZ2VyLmdldExvZ2dlciggSW5wdXRPdXRwdXRUZXN0LmNsYXNzLmdldE5hbWUoKSApLCAiRGF0YSB0cmFuc2ZlcnJlZDogezB9IiwgMTAgKSwKICAgICAgICAgICAgICAgICBPdXRwdXRzLjxJbnRlZ2VyPm5vb3AoKSApICk7CiAgICAgfQogCkBAIC0yODIsNyArMjgyLDcgQEAKIAogICAgICAgICBpbnB1dC50cmFuc2ZlclRvKAogICAgICAgICAgICAgVHJhbnNmb3Jtcy5tYXAoCi0gICAgICAgICAgICAgICAgbmV3IFRyYW5zZm9ybXMuTG9nPFN0cmluZz4oIExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCBnZXRDbGFzcygpICksICJMaW5lOiB7MH0iICksCisgICAgICAgICAgICAgICAgbmV3IFRyYW5zZm9ybXMuTG9nPFN0cmluZz4oIExvZ2dlci5nZXRMb2dnZXIoIGdldENsYXNzKCkuZ2V0TmFtZSgpICksICJMaW5lOiB7MH0iICksCiAgICAgICAgICAgICAgICAgT3V0cHV0cy5zeXN0ZW1PdXQoKQogICAgICAgICAgICAgKQogICAgICAgICApOwpkaWZmIC0tZ2l0IGEvY29yZS9pby9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2lvL2RvY3N1cHBvcnQvSW9Eb2NzLmphdmEgYi9jb3JlL2lvL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovaW8vZG9jc3VwcG9ydC9Jb0RvY3MuamF2YQppbmRleCA4YWJiYTQxLi42MDI4ODg2IDEwMDY0NAotLS0gYS9jb3JlL2lvL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovaW8vZG9jc3VwcG9ydC9Jb0RvY3MuamF2YQorKysgYi9jb3JlL2lvL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovaW8vZG9jc3VwcG9ydC9Jb0RvY3MuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5pby5kb2NzdXBwb3J0OwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL2J1aWxkLmdyYWRsZSBiL2NvcmUvcnVudGltZS9idWlsZC5ncmFkbGUKaW5kZXggYzk4MjdhMC4uMWRkZjcwMSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL2J1aWxkLmdyYWRsZQorKysgYi9jb3JlL3J1bnRpbWUvYnVpbGQuZ3JhZGxlCkBAIC0xLDE3ICsxLDMzIEBACi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBDb3JlIFJ1bnRpbWUifX0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBDb3JlIFJ1bnRpbWUiIH0gfQogCiBkZXBlbmRlbmNpZXMgewogCiAgIHByb3ZpZGVkIGxpYnJhcmllcy5vc2dpX2NvcmUKIAotICBjb21waWxlIHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikKKyAgY29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiICkKICAgY29tcGlsZSBsaWJyYXJpZXMuYXNtCiAgIGNvbXBpbGUgbGlicmFyaWVzLmFzbV91dGlsCiAgIGNvbXBpbGUgbGlicmFyaWVzLmFzbV9jb21tb25zCiAKLSAgdGVzdENvbXBpbGUgcHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpCi0gIHRlc3RDb21waWxlIHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50cyIpCi0KLSAgdGVzdFJ1bnRpbWUgbGlicmFyaWVzLnNsZjRqX3NpbXBsZQotCisgIHRlc3RDb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IiApCisgIHRlc3RDb21waWxlIHByb2plY3QoICI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMiICkKIH0KZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9kZXYtc3RhdHVzLnhtbCBiL2NvcmUvcnVudGltZS9kZXYtc3RhdHVzLnhtbAppbmRleCA1NTA0OGZlLi40ZjAzNGRjIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvZGV2LXN0YXR1cy54bWwKKysrIGIvY29yZS9ydW50aW1lL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9kb2NzL3JlZmVyZW5jZS9yZWYtcnVudGltZS50eHQgYi9jb3JlL3J1bnRpbWUvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1ydW50aW1lLnR4dAppbmRleCBlNjlkZTI5Li5mYzdhYWM2IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1ydW50aW1lLnR4dAorKysgYi9jb3JlL3J1bnRpbWUvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1ydW50aW1lLnR4dApAQCAtMCwwICsxLDE4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvUWk0alJ1bnRpbWVJbXBsLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL1FpNGpSdW50aW1lSW1wbC5qYXZhCmluZGV4IDczN2U2YmQuLjIzMmFkNmYgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvUWk0alJ1bnRpbWVJbXBsLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9RaTRqUnVudGltZUltcGwuamF2YQpAQCAtMTUsMTIgKzE1LDE2IEBACiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uSGFuZGxlcjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgb3JnLnFpNGouYXBpLlFpNGo7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFic3RyYWN0QXNzb2NpYXRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbkRlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uU3RhdGVIb2xkZXI7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uV3JhcHBlcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5NYW55QXNzb2NpYXRpb25XcmFwcGVyOworaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uV3JhcHBlcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZURlc2NyaXB0b3I7CkBAIC0zMCw2ICszNCw3IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5UcmFuc2llbnREZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5Q29tcG9zaXRlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKIGltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5RGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHlXcmFwcGVyOwpAQCAtNDUsNiArNTAsOSBAQAogaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5BcHBsaWNhdGlvbk1vZGVsRmFjdG9yeTsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuUWk0alJ1bnRpbWU7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5hc3NvY2lhdGlvbi5BYnN0cmFjdEFzc29jaWF0aW9uSW5zdGFuY2U7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbkluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uSW5zdGFuY2U7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uSW5zdGFuY2U7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5ib290c3RyYXAuQXBwbGljYXRpb25Bc3NlbWJseUZhY3RvcnlJbXBsOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYm9vdHN0cmFwLkFwcGxpY2F0aW9uTW9kZWxGYWN0b3J5SW1wbDsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5Qcm94eVJlZmVyZW5jZUludm9jYXRpb25IYW5kbGVyOwpAQCAtNjMsNyArNzEsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5UcmFuc2llbnRJbnN0YW5jZS5jb21wb3NpdGVJbnN0YW5jZU9mOwogCiAvKioKLSAqIEluY2FybmF0aW9uIG9mIFFpNGouCisgKiBJbmNhcm5hdGlvbiBvZiBaZXN0LgogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgUWk0alJ1bnRpbWVJbXBsCiAgICAgaW1wbGVtZW50cyBRaTRqU1BJLCBRaTRqUnVudGltZQpAQCAtMTYwLDcgKzE2OCw3IEBACiAgICAgICAgIGVsc2UgaWYoIGNvbXBvc2l0ZU9yU2VydmljZVJlZmVyZW5jZU9yVW93IGluc3RhbmNlb2YgSW1wb3J0ZWRTZXJ2aWNlUmVmZXJlbmNlSW5zdGFuY2UgKQogICAgICAgICB7CiAgICAgICAgICAgICBJbXBvcnRlZFNlcnZpY2VSZWZlcmVuY2VJbnN0YW5jZTw/PiBpbXBvcnRlZFNlcnZpY2VSZWZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKEltcG9ydGVkU2VydmljZVJlZmVyZW5jZUluc3RhbmNlPD8+KSBjb21wb3NpdGVPclNlcnZpY2VSZWZlcmVuY2VPclVvdzsKKyAgICAgICAgICAgICAgICA9IChJbXBvcnRlZFNlcnZpY2VSZWZlcmVuY2VJbnN0YW5jZTw/PikgY29tcG9zaXRlT3JTZXJ2aWNlUmVmZXJlbmNlT3JVb3c7CiAgICAgICAgICAgICByZXR1cm4gaW1wb3J0ZWRTZXJ2aWNlUmVmZXJlbmNlLm1vZHVsZSgpOwogICAgICAgICB9CiAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJXcm9uZyB0eXBlLiBNdXN0IGJlIG9uZSBvZiAiCkBAIC0yMDUsNyArMjEzLDcgQEAKICAgICAgICAgZWxzZSBpZiggY29tcG9zaXRlT3JTZXJ2aWNlUmVmZXJlbmNlIGluc3RhbmNlb2YgSW1wb3J0ZWRTZXJ2aWNlUmVmZXJlbmNlSW5zdGFuY2UgKQogICAgICAgICB7CiAgICAgICAgICAgICBJbXBvcnRlZFNlcnZpY2VSZWZlcmVuY2VJbnN0YW5jZTw/PiBpbXBvcnRlZFNlcnZpY2VSZWZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKEltcG9ydGVkU2VydmljZVJlZmVyZW5jZUluc3RhbmNlPD8+KSBjb21wb3NpdGVPclNlcnZpY2VSZWZlcmVuY2U7CisgICAgICAgICAgICAgICAgPSAoSW1wb3J0ZWRTZXJ2aWNlUmVmZXJlbmNlSW5zdGFuY2U8Pz4pIGNvbXBvc2l0ZU9yU2VydmljZVJlZmVyZW5jZTsKICAgICAgICAgICAgIHJldHVybiBpbXBvcnRlZFNlcnZpY2VSZWZlcmVuY2Uuc2VydmljZURlc2NyaXB0b3IoKTsKICAgICAgICAgfQogICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiV3JvbmcgdHlwZS4gTXVzdCBiZSBvbmUgb2YgIgpAQCAtMzEyLDcgKzMyMCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGFzc29jaWF0aW9uID0gKCAoTWFueUFzc29jaWF0aW9uV3JhcHBlcikgYXNzb2NpYXRpb24gKS5uZXh0KCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgd2hpbGUoIGFzc29jaWF0aW9uIGluc3RhbmNlb2YgTmFtZWRBc3NvY2lhdGlvbldyYXBwZXIgKQogICAgICAgICB7CiAgICAgICAgICAgICBhc3NvY2lhdGlvbiA9ICggKE5hbWVkQXNzb2NpYXRpb25XcmFwcGVyKSBhc3NvY2lhdGlvbiApLm5leHQoKTsKQEAgLTMyNyw0ICszMzUsMjQgQEAKICAgICB7CiAgICAgICAgIHJldHVybiBFbnRpdHlJbnN0YW5jZS5lbnRpdHlJbnN0YW5jZU9mKCBjb21wb3NpdGUgKS5lbnRpdHlTdGF0ZSgpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBFbnRpdHlSZWZlcmVuY2UgZW50aXR5UmVmZXJlbmNlT2YoIEFzc29jaWF0aW9uIGFzc29jICkKKyAgICB7CisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAidW5jaGVja2VkIiApCisgICAgICAgIFByb3BlcnR5PEVudGl0eVJlZmVyZW5jZT4gYXNzb2NpYXRpb25TdGF0ZSA9ICggKEFzc29jaWF0aW9uSW5zdGFuY2UpIGFzc29jICkuZ2V0QXNzb2NpYXRpb25TdGF0ZSgpOworICAgICAgICByZXR1cm4gYXNzb2NpYXRpb25TdGF0ZS5nZXQoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSXRlcmFibGU8RW50aXR5UmVmZXJlbmNlPiBlbnRpdHlSZWZlcmVuY2VPZiggTWFueUFzc29jaWF0aW9uIGFzc29jICkKKyAgICB7CisgICAgICAgIHJldHVybiAoIChNYW55QXNzb2NpYXRpb25JbnN0YW5jZSkgYXNzb2MgKS5nZXRNYW55QXNzb2NpYXRpb25TdGF0ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJdGVyYWJsZTxNYXAuRW50cnk8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+PiBlbnRpdHlSZWZlcmVuY2VPZiggTmFtZWRBc3NvY2lhdGlvbiBhc3NvYyApCisgICAgeworICAgICAgICByZXR1cm4gKCAoTmFtZWRBc3NvY2lhdGlvbkluc3RhbmNlKSBhc3NvYyApLmdldEVudGl0eVJlZmVyZW5jZXMoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2FjdGl2YXRpb24vQWN0aXZhdG9yc0luc3RhbmNlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2FjdGl2YXRpb24vQWN0aXZhdG9yc0luc3RhbmNlLmphdmEKaW5kZXggMjZlZWJiZC4uMjA1OWUxZSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hY3RpdmF0aW9uL0FjdGl2YXRvcnNJbnN0YW5jZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYWN0aXZhdGlvbi9BY3RpdmF0b3JzSW5zdGFuY2UuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzOwogCiAvKioKLSAqIEluc3RhbmNlIG9mIGEgUWk0aiBBY3RpdmF0b3JzIG9mIG9uZSBBY3RpdmF0aW9uIHRhcmdldC4gQ29udGFpbnMgb3JkZXJlZAorICogSW5zdGFuY2Ugb2YgYSBaZXN0IEFjdGl2YXRvcnMgb2Ygb25lIEFjdGl2YXRpb24gdGFyZ2V0LiBDb250YWlucyBvcmRlcmVkCiAgKiBBY3RpdmF0b3JzIGFuZCByb2xsIHRoZSBBY3RpdmF0aW9uIG9uIHRoZSB0YXJnZXQuCiAgKgogICogQHBhcmFtIDxBY3RpdmF0ZWVUeXBlPiBUeXBlIG9mIHRoZSBhY3RpdmF0aW9uIHRhcmdldApkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9BYnN0cmFjdEFzc29jaWF0aW9uSW5zdGFuY2UuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYXNzb2NpYXRpb24vQWJzdHJhY3RBc3NvY2lhdGlvbkluc3RhbmNlLmphdmEKaW5kZXggZTQyYjJjNS4uMjFkNjk2YSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9BYnN0cmFjdEFzc29jaWF0aW9uSW5zdGFuY2UuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL0Fic3RyYWN0QXNzb2NpYXRpb25JbnN0YW5jZS5qYXZhCkBAIC0xLDE0ICsxLDI4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ydW50aW1lLmFzc29jaWF0aW9uOwogCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvbkhhbmRsZXI7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuUHJveHk7CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQWJzdHJhY3RBc3NvY2lhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LklkZW50aXR5OwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuRnVuY3Rpb24yOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlByb3h5UmVmZXJlbmNlSW52b2NhdGlvbkhhbmRsZXI7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5lbnRpdHkuRW50aXR5SW5zdGFuY2U7CiAKIC8qKgogICogSW1wbGVtZW50YXRpb24gb2YgQWJzdHJhY3RBc3NvY2lhdGlvbi4gSW5jbHVkZXMgaGVscGVyIG1ldGhvZHMgZm9yIHN1YmNsYXNzZXMKQEAgLTU1LDMyICs2OSwxNyBAQAogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KIAotICAgICAgICBJbnZvY2F0aW9uSGFuZGxlciBoYW5kbGVyID0gUHJveHkuZ2V0SW52b2NhdGlvbkhhbmRsZXIoIGNvbXBvc2l0ZSApOwotICAgICAgICBpZiggaGFuZGxlciBpbnN0YW5jZW9mIFByb3h5UmVmZXJlbmNlSW52b2NhdGlvbkhhbmRsZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBoYW5kbGVyID0gUHJveHkuZ2V0SW52b2NhdGlvbkhhbmRsZXIoICggKFByb3h5UmVmZXJlbmNlSW52b2NhdGlvbkhhbmRsZXIpIGhhbmRsZXIgKS5wcm94eSgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgRW50aXR5SW5zdGFuY2UgaW5zdGFuY2UgPSAoRW50aXR5SW5zdGFuY2UpIGhhbmRsZXI7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZS5pZGVudGl0eSgpOworICAgICAgICByZXR1cm4gbmV3IEVudGl0eVJlZmVyZW5jZSggKCAoSWRlbnRpdHkpIGNvbXBvc2l0ZSApLmlkZW50aXR5KCkuZ2V0KCkgKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBjaGVja1R5cGUoIE9iamVjdCBpbnN0YW5jZSApCiAgICAgewotICAgICAgICBpZiggaW5zdGFuY2UgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKCAhKCBpbnN0YW5jZSBpbnN0YW5jZW9mIEVudGl0eUNvbXBvc2l0ZSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiggaW5zdGFuY2UgaW5zdGFuY2VvZiBQcm94eSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiggUHJveHkuZ2V0SW52b2NhdGlvbkhhbmRsZXIoIGluc3RhbmNlICkgaW5zdGFuY2VvZiBFbnRpdHlJbnN0YW5jZSApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gSXQncyBmaW5lCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiT2JqZWN0IG11c3QgYmUgYW4gRW50aXR5Q29tcG9zaXRlIiApOwotICAgICAgICAgICAgfQorICAgICAgICBpZiggaW5zdGFuY2UgaW5zdGFuY2VvZiBJZGVudGl0eSB8fCBpbnN0YW5jZSA9PSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJPYmplY3QgbXVzdCBiZSBhIHN1YnR5cGUgb2Ygb3JnLnFpNGouYXBpLmlkZW50aXR5LklkZW50aXR5OiAiICsgaW5zdGFuY2UuZ2V0Q2xhc3MoKSApOwogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGNoZWNrSW1tdXRhYmxlKCkKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYXNzb2NpYXRpb24vQXNzb2NpYXRpb25JbmZvLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL0Fzc29jaWF0aW9uSW5mby5qYXZhCmluZGV4IGJhNzRhZmUuLmZkNjY5NWQgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYXNzb2NpYXRpb24vQXNzb2NpYXRpb25JbmZvLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbkluZm8uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ydW50aW1lLmFzc29jaWF0aW9uOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYXNzb2NpYXRpb24vQXNzb2NpYXRpb25JbnN0YW5jZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbkluc3RhbmNlLmphdmEKaW5kZXggZDViYWJjZC4uZTQyZDhlYiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbkluc3RhbmNlLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbkluc3RhbmNlLmphdmEKQEAgLTE5LDYgKzE5LDcgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb25EZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbldyYXBwZXI7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5JZGVudGl0eTsKIGltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjI7CiAKQEAgLTU3LDcgKzU4LDEzIEBACiAgICAgICAgIGFzc29jaWF0aW9uSW5mby5jaGVja0NvbnN0cmFpbnRzKCBuZXdWYWx1ZSApOwogCiAgICAgICAgIC8vIENoYW5nZSBhc3NvY2lhdGlvbgotICAgICAgICBhc3NvY2lhdGlvblN0YXRlLnNldCggZ2V0RW50aXR5UmVmZXJlbmNlKCBuZXdWYWx1ZSApICk7CisgICAgICAgIGFzc29jaWF0aW9uU3RhdGUuc2V0KCBFbnRpdHlSZWZlcmVuY2UuY3JlYXRlKCAoSWRlbnRpdHkpIG5ld1ZhbHVlICkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBFbnRpdHlSZWZlcmVuY2UgcmVmZXJlbmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhc3NvY2lhdGlvblN0YXRlLmdldCgpOwogICAgIH0KIAogICAgIHB1YmxpYyBQcm9wZXJ0eTxFbnRpdHlSZWZlcmVuY2U+IGdldEFzc29jaWF0aW9uU3RhdGUoKQpAQCAtODEsMTAgKzg4LDEwIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpCiAgICAgewotICAgICAgICBpbnQgaGFzaCA9IGFzc29jaWF0aW9uSW5mby5oYXNoQ29kZSgpICogNjE7IC8vIERlc2NyaXB0b3IKKyAgICAgICAgaW50IGhhc2ggPSBhc3NvY2lhdGlvbkluZm8uaGFzaENvZGUoKSAqIDM5OyAvLyBEZXNjcmlwdG9yCiAgICAgICAgIGlmKCBhc3NvY2lhdGlvblN0YXRlLmdldCgpICE9IG51bGwgKQogICAgICAgICB7Ci0gICAgICAgICAgICBoYXNoICs9IGFzc29jaWF0aW9uU3RhdGUuZ2V0KCkuaGFzaENvZGUoKSAqIDM7IC8vIFN0YXRlCisgICAgICAgICAgICBoYXNoID0gaGFzaCAqIDk5NyArIGFzc29jaWF0aW9uU3RhdGUuZ2V0KCkuaGFzaENvZGUoKTsgLy8gU3RhdGUKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaGFzaDsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL01hbnlBc3NvY2lhdGlvbkluc3RhbmNlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL01hbnlBc3NvY2lhdGlvbkluc3RhbmNlLmphdmEKaW5kZXggYTk0Njg2Mi4uNWM4YjRiOCAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9NYW55QXNzb2NpYXRpb25JbnN0YW5jZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYXNzb2NpYXRpb24vTWFueUFzc29jaWF0aW9uSW5zdGFuY2UuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ydW50aW1lLmFzc29jaWF0aW9uOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKQEAgLTEwLDggKzI4LDEwIEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLk1hbnlBc3NvY2lhdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uV3JhcHBlcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LklkZW50aXR5OworaW1wb3J0IG9yZy5xaTRqLmFwaS51dGlsLk51bGxBcmd1bWVudEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uMjsKLWltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5Db25zdHJhaW50c0NoZWNrOworaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuTWFueUFzc29jaWF0aW9uU3RhdGU7CiAKIC8qKgpAQCAtNDcsMTAgKzY3LDExIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gYWRkKCBpbnQgaSwgVCBlbnRpdHkgKQogICAgIHsKKyAgICAgICAgTnVsbEFyZ3VtZW50RXhjZXB0aW9uLnZhbGlkYXRlTm90TnVsbCggImVudGl0eSIsIGVudGl0eSApOwogICAgICAgICBjaGVja0ltbXV0YWJsZSgpOwogICAgICAgICBjaGVja1R5cGUoIGVudGl0eSApOwotICAgICAgICAoIChDb25zdHJhaW50c0NoZWNrKSBhc3NvY2lhdGlvbkluZm8gKS5jaGVja0NvbnN0cmFpbnRzKCBlbnRpdHkgKTsKLSAgICAgICAgcmV0dXJuIG1hbnlBc3NvY2lhdGlvblN0YXRlLmFkZCggaSwgZ2V0RW50aXR5UmVmZXJlbmNlKCBlbnRpdHkgKSApOworICAgICAgICBhc3NvY2lhdGlvbkluZm8uY2hlY2tDb25zdHJhaW50cyggZW50aXR5ICk7CisgICAgICAgIHJldHVybiBtYW55QXNzb2NpYXRpb25TdGF0ZS5hZGQoIGksIG5ldyBFbnRpdHlSZWZlcmVuY2UoICggKElkZW50aXR5KSBlbnRpdHkgKS5pZGVudGl0eSgpLmdldCgpICkgKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTYyLDEwICs4MywxMSBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIHJlbW92ZSggVCBlbnRpdHkgKQogICAgIHsKKyAgICAgICAgTnVsbEFyZ3VtZW50RXhjZXB0aW9uLnZhbGlkYXRlTm90TnVsbCggImVudGl0eSIsIGVudGl0eSApOwogICAgICAgICBjaGVja0ltbXV0YWJsZSgpOwogICAgICAgICBjaGVja1R5cGUoIGVudGl0eSApOwogCi0gICAgICAgIHJldHVybiBtYW55QXNzb2NpYXRpb25TdGF0ZS5yZW1vdmUoIGdldEVudGl0eVJlZmVyZW5jZSggZW50aXR5ICkgKTsKKyAgICAgICAgcmV0dXJuIG1hbnlBc3NvY2lhdGlvblN0YXRlLnJlbW92ZSggbmV3IEVudGl0eVJlZmVyZW5jZSggKCAoSWRlbnRpdHkpIGVudGl0eSApLmlkZW50aXR5KCkuZ2V0KCkgKSApOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNzcsNyArOTksNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBMaXN0PFQ+IHRvTGlzdCgpCiAgICAgewotICAgICAgICBBcnJheUxpc3Q8VD4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8VD4oKTsKKyAgICAgICAgQXJyYXlMaXN0PFQ+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgZm9yKCBFbnRpdHlSZWZlcmVuY2UgZW50aXR5UmVmZXJlbmNlIDogbWFueUFzc29jaWF0aW9uU3RhdGUgKQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0LmFkZCggZ2V0RW50aXR5KCBlbnRpdHlSZWZlcmVuY2UgKSApOwpAQCAtODksNyArMTExLDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU2V0PFQ+IHRvU2V0KCkKICAgICB7Ci0gICAgICAgIFNldDxUPiBzZXQgPSBuZXcgSGFzaFNldDxUPigpOworICAgICAgICBTZXQ8VD4gc2V0ID0gbmV3IEhhc2hTZXQ8PigpOwogICAgICAgICBmb3IoIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWZlcmVuY2UgOiBtYW55QXNzb2NpYXRpb25TdGF0ZSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldC5hZGQoIGdldEVudGl0eSggZW50aXR5UmVmZXJlbmNlICkgKTsKQEAgLTk5LDYgKzEyMSwxMiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+IHJlZmVyZW5jZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhYmxlcy50b0xpc3QoIG1hbnlBc3NvY2lhdGlvblN0YXRlICk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gbWFueUFzc29jaWF0aW9uU3RhdGUudG9TdHJpbmcoKTsKQEAgLTE5NCwxNSArMjIyLDQgQEAKICAgICAgICAgICAgIGlkSXRlcmF0b3IucmVtb3ZlKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBjaGVja1R5cGUoIE9iamVjdCBpbnN0YW5jZSApCi0gICAgewotICAgICAgICBpZiggaW5zdGFuY2UgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbiggIkFzc29jaWF0ZWQgb2JqZWN0IG1heSBub3QgYmUgbnVsbCIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN1cGVyLmNoZWNrVHlwZSggaW5zdGFuY2UgKTsKLSAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL05hbWVkQXNzb2NpYXRpb25JbnN0YW5jZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9OYW1lZEFzc29jaWF0aW9uSW5zdGFuY2UuamF2YQppbmRleCA0Y2E2N2IyLi5jMzhlZjFhIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL05hbWVkQXNzb2NpYXRpb25JbnN0YW5jZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYXNzb2NpYXRpb24vTmFtZWRBc3NvY2lhdGlvbkluc3RhbmNlLmphdmEKQEAgLTIyLDEyICsyMiwyMSBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbkRlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLk1hbnlBc3NvY2lhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uV3JhcHBlcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTmFtZWRBc3NvY2lhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTmFtZWRBc3NvY2lhdGlvbldyYXBwZXI7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5JZGVudGl0eTsKK2ltcG9ydCBvcmcucWk0ai5hcGkudXRpbC5OdWxsQXJndW1lbnRFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uMjsKLWltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5Db25zdHJhaW50c0NoZWNrOworaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuTmFtZWRBc3NvY2lhdGlvblN0YXRlOwogCitpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLm1hcDsKKwogcHVibGljIGNsYXNzIE5hbWVkQXNzb2NpYXRpb25JbnN0YW5jZTxUPgogICAgIGV4dGVuZHMgQWJzdHJhY3RBc3NvY2lhdGlvbkluc3RhbmNlPFQ+CiAgICAgaW1wbGVtZW50cyBOYW1lZEFzc29jaWF0aW9uPFQ+CkBAIC0zNyw3ICs0Niw4IEBACiAKICAgICBwdWJsaWMgTmFtZWRBc3NvY2lhdGlvbkluc3RhbmNlKCBBc3NvY2lhdGlvbkluZm8gYXNzb2NpYXRpb25JbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uMjxFbnRpdHlSZWZlcmVuY2UsIFR5cGUsIE9iamVjdD4gYXNzb2NpYXRpb25GdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lZEFzc29jaWF0aW9uU3RhdGUgbmFtZWRBc3NvY2lhdGlvblN0YXRlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lZEFzc29jaWF0aW9uU3RhdGUgbmFtZWRBc3NvY2lhdGlvblN0YXRlCisgICAgKQogICAgIHsKICAgICAgICAgc3VwZXIoIGFzc29jaWF0aW9uSW5mbywgYXNzb2NpYXRpb25GdW5jdGlvbiApOwogICAgICAgICB0aGlzLm5hbWVkQXNzb2NpYXRpb25TdGF0ZSA9IG5hbWVkQXNzb2NpYXRpb25TdGF0ZTsKQEAgLTY0LDEwICs3NCwxMSBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIHB1dCggU3RyaW5nIG5hbWUsIFQgZW50aXR5ICkKICAgICB7CisgICAgICAgIE51bGxBcmd1bWVudEV4Y2VwdGlvbi52YWxpZGF0ZU5vdE51bGwoICJlbnRpdHkiLCBlbnRpdHkgKTsKICAgICAgICAgY2hlY2tJbW11dGFibGUoKTsKICAgICAgICAgY2hlY2tUeXBlKCBlbnRpdHkgKTsKLSAgICAgICAgKCAoQ29uc3RyYWludHNDaGVjaykgYXNzb2NpYXRpb25JbmZvICkuY2hlY2tDb25zdHJhaW50cyggZW50aXR5ICk7Ci0gICAgICAgIHJldHVybiBuYW1lZEFzc29jaWF0aW9uU3RhdGUucHV0KCBuYW1lLCBnZXRFbnRpdHlSZWZlcmVuY2UoIGVudGl0eSApICk7CisgICAgICAgIGFzc29jaWF0aW9uSW5mby5jaGVja0NvbnN0cmFpbnRzKCBlbnRpdHkgKTsKKyAgICAgICAgcmV0dXJuIG5hbWVkQXNzb2NpYXRpb25TdGF0ZS5wdXQoIG5hbWUsIG5ldyBFbnRpdHlSZWZlcmVuY2UoICggKElkZW50aXR5KSBlbnRpdHkgKS5pZGVudGl0eSgpLmdldCgpICkgKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTEwMCw0ICsxMTEsMTMwIEBACiAgICAgICAgIHJldHVybiBtYXA7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEl0ZXJhYmxlPEVudGl0eVJlZmVyZW5jZT4gcmVmZXJlbmNlcygpCisgICAgeworICAgICAgICByZXR1cm4gbWFwKCBuZXcgRnVuY3Rpb248U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+KCkKKyAgICAgICAgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIG1hcCggU3RyaW5nIG5hbWUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBuYW1lZEFzc29jaWF0aW9uU3RhdGUuZ2V0KCBuYW1lICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIG5hbWVkQXNzb2NpYXRpb25TdGF0ZSApOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBFbnRpdHlSZWZlcmVuY2UgcmVmZXJlbmNlT2YoIFN0cmluZyBuYW1lICkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lZEFzc29jaWF0aW9uU3RhdGUuZ2V0KCBuYW1lICk7CisgICAgfQorCisgICAgcHVibGljIEl0ZXJhYmxlPE1hcC5FbnRyeTxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+IGdldEVudGl0eVJlZmVyZW5jZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1hcCggbmV3IEZ1bmN0aW9uPFN0cmluZywgTWFwLkVudHJ5PFN0cmluZywgRW50aXR5UmVmZXJlbmNlPj4oKQorICAgICAgICB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBNYXAuRW50cnk8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+IG1hcCggZmluYWwgU3RyaW5nIGtleSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluYWwgRW50aXR5UmVmZXJlbmNlIHZhbHVlID0gbmFtZWRBc3NvY2lhdGlvblN0YXRlLmdldCgga2V5ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXAuRW50cnk8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+KCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEtleSgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIEVudGl0eVJlZmVyZW5jZSBnZXRWYWx1ZSgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIHNldFZhbHVlKCBFbnRpdHlSZWZlcmVuY2UgdmFsdWUgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oICJJbW11dGFibGUgTWFwIiApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyggT2JqZWN0IG8gKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggbyBpbnN0YW5jZW9mIE1hcC5FbnRyeSApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwLkVudHJ5IG90aGVyID0gKE1hcC5FbnRyeSkgbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmVxdWFscyggb3RoZXIuZ2V0S2V5KCkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDk5NyAqIGtleS5oYXNoQ29kZSgpICsgOTgxODEzNDk3OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgbmFtZWRBc3NvY2lhdGlvblN0YXRlICk7CisgICAgfQorCisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoIE9iamVjdCBvICkKKyAgICB7CisgICAgICAgIGlmKCB0aGlzID09IG8gKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiggbyA9PSBudWxsIHx8IGdldENsYXNzKCkgIT0gby5nZXRDbGFzcygpICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIE5hbWVkQXNzb2NpYXRpb248Pz4gdGhhdCA9IChOYW1lZEFzc29jaWF0aW9uKSBvOworICAgICAgICAvLyBVbndyYXAgaWYgbmVlZGVkCisgICAgICAgIHdoaWxlKCB0aGF0IGluc3RhbmNlb2YgTmFtZWRBc3NvY2lhdGlvbldyYXBwZXIgKQorICAgICAgICB7CisgICAgICAgICAgICB0aGF0ID0gKCAoTmFtZWRBc3NvY2lhdGlvbldyYXBwZXIpIHRoYXQgKS5uZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRGVzY3JpcHRvciBlcXVhbGl0eQorICAgICAgICBOYW1lZEFzc29jaWF0aW9uSW5zdGFuY2U8Pz4gdGhhdEluc3RhbmNlID0gKE5hbWVkQXNzb2NpYXRpb25JbnN0YW5jZSkgdGhhdDsKKyAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHRoYXREZXNjcmlwdG9yID0gKEFzc29jaWF0aW9uRGVzY3JpcHRvcikgdGhhdEluc3RhbmNlLmFzc29jaWF0aW9uSW5mbygpOworICAgICAgICBpZiggIWFzc29jaWF0aW9uSW5mby5lcXVhbHMoIHRoYXREZXNjcmlwdG9yICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gU3RhdGUgZXF1YWxpdHkKKyAgICAgICAgaWYoIG5hbWVkQXNzb2NpYXRpb25TdGF0ZS5jb3VudCgpICE9IHRoYXRJbnN0YW5jZS5uYW1lZEFzc29jaWF0aW9uU3RhdGUuY291bnQoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmb3IoIFN0cmluZyBuYW1lIDogbmFtZWRBc3NvY2lhdGlvblN0YXRlICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICF0aGF0SW5zdGFuY2UubmFtZWRBc3NvY2lhdGlvblN0YXRlLmNvbnRhaW5zTmFtZSggbmFtZSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgdGhpc1JlZmVyZW5jZSA9IG5hbWVkQXNzb2NpYXRpb25TdGF0ZS5nZXQoIG5hbWUgKTsKKyAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZSB0aGF0UmVmZXJlbmNlID0gdGhhdEluc3RhbmNlLm5hbWVkQXNzb2NpYXRpb25TdGF0ZS5nZXQoIG5hbWUgKTsKKyAgICAgICAgICAgIGlmKCAhdGhpc1JlZmVyZW5jZS5lcXVhbHMoIHRoYXRSZWZlcmVuY2UgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKQorICAgIHsKKyAgICAgICAgaW50IGhhc2ggPSBhc3NvY2lhdGlvbkluZm8uaGFzaENvZGUoKSAqIDMxOyAvLyBEZXNjcmlwdG9yCisgICAgICAgIGZvciggU3RyaW5nIG5hbWUgOiBuYW1lZEFzc29jaWF0aW9uU3RhdGUgKQorICAgICAgICB7CisgICAgICAgICAgICBoYXNoICs9IG5hbWUuaGFzaENvZGUoKTsKKyAgICAgICAgICAgIGhhc2ggKz0gbmFtZWRBc3NvY2lhdGlvblN0YXRlLmdldCggbmFtZSApLmhhc2hDb2RlKCkgKiA3OyAvLyBTdGF0ZQorICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNoOworICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9OYW1lZEFzc29jaWF0aW9uc01vZGVsLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL05hbWVkQXNzb2NpYXRpb25zTW9kZWwuamF2YQppbmRleCA5YmE2M2Y1Li40ZjNmYWM1IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL05hbWVkQXNzb2NpYXRpb25zTW9kZWwuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL05hbWVkQXNzb2NpYXRpb25zTW9kZWwuamF2YQpAQCAtODksMTIgKzg5LDYgQEAKICAgICAgICAgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIk5vIG5hbWVkLWFzc29jaWF0aW9uIGZvdW5kIHdpdGggbmFtZToiICsgKCAoTWVtYmVyKSBhY2Nlc3NvciApLmdldE5hbWUoKSApOwogICAgICAgICB9Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiICk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkdFVCBOQU1FRCBBU1NPQ0lBVElPTiIgKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiXHR1cG9uOiAiICsgbWFwQWNjZXNzb3JBc3NvY2lhdGlvbk1vZGVsICk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0Zm9yOiAgIiArIGFjY2Vzc29yICk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0cmV0dXJuOiAiK25hbWVkQXNzb2NpYXRpb25Nb2RlbCApOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiApOwogICAgICAgICByZXR1cm4gbmFtZWRBc3NvY2lhdGlvbk1vZGVsOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9ib290c3RyYXAvQ29uZmlndXJhdGlvbkFzc2VtYmx5SW1wbC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9ib290c3RyYXAvQ29uZmlndXJhdGlvbkFzc2VtYmx5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDg4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Jvb3RzdHJhcC9Db25maWd1cmF0aW9uQXNzZW1ibHlJbXBsLmphdmEKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCitwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuYm9vdHN0cmFwOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5BY2Nlc3NpYmxlT2JqZWN0OworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1lbWJlcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkdlbmVyaWNBc3NvY2lhdGlvbkluZm87CitpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLk1hbnlBc3NvY2lhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTmFtZWRBc3NvY2lhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLkludmFsaWRBcHBsaWNhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLk1ldGFJbmZvOworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uT3B0aW9uYWw7CitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5RdWFsaWZpZWROYW1lOworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVXNlRGVmYXVsdHM7CitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbnN0cmFpbnQuQ29uc3RyYWludDsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuR2VuZXJpY1Byb3BlcnR5SW5mbzsKK2ltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuSW1tdXRhYmxlOworaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKK2ltcG9ydCBvcmcucWk0ai5hcGkudXRpbC5Bbm5vdGF0aW9uczsKK2ltcG9ydCBvcmcucWk0ai5hcGkudXRpbC5DbGFzc2VzOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NvY2lhdGlvbkRlY2xhcmF0aW9uczsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQ29uZmlndXJhdGlvbkFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5FbnRpdHlBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTWFueUFzc29jaWF0aW9uRGVjbGFyYXRpb25zOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5OYW1lZEFzc29jaWF0aW9uRGVjbGFyYXRpb25zOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5TdGF0ZURlY2xhcmF0aW9uczsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbnNNb2RlbDsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmFzc29jaWF0aW9uLk1hbnlBc3NvY2lhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uc01vZGVsOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uTmFtZWRBc3NvY2lhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uTmFtZWRBc3NvY2lhdGlvbnNNb2RlbDsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5NaXhpbnNNb2RlbDsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5TdGF0ZU1vZGVsOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlZhbHVlQ29uc3RyYWludHNJbnN0YW5jZTsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5WYWx1ZUNvbnN0cmFpbnRzTW9kZWw7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5lbnRpdHkuRW50aXR5TWl4aW5zTW9kZWw7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5lbnRpdHkuRW50aXR5TW9kZWw7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5lbnRpdHkuRW50aXR5U3RhdGVNb2RlbDsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLnByb3BlcnR5LlByb3BlcnR5TW9kZWw7CisKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGouYXBpLnV0aWwuQW5ub3RhdGlvbnMuaXNUeXBlOworaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5hcGkudXRpbC5DbGFzc2VzLnR5cGVPZjsKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMuZmlsdGVyOworaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5maXJzdDsKKworLyoqCisgKiBEZWNsYXJhdGlvbiBvZiBhIEVudGl0eUNvbXBvc2l0ZS4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIENvbmZpZ3VyYXRpb25Bc3NlbWJseUltcGwKKyAgICBpbXBsZW1lbnRzIENvbmZpZ3VyYXRpb25Bc3NlbWJseQoreworICAgIHByaXZhdGUgVmFsdWVBc3NlbWJseUltcGwgdmFsdWU7CisgICAgcHJpdmF0ZSBFbnRpdHlBc3NlbWJseUltcGwgZW50aXR5OworCisgICAgcHVibGljIENvbmZpZ3VyYXRpb25Bc3NlbWJseUltcGwoIENsYXNzPD8+IG1haW5UeXBlICkKKyAgICB7CisgICAgICAgIHZhbHVlID0gbmV3IFZhbHVlQXNzZW1ibHlJbXBsKCBtYWluVHlwZSApOworICAgICAgICBlbnRpdHkgPSBuZXcgRW50aXR5QXNzZW1ibHlJbXBsKCBtYWluVHlwZSApOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJdGVyYWJsZTxDbGFzczw/Pj4gdHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnR5cGVzKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9ib290c3RyYXAvQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uSW1wbC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9ib290c3RyYXAvQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YTE0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Jvb3RzdHJhcC9Db25maWd1cmF0aW9uRGVjbGFyYXRpb25JbXBsLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqLworCitwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuYm9vdHN0cmFwOworCitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Db25maWd1cmF0aW9uRGVjbGFyYXRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkVudGl0eURlY2xhcmF0aW9uOworCitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuYXNMaXN0OworCisvKioKKyAqIERlY2xhcmF0aW9uIG9mIGEgQ29tcG9zaXRlLiBDcmVhdGVkIGJ5IHtAbGluayBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHkjY29uZmlndXJhdGlvbnMoQ2xhc3NbXSl9LgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uSW1wbAorICAgIGltcGxlbWVudHMgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uCit7CisgICAgcHJpdmF0ZSBmaW5hbCBJdGVyYWJsZTxFbnRpdHlBc3NlbWJseUltcGw+IGVudGl0aWVzOworICAgIHByaXZhdGUgZmluYWwgSXRlcmFibGU8VmFsdWVBc3NlbWJseUltcGw+IHZhbHVlczsKKworICAgIHB1YmxpYyBDb25maWd1cmF0aW9uRGVjbGFyYXRpb25JbXBsKCBJdGVyYWJsZTxFbnRpdHlBc3NlbWJseUltcGw+IGVudGl0aWVzLCBJdGVyYWJsZTxWYWx1ZUFzc2VtYmx5SW1wbD4gdmFsdWVzICApCisgICAgeworICAgICAgICB0aGlzLmVudGl0aWVzID0gZW50aXRpZXM7CisgICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBDb25maWd1cmF0aW9uRGVjbGFyYXRpb24gc2V0TWV0YUluZm8oIE9iamVjdCBpbmZvICkKKyAgICB7CisgICAgICAgIGZvciggRW50aXR5QXNzZW1ibHlJbXBsIGVudGl0eSA6IGVudGl0aWVzICkKKyAgICAgICAgeworICAgICAgICAgICAgZW50aXR5Lm1ldGFJbmZvLnNldCggaW5mbyApOworICAgICAgICB9CisgICAgICAgIGZvciggVmFsdWVBc3NlbWJseUltcGwgdmFsdWUgOiB2YWx1ZXMgKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZS5tZXRhSW5mby5zZXQoIGluZm8gKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHZpc2libGVJbiggVmlzaWJpbGl0eSB2aXNpYmlsaXR5ICkKKyAgICB7CisgICAgICAgIGZvciggRW50aXR5QXNzZW1ibHlJbXBsIGVudGl0eSA6IGVudGl0aWVzICkKKyAgICAgICAgeworICAgICAgICAgICAgZW50aXR5LnZpc2liaWxpdHkgPSB2aXNpYmlsaXR5OworICAgICAgICB9CisgICAgICAgIGZvciggVmFsdWVBc3NlbWJseUltcGwgdmFsdWUgOiB2YWx1ZXMgKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZS52aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHdpdGhDb25jZXJucyggQ2xhc3M8Pz4uLi4gY29uY2VybnMgKQorICAgIHsKKyAgICAgICAgZm9yKCBFbnRpdHlBc3NlbWJseUltcGwgZW50aXR5IDogZW50aXRpZXMgKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRpdHkuY29uY2VybnMuYWRkQWxsKCBhc0xpc3QoIGNvbmNlcm5zICkgKTsKKyAgICAgICAgfQorICAgICAgICBmb3IoIFZhbHVlQXNzZW1ibHlJbXBsIHZhbHVlIDogdmFsdWVzICkKKyAgICAgICAgeworICAgICAgICAgICAgdmFsdWUuY29uY2VybnMuYWRkQWxsKCBhc0xpc3QoIGNvbmNlcm5zICkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHdpdGhTaWRlRWZmZWN0cyggQ2xhc3M8Pz4uLi4gc2lkZUVmZmVjdHMgKQorICAgIHsKKyAgICAgICAgZm9yKCBFbnRpdHlBc3NlbWJseUltcGwgZW50aXR5IDogZW50aXRpZXMgKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRpdHkuc2lkZUVmZmVjdHMuYWRkQWxsKCBhc0xpc3QoIHNpZGVFZmZlY3RzICkgKTsKKyAgICAgICAgfQorICAgICAgICBmb3IoIFZhbHVlQXNzZW1ibHlJbXBsIHZhbHVlIDogdmFsdWVzICkKKyAgICAgICAgeworICAgICAgICAgICAgdmFsdWUuc2lkZUVmZmVjdHMuYWRkQWxsKCBhc0xpc3QoIHNpZGVFZmZlY3RzICkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHdpdGhNaXhpbnMoIENsYXNzPD8+Li4uIG1peGlucyApCisgICAgeworICAgICAgICBmb3IoIEVudGl0eUFzc2VtYmx5SW1wbCBlbnRpdHkgOiBlbnRpdGllcyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudGl0eS5taXhpbnMuYWRkQWxsKCBhc0xpc3QoIG1peGlucyApICk7CisgICAgICAgIH0KKyAgICAgICAgZm9yKCBWYWx1ZUFzc2VtYmx5SW1wbCB2YWx1ZSA6IHZhbHVlcyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhbHVlLm1peGlucy5hZGRBbGwoIGFzTGlzdCggbWl4aW5zICkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uIHdpdGhUeXBlcyggQ2xhc3M8Pz4uLi4gdHlwZXMgKQorICAgIHsKKyAgICAgICAgZm9yKCBFbnRpdHlBc3NlbWJseUltcGwgZW50aXR5IDogZW50aXRpZXMgKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRpdHkudHlwZXMuYWRkQWxsKCBhc0xpc3QoIHR5cGVzICkgKTsKKyAgICAgICAgfQorICAgICAgICBmb3IoIFZhbHVlQXNzZW1ibHlJbXBsIHZhbHVlIDogdmFsdWVzICkKKyAgICAgICAgeworICAgICAgICAgICAgdmFsdWUudHlwZXMuYWRkQWxsKCBhc0xpc3QoIHR5cGVzICkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9ib290c3RyYXAvTW9kdWxlQXNzZW1ibHlJbXBsLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Jvb3RzdHJhcC9Nb2R1bGVBc3NlbWJseUltcGwuamF2YQppbmRleCBlYjAzOGViLi4xZjQ3MGRjIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Jvb3RzdHJhcC9Nb2R1bGVBc3NlbWJseUltcGwuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2Jvb3RzdHJhcC9Nb2R1bGVBc3NlbWJseUltcGwuamF2YQpAQCAtMjcsMTMgKzI3LDE3IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50Q29tcG9zaXRlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHk7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuRHVwbGljYXRlU2VydmljZUlkZW50aXR5RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VJbXBvcnRlcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5IYXNUeXBlczsKK2ltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5NYXRjaFR5cGVTcGVjaWZpY2F0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZUNvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5U3BlY2lmaWNhdGlvbnM7CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5VmlzaXRvcjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5FbnRpdHlBc3NlbWJseTsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuRW50aXR5RGVjbGFyYXRpb247CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkltcG9ydGVkU2VydmljZUFzc2VtYmx5OwpAQCAtNTIsNiArNTYsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5WYWx1ZURlY2xhcmF0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzOwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuU3BlY2lmaWNhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLlNwZWNpZmljYXRpb25zOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYWN0aXZhdGlvbi5BY3RpdmF0b3JzTW9kZWw7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuVHJhbnNpZW50TW9kZWw7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuVHJhbnNpZW50c01vZGVsOwpAQCAtMjU0LDYgKzI1OSw2OSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBDb25maWd1cmF0aW9uRGVjbGFyYXRpb24gY29uZmlndXJhdGlvbnMoIENsYXNzPD8+Li4uIGNvbmZpZ3VyYXRpb25UeXBlcyApCisgICAgeworICAgICAgICBMaXN0PEVudGl0eUFzc2VtYmx5SW1wbD4gZW50aXR5QXNzZW1ibHlMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICAgICAgZm9yKCBDbGFzcyBlbnRpdHlUeXBlIDogY29uZmlndXJhdGlvblR5cGVzICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHRoaXMuZW50aXR5QXNzZW1ibGllcy5jb250YWluc0tleSggZW50aXR5VHlwZSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlBc3NlbWJseUxpc3QuYWRkKCB0aGlzLmVudGl0eUFzc2VtYmxpZXMuZ2V0KCBlbnRpdHlUeXBlICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFbnRpdHlBc3NlbWJseUltcGwgZW50aXR5QXNzZW1ibHkgPSBuZXcgRW50aXR5QXNzZW1ibHlJbXBsKCBlbnRpdHlUeXBlICk7CisgICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlBc3NlbWJsaWVzLnB1dCggZW50aXR5VHlwZSwgZW50aXR5QXNzZW1ibHkgKTsKKyAgICAgICAgICAgICAgICBlbnRpdHlBc3NlbWJseUxpc3QuYWRkKCBlbnRpdHlBc3NlbWJseSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTGlzdDxWYWx1ZUFzc2VtYmx5SW1wbD4gdmFsdWVBc3NlbWJseUxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBmb3IoIENsYXNzIHZhbHVlVHlwZSA6IGNvbmZpZ3VyYXRpb25UeXBlcyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2YWx1ZUFzc2VtYmxpZXMuY29udGFpbnNLZXkoIHZhbHVlVHlwZSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWx1ZUFzc2VtYmx5TGlzdC5hZGQoIHZhbHVlQXNzZW1ibGllcy5nZXQoIHZhbHVlVHlwZSApICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmFsdWVBc3NlbWJseUltcGwgdmFsdWVBc3NlbWJseSA9IG5ldyBWYWx1ZUFzc2VtYmx5SW1wbCggdmFsdWVUeXBlICk7CisgICAgICAgICAgICAgICAgdmFsdWVBc3NlbWJsaWVzLnB1dCggdmFsdWVUeXBlLCB2YWx1ZUFzc2VtYmx5ICk7CisgICAgICAgICAgICAgICAgdmFsdWVBc3NlbWJseUxpc3QuYWRkKCB2YWx1ZUFzc2VtYmx5ICk7CisgICAgICAgICAgICAgICAgdmFsdWVBc3NlbWJseS50eXBlcy5hZGQoIElkZW50aXR5LmNsYXNzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IENvbmZpZ3VyYXRpb25EZWNsYXJhdGlvbkltcGwoIGVudGl0eUFzc2VtYmx5TGlzdCwgdmFsdWVBc3NlbWJseUxpc3QgICk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIENvbmZpZ3VyYXRpb25EZWNsYXJhdGlvbiBjb25maWd1cmF0aW9ucyggU3BlY2lmaWNhdGlvbjxIYXNUeXBlcz4gc3BlY2lmaWNhdGlvbiApCisgICAgeworICAgICAgICBTcGVjaWZpY2F0aW9uPEhhc1R5cGVzPiBpc0NvbmZpZ3VyYXRpb25Db21wb3NpdGUgPSBuZXcgTWF0Y2hUeXBlU3BlY2lmaWNhdGlvbiggSWRlbnRpdHkuY2xhc3MgKTsKKyAgICAgICAgc3BlY2lmaWNhdGlvbiA9IFNwZWNpZmljYXRpb25zLmFuZCggc3BlY2lmaWNhdGlvbiwgaXNDb25maWd1cmF0aW9uQ29tcG9zaXRlICk7CisgICAgICAgIExpc3Q8RW50aXR5QXNzZW1ibHlJbXBsPiBlbnRpdHlBc3NtYmx5TGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBmb3IoIEVudGl0eUFzc2VtYmx5SW1wbCBlbnRpdHlBc3NlbWJseSA6IGVudGl0eUFzc2VtYmxpZXMudmFsdWVzKCkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3BlY2lmaWNhdGlvbi5zYXRpc2ZpZWRCeSggZW50aXR5QXNzZW1ibHkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW50aXR5QXNzbWJseUxpc3QuYWRkKCBlbnRpdHlBc3NlbWJseSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIExpc3Q8VmFsdWVBc3NlbWJseUltcGw+IHZhbHVlQXNzZW1ibHlMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGZvciggVmFsdWVBc3NlbWJseUltcGwgdHJhbnNpZW50QXNzZW1ibHkgOiB2YWx1ZUFzc2VtYmxpZXMudmFsdWVzKCkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3BlY2lmaWNhdGlvbi5zYXRpc2ZpZWRCeSggdHJhbnNpZW50QXNzZW1ibHkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFsdWVBc3NlbWJseUxpc3QuYWRkKCB0cmFuc2llbnRBc3NlbWJseSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgQ29uZmlndXJhdGlvbkRlY2xhcmF0aW9uSW1wbCggZW50aXR5QXNzbWJseUxpc3QsIHZhbHVlQXNzZW1ibHlMaXN0ICk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIE9iamVjdERlY2xhcmF0aW9uIG9iamVjdHMoIENsYXNzPD8+Li4uIG9iamVjdFR5cGVzICkKICAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCiAgICAgewpAQCAtMjYzLDcgKzMzMSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGlmKCBvYmplY3RUeXBlLmlzSW50ZXJmYWNlKCkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlbWJseUV4Y2VwdGlvbiggIkludGVyZmFjZXMgY2FuIG5vdCBiZSBRaTRqIE9iamVjdHMuIiApOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlbWJseUV4Y2VwdGlvbiggIkludGVyZmFjZXMgY2FuIG5vdCBiZSBaZXN0IE9iamVjdHMuIiApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYoIG9iamVjdEFzc2VtYmxpZXMuY29udGFpbnNLZXkoIG9iamVjdFR5cGUgKSApCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9BYnN0cmFjdE1vZGlmaWVyTW9kZWwuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0Fic3RyYWN0TW9kaWZpZXJNb2RlbC5qYXZhCmluZGV4IDA5NDk5Y2IuLmI0NTdmMWQgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0Fic3RyYWN0TW9kaWZpZXJNb2RlbC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0Fic3RyYWN0TW9kaWZpZXJNb2RlbC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5pbmplY3Rpb24uSW5qZWN0ZWRGaWVsZHNNb2RlbDsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5JbmplY3RlZE1ldGhvZHNNb2RlbDsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5JbmplY3Rpb25Db250ZXh0OwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZUluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmFwaS51dGlsLkNsYXNzZXMuUkFXX0NMQVNTOwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5hcGkudXRpbC5DbGFzc2VzLmludGVyZmFjZXNPZjsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgaW5qZWN0ZWRGaWVsZHNNb2RlbCA9IG5ldyBJbmplY3RlZEZpZWxkc01vZGVsKCBkZWNsYXJlZE1vZGlmaWVyQ2xhc3MgKTsKICAgICAgICAgaW5qZWN0ZWRNZXRob2RzTW9kZWwgPSBuZXcgSW5qZWN0ZWRNZXRob2RzTW9kZWwoIGRlY2xhcmVkTW9kaWZpZXJDbGFzcyApOwogICAgICAgICBDbGFzczxDbGFzczw/Pj4gY29tcG9uZW50VHlwZSA9IChDbGFzczxDbGFzczw/Pj4pIENsYXNzLmNsYXNzLmNhc3QoIENsYXNzLmNsYXNzICk7Ci0gICAgICAgIG5leHRJbnRlcmZhY2VzID0gdG9BcnJheSggY29tcG9uZW50VHlwZSwgdW5pcXVlKCBtYXAoIFJBV19DTEFTUywgaW50ZXJmYWNlc09mKCBkZWNsYXJlZE1vZGlmaWVyQ2xhc3MgKSApICkpOworICAgICAgICBuZXh0SW50ZXJmYWNlcyA9IHRvQXJyYXkoIGNvbXBvbmVudFR5cGUsIHVuaXF1ZSggbWFwKCBSQVdfQ0xBU1MsIGludGVyZmFjZXNPZiggZGVjbGFyZWRNb2RpZmllckNsYXNzICkgKSApICk7CiAgICAgfQogCiAgICAgcHVibGljIENsYXNzPD8+IG1vZGlmaWVyQ2xhc3MoKQpAQCAtOTYsNyArOTYsNyBAQAogICAgIH0KIAogICAgIC8vIENvbnRleHQKLSAgICBwdWJsaWMgSW52b2NhdGlvbkhhbmRsZXIgbmV3SW5zdGFuY2UoIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlLAorICAgIHB1YmxpYyBJbnZvY2F0aW9uSGFuZGxlciBuZXdJbnN0YW5jZSggTW9kdWxlU3BpIG1vZHVsZUluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2NhdGlvbkhhbmRsZXIgbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3h5UmVmZXJlbmNlSW52b2NhdGlvbkhhbmRsZXIgcHJveHlIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kIG1ldGhvZApkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvQ29tcGFjdExldmVsLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9Db21wYWN0TGV2ZWwuamF2YQppbmRleCA0OWI4MTJjLi4xOTlmZDRmIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9Db21wYWN0TGV2ZWwuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9Db21wYWN0TGV2ZWwuamF2YQpAQCAtMTksMTAgKzE5LDEwIEBACiAgKg0KICAqIDxwcmU+DQogICogPGI+b2ZmPC9iPiAgICAgICA9IERvIG5vdCBtb2RpZnkgdGhlIHN0YWNrIHRyYWNlLg0KLSAqIDxiPnByb3h5PC9iPiAgICAgPSBSZW1vdmUgYWxsIFFpNGogaW50ZXJuYWwgY2xhc3NlcyBhbmQgYWxsIEpESyBpbnRlcm5hbCBjbGFzc2VzIGZyb20NCisgKiA8Yj5wcm94eTwvYj4gICAgID0gUmVtb3ZlIGFsbCBaZXN0IGludGVybmFsIGNsYXNzZXMgYW5kIGFsbCBKREsgaW50ZXJuYWwgY2xhc3NlcyBmcm9tDQogICogICAgICAgICAgICAgdGhlIG9yaWdpbmF0aW5nIG1ldGhvZCBjYWxsLg0KICAqIDxiPnNlbWk8L2I+ICAgICAgPSBSZW1vdmUgYWxsIEpESyBpbnRlcm5hbCBjbGFzc2VzIG9uIHRoZSBlbnRpcmUgc3RhY2suDQotICogPGI+ZXh0ZW5zaXZlPC9iPiA9IFJlbW92ZSBhbGwgUWk0aiBpbnRlcm5hbCBhbmQgSkRLIGludGVybmFsIGNsYXNzZXMgZnJvbSB0aGUgZW50aXJlIHN0YWNrLg0KKyAqIDxiPmV4dGVuc2l2ZTwvYj4gPSBSZW1vdmUgYWxsIFplc3QgaW50ZXJuYWwgYW5kIEpESyBpbnRlcm5hbCBjbGFzc2VzIGZyb20gdGhlIGVudGlyZSBzdGFjay4NCiAgKiA8L3ByZT4NCiAgKg0KICAqIDxwPg0KZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0NvbXBvc2l0ZU1ldGhvZE1vZGVsLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9Db21wb3NpdGVNZXRob2RNb2RlbC5qYXZhCmluZGV4IGU5MjViOWQuLjMxNjIxMzAgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0NvbXBvc2l0ZU1ldGhvZE1vZGVsLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvQ29tcG9zaXRlTWV0aG9kTW9kZWwuamF2YQpAQCAtMjksNyArMjksNyBAQAogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuVmlzaXRhYmxlSGllcmFyY2h5OwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuaW5qZWN0aW9uLkRlcGVuZGVuY2llczsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5EZXBlbmRlbmN5TW9kZWw7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kdWxlSW5zdGFuY2U7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiAKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMuZmlsdGVyOwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5mbGF0dGVuSXRlcmFibGVzOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgfQogCiAgICAgLy8gQ29udGV4dAotICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKCBPYmplY3QgY29tcG9zaXRlLCBPYmplY3RbXSBwYXJhbXMsIE1peGluc0luc3RhbmNlIG1peGlucywgTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UgKQorICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKCBPYmplY3QgY29tcG9zaXRlLCBPYmplY3RbXSBwYXJhbXMsIE1peGluc0luc3RhbmNlIG1peGlucywgTW9kdWxlU3BpIG1vZHVsZUluc3RhbmNlICkKICAgICAgICAgdGhyb3dzIFRocm93YWJsZQogICAgIHsKICAgICAgICAgY29uc3RyYWludHNJbnN0YW5jZS5jaGVja1ZhbGlkKCBjb21wb3NpdGUsIG1ldGhvZCwgcGFyYW1zICk7CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgQ29tcG9zaXRlTWV0aG9kSW5zdGFuY2UgZ2V0SW5zdGFuY2UoIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlICkKKyAgICBwcml2YXRlIENvbXBvc2l0ZU1ldGhvZEluc3RhbmNlIGdldEluc3RhbmNlKCBNb2R1bGVTcGkgbW9kdWxlSW5zdGFuY2UgKQogICAgIHsKICAgICAgICAgQ29tcG9zaXRlTWV0aG9kSW5zdGFuY2UgbWV0aG9kSW5zdGFuY2UgPSBpbnN0YW5jZVBvb2wub2J0YWluSW5zdGFuY2UoKTsKICAgICAgICAgaWYoIG1ldGhvZEluc3RhbmNlID09IG51bGwgKQpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgIHJldHVybiBtZXRob2RJbnN0YW5jZTsKICAgICB9CiAKLSAgICBwcml2YXRlIENvbXBvc2l0ZU1ldGhvZEluc3RhbmNlIG5ld0NvbXBvc2l0ZU1ldGhvZEluc3RhbmNlKCBNb2R1bGVJbnN0YW5jZSBtb2R1bGVJbnN0YW5jZSApCisgICAgcHJpdmF0ZSBDb21wb3NpdGVNZXRob2RJbnN0YW5jZSBuZXdDb21wb3NpdGVNZXRob2RJbnN0YW5jZSggTW9kdWxlU3BpIG1vZHVsZUluc3RhbmNlICkKICAgICAgICAgdGhyb3dzIENvbnN0cnVjdGlvbkV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgRnJhZ21lbnRJbnZvY2F0aW9uSGFuZGxlciBtaXhpbkludm9jYXRpb25IYW5kbGVyID0gbWl4aW5zLm5ld0ludm9jYXRpb25IYW5kbGVyKCBtZXRob2QgKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiAgICAgcHVibGljIEl0ZXJhYmxlPE1ldGhvZD4gaW52b2NhdGlvbnNGb3IoIENsYXNzPD8+IG1peGluQ2xhc3MgKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1peGlucy5pbnZvY2F0aW9uc0ZvcihtaXhpbkNsYXNzKTsKKyAgICAgICAgcmV0dXJuIG1peGlucy5pbnZvY2F0aW9uc0ZvciggbWl4aW5DbGFzcyApOwogICAgIH0KIAogICAgIHB1YmxpYyBjbGFzcyBDb21wb3NpdGVNZXRob2RBbm5vdGF0ZWRFbGVtZW50CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9Db21wb3NpdGVNZXRob2RzTW9kZWwuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0NvbXBvc2l0ZU1ldGhvZHNNb2RlbC5qYXZhCmluZGV4IDZmZWM1ZWIuLmJmMGMxMTMgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0NvbXBvc2l0ZU1ldGhvZHNNb2RlbC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0NvbXBvc2l0ZU1ldGhvZHNNb2RlbC5qYXZhCkBAIC0xNSwxNCArMTUsMTQgQEAKIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGU7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5NaXNzaW5nTWV0aG9kRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuSGllcmFyY2hpY2FsVmlzaXRvcjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlczsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLlZpc2l0YWJsZUhpZXJhcmNoeTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5EZXBlbmRlbmNpZXM7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5pbmplY3Rpb24uRGVwZW5kZW5jeU1vZGVsOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZUluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLm1hcDsKIApAQCAtMzIsMTIgKzMyLDEyIEBACiBwdWJsaWMgZmluYWwgY2xhc3MgQ29tcG9zaXRlTWV0aG9kc01vZGVsCiAgICAgaW1wbGVtZW50cyBWaXNpdGFibGVIaWVyYXJjaHk8T2JqZWN0LCBPYmplY3Q+CiB7Ci0gICAgcHJpdmF0ZSBIYXNoTWFwPE1ldGhvZCwgQ29tcG9zaXRlTWV0aG9kTW9kZWw+IG1ldGhvZHM7CisgICAgcHJpdmF0ZSBmaW5hbCBMaW5rZWRIYXNoTWFwPE1ldGhvZCwgQ29tcG9zaXRlTWV0aG9kTW9kZWw+IG1ldGhvZHM7CiAgICAgcHJpdmF0ZSBmaW5hbCBNaXhpbnNNb2RlbCBtaXhpbnNNb2RlbDsKIAogICAgIHB1YmxpYyBDb21wb3NpdGVNZXRob2RzTW9kZWwoIE1peGluc01vZGVsIG1peGluc01vZGVsICkKICAgICB7Ci0gICAgICAgIG1ldGhvZHMgPSBuZXcgSGFzaE1hcDxNZXRob2QsIENvbXBvc2l0ZU1ldGhvZE1vZGVsPigpOworICAgICAgICBtZXRob2RzID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwogICAgICAgICB0aGlzLm1peGluc01vZGVsID0gbWl4aW5zTW9kZWw7CiAgICAgfQogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBwcm94eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlU3BpIG1vZHVsZUluc3RhbmNlCiAgICAgKQogICAgICAgICB0aHJvd3MgVGhyb3dhYmxlCiAgICAgewpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvQ29tcG9zaXRlTW9kZWwuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0NvbXBvc2l0ZU1vZGVsLmphdmEKaW5kZXggYzY4OTkyOS4uYTZlYTEyMiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvQ29tcG9zaXRlTW9kZWwuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9Db21wb3NpdGVNb2RlbC5qYXZhCkBAIC0yNSwxMiArMjUsMTQgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZURlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5JbnZhbGlkQ29tcG9zaXRlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuSGllcmFyY2hpY2FsVmlzaXRvcjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlczsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLlZpc2l0YWJsZUhpZXJhcmNoeTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5EZXBlbmRlbmNpZXM7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5pbmplY3Rpb24uRGVwZW5kZW5jeU1vZGVsOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZUluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiBpbXBvcnQgc3RhdGljIGphdmEubGFuZy5yZWZsZWN0LlByb3h5Lm5ld1Byb3h5SW5zdGFuY2U7CiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLmZpcnN0OwpAQCAtMTA3LDggKzEwOSwxMyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgcHVibGljIE1peGluc01vZGVsIG1peGluc01vZGVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtaXhpbnNNb2RlbDsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKLSAgICBAU3VwcHJlc3NXYXJuaW5ncyggeyJyYXciLCAidW5jaGVja2VkIn0gKQorICAgIEBTdXBwcmVzc1dhcm5pbmdzKCB7ICJyYXciLCAidW5jaGVja2VkIiB9ICkKICAgICBwdWJsaWMgQ2xhc3M8Pz4gcHJpbWFyeVR5cGUoKQogICAgIHsKICAgICAgICAgQ2xhc3MgcHJpbWFyeVR5cGUgPSBudWxsOwpAQCAtMTU5LDcgKzE2Niw3IEBACiAgICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TGVhdmUoIHRoaXMgKTsKICAgICB9CiAKLSAgICBAU3VwcHJlc3NXYXJuaW5ncyggeyJyYXciLCAidW5jaGVja2VkIn0gKQorICAgIEBTdXBwcmVzc1dhcm5pbmdzKCB7ICJyYXciLCAidW5jaGVja2VkIiB9ICkKICAgICBwcml2YXRlIHZvaWQgY3JlYXRlUHJveHlDbGFzcygpCiAgICAgewogICAgICAgICBDbGFzczw/PiBtYWluVHlwZSA9IGZpcnN0KCB0eXBlcyApOwpAQCAtMTk5LDcgKzIwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBwcm94eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlU3BpIG1vZHVsZUluc3RhbmNlCiAgICAgKQogICAgICAgICB0aHJvd3MgVGhyb3dhYmxlCiAgICAgewpAQCAtMjQ2LDcgKzI1Myw4IEBACiAvLyAgICAgICAgaWYgKCFtYXRjaGVzQW55KCBpc0Fzc2lnbmFibGVGcm9tKCBtaXhpblR5cGUgKSwgdHlwZXMgKSkKICAgICAgICAgaWYoICFtaXhpbnNNb2RlbC5pc0ltcGxlbWVudGVkKCBtaXhpblR5cGUgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJDb21wb3NpdGUgZG9lcyBub3QgaW1wbGVtZW50IHR5cGUgIiArIG1peGluVHlwZS5nZXROYW1lKCkgKTsKKyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gIkNvbXBvc2l0ZSAiICsgcHJpbWFyeVR5cGUoKS5nZXROYW1lKCkgKyAiIGRvZXMgbm90IGltcGxlbWVudCB0eXBlICIgKyBtaXhpblR5cGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggbWVzc2FnZSApOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSW5zdGFudGlhdGUgcHJveHkgZm9yIGdpdmVuIG1peGluIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvQ29uY2VybnNNb2RlbC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvQ29uY2VybnNNb2RlbC5qYXZhCmluZGV4IDk0ODhjNGIuLjc0ODgyZjcgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0NvbmNlcm5zTW9kZWwuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9Db25jZXJuc01vZGVsLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLlZpc2l0YWJsZUhpZXJhcmNoeTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5EZXBlbmRlbmNpZXM7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5pbmplY3Rpb24uRGVwZW5kZW5jeU1vZGVsOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZUluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiAvKioKICAqIEpBVkFET0MKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICB9CiAKICAgICAvLyBDb250ZXh0Ci0gICAgcHVibGljIENvbmNlcm5zSW5zdGFuY2UgbmV3SW5zdGFuY2UoIE1ldGhvZCBtZXRob2QsIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlLAorICAgIHB1YmxpYyBDb25jZXJuc0luc3RhbmNlIG5ld0luc3RhbmNlKCBNZXRob2QgbWV0aG9kLCBNb2R1bGVTcGkgbW9kdWxlSW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50SW52b2NhdGlvbkhhbmRsZXIgbWl4aW5JbnZvY2F0aW9uSGFuZGxlcgogICAgICkKICAgICB7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9GcmFnbWVudENsYXNzTG9hZGVyLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9GcmFnbWVudENsYXNzTG9hZGVyLmphdmEKaW5kZXggOTk2MzU3ZC4uNGNmNDQzOSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvRnJhZ21lbnRDbGFzc0xvYWRlci5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0ZyYWdtZW50Q2xhc3NMb2FkZXIuamF2YQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gZGVmaW5lQ2xhc3MoIG5hbWUsIGIsIDAsIGIubGVuZ3RoLCBiYXNlQ2xhc3MuZ2V0UHJvdGVjdGlvbkRvbWFpbigpICk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUcnkgdGhlIGNsYXNzbG9hZGVyIG9mIHRoaXMgY2xhc3Nsb2FkZXIgLT4gZ2V0IGNsYXNzZXMgaW4gUWk0aiBzdWNoIGFzIENvbXBvc2l0ZUludm9rZXIKKyAgICAgICAgLy8gVHJ5IHRoZSBjbGFzc2xvYWRlciBvZiB0aGlzIGNsYXNzbG9hZGVyIC0+IGdldCBjbGFzc2VzIGluIFplc3Qgc3VjaCBhcyBDb21wb3NpdGVJbnZva2VyCiAgICAgICAgIHJldHVybiBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKCBuYW1lICk7CiAgICAgfQogCkBAIC00ODQsNyArNDg0LDcgQEAKICAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIFJlZHVuZGFudElmU3RhdGVtZW50CiAgICAgICAgICAgICBpZiggaXNJbnRlcm5hbFFpNGpNZXRob2QoIG1ldGhvZCwgYmFzZUNsYXNzICkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gU2tpcCBtZXRob2RzIGluIFFpNGotaW50ZXJuYWwgaW50ZXJmYWNlcworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gU2tpcCBtZXRob2RzIGluIFplc3QtaW50ZXJuYWwgaW50ZXJmYWNlcwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvRnJhZ21lbnRJbnZvY2F0aW9uSGFuZGxlci5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvRnJhZ21lbnRJbnZvY2F0aW9uSGFuZGxlci5qYXZhCmluZGV4IGJkNzZhMDkuLmVjNjU2YWIgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0ZyYWdtZW50SW52b2NhdGlvbkhhbmRsZXIuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9GcmFnbWVudEludm9jYXRpb25IYW5kbGVyLmphdmEKQEAgLTUxLDggKzUxLDggQEAKIAogICAgICAgICBTdGFja1RyYWNlRWxlbWVudFtdIHRyYWNlID0gdGhyb3dhYmxlLmdldFN0YWNrVHJhY2UoKTsKIAotICAgICAgICAvLyBDaGVjayBpZiBleGNlcHRpb24gb3JpZ2luYXRlZCB3aXRoaW4gUWk0aiBvciBKREsgLSBpZiBzbyB0aGVuIHNraXAgY29tcGFjdGlvbgotICAgICAgICBpZiggIWlzQXBwbGljYXRpb25DbGFzcyggdHJhY2VbIDAgXS5nZXRDbGFzc05hbWUoKSApICkKKyAgICAgICAgLy8gQ2hlY2sgaWYgZXhjZXB0aW9uIG9yaWdpbmF0ZWQgd2l0aGluIFplc3Qgb3IgSkRLIC0gaWYgc28gdGhlbiBza2lwIGNvbXBhY3Rpb24KKyAgICAgICAgaWYoIHRyYWNlLmxlbmd0aCA9PSAwIHx8ICFpc0FwcGxpY2F0aW9uQ2xhc3MoIHRyYWNlWyAwIF0uZ2V0Q2xhc3NOYW1lKCkgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB0aHJvd2FibGU7CiAgICAgICAgIH0KQEAgLTYzLDYgKzYzLDcgQEAKICAgICAgICAgICAgIFN0YWNrVHJhY2VFbGVtZW50IHN0YWNrVHJhY2VFbGVtZW50ID0gdHJhY2VbIGkgXTsKICAgICAgICAgICAgIGlmKCAhaXNBcHBsaWNhdGlvbkNsYXNzKCBzdGFja1RyYWNlRWxlbWVudC5nZXRDbGFzc05hbWUoKSApICkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBTaG91bGQgZmluZCBzdGFjayBlbnRyeSBvdXRzaWRlIFJ1bnRpbWUsIGFuZCBjb21wYWN0IGJleW9uZCB0aGF0CiAgICAgICAgICAgICAgICAgdHJhY2VbIGkgXSA9IG51bGw7CiAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0Z1bmN0aW9uU3RhdGVSZXNvbHZlci5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvRnVuY3Rpb25TdGF0ZVJlc29sdmVyLmphdmEKaW5kZXggMjg0OTI5ZC4uMDFiY2M0MSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvRnVuY3Rpb25TdGF0ZVJlc29sdmVyLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvRnVuY3Rpb25TdGF0ZVJlc29sdmVyLmphdmEKQEAgLTIwLDggKzIwLDE1IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uRGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKIGltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuRm9yRWFjaDsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5lbnRpdHkuRW50aXR5TW9kZWw7CitpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0ZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5Lk1hbnlBc3NvY2lhdGlvblN0YXRlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuTmFtZWRBc3NvY2lhdGlvblN0YXRlOwogCiAvKioKICAqIEZ1bmN0aW9uIGJhc2VkIFN0YXRlUmVzb2x2ZXIuCkBAIC02OCw0ICs3NSw0NiBAQAogICAgIHsKICAgICAgICAgcmV0dXJuIG5hbWVkQXNzb2NpYXRpb25GdW5jdGlvbi5tYXAoIGFzc29jaWF0aW9uRGVzY3JpcHRvciApOwogICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHBvcHVsYXRlU3RhdGUoIEVudGl0eU1vZGVsIG1vZGVsLCBFbnRpdHlTdGF0ZSBzdGF0ZSApCisgICAgeworICAgICAgICBmb3IoIFByb3BlcnR5RGVzY3JpcHRvciBwcm9wRGVzYyA6IG1vZGVsLnN0YXRlKCkucHJvcGVydGllcygpICkKKyAgICAgICAgeworICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gZ2V0UHJvcGVydHlTdGF0ZSggcHJvcERlc2MgKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFByb3BlcnR5VmFsdWUoIHByb3BEZXNjLnF1YWxpZmllZE5hbWUoKSwgdmFsdWUgKTsKKyAgICAgICAgfQorICAgICAgICBmb3IoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBhc3NEZXNjIDogbW9kZWwuc3RhdGUoKS5hc3NvY2lhdGlvbnMoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZSByZWYgPSBnZXRBc3NvY2lhdGlvblN0YXRlKCBhc3NEZXNjICk7CisgICAgICAgICAgICBzdGF0ZS5zZXRBc3NvY2lhdGlvblZhbHVlKCBhc3NEZXNjLnF1YWxpZmllZE5hbWUoKSwgcmVmICk7CisgICAgICAgIH0KKyAgICAgICAgZm9yKCBNYW55QXNzb2NpYXRpb25Nb2RlbCBtYW55QXNzRGVzYyA6IG1vZGVsLnN0YXRlKCkubWFueUFzc29jaWF0aW9ucygpICkKKyAgICAgICAgeworICAgICAgICAgICAgTWFueUFzc29jaWF0aW9uU3RhdGUgYXNzb2NpYXRpb25TdGF0ZSA9IHN0YXRlLm1hbnlBc3NvY2lhdGlvblZhbHVlT2YoIG1hbnlBc3NEZXNjLnF1YWxpZmllZE5hbWUoKSApOworICAgICAgICAgICAgLy8gRmlyc3QgY2xlYXIgZXhpc3Rpbmcgb25lcworICAgICAgICAgICAgZm9yKCBFbnRpdHlSZWZlcmVuY2UgcmVmIDogYXNzb2NpYXRpb25TdGF0ZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzb2NpYXRpb25TdGF0ZS5yZW1vdmUoIHJlZiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gdGhlbiBhZGQgdGhlIG5ldyBvbmVzLgorICAgICAgICAgICAgZm9yKCBFbnRpdHlSZWZlcmVuY2UgcmVmIDogZ2V0TWFueUFzc29jaWF0aW9uU3RhdGUoIG1hbnlBc3NEZXNjICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFzc29jaWF0aW9uU3RhdGUuYWRkKCAwLCByZWYgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IoIE5hbWVkQXNzb2NpYXRpb25Nb2RlbCBuYW1lZEFzc0Rlc2MgOiBtb2RlbC5zdGF0ZSgpLm5hbWVkQXNzb2NpYXRpb25zKCkgKQorICAgICAgICB7CisgICAgICAgICAgICBOYW1lZEFzc29jaWF0aW9uU3RhdGUgYXNzb2NpYXRpb25TdGF0ZSA9IHN0YXRlLm5hbWVkQXNzb2NpYXRpb25WYWx1ZU9mKCBuYW1lZEFzc0Rlc2MucXVhbGlmaWVkTmFtZSgpICk7CisgICAgICAgICAgICAvLyBGaXJzdCBjbGVhciBleGlzdGluZyBvbmVzCisgICAgICAgICAgICBmb3IoIFN0cmluZyBuYW1lIDogYXNzb2NpYXRpb25TdGF0ZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzb2NpYXRpb25TdGF0ZS5yZW1vdmUoIG5hbWUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHRoZW4gYWRkIHRoZSBuZXcgb25lcy4KKyAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFN0cmluZywgRW50aXR5UmVmZXJlbmNlPiBlbnRyeSA6IGdldE5hbWVkQXNzb2NpYXRpb25TdGF0ZSggbmFtZWRBc3NEZXNjICkuZW50cnlTZXQoKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzb2NpYXRpb25TdGF0ZS5wdXQoIGVudHJ5LmdldEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9HZW5lcmljU3BlY2lmaWNhdGlvbi5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvR2VuZXJpY1NwZWNpZmljYXRpb24uamF2YQppbmRleCBiYzBmNjEyLi40NThmOGJiIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9HZW5lcmljU3BlY2lmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0dlbmVyaWNTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGU7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uSGFuZGxlcjsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0luc3RhbmNlUG9vbC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvSW5zdGFuY2VQb29sLmphdmEKaW5kZXggMGYwOGViMi4uMzQ5YjdhYiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvSW5zdGFuY2VQb29sLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvSW5zdGFuY2VQb29sLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGU7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvUHJveHlHZW5lcmF0b3IuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1Byb3h5R2VuZXJhdG9yLmphdmEKaW5kZXggNmY4ZTYwOS4uMTVjNTJjNSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvUHJveHlHZW5lcmF0b3IuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9Qcm94eUdlbmVyYXRvci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuUHJveHk7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9TaWRlRWZmZWN0SW52b2NhdGlvbkhhbmRsZXJSZXN1bHQuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1NpZGVFZmZlY3RJbnZvY2F0aW9uSGFuZGxlclJlc3VsdC5qYXZhCmluZGV4IGJhODMyNzYuLjMxNzE4ZDYgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1NpZGVFZmZlY3RJbnZvY2F0aW9uSGFuZGxlclJlc3VsdC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1NpZGVFZmZlY3RJbnZvY2F0aW9uSGFuZGxlclJlc3VsdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvbkhhbmRsZXI7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9TaWRlRWZmZWN0c01vZGVsLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9TaWRlRWZmZWN0c01vZGVsLmphdmEKaW5kZXggMTEwMThmZi4uMTBhZTc3OSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvU2lkZUVmZmVjdHNNb2RlbC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1NpZGVFZmZlY3RzTW9kZWwuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuVmlzaXRhYmxlSGllcmFyY2h5OwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuaW5qZWN0aW9uLkRlcGVuZGVuY2llczsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5EZXBlbmRlbmN5TW9kZWw7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kdWxlSW5zdGFuY2U7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiAKIC8qKgogICogSkFWQURPQwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIC8vIENvbnRleHQKLSAgICBwdWJsaWMgU2lkZUVmZmVjdHNJbnN0YW5jZSBuZXdJbnN0YW5jZSggTWV0aG9kIG1ldGhvZCwgTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UsIEludm9jYXRpb25IYW5kbGVyIGludm9rZXIgKQorICAgIHB1YmxpYyBTaWRlRWZmZWN0c0luc3RhbmNlIG5ld0luc3RhbmNlKCBNZXRob2QgbWV0aG9kLCBNb2R1bGVTcGkgbW9kdWxlSW5zdGFuY2UsIEludm9jYXRpb25IYW5kbGVyIGludm9rZXIgKQogICAgIHsKICAgICAgICAgUHJveHlSZWZlcmVuY2VJbnZvY2F0aW9uSGFuZGxlciBwcm94eUhhbmRsZXIgPSBuZXcgUHJveHlSZWZlcmVuY2VJbnZvY2F0aW9uSGFuZGxlcigpOwogICAgICAgICBTaWRlRWZmZWN0SW52b2NhdGlvbkhhbmRsZXJSZXN1bHQgcmVzdWx0ID0gbmV3IFNpZGVFZmZlY3RJbnZvY2F0aW9uSGFuZGxlclJlc3VsdCgpOwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHJhbnNpZW50QnVpbGRlckluc3RhbmNlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9UcmFuc2llbnRCdWlsZGVySW5zdGFuY2UuamF2YQppbmRleCAwYmIzNDNmLi5mZmIzZmM2IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9UcmFuc2llbnRCdWlsZGVySW5zdGFuY2UuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9UcmFuc2llbnRCdWlsZGVySW5zdGFuY2UuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eURlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5wcm9wZXJ0eS5Qcm9wZXJ0eUluZm87CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5wcm9wZXJ0eS5Qcm9wZXJ0eUluc3RhbmNlOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZGVsTW9kdWxlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kZWxNb2R1bGU7CiAKIC8qKgogICogSkFWQURPQwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHJhbnNpZW50Q2xhc3NMb2FkZXIuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1RyYW5zaWVudENsYXNzTG9hZGVyLmphdmEKaW5kZXggYzlkYWEzMS4uMTU0ZGVlMSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHJhbnNpZW50Q2xhc3NMb2FkZXIuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9UcmFuc2llbnRDbGFzc0xvYWRlci5qYXZhCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgICAgIHJldHVybiBkZWZpbmVDbGFzcyggbmFtZSwgYiwgMCwgYi5sZW5ndGgsIGJhc2VDbGFzcy5nZXRQcm90ZWN0aW9uRG9tYWluKCkgKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFRyeSB0aGUgY2xhc3Nsb2FkZXIgb2YgdGhpcyBjbGFzc2xvYWRlciAtPiBnZXQgY2xhc3NlcyBpbiBRaTRqIHN1Y2ggYXMgQ29tcG9zaXRlSW52b2tlcgorICAgICAgICAvLyBUcnkgdGhlIGNsYXNzbG9hZGVyIG9mIHRoaXMgY2xhc3Nsb2FkZXIgLT4gZ2V0IGNsYXNzZXMgaW4gWmVzdCBzdWNoIGFzIENvbXBvc2l0ZUludm9rZXIKICAgICAgICAgcmV0dXJuIGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoIG5hbWUgKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1RyYW5zaWVudEluc3RhbmNlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9UcmFuc2llbnRJbnN0YW5jZS5qYXZhCmluZGV4IDUwOGFjZjAuLjc4YmM1YTIgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1RyYW5zaWVudEluc3RhbmNlLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHJhbnNpZW50SW5zdGFuY2UuamF2YQpAQCAtMjQsNyArMjQsMTAgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZUluc3RhbmNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5TdGF0ZUhvbGRlcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkxheWVyOworaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZUluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiAvKioKICAqIEludm9jYXRpb25IYW5kbGVyIGZvciBwcm94eSBvYmplY3RzLgpAQCAtNDIsMTAgKzQ1LDEwIEBACiAgICAgcHJvdGVjdGVkIGZpbmFsIE9iamVjdFtdIG1peGluczsKICAgICBwcm90ZWN0ZWQgU3RhdGVIb2xkZXIgc3RhdGU7CiAgICAgcHJvdGVjdGVkIGZpbmFsIENvbXBvc2l0ZU1vZGVsIGNvbXBvc2l0ZU1vZGVsOwotICAgIHByaXZhdGUgZmluYWwgTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2U7CisgICAgcHJpdmF0ZSBmaW5hbCBNb2R1bGVTcGkgbW9kdWxlSW5zdGFuY2U7CiAKICAgICBwdWJsaWMgVHJhbnNpZW50SW5zdGFuY2UoIENvbXBvc2l0ZU1vZGVsIGNvbXBvc2l0ZU1vZGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGVTcGkgbW9kdWxlSW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RbXSBtaXhpbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZUhvbGRlciBzdGF0ZQogICAgICkKQEAgLTEwNSwxMSArMTA4LDE2IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1vZHVsZUluc3RhbmNlIG1vZHVsZSgpCisgICAgcHVibGljIE1vZHVsZSBtb2R1bGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1vZHVsZUluc3RhbmNlOwogICAgIH0KIAorICAgIHB1YmxpYyBMYXllciBsYXllcigpCisgICAgeworICAgICAgICByZXR1cm4gKCAoTW9kdWxlSW5zdGFuY2UpIG1vZHVsZUluc3RhbmNlICkubGF5ZXJJbnN0YW5jZSgpOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdGF0ZUhvbGRlciBzdGF0ZSgpCiAgICAgewpAQCAtMjAyLDcgKzIxMCw5IEBACiAgICAgICAgIH0KICAgICAgICAgaWYoIGZpcnN0ICkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICJUcmFuc2llbnRJbnN0YW5jZXsiICsKKyAgICAgICAgICAgIFN0cmluZyBtb2RlbFR5cGVOYW1lID0gY29tcG9zaXRlTW9kZWwuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCk7CisgICAgICAgICAgICBTdHJpbmcgbWV0YVR5cGVNb2RlbCA9IG1vZGVsVHlwZU5hbWUuc3Vic3RyaW5nKCAwLCBtb2RlbFR5cGVOYW1lLmxlbmd0aCgpIC0gNSApOworICAgICAgICAgICAgcmV0dXJuIG1ldGFUeXBlTW9kZWwgKyAiSW5zdGFuY2V7IiArCiAgICAgICAgICAgICAgICAgICAgIm1peGlucz0iICsgKCBtaXhpbnMgPT0gbnVsbCA/IG51bGwgOiBBcnJheXMuYXNMaXN0KCBtaXhpbnMgKSApICsKICAgICAgICAgICAgICAgICAgICAiLCBzdGF0ZT0iICsgc3RhdGUgKwogICAgICAgICAgICAgICAgICAgICIsIGNvbXBvc2l0ZU1vZGVsPSIgKyBjb21wb3NpdGVNb2RlbCArCmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9UcmFuc2llbnRNb2RlbC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHJhbnNpZW50TW9kZWwuamF2YQppbmRleCBjNWZmZTc5Li45NjhmYTVlIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9UcmFuc2llbnRNb2RlbC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1RyYW5zaWVudE1vZGVsLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uc3RyYWludC5Db25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuaW5qZWN0aW9uLkluamVjdGlvbkNvbnRleHQ7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5wcm9wZXJ0eS5Qcm9wZXJ0eU1vZGVsOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZUluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiAvKioKICAqIE1vZGVsIGZvciBUcmFuc2llbnQgQ29tcG9zaXRlcwpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBzdXBlciggdHlwZXMsIHZpc2liaWxpdHksIG1ldGFJbmZvLCBtaXhpbnNNb2RlbCwgc3RhdGVNb2RlbCwgY29tcG9zaXRlTWV0aG9kc01vZGVsICk7CiAgICAgfQogCi0gICAgcHVibGljIFRyYW5zaWVudEluc3RhbmNlIG5ld0luc3RhbmNlKCBNb2R1bGVJbnN0YW5jZSBtb2R1bGVJbnN0YW5jZSwKKyAgICBwdWJsaWMgVHJhbnNpZW50SW5zdGFuY2UgbmV3SW5zdGFuY2UoIE1vZHVsZVNwaSBtb2R1bGVJbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXNJbnN0YW5jZSB1c2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpZW50U3RhdGVJbnN0YW5jZSBzdGF0ZQogICAgICkKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1RyYW5zaWVudFN0YXRlSW5zdGFuY2UuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1RyYW5zaWVudFN0YXRlSW5zdGFuY2UuamF2YQppbmRleCBiNzMwODVhLi5jYzBkN2UzIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9UcmFuc2llbnRTdGF0ZUluc3RhbmNlLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHJhbnNpZW50U3RhdGVJbnN0YW5jZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQWNjZXNzaWJsZU9iamVjdDsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1R5cGVkTW9kaWZpZXJJbnZvY2F0aW9uSGFuZGxlci5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHlwZWRNb2RpZmllckludm9jYXRpb25IYW5kbGVyLmphdmEKaW5kZXggMjQ2NzQzNi4uNGU5NjU0YSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHlwZWRNb2RpZmllckludm9jYXRpb25IYW5kbGVyLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHlwZWRNb2RpZmllckludm9jYXRpb25IYW5kbGVyLmphdmEKQEAgLTI3LDE0ICsyNyw2IEBACiAgICAgewogICAgICAgICB0cnkKICAgICAgICAgewotLyoKLSAgICAgICAgICAgIC8vIFJlbW92ZSB0aGlzLCBhbmQgcnVuIEludm9jYXRpb25JbmplY3Rpb25UZXN0IHRvIHZlcmlmeQotICAgICAgICAgICAgaWYoICFtZXRob2QuaXNBY2Nlc3NpYmxlKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1ldGhvZC5zZXRBY2Nlc3NpYmxlKCB0cnVlICk7ICAgICAgIC8vIFRPRE86IFRoaXMgaXMgYSBtYXNzaXZlIFBlcmZvcm1hbmNlIEtpbGxlci4gTmVlZHMgdG8gYmUgdGFrZW4gY2FyZSBvZi4KLSAgICAgICAgICAgIH0KLSovCi0KICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ldGhvZC5pbnZva2UoIGZyYWdtZW50LCBhcmdzICk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSApCmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2VudGl0eS9FbnRpdHlJbnN0YW5jZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9lbnRpdHkvRW50aXR5SW5zdGFuY2UuamF2YQppbmRleCA2ZTdlNTEzLi43MjI4YzQxIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2VudGl0eS9FbnRpdHlJbnN0YW5jZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvZW50aXR5L0VudGl0eUluc3RhbmNlLmphdmEKQEAgLTM2LDEwICszNiwxMCBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuQ29tcG9zaXRlTWV0aG9kSW5zdGFuY2U7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuTWl4aW5zSW5zdGFuY2U7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kdWxlSW5zdGFuY2U7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kdWxlVW5pdE9mV29yazsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXRlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdHVzOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiAvKioKICAqIEVudGl0eSBpbnN0YW5jZQpAQCAtNTQsNyArNTQsNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBFbnRpdHlDb21wb3NpdGUgcHJveHk7CiAgICAgcHJpdmF0ZSBmaW5hbCBNb2R1bGVVbml0T2ZXb3JrIHVvdzsKLSAgICBwcml2YXRlIGZpbmFsIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlOworICAgIHByaXZhdGUgZmluYWwgTW9kdWxlU3BpIG1vZHVsZUluc3RhbmNlOwogICAgIHByaXZhdGUgZmluYWwgRW50aXR5TW9kZWwgZW50aXR5TW9kZWw7CiAgICAgcHJpdmF0ZSBmaW5hbCBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHk7CiAgICAgcHJpdmF0ZSBmaW5hbCBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZTsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICBwcml2YXRlIEVudGl0eVN0YXRlSW5zdGFuY2Ugc3RhdGU7CiAKICAgICBwdWJsaWMgRW50aXR5SW5zdGFuY2UoIE1vZHVsZVVuaXRPZldvcmsgdW93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGVTcGkgbW9kdWxlSW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlNb2RlbCBlbnRpdHlNb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlCiAgICAgKQpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1vZHVsZUluc3RhbmNlIG1vZHVsZSgpCisgICAgcHVibGljIE1vZHVsZVNwaSBtb2R1bGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1vZHVsZUluc3RhbmNlOwogICAgIH0KQEAgLTIwMCw3ICsyMDAsNyBAQAogCiAgICAgICAgIGlmKCBzdGF0dXMoKSA9PSBFbnRpdHlTdGF0dXMuUkVNT1ZFRCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIGlkZW50aXR5LCBlbnRpdHlNb2RlbC50eXBlcygpICk7CisgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCBpZGVudGl0eSwgZW50aXR5TW9kZWwudHlwZXMoKSwgdW5pdE9mV29yaygpLnVzZWNhc2UoKSApOwogICAgICAgICB9CiAKICAgICAgICAgbWl4aW5zID0gZW50aXR5TW9kZWwubmV3TWl4aW5Ib2xkZXIoKTsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvZW50aXR5L0VudGl0eU1vZGVsLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2VudGl0eS9FbnRpdHlNb2RlbC5qYXZhCmluZGV4IDc3MTAzZjkuLjg2MzcwMzQgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvZW50aXR5L0VudGl0eU1vZGVsLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9lbnRpdHkvRW50aXR5TW9kZWwuamF2YQpAQCAtMzMsMTIgKzMzLDEyIEBACiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuQ29tcG9zaXRlTWV0aG9kc01vZGVsOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLkNvbXBvc2l0ZU1vZGVsOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUucHJvcGVydHkuUHJvcGVydHlNb2RlbDsKLWltcG9ydCBvcmcucWk0ai5ydW50aW1lLnN0cnVjdHVyZS5Nb2R1bGVJbnN0YW5jZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnN0cnVjdHVyZS5Nb2R1bGVVbml0T2ZXb3JrOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eUFscmVhZHlFeGlzdHNFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZVVuaXRPZldvcms7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiAKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMuZmlsdGVyOwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5maXJzdDsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXRjaCggTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvciggIlFpNGogQ29yZSBSdW50aW1lIGNvZGViYXNlIGlzIGNvcnJ1cHRlZC4gQ29udGFjdCBRaTRqIHRlYW06IE1vZHVsZVVuaXRPZldvcmsiICk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvciggIlplc3QgQ29yZSBSdW50aW1lIGNvZGViYXNlIGlzIGNvcnJ1cHRlZC4gQ29udGFjdCBaZXN0IHRlYW06IE1vZHVsZVVuaXRPZldvcmsiICk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgcmV0dXJuIChFbnRpdHlTdGF0ZU1vZGVsKSBzdXBlci5zdGF0ZSgpOwogICAgIH0KIAotICAgIHB1YmxpYyBFbnRpdHlJbnN0YW5jZSBuZXdJbnN0YW5jZSggTW9kdWxlVW5pdE9mV29yayB1b3csIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlLCBFbnRpdHlTdGF0ZSBzdGF0ZSApCisgICAgcHVibGljIEVudGl0eUluc3RhbmNlIG5ld0luc3RhbmNlKCBNb2R1bGVVbml0T2ZXb3JrIHVvdywgTW9kdWxlU3BpIG1vZHVsZUluc3RhbmNlLCBFbnRpdHlTdGF0ZSBzdGF0ZSApCiAgICAgewogICAgICAgICBFbnRpdHlJbnN0YW5jZSBpbnN0YW5jZSA9IG5ldyBFbnRpdHlJbnN0YW5jZSggdW93LCBtb2R1bGVJbnN0YW5jZSwgdGhpcywgc3RhdGUgKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwpAQCAtMTE2LDEzICsxMTYsMTMgQEAKICAgICAgICAgcmV0dXJuICggKEVudGl0eU1peGluc01vZGVsKSBtaXhpbnNNb2RlbCApLm5ld01peGluKCBlbnRpdHlJbnN0YW5jZSwgZW50aXR5U3RhdGUsIG1peGlucywgbWV0aG9kICk7CiAgICAgfQogCi0gICAgcHVibGljIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgc3RvcmUsIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSApCisgICAgcHVibGljIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgc3RvcmUsIE1vZHVsZVNwaSBtb2R1bGUsIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSApCiAgICAgICAgIHRocm93cyBDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgdHJ5CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIE5ldyBFbnRpdHlTdGF0ZQotICAgICAgICAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSBzdG9yZS5uZXdFbnRpdHlTdGF0ZSggaWRlbnRpdHksIHRoaXMgKTsKKyAgICAgICAgICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gc3RvcmUubmV3RW50aXR5U3RhdGUoIG1vZHVsZSwgaWRlbnRpdHksIHRoaXMgKTsKIAogICAgICAgICAgICAgLy8gU2V0IGlkZW50aXR5IHByb3BlcnR5CiAgICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgcGVyc2lzdGVudFByb3BlcnR5RGVzY3JpcHRvciA9IHN0YXRlKCkucHJvcGVydHlNb2RlbEZvciggSURFTlRJVFlfTUVUSE9EICk7CkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGluaXRTdGF0ZSggTW9kdWxlSW5zdGFuY2UgbW9kdWxlLCBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSApCisgICAgcHVibGljIHZvaWQgaW5pdFN0YXRlKCBNb2R1bGVTcGkgbW9kdWxlLCBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSApCiAgICAgewogICAgICAgICAvLyBTZXQgbmV3IHByb3BlcnRpZXMgdG8gZGVmYXVsdCB2YWx1ZQogICAgICAgICBmb3IoIFByb3BlcnR5TW9kZWwgcHJvcGVydHlEZXNjcmlwdG9yIDogc3RhdGUoKS5wcm9wZXJ0aWVzKCkgKQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9lbnRpdHkvRW50aXR5U3RhdGVJbnN0YW5jZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9lbnRpdHkvRW50aXR5U3RhdGVJbnN0YW5jZS5qYXZhCmluZGV4IGQ0NGEzZjkuLjUwNTUwOWIgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvZW50aXR5L0VudGl0eVN0YXRlSW5zdGFuY2UuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2VudGl0eS9FbnRpdHlTdGF0ZUluc3RhbmNlLmphdmEKQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgICAgICAgICAgY29uc3RyYWludHMuY2hlY2tDb25zdHJhaW50cyggYXNzb2NpYXRpb24uZ2V0KCkgKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFRPRE8gU2hvdWxkIE1hbnlBc3NvY2lhdGlvbnMgYmUgY2hlY2tlZCB0b28/CisgICAgICAgIC8vIFRPRE8gU2hvdWxkIE1hbnlBc3NvY2lhdGlvbnMgYW5kIE5hbWVkQXNzb2NpYXRpb25zIGJlIGNoZWNrZWQgdG9vPwogICAgIH0KIAogICAgIHByaXZhdGUgTWFwPEFjY2Vzc2libGVPYmplY3QsIE9iamVjdD4gc3RhdGUoKQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vRGVwZW5kZW5jaWVzLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9EZXBlbmRlbmNpZXMuamF2YQppbmRleCAzOWJjNDY4Li5iZmQ4MzA0IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9EZXBlbmRlbmNpZXMuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9EZXBlbmRlbmNpZXMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbjsKIAogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuRnVuY3Rpb247CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9EZXBlbmRlbmN5TW9kZWwuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL0RlcGVuZGVuY3lNb2RlbC5qYXZhCmluZGV4IGJmYzUzMTcuLmEwMWQwNjEgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL0RlcGVuZGVuY3lNb2RlbC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL0RlcGVuZGVuY3lNb2RlbC5qYXZhCkBAIC0yODcsMTYgKzI4NywyMCBAQAogICAgICAgICAgICAgICAgIGV4ID0gZXguZ2V0Q2F1c2UoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiW01vZHVsZSAiICsgY29udGV4dC5tb2R1bGUoKQotICAgICAgICAgICAgICAgIC5uYW1lKCkgKyAiXSBJbmplY3Rpb25Qcm92aWRlciB1bmFibGUgdG8gcmVzb2x2ZSBAIiArIGluamVjdGlvbkFubm90YXRpb24uYW5ub3RhdGlvblR5cGUoKQotICAgICAgICAgICAgICAgIC5nZXRTaW1wbGVOYW1lKCkgKyAiICIgKyBpbmplY3Rpb25UeXBlLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJbTW9kdWxlICIgKyBjb250ZXh0Lm1vZHVsZSgpLm5hbWUoKSArICJdIEluamVjdGlvblByb3ZpZGVyIHVuYWJsZSB0byByZXNvbHZlIEAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5qZWN0aW9uQW5ub3RhdGlvbi5hbm5vdGF0aW9uVHlwZSgpLmdldFNpbXBsZU5hbWUoKSArICIgIiArIGluamVjdGlvblR5cGUudG9TdHJpbmcoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBDb25zdHJ1Y3Rpb25FeGNlcHRpb24oIG1lc3NhZ2UsIGV4ICk7CiAgICAgICAgIH0KICAgICAgICAgaWYoIGluamVjdGVkVmFsdWUgPT0gbnVsbCAmJiAhb3B0aW9uYWwgKQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJbTW9kdWxlICIgKyBjb250ZXh0Lm1vZHVsZSgpCi0gICAgICAgICAgICAgICAgLm5hbWUoKSArICJdIE5vbi1vcHRpb25hbCBAIiArIGluamVjdGlvbkFubm90YXRpb24uYW5ub3RhdGlvblR5cGUoKQotICAgICAgICAgICAgICAgIC5nZXRTaW1wbGVOYW1lKCkgKyAiICIgKyBpbmplY3Rpb25UeXBlLnRvU3RyaW5nKCkgKyAiIHdhcyBudWxsIGluICIgKyBpbmplY3RlZENsYXNzLmdldE5hbWUoKTsKKyAgICAgICAgICAgIFN0cmluZyBzaW1wbGVOYW1lID0gaW5qZWN0aW9uQW5ub3RhdGlvbi5hbm5vdGF0aW9uVHlwZSgpLmdldFNpbXBsZU5hbWUoKTsKKyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gIltNb2R1bGUgIiArIGNvbnRleHQubW9kdWxlKCkubmFtZSgpICsgIl0gTm9uLW9wdGlvbmFsIEAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlTmFtZSArICIgIiArIGluamVjdGlvblR5cGUudG9TdHJpbmcoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgd2FzIG51bGwgaW4gIiArIGluamVjdGVkQ2xhc3MuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYoIHNpbXBsZU5hbWUudG9Mb3dlckNhc2UoKS5jb250YWlucyggInNlcnZpY2UiICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgIi4gRGlkIHlvdSBtZWFuIHRoZSBAU2VydmljZSBpbmplY3Rpb24gc2NvcGU/IjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRocm93IG5ldyBDb25zdHJ1Y3Rpb25FeGNlcHRpb24oIG1lc3NhZ2UgKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZ2V0SW5qZWN0ZWRWYWx1ZSggaW5qZWN0ZWRWYWx1ZSApOwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vSW5qZWN0ZWRGaWVsZE1vZGVsLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9JbmplY3RlZEZpZWxkTW9kZWwuamF2YQppbmRleCA2YjM1ZjJhLi41NDEyZmVjIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9JbmplY3RlZEZpZWxkTW9kZWwuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9JbmplY3RlZEZpZWxkTW9kZWwuamF2YQpAQCAtODcsOSArODcsNyBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgVHJhbnNpZW50SW5zdGFuY2UgaGFuZGxlciA9IChUcmFuc2llbnRJbnN0YW5jZSkgaW52b2NhdGlvbkhhbmRsZXI7CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ2xhc3NOYW1lID0gQ2xhc3Nlcy50b1N0cmluZyggaGFuZGxlci5kZXNjcmlwdG9yKCkudHlwZXMoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluIFsiICsgaGFuZGxlci5tb2R1bGUoKS5uYW1lKCkgKyAiXSBvZiBbIiArIGhhbmRsZXIubW9kdWxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5sYXllckluc3RhbmNlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5uYW1lKCkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluIFsiICsgaGFuZGxlci5tb2R1bGUoKS5uYW1lKCkgKyAiXSBvZiBbIiArIGhhbmRsZXIubGF5ZXIoKS5uYW1lKCkgKyAiXSI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CkBAIC0xNDAsNCArMTM4LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gZW1wdHlMaXN0KCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiSW5qZWN0ZWRGaWVsZE1vZGVseyIgKyAiLCBpbmplY3RlZEZpZWxkPSIgKyBpbmplY3RlZEZpZWxkICsgJ30nOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL0luamVjdGlvbkNvbnRleHQuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL0luamVjdGlvbkNvbnRleHQuamF2YQppbmRleCBmOWMxZGViLi5iM2M0OTgxIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9JbmplY3Rpb25Db250ZXh0LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vSW5qZWN0aW9uQ29udGV4dC5qYXZhCkBAIC0xOSwxMyArMTksMTQgQEAKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5Qcm94eVJlZmVyZW5jZUludm9jYXRpb25IYW5kbGVyOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlVzZXNJbnN0YW5jZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnN0cnVjdHVyZS5Nb2R1bGVJbnN0YW5jZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZHVsZVNwaTsKIAogLyoqCiAgKiBKQVZBRE9DCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBJbmplY3Rpb25Db250ZXh0CiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNb2R1bGVJbnN0YW5jZSBtb2R1bGVJbnN0YW5jZTsKKyAgICBwcml2YXRlIGZpbmFsIE1vZHVsZVNwaSBtb2R1bGVJbnN0YW5jZTsKICAgICBwcml2YXRlIENvbXBvc2l0ZUluc3RhbmNlIGNvbXBvc2l0ZUluc3RhbmNlOwogICAgIHByaXZhdGUgVXNlc0luc3RhbmNlIHVzZXM7CiAgICAgcHJpdmF0ZSBTdGF0ZUhvbGRlciBzdGF0ZTsKQEAgLTQ0LDI4ICs0NSwyOCBAQAogICAgIH0KIAogICAgIC8vIEZvciBjb25jZXJucyBhbmQgc2lkZS1lZmZlY3RzCi0gICAgcHVibGljIEluamVjdGlvbkNvbnRleHQoIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlLCBPYmplY3QgbmV4dCwgUHJveHlSZWZlcmVuY2VJbnZvY2F0aW9uSGFuZGxlciBwcm94eUhhbmRsZXIgKQorICAgIHB1YmxpYyBJbmplY3Rpb25Db250ZXh0KCBNb2R1bGVTcGkgbW9kdWxlSW5zdGFuY2UsIE9iamVjdCBuZXh0LCBQcm94eVJlZmVyZW5jZUludm9jYXRpb25IYW5kbGVyIHByb3h5SGFuZGxlciApCiAgICAgewogICAgICAgICB0aGlzLm1vZHVsZUluc3RhbmNlID0gbW9kdWxlSW5zdGFuY2U7CiAgICAgICAgIHRoaXMubmV4dCA9IG5leHQ7CiAgICAgICAgIHRoaXMucHJveHlIYW5kbGVyID0gcHJveHlIYW5kbGVyOwogICAgIH0KIAotICAgIHB1YmxpYyBJbmplY3Rpb25Db250ZXh0KCBNb2R1bGVJbnN0YW5jZSBtb2R1bGVJbnN0YW5jZSwgVXNlc0luc3RhbmNlIHVzZXMgKQorICAgIHB1YmxpYyBJbmplY3Rpb25Db250ZXh0KCBNb2R1bGVTcGkgbW9kdWxlSW5zdGFuY2UsIFVzZXNJbnN0YW5jZSB1c2VzICkKICAgICB7CiAgICAgICAgIHRoaXMubW9kdWxlSW5zdGFuY2UgPSBtb2R1bGVJbnN0YW5jZTsKICAgICAgICAgdGhpcy51c2VzID0gdXNlczsKICAgICB9CiAKICAgICAvLyBGb3IgaW5uZXIgY2xhc3NlcwotICAgIHB1YmxpYyBJbmplY3Rpb25Db250ZXh0KCBNb2R1bGVJbnN0YW5jZSBtb2R1bGVJbnN0YW5jZSwgVXNlc0luc3RhbmNlIHVzZXMsIE9iamVjdCBpbnN0YW5jZSApCisgICAgcHVibGljIEluamVjdGlvbkNvbnRleHQoIE1vZHVsZVNwaSBtb2R1bGVJbnN0YW5jZSwgVXNlc0luc3RhbmNlIHVzZXMsIE9iamVjdCBpbnN0YW5jZSApCiAgICAgewogICAgICAgICB0aGlzLm1vZHVsZUluc3RhbmNlID0gbW9kdWxlSW5zdGFuY2U7CiAgICAgICAgIHRoaXMudXNlcyA9IHVzZXM7CiAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBwdWJsaWMgTW9kdWxlSW5zdGFuY2UgbW9kdWxlKCkKKyAgICBwdWJsaWMgTW9kdWxlU3BpIG1vZHVsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbW9kdWxlSW5zdGFuY2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vUGFyYW1ldGVyaXplZFR5cGVJbnN0YW5jZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vUGFyYW1ldGVyaXplZFR5cGVJbnN0YW5jZS5qYXZhCmluZGV4IDk2M2Q4NzguLjBmZTI1MGMgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL1BhcmFtZXRlcml6ZWRUeXBlSW5zdGFuY2UuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9QYXJhbWV0ZXJpemVkVHlwZUluc3RhbmNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5pbmplY3Rpb247CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5QYXJhbWV0ZXJpemVkVHlwZTsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL3Byb3ZpZGVyL0ludm9jYXRpb25JbmplY3Rpb25Qcm92aWRlckZhY3RvcnkuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL3Byb3ZpZGVyL0ludm9jYXRpb25JbmplY3Rpb25Qcm92aWRlckZhY3RvcnkuamF2YQppbmRleCA4NzgwYjk4Li5lMTJmZDkxIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9wcm92aWRlci9JbnZvY2F0aW9uSW5qZWN0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vcHJvdmlkZXIvSW52b2NhdGlvbkluamVjdGlvblByb3ZpZGVyRmFjdG9yeS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuaW5qZWN0aW9uLnByb3ZpZGVyOwogCiBpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL3Byb3ZpZGVyL01vZGlmaWVzSW5qZWN0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9wcm92aWRlci9Nb2RpZmllc0luamVjdGlvblByb3ZpZGVyRmFjdG9yeS5qYXZhCmluZGV4IDIzNDhmOTEuLjMxYzRhNzMgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL3Byb3ZpZGVyL01vZGlmaWVzSW5qZWN0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vcHJvdmlkZXIvTW9kaWZpZXNJbmplY3Rpb25Qcm92aWRlckZhY3RvcnkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5wcm92aWRlcjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuQ29tcG9zaXRlRGVzY3JpcHRvcjsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL3Byb3ZpZGVyL1N0cnVjdHVyZUluamVjdGlvblByb3ZpZGVyRmFjdG9yeS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vcHJvdmlkZXIvU3RydWN0dXJlSW5qZWN0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEKaW5kZXggZGQ0NjFlNi4uNmFkNGUzMCAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vcHJvdmlkZXIvU3RydWN0dXJlSW5qZWN0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vcHJvdmlkZXIvU3RydWN0dXJlSW5qZWN0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEKQEAgLTM0LDYgKzM0LDggQEAKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5JbmplY3Rpb25Qcm92aWRlcjsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5JbmplY3Rpb25Qcm92aWRlckZhY3Rvcnk7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5tb2RlbC5SZXNvbHV0aW9uOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZUluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiBwdWJsaWMgZmluYWwgY2xhc3MgU3RydWN0dXJlSW5qZWN0aW9uUHJvdmlkZXJGYWN0b3J5CiAgICAgaW1wbGVtZW50cyBJbmplY3Rpb25Qcm92aWRlckZhY3RvcnkKQEAgLTkzLDE3ICs5NSwyMSBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm1vZHVsZSgpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggTW9kdWxlU3BpLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIGNsYXp6ICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm1vZHVsZSgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiggTGF5ZXIuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggY2xhenogKSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubW9kdWxlKCkubGF5ZXJJbnN0YW5jZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAoKCBNb2R1bGVJbnN0YW5jZSkgY29udGV4dC5tb2R1bGUoKSkubGF5ZXJJbnN0YW5jZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiggQXBwbGljYXRpb24uY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggY2xhenogKSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubW9kdWxlKCkubGF5ZXJJbnN0YW5jZSgpLmFwcGxpY2F0aW9uSW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCggTW9kdWxlSW5zdGFuY2UpIGNvbnRleHQubW9kdWxlKCkpLmxheWVySW5zdGFuY2UoKS5hcHBsaWNhdGlvbkluc3RhbmNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmKCBRaTRqLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIGNsYXp6ICkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm1vZHVsZSgpLmxheWVySW5zdGFuY2UoKS5hcHBsaWNhdGlvbkluc3RhbmNlKCkucnVudGltZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAoKCBNb2R1bGVJbnN0YW5jZSkgY29udGV4dC5tb2R1bGUoKSkubGF5ZXJJbnN0YW5jZSgpLmFwcGxpY2F0aW9uSW5zdGFuY2UoKS5ydW50aW1lKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBudWxsOwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vcHJvdmlkZXIvVGhpc0luamVjdGlvblByb3ZpZGVyRmFjdG9yeS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vcHJvdmlkZXIvVGhpc0luamVjdGlvblByb3ZpZGVyRmFjdG9yeS5qYXZhCmluZGV4IGFjNjQ4ZDguLmMzMTMzMzAgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL3Byb3ZpZGVyL1RoaXNJbmplY3Rpb25Qcm92aWRlckZhY3RvcnkuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9wcm92aWRlci9UaGlzSW5qZWN0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5pbmplY3Rpb24ucHJvdmlkZXI7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL3Byb3ZpZGVyL1VzZXNJbmplY3Rpb25Qcm92aWRlckZhY3RvcnkuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL3Byb3ZpZGVyL1VzZXNJbmplY3Rpb25Qcm92aWRlckZhY3RvcnkuamF2YQppbmRleCA2NWM1OGNkLi4yMDY5ZDA3IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9wcm92aWRlci9Vc2VzSW5qZWN0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vcHJvdmlkZXIvVXNlc0luamVjdGlvblByb3ZpZGVyRmFjdG9yeS5qYXZhCkBAIC0xLDggKzEsMjcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuaW5qZWN0aW9uLnByb3ZpZGVyOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5Ob1N1Y2hUcmFuc2llbnRFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLm9iamVjdC5Ob1N1Y2hPYmplY3RFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkludmFsaWRJbmplY3Rpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuVXNlc0luc3RhbmNlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuaW5qZWN0aW9uLkRlcGVuZGVuY3lNb2RlbDsKQEAgLTUzLDcgKzcyLDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBObyBAVXNlcyBvYmplY3QgcHJvdmlkZWQKICAgICAgICAgICAgICAgICAvLyBUcnkgaW5zdGFudGlhdGluZyBhIFRyYW5zaWVudCBvciBPYmplY3QgZm9yIHRoZSBnaXZlbiB0eXBlCi0gICAgICAgICAgICAgICAgTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UgPSBjb250ZXh0Lm1vZHVsZSgpOworICAgICAgICAgICAgICAgIE1vZHVsZSBtb2R1bGVJbnN0YW5jZSA9IGNvbnRleHQubW9kdWxlKCk7CiAKICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2ludGVybmFsL0FjdGl2YXRvci5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9pbnRlcm5hbC9BY3RpdmF0b3IuamF2YQppbmRleCA0MmFiM2MzLi42NzI1Mjk2IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL2ludGVybmFsL0FjdGl2YXRvci5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW50ZXJuYWwvQWN0aXZhdG9yLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5pbnRlcm5hbDsKIAogaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3I7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3BhY2thZ2UuaHRtbCBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvcGFja2FnZS5odG1sCmluZGV4IDIzMGFhZTEuLjYxMmQxYWUgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvcGFja2FnZS5odG1sCkBAIC0xLDUgKzEsMjEgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+Ci0gICAgICAgIDxoMj5RaTRqIFJ1bnRpbWUuPC9oMj4KKyAgICAgICAgPGgyPkFwYWNoZSBaZXN04oSiIFJ1bnRpbWUuPC9oMj4KICAgICA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3Byb3BlcnR5L1Byb3BlcnR5SW5mby5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9wcm9wZXJ0eS9Qcm9wZXJ0eUluZm8uamF2YQppbmRleCBlZDEyNWYxLi5iOTg2OWRjIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3Byb3BlcnR5L1Byb3BlcnR5SW5mby5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvcHJvcGVydHkvUHJvcGVydHlJbmZvLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5wcm9wZXJ0eTsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlR5cGU7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3Byb3BlcnR5L1Byb3BlcnR5TW9kZWwuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvcHJvcGVydHkvUHJvcGVydHlNb2RlbC5qYXZhCmluZGV4IDIzNWE4NmEuLjJlOGIyY2UgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvcHJvcGVydHkvUHJvcGVydHlNb2RlbC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvcHJvcGVydHkvUHJvcGVydHlNb2RlbC5qYXZhCkBAIC0zMiw2ICszMiw3IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eURlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CitpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuU2VyaWFsaXphdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5WYWx1ZUNvbXBvc2l0ZVR5cGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuVmFsdWVUeXBlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51dGlsLkNsYXNzZXM7CkBAIC0xODksMTYgKzE5MCwzMCBAQAogICAgICAgICBWYWx1ZVR5cGVGYWN0b3J5IGZhY3RvcnkgPSBWYWx1ZVR5cGVGYWN0b3J5Lmluc3RhbmNlKCk7CiAgICAgICAgIENsYXNzPD8+IGRlY2xhcmluZ0NsYXNzID0gKCAoTWVtYmVyKSBhY2Nlc3NvcigpICkuZ2V0RGVjbGFyaW5nQ2xhc3MoKTsKICAgICAgICAgQ2xhc3M8Pz4gbWFpblR5cGUgPSBmaXJzdCggcmVzb2x1dGlvbi5tb2RlbCgpLnR5cGVzKCkgKTsKLSAgICAgICAgdmFsdWVUeXBlID0gZmFjdG9yeS5uZXdWYWx1ZVR5cGUoIHR5cGUoKSwgZGVjbGFyaW5nQ2xhc3MsIG1haW5UeXBlLCByZXNvbHV0aW9uLmxheWVyKCksIHJlc29sdXRpb24ubW9kdWxlKCkgKTsKLQorICAgICAgICBTZXJpYWxpemF0aW9uLlZhcmlhbnQgdmFyaWFudCA9IGZpbmRWYXJpYW50KCk7CisgICAgICAgIHZhbHVlVHlwZSA9IGZhY3RvcnkubmV3VmFsdWVUeXBlKCB0eXBlKCksIGRlY2xhcmluZ0NsYXNzLCBtYWluVHlwZSwgcmVzb2x1dGlvbi5sYXllcigpLCByZXNvbHV0aW9uLm1vZHVsZSgpLCB2YXJpYW50ICk7CiAgICAgICAgIGJ1aWxkZXJJbmZvID0gbmV3IEJ1aWxkZXJQcm9wZXJ0eUluZm8oKTsKLQogICAgICAgICBpZiggdHlwZSBpbnN0YW5jZW9mIFR5cGVWYXJpYWJsZSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHR5cGUgPSBDbGFzc2VzLnJlc29sdmVUeXBlVmFyaWFibGUoIChUeXBlVmFyaWFibGUpIHR5cGUsIGRlY2xhcmluZ0NsYXNzLCBtYWluVHlwZSApOwogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBTZXJpYWxpemF0aW9uLlZhcmlhbnQgZmluZFZhcmlhbnQoKQorICAgIHsKKyAgICAgICAgU2VyaWFsaXphdGlvbiBzZXJpYWxpemF0aW9uID0gbWV0YUluZm8uZ2V0KCBTZXJpYWxpemF0aW9uLmNsYXNzICk7CisgICAgICAgIFNlcmlhbGl6YXRpb24uVmFyaWFudCB2YXJpYW50ID0gbnVsbDsKKyAgICAgICAgaWYoIHNlcmlhbGl6YXRpb24gIT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhcmlhbnQgPSBzZXJpYWxpemF0aW9uLnZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYoIHZhcmlhbnQgPT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhcmlhbnQgPSBTZXJpYWxpemF0aW9uLlZhcmlhbnQuZW50cnk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhcmlhbnQ7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIDxUaHJvd2FibGVUeXBlIGV4dGVuZHMgVGhyb3dhYmxlPiBib29sZWFuIGFjY2VwdCggVmlzaXRvcjw/IHN1cGVyIFByb3BlcnR5TW9kZWwsIFRocm93YWJsZVR5cGU+IHZpc2l0b3IgKQogICAgICAgICB0aHJvd3MgVGhyb3dhYmxlVHlwZQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zZXJ2aWNlL0ltcG9ydGVkU2VydmljZVJlZmVyZW5jZUluc3RhbmNlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3NlcnZpY2UvSW1wb3J0ZWRTZXJ2aWNlUmVmZXJlbmNlSW5zdGFuY2UuamF2YQppbmRleCA0ZTc5MmRmLi4xNWY2NWNkIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3NlcnZpY2UvSW1wb3J0ZWRTZXJ2aWNlUmVmZXJlbmNlSW5zdGFuY2UuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3NlcnZpY2UvSW1wb3J0ZWRTZXJ2aWNlUmVmZXJlbmNlSW5zdGFuY2UuamF2YQpAQCAtMjgsNyArMjgsNiBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmFjdGl2YXRpb24uQWN0aXZhdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiAvKioKICAqIEltcGxlbWVudGF0aW9uIG9mIFNlcnZpY2VSZWZlcmVuY2UuIFRoaXMgbWFuYWdlcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBpbXBvcnRlZCBzZXJ2aWNlLgpAQCAtMTM1LDggKzEzNCw2IEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIFNlcnZpY2VJbXBvcnRlckV4Y2VwdGlvbiBleCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCBnZXRDbGFzcygpICkKLSAgICAgICAgICAgICAgICAud2FybiggIkltcG9ydGVkIHNlcnZpY2UgdGhyb3dlZCBhbiBleGNlcHRpb24gb24gaXNBdmFpbGFibGUoKSwgd2lsbCByZXR1cm4gZmFsc2UuIiwgZXggKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL0FwcGxpY2F0aW9uSW5zdGFuY2UuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL0FwcGxpY2F0aW9uSW5zdGFuY2UuamF2YQppbmRleCA4ZDIyMGZiLi4wYWYxMDkyIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9BcHBsaWNhdGlvbkluc3RhbmNlLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvQXBwbGljYXRpb25JbnN0YW5jZS5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5hY3RpdmF0aW9uLkFjdGl2YXRpb25EZWxlZ2F0ZTsKIAogLyoqCi0gKiBJbnN0YW5jZSBvZiBhIFFpNGogYXBwbGljYXRpb24uIENvbnRhaW5zIGEgbGlzdCBvZiBsYXllcnMgd2hpY2ggYXJlIG1hbmFnZWQgYnkgdGhpcyBhcHBsaWNhdGlvbgorICogSW5zdGFuY2Ugb2YgYSBaZXN0IGFwcGxpY2F0aW9uLiBDb250YWlucyBhIGxpc3Qgb2YgbGF5ZXJzIHdoaWNoIGFyZSBtYW5hZ2VkIGJ5IHRoaXMgYXBwbGljYXRpb24KICAqLwogcHVibGljIGNsYXNzIEFwcGxpY2F0aW9uSW5zdGFuY2UKICAgICBpbXBsZW1lbnRzIEFwcGxpY2F0aW9uCmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9MYXllckluc3RhbmNlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9MYXllckluc3RhbmNlLmphdmEKaW5kZXggOWVkNzdiYi4uNDlkODNjYyAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvTGF5ZXJJbnN0YW5jZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL0xheWVySW5zdGFuY2UuamF2YQpAQCAtMjAsMjAgKzIwLDIxIEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmFjdGl2YXRpb24uQWN0aXZhdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuYWN0aXZhdGlvbi5QYXNzaXZhdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHk7CitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5UcmFuc2llbnREZXNjcmlwdG9yOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkub2JqZWN0Lk9iamVjdERlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZVJlZmVyZW5jZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkxheWVyOworaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZURlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmFjdGl2YXRpb24uQWN0aXZhdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlRyYW5zaWVudE1vZGVsOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuZW50aXR5LkVudGl0eU1vZGVsOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUub2JqZWN0Lk9iamVjdE1vZGVsOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUudmFsdWUuVmFsdWVNb2RlbDsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZGVsTW9kdWxlOwogCiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLmZsYXR0ZW5JdGVyYWJsZXM7CiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLm1hcDsKIAogLyoqCi0gKiBJbnN0YW5jZSBvZiBhIFFpNGogYXBwbGljYXRpb24gbGF5ZXIuIENvbnRhaW5zIGEgbGlzdCBvZiBtb2R1bGVzIHdoaWNoIGFyZSBtYW5hZ2VkIGJ5IHRoaXMgbGF5ZXIuCisgKiBJbnN0YW5jZSBvZiBhIFplc3QgYXBwbGljYXRpb24gbGF5ZXIuIENvbnRhaW5zIGEgbGlzdCBvZiBtb2R1bGVzIHdoaWNoIGFyZSBtYW5hZ2VkIGJ5IHRoaXMgbGF5ZXIuCiAgKi8KIHB1YmxpYyBjbGFzcyBMYXllckluc3RhbmNlCiAgICAgaW1wbGVtZW50cyBMYXllcgpAQCAtNDksNyArNTAsOCBAQAogCiAgICAgcHVibGljIExheWVySW5zdGFuY2UoIExheWVyTW9kZWwgbW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5zdGFuY2UgYXBwbGljYXRpb25JbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZExheWVyc0luc3RhbmNlIHVzZWRMYXllcnNJbnN0YW5jZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWRMYXllcnNJbnN0YW5jZSB1c2VkTGF5ZXJzSW5zdGFuY2UKKyAgICApCiAgICAgewogICAgICAgICAvLyBDb25zdHJ1Y3RvciBwYXJhbWV0ZXJzCiAgICAgICAgIHRoaXMubGF5ZXJNb2RlbCA9IG1vZGVsOwpAQCAtMTMwLDU5ICsxMzIsNTUgQEAKICAgICAgICAgcmV0dXJuIHVzZWRMYXllcnNJbnN0YW5jZTsKICAgICB9CiAKLSAgICAvKiBwYWNrYWdlICovIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPE9iamVjdE1vZGVsPj4gdmlzaWJsZU9iamVjdHMoIGZpbmFsIFZpc2liaWxpdHkgdmlzaWJpbGl0eSApCisgICAgLyogcGFja2FnZSAqLyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxPYmplY3REZXNjcmlwdG9yPj4gdmlzaWJsZU9iamVjdHMoIGZpbmFsIFZpc2liaWxpdHkgdmlzaWJpbGl0eSApCiAgICAgewotICAgICAgICByZXR1cm4gZmxhdHRlbkl0ZXJhYmxlcyggbWFwKCBuZXcgRnVuY3Rpb248TW9kdWxlSW5zdGFuY2UsIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPE9iamVjdE1vZGVsPj4+KCkKKyAgICAgICAgcmV0dXJuIGZsYXR0ZW5JdGVyYWJsZXMoIG1hcCggbmV3IEZ1bmN0aW9uPE1vZHVsZUluc3RhbmNlLCBJdGVyYWJsZTxNb2RlbE1vZHVsZTxPYmplY3REZXNjcmlwdG9yPj4+KCkKICAgICAgICAgewogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxPYmplY3RNb2RlbD4+IG1hcCggTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UgKQorICAgICAgICAgICAgcHVibGljIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPE9iamVjdERlc2NyaXB0b3I+PiBtYXAoIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlSW5zdGFuY2UudmlzaWJsZU9iamVjdHMoIHZpc2liaWxpdHkgKTsKICAgICAgICAgICAgIH0KLQogICAgICAgICB9LCBtb2R1bGVJbnN0YW5jZXMgKSApOwogICAgIH0KIAotICAgIC8qIHBhY2thZ2UgKi8gSXRlcmFibGU8TW9kZWxNb2R1bGU8VHJhbnNpZW50TW9kZWw+PiB2aXNpYmxlVHJhbnNpZW50cyggZmluYWwgVmlzaWJpbGl0eSB2aXNpYmlsaXR5ICkKKyAgICAvKiBwYWNrYWdlICovIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudERlc2NyaXB0b3I+PiB2aXNpYmxlVHJhbnNpZW50cyggZmluYWwgVmlzaWJpbGl0eSB2aXNpYmlsaXR5ICkKICAgICB7Ci0gICAgICAgIHJldHVybiBmbGF0dGVuSXRlcmFibGVzKCBtYXAoIG5ldyBGdW5jdGlvbjxNb2R1bGVJbnN0YW5jZSwgSXRlcmFibGU8TW9kZWxNb2R1bGU8VHJhbnNpZW50TW9kZWw+Pj4oKQorICAgICAgICByZXR1cm4gZmxhdHRlbkl0ZXJhYmxlcyggbWFwKCBuZXcgRnVuY3Rpb248TW9kdWxlSW5zdGFuY2UsIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudERlc2NyaXB0b3I+Pj4oKQogICAgICAgICB7CiAKICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudE1vZGVsPj4gbWFwKCBNb2R1bGVJbnN0YW5jZSBtb2R1bGVJbnN0YW5jZSApCisgICAgICAgICAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8VHJhbnNpZW50RGVzY3JpcHRvcj4+IG1hcCggTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVJbnN0YW5jZS52aXNpYmxlVHJhbnNpZW50cyggdmlzaWJpbGl0eSApOwogICAgICAgICAgICAgfQotCiAgICAgICAgIH0sIG1vZHVsZUluc3RhbmNlcyApICk7CiAgICAgfQogCi0gICAgLyogcGFja2FnZSAqLyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxFbnRpdHlNb2RlbD4+IHZpc2libGVFbnRpdGllcyggZmluYWwgVmlzaWJpbGl0eSB2aXNpYmlsaXR5ICkKKyAgICAvKiBwYWNrYWdlICovIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPEVudGl0eURlc2NyaXB0b3I+PiB2aXNpYmxlRW50aXRpZXMoIGZpbmFsIFZpc2liaWxpdHkgdmlzaWJpbGl0eSApCiAgICAgewotICAgICAgICByZXR1cm4gZmxhdHRlbkl0ZXJhYmxlcyggbWFwKCBuZXcgRnVuY3Rpb248TW9kdWxlSW5zdGFuY2UsIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPEVudGl0eU1vZGVsPj4+KCkKKyAgICAgICAgcmV0dXJuIGZsYXR0ZW5JdGVyYWJsZXMoIG1hcCggbmV3IEZ1bmN0aW9uPE1vZHVsZUluc3RhbmNlLCBJdGVyYWJsZTxNb2RlbE1vZHVsZTxFbnRpdHlEZXNjcmlwdG9yPj4+KCkKICAgICAgICAgewogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxFbnRpdHlNb2RlbD4+IG1hcCggTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2UgKQorICAgICAgICAgICAgcHVibGljIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPEVudGl0eURlc2NyaXB0b3I+PiBtYXAoIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlSW5zdGFuY2UudmlzaWJsZUVudGl0aWVzKCB2aXNpYmlsaXR5ICk7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgfSwgbW9kdWxlSW5zdGFuY2VzICkgKTsKICAgICB9CiAKLSAgICAvKiBwYWNrYWdlICovIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFZhbHVlTW9kZWw+PiB2aXNpYmxlVmFsdWVzKCBmaW5hbCBWaXNpYmlsaXR5IHZpc2liaWxpdHkgKQorICAgIC8qIHBhY2thZ2UgKi8gSXRlcmFibGU8TW9kZWxNb2R1bGU8VmFsdWVEZXNjcmlwdG9yPj4gdmlzaWJsZVZhbHVlcyggZmluYWwgVmlzaWJpbGl0eSB2aXNpYmlsaXR5ICkKICAgICB7Ci0gICAgICAgIHJldHVybiBmbGF0dGVuSXRlcmFibGVzKCBtYXAoIG5ldyBGdW5jdGlvbjxNb2R1bGVJbnN0YW5jZSwgSXRlcmFibGU8TW9kZWxNb2R1bGU8VmFsdWVNb2RlbD4+PigpCisgICAgICAgIHJldHVybiBmbGF0dGVuSXRlcmFibGVzKCBtYXAoIG5ldyBGdW5jdGlvbjxNb2R1bGVJbnN0YW5jZSwgSXRlcmFibGU8TW9kZWxNb2R1bGU8VmFsdWVEZXNjcmlwdG9yPj4+KCkKICAgICAgICAgewogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxWYWx1ZU1vZGVsPj4gbWFwKCBNb2R1bGVJbnN0YW5jZSBtb2R1bGVJbnN0YW5jZSApCisgICAgICAgICAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8VmFsdWVEZXNjcmlwdG9yPj4gbWFwKCBNb2R1bGVJbnN0YW5jZSBtb2R1bGVJbnN0YW5jZSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUluc3RhbmNlLnZpc2libGVWYWx1ZXMoIHZpc2liaWxpdHkgKTsKICAgICAgICAgICAgIH0KLQogICAgICAgICB9LCBtb2R1bGVJbnN0YW5jZXMgKSApOwogICAgIH0KIApAQCAtMTk2LDcgKzE5NCw2IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUluc3RhbmNlLnZpc2libGVTZXJ2aWNlcyggdmlzaWJpbGl0eSApOwogICAgICAgICAgICAgfQotCiAgICAgICAgIH0sIG1vZHVsZUluc3RhbmNlcyApICk7CiAgICAgfQogCkBAIC0yMTIsNSArMjA5LDQgQEAKIAogICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiTm8gc3VjaCBtb2R1bGU6IiArIG1vZHVsZU5hbWUgKTsKICAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL01vZGVsTW9kdWxlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9Nb2RlbE1vZHVsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTc4N2EwLi4wMDAwMDAwCi0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL01vZGVsTW9kdWxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlOwotCi1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5Nb2RlbERlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKLQotLyoqCi0gKiBUT0RPCi0gKi8KLXB1YmxpYyBjbGFzcyBNb2RlbE1vZHVsZTxUIGV4dGVuZHMgTW9kZWxEZXNjcmlwdG9yPgotewotICAgIHB1YmxpYyBzdGF0aWMgPFQgZXh0ZW5kcyBNb2RlbERlc2NyaXB0b3I+IEZ1bmN0aW9uPFQsIE1vZGVsTW9kdWxlPFQ+PiBtb2RlbE1vZHVsZUZ1bmN0aW9uKCBmaW5hbCBNb2R1bGVJbnN0YW5jZSBtb2R1bGUgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxULCBNb2RlbE1vZHVsZTxUPj4oKQotICAgICAgICB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBNb2RlbE1vZHVsZTxUPiBtYXAoIFQgbW9kZWwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxNb2R1bGU8PiggbW9kdWxlLCBtb2RlbCApOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgPFQgZXh0ZW5kcyBNb2RlbERlc2NyaXB0b3I+IEZ1bmN0aW9uPE1vZGVsTW9kdWxlPFQ+LCBUPiBtb2RlbEZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb248TW9kZWxNb2R1bGU8VD4sIFQ+KCkKLSAgICAgICAgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgVCBtYXAoIE1vZGVsTW9kdWxlPFQ+IG1vZGVsTW9kdWxlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWxNb2R1bGUubW9kZWwoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1vZHVsZUluc3RhbmNlIG1vZHVsZTsKLSAgICBwcml2YXRlIGZpbmFsIFQgbW9kZWw7Ci0KLSAgICBwdWJsaWMgTW9kZWxNb2R1bGUoIE1vZHVsZUluc3RhbmNlIG1vZHVsZSwgVCBtb2RlbCApCi0gICAgewotICAgICAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKLSAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsOwotICAgIH0KLQotICAgIHB1YmxpYyBNb2R1bGVJbnN0YW5jZSBtb2R1bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVCBtb2RlbCgpCi0gICAgewotICAgICAgICByZXR1cm4gbW9kZWw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKCBPYmplY3QgbyApCi0gICAgewotICAgICAgICBpZiggdGhpcyA9PSBvICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoIG8gPT0gbnVsbCB8fCBnZXRDbGFzcygpICE9IG8uZ2V0Q2xhc3MoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIE1vZGVsTW9kdWxlIHRoYXQgPSAoTW9kZWxNb2R1bGUpIG87Ci0KLSAgICAgICAgaWYoIG1vZGVsICE9IG51bGwgPyAhbW9kZWwuZXF1YWxzKCB0aGF0Lm1vZGVsICkgOiB0aGF0Lm1vZGVsICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gISggbW9kdWxlICE9IG51bGwgPyAhbW9kdWxlLmVxdWFscyggdGhhdC5tb2R1bGUgKSA6IHRoYXQubW9kdWxlICE9IG51bGwgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgICB7Ci0gICAgICAgIGludCByZXN1bHQgPSBtb2R1bGUgIT0gbnVsbCA/IG1vZHVsZS5oYXNoQ29kZSgpIDogMDsKLSAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyAoIG1vZGVsICE9IG51bGwgPyBtb2RlbC5oYXNoQ29kZSgpIDogMCApOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZS5uYW1lKCkgKyAiOiIgKyBtb2RlbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9Nb2R1bGVJbnN0YW5jZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvTW9kdWxlSW5zdGFuY2UuamF2YQppbmRleCBjMDA5Yzc1Li4xNjEyMDg5IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9Nb2R1bGVJbnN0YW5jZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL01vZHVsZUluc3RhbmNlLmphdmEKQEAgLTUwLDYgKzUwLDcgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkucXVlcnkuUXVlcnlCdWlsZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5xdWVyeS5RdWVyeUJ1aWxkZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLk5vU3VjaFNlcnZpY2VFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZURlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZVJlZmVyZW5jZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKIGltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrOwpAQCAtNjksNiArNzAsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuU3BlY2lmaWNhdGlvbnM7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5hY3RpdmF0aW9uLkFjdGl2YXRpb25EZWxlZ2F0ZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5GdW5jdGlvblN0YXRlUmVzb2x2ZXI7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuU3RhdGVSZXNvbHZlcjsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5UcmFuc2llbnRCdWlsZGVySW5zdGFuY2U7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuVHJhbnNpZW50TW9kZWw7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuVHJhbnNpZW50U3RhdGVJbnN0YW5jZTsKQEAgLTg4LDcgKzkwLDYgQEAKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnNlcnZpY2UuU2VydmljZXNJbnN0YW5jZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnNlcnZpY2UuU2VydmljZXNNb2RlbDsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnVuaXRvZndvcmsuVW5pdE9mV29ya0luc3RhbmNlOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlN0YXRlUmVzb2x2ZXI7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS52YWx1ZS5WYWx1ZUJ1aWxkZXJJbnN0YW5jZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnZhbHVlLlZhbHVlQnVpbGRlcldpdGhQcm90b3R5cGU7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS52YWx1ZS5WYWx1ZUJ1aWxkZXJXaXRoU3RhdGU7CkBAIC05Nyw4ICs5OCwxMyBAQAogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUudmFsdWUuVmFsdWVzTW9kZWw7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5tZXRyaWNzLk1ldHJpY3NQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2RlbE1vZHVsZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZHVsZVNwaTsKIGltcG9ydCBvcmcucWk0ai52YWx1ZXNlcmlhbGl6YXRpb24ub3JnanNvbi5PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uOwogCitpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eS5hcHBsaWNhdGlvbjsKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5LmxheWVyOworaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHkubW9kdWxlOwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5hcGkudXRpbC5DbGFzc2VzLlJBV19DTEFTUzsKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouYXBpLnV0aWwuQ2xhc3Nlcy5tb2RlbFR5cGVTcGVjaWZpY2F0aW9uOwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5jYXN0OwpAQCAtMTEwLDEwICsxMTYsMTAgQEAKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMudG9MaXN0OwogCiAvKioKLSAqIEluc3RhbmNlIG9mIGEgUWk0aiBNb2R1bGUuIENvbnRhaW5zIHRoZSB2YXJpb3VzIGNvbXBvc2l0ZXMgZm9yIHRoaXMgTW9kdWxlLgorICogSW5zdGFuY2Ugb2YgYSBaZXN0IE1vZHVsZS4gQ29udGFpbnMgdGhlIHZhcmlvdXMgY29tcG9zaXRlcyBmb3IgdGhpcyBNb2R1bGUuCiAgKi8KIHB1YmxpYyBjbGFzcyBNb2R1bGVJbnN0YW5jZQotICAgIGltcGxlbWVudHMgTW9kdWxlLCBBY3RpdmF0aW9uCisgICAgaW1wbGVtZW50cyBNb2R1bGUsIE1vZHVsZVNwaSwgQWN0aXZhdGlvbgogewogICAgIC8vIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMKICAgICBwcml2YXRlIGZpbmFsIE1vZHVsZU1vZGVsIG1vZGVsOwpAQCAtMTM5LDcgKzE0NSw4IEBACiAgICAgQFN1cHByZXNzV2FybmluZ3MoICJMZWFraW5nVGhpc0luQ29uc3RydWN0b3IiICkKICAgICBwdWJsaWMgTW9kdWxlSW5zdGFuY2UoIE1vZHVsZU1vZGVsIG1vZHVsZU1vZGVsLCBMYXllckluc3RhbmNlIGxheWVySW5zdGFuY2UsIFRyYW5zaWVudHNNb2RlbCB0cmFuc2llbnRzTW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdGllc01vZGVsIGVudGl0aWVzTW9kZWwsIE9iamVjdHNNb2RlbCBvYmplY3RzTW9kZWwsIFZhbHVlc01vZGVsIHZhbHVlc01vZGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZXNNb2RlbCBzZXJ2aWNlc01vZGVsLCBJbXBvcnRlZFNlcnZpY2VzTW9kZWwgaW1wb3J0ZWRTZXJ2aWNlc01vZGVsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VzTW9kZWwgc2VydmljZXNNb2RlbCwgSW1wb3J0ZWRTZXJ2aWNlc01vZGVsIGltcG9ydGVkU2VydmljZXNNb2RlbAorICAgICkKICAgICB7CiAgICAgICAgIC8vIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMKICAgICAgICAgbW9kZWwgPSBtb2R1bGVNb2RlbDsKQEAgLTM2MCw3ICszNjcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb248UHJvcGVydHlEZXNjcmlwdG9yLCBPYmplY3Q+IHByb3BlcnR5RnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEVudGl0eVJlZmVyZW5jZT4gYXNzb2NpYXRpb25GdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uPEFzc29jaWF0aW9uRGVzY3JpcHRvciwgSXRlcmFibGU8RW50aXR5UmVmZXJlbmNlPj4gbWFueUFzc29jaWF0aW9uRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+IG5hbWVkQXNzb2NpYXRpb25GdW5jdGlvbiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+IG5hbWVkQXNzb2NpYXRpb25GdW5jdGlvbgorICAgICkKICAgICB7CiAgICAgICAgIE51bGxBcmd1bWVudEV4Y2VwdGlvbi52YWxpZGF0ZU5vdE51bGwoICJwcm9wZXJ0eUZ1bmN0aW9uIiwgcHJvcGVydHlGdW5jdGlvbiApOwogICAgICAgICBOdWxsQXJndW1lbnRFeGNlcHRpb24udmFsaWRhdGVOb3ROdWxsKCAiYXNzb2NpYXRpb25GdW5jdGlvbiIsIGFzc29jaWF0aW9uRnVuY3Rpb24gKTsKQEAgLTM4Myw5ICszOTEsOSBAQAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEluaXRpYWxTdGF0ZVJlc29sdmVyCiAgICAgICAgIGltcGxlbWVudHMgU3RhdGVSZXNvbHZlcgogICAgIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNb2R1bGVJbnN0YW5jZSBtb2R1bGU7CisgICAgICAgIHByaXZhdGUgZmluYWwgTW9kdWxlIG1vZHVsZTsKIAotICAgICAgICBwcml2YXRlIEluaXRpYWxTdGF0ZVJlc29sdmVyKCBNb2R1bGVJbnN0YW5jZSBtb2R1bGUgKQorICAgICAgICBwcml2YXRlIEluaXRpYWxTdGF0ZVJlc29sdmVyKCBNb2R1bGUgbW9kdWxlICkKICAgICAgICAgewogICAgICAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CiAgICAgICAgIH0KQEAgLTU2Nyw3ICs1NzUsNiBAQAogICAgICAgICBhY3RpdmF0aW9uLmRlcmVnaXN0ZXJBY3RpdmF0aW9uRXZlbnRMaXN0ZW5lciggbGlzdGVuZXIgKTsKICAgICB9CiAKLQogICAgIC8vIE90aGVyIG1ldGhvZHMKICAgICAvKiBwYWNrYWdlICovIE1vZHVsZU1vZGVsIG1vZGVsKCkKICAgICB7CkBAIC02MjQsNyArNjMxLDcgQEAKICAgICAgICAgcmV0dXJuIHN0b3JlOwogICAgIH0KIAotICAgIC8qIHBhY2thZ2UgKi8gSWRlbnRpdHlHZW5lcmF0b3IgaWRlbnRpdHlHZW5lcmF0b3IoKQorICAgIHB1YmxpYyBJZGVudGl0eUdlbmVyYXRvciBpZGVudGl0eUdlbmVyYXRvcigpCiAgICAgewogICAgICAgICBzeW5jaHJvbml6ZWQoIHRoaXMgKQogICAgICAgICB7CkBAIC02NzcsMzEgKzY4NCwzMSBAQAogICAgICAgICByZXR1cm4gbWV0cmljczsKICAgICB9CiAKLSAgICBJdGVyYWJsZTxNb2RlbE1vZHVsZTxPYmplY3RNb2RlbD4+IHZpc2libGVPYmplY3RzKCBWaXNpYmlsaXR5IHZpc2liaWxpdHkgKQorICAgIHB1YmxpYyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxPYmplY3REZXNjcmlwdG9yPj4gdmlzaWJsZU9iamVjdHMoIFZpc2liaWxpdHkgdmlzaWJpbGl0eSApCiAgICAgewotICAgICAgICByZXR1cm4gbWFwKCBNb2RlbE1vZHVsZS48T2JqZWN0TW9kZWw+bW9kZWxNb2R1bGVGdW5jdGlvbiggdGhpcyApLAorICAgICAgICByZXR1cm4gbWFwKCBNb2RlbE1vZHVsZS48T2JqZWN0RGVzY3JpcHRvcj5tb2RlbE1vZHVsZUZ1bmN0aW9uKCB0aGlzICksCiAgICAgICAgICAgICAgICAgICAgIGZpbHRlciggbmV3IFZpc2liaWxpdHlTcGVjaWZpY2F0aW9uKCB2aXNpYmlsaXR5ICksIG9iamVjdHMubW9kZWxzKCkgKSApOwogICAgIH0KIAotICAgIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudE1vZGVsPj4gdmlzaWJsZVRyYW5zaWVudHMoIFZpc2liaWxpdHkgdmlzaWJpbGl0eSApCisgICAgcHVibGljIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudERlc2NyaXB0b3I+PiB2aXNpYmxlVHJhbnNpZW50cyggVmlzaWJpbGl0eSB2aXNpYmlsaXR5ICkKICAgICB7Ci0gICAgICAgIHJldHVybiBtYXAoIE1vZGVsTW9kdWxlLjxUcmFuc2llbnRNb2RlbD5tb2RlbE1vZHVsZUZ1bmN0aW9uKCB0aGlzICksCisgICAgICAgIHJldHVybiBtYXAoIE1vZGVsTW9kdWxlLjxUcmFuc2llbnREZXNjcmlwdG9yPm1vZGVsTW9kdWxlRnVuY3Rpb24oIHRoaXMgKSwKICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCBuZXcgVmlzaWJpbGl0eVNwZWNpZmljYXRpb24oIHZpc2liaWxpdHkgKSwgdHJhbnNpZW50cy5tb2RlbHMoKSApICk7CiAgICAgfQogCi0gICAgSXRlcmFibGU8TW9kZWxNb2R1bGU8RW50aXR5TW9kZWw+PiB2aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkgdmlzaWJpbGl0eSApCisgICAgcHVibGljIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPEVudGl0eURlc2NyaXB0b3I+PiB2aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkgdmlzaWJpbGl0eSApCiAgICAgewotICAgICAgICByZXR1cm4gbWFwKCBNb2RlbE1vZHVsZS48RW50aXR5TW9kZWw+bW9kZWxNb2R1bGVGdW5jdGlvbiggdGhpcyApLAorICAgICAgICByZXR1cm4gbWFwKCBNb2RlbE1vZHVsZS48RW50aXR5RGVzY3JpcHRvcj5tb2RlbE1vZHVsZUZ1bmN0aW9uKCB0aGlzICksCiAgICAgICAgICAgICAgICAgICAgIGZpbHRlciggbmV3IFZpc2liaWxpdHlTcGVjaWZpY2F0aW9uKCB2aXNpYmlsaXR5ICksIGVudGl0aWVzLm1vZGVscygpICkgKTsKICAgICB9CiAKLSAgICBJdGVyYWJsZTxNb2RlbE1vZHVsZTxWYWx1ZU1vZGVsPj4gdmlzaWJsZVZhbHVlcyggVmlzaWJpbGl0eSB2aXNpYmlsaXR5ICkKKyAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8VmFsdWVEZXNjcmlwdG9yPj4gdmlzaWJsZVZhbHVlcyggVmlzaWJpbGl0eSB2aXNpYmlsaXR5ICkKICAgICB7Ci0gICAgICAgIHJldHVybiBtYXAoIE1vZGVsTW9kdWxlLjxWYWx1ZU1vZGVsPm1vZGVsTW9kdWxlRnVuY3Rpb24oIHRoaXMgKSwKKyAgICAgICAgcmV0dXJuIG1hcCggTW9kZWxNb2R1bGUuPFZhbHVlRGVzY3JpcHRvcj5tb2RlbE1vZHVsZUZ1bmN0aW9uKCB0aGlzICksCiAgICAgICAgICAgICAgICAgICAgIGZpbHRlciggbmV3IFZpc2liaWxpdHlTcGVjaWZpY2F0aW9uKCB2aXNpYmlsaXR5ICksIHZhbHVlcy5tb2RlbHMoKSApICk7CiAgICAgfQogCi0gICAgSXRlcmFibGU8U2VydmljZVJlZmVyZW5jZTw/Pj4gdmlzaWJsZVNlcnZpY2VzKCBWaXNpYmlsaXR5IHZpc2liaWxpdHkgKQorICAgIHB1YmxpYyBJdGVyYWJsZTxTZXJ2aWNlUmVmZXJlbmNlPD8+PiB2aXNpYmxlU2VydmljZXMoIFZpc2liaWxpdHkgdmlzaWJpbGl0eSApCiAgICAgewogICAgICAgICByZXR1cm4gZmxhdHRlbiggc2VydmljZXMudmlzaWJsZVNlcnZpY2VzKCB2aXNpYmlsaXR5ICksCiAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNlcnZpY2VzLnZpc2libGVTZXJ2aWNlcyggdmlzaWJpbGl0eSApICk7CkBAIC04MjQsNCArODMxLDQ2IEBACiAgICAgICAgICAgICByZXR1cm4gY2xheno7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8VmFsdWVEZXNjcmlwdG9yPj4gZmluZFZpc2libGVWYWx1ZVR5cGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmbGF0dGVuKCB2aXNpYmxlVmFsdWVzKCBWaXNpYmlsaXR5Lm1vZHVsZSApLAorICAgICAgICAgICAgbGF5ZXJJbnN0YW5jZSgpLnZpc2libGVWYWx1ZXMoIFZpc2liaWxpdHkubGF5ZXIgKSwKKyAgICAgICAgICAgIGxheWVySW5zdGFuY2UoKS52aXNpYmxlVmFsdWVzKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICksCisgICAgICAgICAgICBsYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZVZhbHVlcygpCisgICAgICAgICk7CisgICAgfQorCisgICAgcHVibGljIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPEVudGl0eURlc2NyaXB0b3I+PiBmaW5kVmlzaWJsZUVudGl0eVR5cGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmbGF0dGVuKCB2aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkubW9kdWxlICksCisgICAgICAgICAgICBsYXllckluc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCBWaXNpYmlsaXR5LmxheWVyICksCisgICAgICAgICAgICBsYXllckluc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICksCisgICAgICAgICAgICBsYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCkKKyAgICAgICAgKTsKKyAgICB9CisgICAgcHVibGljIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudERlc2NyaXB0b3I+PiBmaW5kVmlzaWJsZVRyYW5zaWVudFR5cGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmbGF0dGVuKCB2aXNpYmxlVHJhbnNpZW50cyggVmlzaWJpbGl0eS5tb2R1bGUgKSwKKyAgICAgICAgICAgIGxheWVySW5zdGFuY2UoKS52aXNpYmxlVHJhbnNpZW50cyggVmlzaWJpbGl0eS5sYXllciApLAorICAgICAgICAgICAgbGF5ZXJJbnN0YW5jZSgpLnZpc2libGVUcmFuc2llbnRzKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICksCisgICAgICAgICAgICBsYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZVRyYW5zaWVudHMoKQorICAgICAgICApOworICAgIH0KKyAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8U2VydmljZURlc2NyaXB0b3I+PiBmaW5kVmlzaWJsZVNlcnZpY2VUeXBlcygpCisgICAgeworICAgICAgICByZXR1cm4gZmxhdHRlbiggdmlzaWJsZVNlcnZpY2VzKCBWaXNpYmlsaXR5Lm1vZHVsZSApLAorICAgICAgICAgICAgbGF5ZXJJbnN0YW5jZSgpLnZpc2libGVTZXJ2aWNlcyggVmlzaWJpbGl0eS5sYXllciApLAorICAgICAgICAgICAgbGF5ZXJJbnN0YW5jZSgpLnZpc2libGVTZXJ2aWNlcyggVmlzaWJpbGl0eS5hcHBsaWNhdGlvbiApLAorICAgICAgICAgICAgbGF5ZXJJbnN0YW5jZSgpLnVzZWRMYXllcnNJbnN0YW5jZSgpLnZpc2libGVTZXJ2aWNlcygpCisgICAgICAgICk7CisgICAgfQorICAgIHB1YmxpYyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxPYmplY3REZXNjcmlwdG9yPj4gZmluZFZpc2libGVPYmplY3RUeXBlcygpCisgICAgeworICAgICAgICByZXR1cm4gZmxhdHRlbiggdmlzaWJsZU9iamVjdHMoIFZpc2liaWxpdHkubW9kdWxlICksCisgICAgICAgICAgICBsYXllckluc3RhbmNlKCkudmlzaWJsZU9iamVjdHMoIFZpc2liaWxpdHkubGF5ZXIgKSwKKyAgICAgICAgICAgIGxheWVySW5zdGFuY2UoKS52aXNpYmxlT2JqZWN0cyggVmlzaWJpbGl0eS5hcHBsaWNhdGlvbiApLAorICAgICAgICAgICAgbGF5ZXJJbnN0YW5jZSgpLnVzZWRMYXllcnNJbnN0YW5jZSgpLnZpc2libGVPYmplY3RzKCkKKyAgICAgICAgKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9Nb2R1bGVVbml0T2ZXb3JrLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9Nb2R1bGVVbml0T2ZXb3JrLmphdmEKaW5kZXggZGQxYTgzMC4uOTk4OWY2NSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvTW9kdWxlVW5pdE9mV29yay5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL01vZHVsZVVuaXRPZldvcmsuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDksIFJpY2thcmQgw5ZiZXJnLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDEzLCBOaWNsYXMgSGVkaG1hbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE1LCBOaWNsYXMgSGVkaG1hbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE1LCBQYXVsIE1lcmxpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE2LDkgKzE2LDExIEBACiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlOwogCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbkRlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uU3RhdGVIb2xkZXI7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5RdWFsaWZpZWROYW1lOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5QnVpbGRlcjsKQEAgLTI3LDcgKzI5LDkgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LklkZW50aXR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHlHZW5lcmF0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5MaWZlY3ljbGVFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlN0YXRlSG9sZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5xdWVyeS5RdWVyeTsKIGltcG9ydCBvcmcucWk0ai5hcGkucXVlcnkuUXVlcnlCdWlsZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5xdWVyeS5RdWVyeUV4ZWN1dGlvbkV4Y2VwdGlvbjsKQEAgLTQyLDE5ICs0NiwyNiBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtGYWN0b3J5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2U7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnV0aWwuTnVsbEFyZ3VtZW50RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZUJ1aWxkZXI7CitpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuRnVuY3Rpb247CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXM7CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5TcGVjaWZpY2F0aW9uOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uQXNzb2NpYXRpb25JbnN0YW5jZTsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmFzc29jaWF0aW9uLk1hbnlBc3NvY2lhdGlvbkluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uTmFtZWRBc3NvY2lhdGlvbkluc3RhbmNlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLkZ1bmN0aW9uU3RhdGVSZXNvbHZlcjsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmVudGl0eS5FbnRpdHlJbnN0YW5jZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmVudGl0eS5FbnRpdHlNb2RlbDsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnByb3BlcnR5LlByb3BlcnR5TW9kZWw7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS51bml0b2Z3b3JrLkVudGl0eUJ1aWxkZXJJbnN0YW5jZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnVuaXRvZndvcmsuVW5pdE9mV29ya0luc3RhbmNlOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlN0YXRlUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS52YWx1ZS5WYWx1ZVN0YXRlTW9kZWw7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS52YWx1ZS5WYWx1ZUluc3RhbmNlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0dXM7CitpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5OYW1lZEFzc29jaWF0aW9uU3RhdGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kZWxNb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLnF1ZXJ5LkVudGl0eUZpbmRlcjsKIGltcG9ydCBvcmcucWk0ai5zcGkucXVlcnkuRW50aXR5RmluZGVyRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5xdWVyeS5RdWVyeUJ1aWxkZXJTUEk7CkBAIC02Miw2ICs3Myw3IEBACiAKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2U7CiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLmZpcnN0OworaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5tYXA7CiAKIC8qKgogICogSkFWQURPQwpAQCAtNzksMjIgKzkxLDIyIEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlICkKICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoICJRaTRqIENvcmUgUnVudGltZSBjb2RlYmFzZSBpcyBjb3JydXB0ZWQuIENvbnRhY3QgUWk0aiB0ZWFtOiBNb2R1bGVVbml0T2ZXb3JrIiApOworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoICJaZXN0IENvcmUgUnVudGltZSBjb2RlYmFzZSBpcyBjb3JydXB0ZWQuIENvbnRhY3QgWmVzdCB0ZWFtOiBNb2R1bGVVbml0T2ZXb3JrIiApOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBmaW5hbCBVbml0T2ZXb3JrSW5zdGFuY2UgdW93OwotICAgIHByaXZhdGUgZmluYWwgTW9kdWxlSW5zdGFuY2UgbW9kdWxlSW5zdGFuY2U7CisgICAgcHJpdmF0ZSBmaW5hbCBNb2R1bGVJbnN0YW5jZSBtb2R1bGU7CiAKLSAgICBNb2R1bGVVbml0T2ZXb3JrKCBNb2R1bGVJbnN0YW5jZSBtb2R1bGVJbnN0YW5jZSwgVW5pdE9mV29ya0luc3RhbmNlIHVvdyApCisgICAgTW9kdWxlVW5pdE9mV29yayggTW9kdWxlSW5zdGFuY2UgbW9kdWxlLCBVbml0T2ZXb3JrSW5zdGFuY2UgdW93ICkKICAgICB7Ci0gICAgICAgIHRoaXMubW9kdWxlSW5zdGFuY2UgPSBtb2R1bGVJbnN0YW5jZTsKKyAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CiAgICAgICAgIHRoaXMudW93ID0gdW93OwogICAgIH0KIAogICAgIHB1YmxpYyBNb2R1bGVJbnN0YW5jZSBtb2R1bGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZUluc3RhbmNlOworICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgIH0KIAogICAgIHB1YmxpYyBVbml0T2ZXb3JrSW5zdGFuY2UgaW5zdGFuY2UoKQpAQCAtMTA1LDcgKzExNyw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFVuaXRPZldvcmtGYWN0b3J5IHVuaXRPZldvcmtGYWN0b3J5KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtb2R1bGVJbnN0YW5jZTsKKyAgICAgICAgcmV0dXJuIG1vZHVsZTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTEzMyw3ICsxNDUsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCB7InJhdyIsICJ1bmNoZWNrZWQifSApCisgICAgQFN1cHByZXNzV2FybmluZ3MoIHsgInJhdyIsICJ1bmNoZWNrZWQiIH0gKQogICAgIHB1YmxpYyA8VD4gUXVlcnk8VD4gbmV3UXVlcnkoIFF1ZXJ5QnVpbGRlcjxUPiBxdWVyeUJ1aWxkZXIgKQogICAgIHsKICAgICAgICAgUXVlcnlCdWlsZGVyU1BJIHF1ZXJ5QnVpbGRlclNQSSA9IChRdWVyeUJ1aWxkZXJTUEkpIHF1ZXJ5QnVpbGRlcjsKQEAgLTE2NiwxMSArMTc4LDE1IEBACiAgICAgcHVibGljIDxUPiBFbnRpdHlCdWlsZGVyPFQ+IG5ld0VudGl0eUJ1aWxkZXIoIENsYXNzPFQ+IHR5cGUsIFN0cmluZyBpZGVudGl0eSApCiAgICAgICAgIHRocm93cyBFbnRpdHlUeXBlTm90Rm91bmRFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIE1vZGVsTW9kdWxlPEVudGl0eU1vZGVsPiBtb2RlbCA9IG1vZHVsZUluc3RhbmNlLnR5cGVMb29rdXAoKS5sb29rdXBFbnRpdHlNb2RlbCggdHlwZSApOworICAgICAgICBNb2RlbE1vZHVsZTxFbnRpdHlNb2RlbD4gbW9kZWwgPSBtb2R1bGUudHlwZUxvb2t1cCgpLmxvb2t1cEVudGl0eU1vZGVsKCB0eXBlICk7CiAKICAgICAgICAgaWYoIG1vZGVsID09IG51bGwgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uKCB0eXBlLmdldE5hbWUoKSApOworICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbiggdHlwZS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUubmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCBNb2RlbE1vZHVsZS50b1N0cmluZ0Z1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZmluZFZpc2libGVFbnRpdHlUeXBlcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICk7CiAgICAgICAgIH0KIAogICAgICAgICBFbnRpdHlTdG9yZSBlbnRpdHlTdG9yZSA9IG1vZGVsLm1vZHVsZSgpLmVudGl0eVN0b3JlKCk7CkBAIC0xODksNyArMjA1LDcgQEAKIAogICAgICAgICBidWlsZGVyID0gbmV3IEVudGl0eUJ1aWxkZXJJbnN0YW5jZTw+KCBtb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW93LmdldEVudGl0eVN0b3JlVW5pdE9mV29yayggZW50aXR5U3RvcmUsIG1vZHVsZUluc3RhbmNlICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVvdy5nZXRFbnRpdHlTdG9yZVVuaXRPZldvcmsoIGVudGl0eVN0b3JlLCBtb2R1bGUgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHkgKTsKICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CiAgICAgfQpAQCAtMjI2LDE2ICsyNDIsMjAgQEAKICAgICAgICAgTnVsbEFyZ3VtZW50RXhjZXB0aW9uLnZhbGlkYXRlTm90TnVsbCggIm1hbnlBc3NvY2lhdGlvbkZ1bmN0aW9uIiwgbWFueUFzc29jaWF0aW9uRnVuY3Rpb24gKTsKICAgICAgICAgTnVsbEFyZ3VtZW50RXhjZXB0aW9uLnZhbGlkYXRlTm90TnVsbCggIm5hbWVkQXNzb2NpYXRpb25GdW5jdGlvbiIsIG5hbWVkQXNzb2NpYXRpb25GdW5jdGlvbiApOwogCi0gICAgICAgIE1vZGVsTW9kdWxlPEVudGl0eU1vZGVsPiBtb2RlbCA9IG1vZHVsZUluc3RhbmNlLnR5cGVMb29rdXAoKS5sb29rdXBFbnRpdHlNb2RlbCggdHlwZSApOworICAgICAgICBNb2RlbE1vZHVsZTxFbnRpdHlNb2RlbD4gbW9kZWwgPSBtb2R1bGUudHlwZUxvb2t1cCgpLmxvb2t1cEVudGl0eU1vZGVsKCB0eXBlICk7CiAKICAgICAgICAgaWYoIG1vZGVsID09IG51bGwgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uKCB0eXBlLmdldE5hbWUoKSApOworICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbiggdHlwZS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUubmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCBNb2RlbE1vZHVsZS50b1N0cmluZ0Z1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZmluZFZpc2libGVFbnRpdHlUeXBlcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICk7CiAgICAgICAgIH0KIAogICAgICAgICBFbnRpdHlTdG9yZSBlbnRpdHlTdG9yZSA9IG1vZGVsLm1vZHVsZSgpLmVudGl0eVN0b3JlKCk7CiAKLSAgICAgICAgU3RhdGVSZXNvbHZlciBzdGF0ZVJlc29sdmVyID0gbmV3IEZ1bmN0aW9uU3RhdGVSZXNvbHZlcigKKyAgICAgICAgRnVuY3Rpb25TdGF0ZVJlc29sdmVyIHN0YXRlUmVzb2x2ZXIgPSBuZXcgRnVuY3Rpb25TdGF0ZVJlc29sdmVyKAogICAgICAgICAgICAgcHJvcGVydHlGdW5jdGlvbiwgYXNzb2NpYXRpb25GdW5jdGlvbiwgbWFueUFzc29jaWF0aW9uRnVuY3Rpb24sIG5hbWVkQXNzb2NpYXRpb25GdW5jdGlvbgogICAgICAgICApOwogCkBAIC0yNTgsNyArMjc4LDcgQEAKIAogICAgICAgICByZXR1cm4gbmV3IEVudGl0eUJ1aWxkZXJJbnN0YW5jZTw+KCBtb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW93LmdldEVudGl0eVN0b3JlVW5pdE9mV29yayggZW50aXR5U3RvcmUsIG1vZHVsZUluc3RhbmNlICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVvdy5nZXRFbnRpdHlTdG9yZVVuaXRPZldvcmsoIGVudGl0eVN0b3JlLCBtb2R1bGUgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlUmVzb2x2ZXIgKTsKICAgICB9CkBAIC0yNjcsMTEgKzI4NywxNSBAQAogICAgIHB1YmxpYyA8VD4gVCBnZXQoIENsYXNzPFQ+IHR5cGUsIFN0cmluZyBpZGVudGl0eSApCiAgICAgICAgIHRocm93cyBFbnRpdHlUeXBlTm90Rm91bmRFeGNlcHRpb24sIE5vU3VjaEVudGl0eUV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgSXRlcmFibGU8TW9kZWxNb2R1bGU8RW50aXR5TW9kZWw+PiBtb2RlbHMgPSBtb2R1bGVJbnN0YW5jZS50eXBlTG9va3VwKCkubG9va3VwRW50aXR5TW9kZWxzKCB0eXBlICk7CisgICAgICAgIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPEVudGl0eU1vZGVsPj4gbW9kZWxzID0gbW9kdWxlLnR5cGVMb29rdXAoKS5sb29rdXBFbnRpdHlNb2RlbHMoIHR5cGUgKTsKIAogICAgICAgICBpZiggIW1vZGVscy5pdGVyYXRvcigpLmhhc05leHQoKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlUeXBlTm90Rm91bmRFeGNlcHRpb24oIHR5cGUuZ2V0TmFtZSgpICk7CisgICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uKCB0eXBlLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoIE1vZGVsTW9kdWxlLnRvU3RyaW5nRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5maW5kVmlzaWJsZUVudGl0eVR5cGVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB1b3cuZ2V0KCBwYXJzZUVudGl0eVJlZmVyZW5jZSggaWRlbnRpdHkgKSwgdGhpcywgbW9kZWxzLCB0eXBlICk7CkBAIC0zMTAsMTAgKzMzNCwxMSBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbiggY29tcG9zaXRlSW5zdGFuY2UuaWRlbnRpdHkoKSwgY29tcG9zaXRlSW5zdGFuY2UudHlwZXMoKSApOworICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbiggY29tcG9zaXRlSW5zdGFuY2UuaWRlbnRpdHkoKSwgY29tcG9zaXRlSW5zdGFuY2UudHlwZXMoKSwgdXNlY2FzZSgpICk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAU3VwcHJlc3NXYXJuaW5ncyggIkR1cGxpY2F0ZVRocm93cyIgKQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGNvbXBsZXRlKCkKICAgICAgICAgdGhyb3dzIFVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uLCBDb25jdXJyZW50RW50aXR5TW9kaWZpY2F0aW9uRXhjZXB0aW9uCkBAIC0zMzIsNyArMzU3LDcgQEAKICAgICB7CiAgICAgICAgIGRpc2NhcmQoKTsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBpc09wZW4oKQogICAgIHsKQEAgLTQwMyw2ICs0MjgsNTUgQEAKICAgICAgICAgdW93LmFkZEVudGl0eSggaW5zdGFuY2UgKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgPFQgZXh0ZW5kcyBJZGVudGl0eT4gVCB0b1ZhbHVlKCBDbGFzczxUPiBwcmltYXJ5VHlwZSwgVCBlbnRpdHlDb21wb3NpdGUgKQorICAgIHsKKyAgICAgICAgRnVuY3Rpb248UHJvcGVydHlEZXNjcmlwdG9yLCBPYmplY3Q+IHByb3BlcnR5RnVuY3Rpb24gPSBuZXcgVG9WYWx1ZVByb3BlcnR5TWFwcGluZ0Z1bmN0aW9uKCBlbnRpdHlDb21wb3NpdGUgKTsKKyAgICAgICAgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBFbnRpdHlSZWZlcmVuY2U+IGFzc29jYXRpb25GdW5jdGlvbiA9IG5ldyBUb1ZhbHVlQXNzb2NpYXRpb25NYXBwaW5nRnVuY3Rpb248PiggZW50aXR5Q29tcG9zaXRlICk7CisgICAgICAgIEZ1bmN0aW9uPEFzc29jaWF0aW9uRGVzY3JpcHRvciwgSXRlcmFibGU8RW50aXR5UmVmZXJlbmNlPj4gbWFueUFzc29jRnVuY3Rpb24gPSBuZXcgVG9WYWx1ZU1hbnlBc3NvY2lhdGlvbk1hcHBpbmdGdW5jdGlvbjw+KCBlbnRpdHlDb21wb3NpdGUgKTsKKyAgICAgICAgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+PiBuYW1lZEFzc29jRnVuY3Rpb24gPSBuZXcgVG9WYWx1ZU5hbWVBc3NvY2lhdGlvbk1hcHBpbmdGdW5jdGlvbjw+KCBlbnRpdHlDb21wb3NpdGUgKTsKKworICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQorICAgICAgICBWYWx1ZUJ1aWxkZXI8VD4gYnVpbGRlciA9IG1vZHVsZSgpLm5ld1ZhbHVlQnVpbGRlcldpdGhTdGF0ZSgKKyAgICAgICAgICAgIHByaW1hcnlUeXBlLCBwcm9wZXJ0eUZ1bmN0aW9uLCBhc3NvY2F0aW9uRnVuY3Rpb24sIG1hbnlBc3NvY0Z1bmN0aW9uLCBuYW1lZEFzc29jRnVuY3Rpb24gKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgPFQgZXh0ZW5kcyBJZGVudGl0eT4gVCB0b0VudGl0eSggQ2xhc3M8VD4gcHJpbWFyeVR5cGUsIFQgdmFsdWVDb21wb3NpdGUgKQorICAgIHsKKyAgICAgICAgRnVuY3Rpb248UHJvcGVydHlEZXNjcmlwdG9yLCBPYmplY3Q+IHByb3BlcnR5RnVuY3Rpb24gPSBuZXcgVG9FbnRpdHlQcm9wZXJ0eU1hcHBpbmdGdW5jdGlvbjw+KCB2YWx1ZUNvbXBvc2l0ZSApOworICAgICAgICBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEVudGl0eVJlZmVyZW5jZT4gYXNzb2NhdGlvbkZ1bmN0aW9uID0gbmV3IFRvRW50aXR5QXNzb2NpYXRpb25NYXBwaW5nRnVuY3Rpb248PiggdmFsdWVDb21wb3NpdGUgKTsKKyAgICAgICAgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+PiBtYW55QXNzb2NGdW5jdGlvbiA9IG5ldyBUb0VudGl0eU1hbnlBc3NvY2lhdGlvbk1hcHBpbmdGdW5jdGlvbjw+KCB2YWx1ZUNvbXBvc2l0ZSApOworICAgICAgICBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+IG5hbWVkQXNzb2NGdW5jdGlvbiA9IG5ldyBUb0VudGl0eU5hbWVBc3NvY2lhdGlvbk1hcHBpbmdGdW5jdGlvbjw+KCB2YWx1ZUNvbXBvc2l0ZSApOworCisgICAgICAgIFN0cmluZyBpZGVudGl0eSA9IHZhbHVlQ29tcG9zaXRlLmlkZW50aXR5KCkuZ2V0KCk7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBUIGVudGl0eSA9IGdldCggcHJpbWFyeVR5cGUsIGlkZW50aXR5ICk7CisgICAgICAgICAgICAvLyBJZiBzdWNjZXNzZnVsLCB0aGVuIHRoaXMgZW50aXR5IGlzIHRvIGJ5IG1vZGlmaWVkLgorICAgICAgICAgICAgRW50aXR5SW5zdGFuY2UgaW5zdGFuY2UgPSBFbnRpdHlJbnN0YW5jZS5lbnRpdHlJbnN0YW5jZU9mKCAoRW50aXR5Q29tcG9zaXRlKSBlbnRpdHkgKTsKKyAgICAgICAgICAgIEVudGl0eVN0YXRlIHN0YXRlID0gaW5zdGFuY2UuZW50aXR5U3RhdGUoKTsKKyAgICAgICAgICAgIEZ1bmN0aW9uU3RhdGVSZXNvbHZlciBzdGF0ZVJlc29sdmVyID0gbmV3IEZ1bmN0aW9uU3RhdGVSZXNvbHZlciggcHJvcGVydHlGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NhdGlvbkZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW55QXNzb2NGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRBc3NvY0Z1bmN0aW9uICk7CisgICAgICAgICAgICBFbnRpdHlNb2RlbCBtb2RlbCA9IChFbnRpdHlNb2RlbCkgRW50aXR5SW5zdGFuY2UuZW50aXR5SW5zdGFuY2VPZiggKEVudGl0eUNvbXBvc2l0ZSkgZW50aXR5ICkuZGVzY3JpcHRvcigpOworICAgICAgICAgICAgc3RhdGVSZXNvbHZlci5wb3B1bGF0ZVN0YXRlKCBtb2RlbCwgc3RhdGUgKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRpdHk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goIE5vU3VjaEVudGl0eUV4Y2VwdGlvbiBlICkKKyAgICAgICAgeworICAgICAgICAgICAgRW50aXR5QnVpbGRlcjxUPiBlbnRpdHlCdWlsZGVyID0gbmV3RW50aXR5QnVpbGRlcldpdGhTdGF0ZSggcHJpbWFyeVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5RnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY2F0aW9uRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW55QXNzb2NGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVkQXNzb2NGdW5jdGlvbiApOworICAgICAgICAgICAgcmV0dXJuIGVudGl0eUJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFVvV1F1ZXJ5U291cmNlIGltcGxlbWVudHMgUXVlcnlTb3VyY2UKICAgICB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgTW9kdWxlVW5pdE9mV29yayBtb2R1bGVVbml0T2ZXb3JrOwpAQCAtNTMzLDQgKzYwNywxNjcgQEAKICAgICAgICAgICAgIHJldHVybiAiVW5pdE9mV29yayggIiArIG1vZHVsZVVuaXRPZldvcmsudXNlY2FzZSgpLm5hbWUoKSArICIgKSI7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFRvVmFsdWVQcm9wZXJ0eU1hcHBpbmdGdW5jdGlvbgorICAgICAgICBpbXBsZW1lbnRzIEZ1bmN0aW9uPFByb3BlcnR5RGVzY3JpcHRvciwgT2JqZWN0PgorICAgIHsKKyAgICAgICAgcHJpdmF0ZSBPYmplY3QgZW50aXR5OworCisgICAgICAgIHB1YmxpYyBUb1ZhbHVlUHJvcGVydHlNYXBwaW5nRnVuY3Rpb24oIE9iamVjdCBlbnRpdHkgKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgT2JqZWN0IG1hcCggUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5RGVzY3JpcHRvciApCisgICAgICAgIHsKKyAgICAgICAgICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gRW50aXR5SW5zdGFuY2UuZW50aXR5SW5zdGFuY2VPZiggKEVudGl0eUNvbXBvc2l0ZSkgZW50aXR5ICkuZW50aXR5U3RhdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRpdHlTdGF0ZS5wcm9wZXJ0eVZhbHVlT2YoIHByb3BlcnR5RGVzY3JpcHRvci5xdWFsaWZpZWROYW1lKCkgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgVG9WYWx1ZUFzc29jaWF0aW9uTWFwcGluZ0Z1bmN0aW9uPFQ+CisgICAgICAgIGltcGxlbWVudHMgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBFbnRpdHlSZWZlcmVuY2U+CisgICAgeworICAgICAgICBwcml2YXRlIGZpbmFsIFQgZW50aXR5OworCisgICAgICAgIHB1YmxpYyBUb1ZhbHVlQXNzb2NpYXRpb25NYXBwaW5nRnVuY3Rpb24oIFQgZW50aXR5ICkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIEVudGl0eVJlZmVyZW5jZSBtYXAoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBhc3NvY2lhdGlvbkRlc2NyaXB0b3IgKQorICAgICAgICB7CisgICAgICAgICAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IEVudGl0eUluc3RhbmNlLmVudGl0eUluc3RhbmNlT2YoIChFbnRpdHlDb21wb3NpdGUpIGVudGl0eSApLmVudGl0eVN0YXRlKCk7CisgICAgICAgICAgICByZXR1cm4gZW50aXR5U3RhdGUuYXNzb2NpYXRpb25WYWx1ZU9mKCBhc3NvY2lhdGlvbkRlc2NyaXB0b3IucXVhbGlmaWVkTmFtZSgpICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFRvVmFsdWVNYW55QXNzb2NpYXRpb25NYXBwaW5nRnVuY3Rpb248VD4KKyAgICAgICAgaW1wbGVtZW50cyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEl0ZXJhYmxlPEVudGl0eVJlZmVyZW5jZT4+CisgICAgeworICAgICAgICBwcml2YXRlIGZpbmFsIFQgZW50aXR5OworCisgICAgICAgIHB1YmxpYyBUb1ZhbHVlTWFueUFzc29jaWF0aW9uTWFwcGluZ0Z1bmN0aW9uKCBUIGVudGl0eSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+IG1hcCggQXNzb2NpYXRpb25EZXNjcmlwdG9yIGFzc29jaWF0aW9uRGVzY3JpcHRvciApCisgICAgICAgIHsKKyAgICAgICAgICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gRW50aXR5SW5zdGFuY2UuZW50aXR5SW5zdGFuY2VPZiggKEVudGl0eUNvbXBvc2l0ZSkgZW50aXR5ICkuZW50aXR5U3RhdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRpdHlTdGF0ZS5tYW55QXNzb2NpYXRpb25WYWx1ZU9mKCBhc3NvY2lhdGlvbkRlc2NyaXB0b3IucXVhbGlmaWVkTmFtZSgpICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFRvVmFsdWVOYW1lQXNzb2NpYXRpb25NYXBwaW5nRnVuY3Rpb248VD4KKyAgICAgICAgaW1wbGVtZW50cyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+CisgICAgeworICAgICAgICBwcml2YXRlIGZpbmFsIFQgZW50aXR5OworCisgICAgICAgIHB1YmxpYyBUb1ZhbHVlTmFtZUFzc29jaWF0aW9uTWFwcGluZ0Z1bmN0aW9uKCBUIGVudGl0eSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+IG1hcCggQXNzb2NpYXRpb25EZXNjcmlwdG9yIGFzc29jaWF0aW9uRGVzY3JpcHRvciApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSBFbnRpdHlJbnN0YW5jZS5lbnRpdHlJbnN0YW5jZU9mKCAoRW50aXR5Q29tcG9zaXRlKSBlbnRpdHkgKS5lbnRpdHlTdGF0ZSgpOworICAgICAgICAgICAgZmluYWwgTmFtZWRBc3NvY2lhdGlvblN0YXRlIHN0YXRlID0gZW50aXR5U3RhdGUubmFtZWRBc3NvY2lhdGlvblZhbHVlT2YoIGFzc29jaWF0aW9uRGVzY3JpcHRvci5xdWFsaWZpZWROYW1lKCkgKTsKKyAgICAgICAgICAgIGZvciggU3RyaW5nIG5hbWUgOiBzdGF0ZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnB1dCggbmFtZSwgc3RhdGUuZ2V0KCBuYW1lICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFRvRW50aXR5UHJvcGVydHlNYXBwaW5nRnVuY3Rpb248VD4KKyAgICAgICAgaW1wbGVtZW50cyBGdW5jdGlvbjxQcm9wZXJ0eURlc2NyaXB0b3IsIE9iamVjdD4KKyAgICB7CisgICAgICAgIHByaXZhdGUgZmluYWwgVCB2YWx1ZTsKKworICAgICAgICBwdWJsaWMgVG9FbnRpdHlQcm9wZXJ0eU1hcHBpbmdGdW5jdGlvbiggVCB2YWx1ZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgT2JqZWN0IG1hcCggUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5RGVzY3JpcHRvciApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXRlSG9sZGVyIHN0YXRlID0gVmFsdWVJbnN0YW5jZS52YWx1ZUluc3RhbmNlT2YoIChWYWx1ZUNvbXBvc2l0ZSkgdmFsdWUgKS5zdGF0ZSgpOworICAgICAgICAgICAgUHJvcGVydHk8T2JqZWN0PiBwcm9wZXJ0eSA9IHN0YXRlLnByb3BlcnR5Rm9yKCBwcm9wZXJ0eURlc2NyaXB0b3IuYWNjZXNzb3IoKSApOworICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5LmdldCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBUb0VudGl0eUFzc29jaWF0aW9uTWFwcGluZ0Z1bmN0aW9uPFQ+CisgICAgICAgIGltcGxlbWVudHMgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBFbnRpdHlSZWZlcmVuY2U+CisgICAgeworCisgICAgICAgIHByaXZhdGUgZmluYWwgVCB2YWx1ZTsKKworICAgICAgICBwdWJsaWMgVG9FbnRpdHlBc3NvY2lhdGlvbk1hcHBpbmdGdW5jdGlvbiggVCB2YWx1ZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIG1hcCggQXNzb2NpYXRpb25EZXNjcmlwdG9yIGFzc29jaWF0aW9uRGVzY3JpcHRvciApCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc29jaWF0aW9uU3RhdGVIb2xkZXIgc3RhdGUgPSBWYWx1ZUluc3RhbmNlLnZhbHVlSW5zdGFuY2VPZiggKFZhbHVlQ29tcG9zaXRlKSB2YWx1ZSApLnN0YXRlKCk7CisgICAgICAgICAgICBBc3NvY2lhdGlvbkluc3RhbmNlPFQ+IGFzc29jaWF0aW9uID0gKEFzc29jaWF0aW9uSW5zdGFuY2U8VD4pIHN0YXRlLmFzc29jaWF0aW9uRm9yKCBhc3NvY2lhdGlvbkRlc2NyaXB0b3IuYWNjZXNzb3IoKSApOworICAgICAgICAgICAgcmV0dXJuIGFzc29jaWF0aW9uLmdldEFzc29jaWF0aW9uU3RhdGUoKS5nZXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgVG9FbnRpdHlNYW55QXNzb2NpYXRpb25NYXBwaW5nRnVuY3Rpb248VD4KKyAgICAgICAgaW1wbGVtZW50cyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEl0ZXJhYmxlPEVudGl0eVJlZmVyZW5jZT4+CisgICAgeworCisgICAgICAgIHByaXZhdGUgZmluYWwgVCB2YWx1ZTsKKworICAgICAgICBwdWJsaWMgVG9FbnRpdHlNYW55QXNzb2NpYXRpb25NYXBwaW5nRnVuY3Rpb24oIFQgdmFsdWVDb21wb3NpdGUgKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVDb21wb3NpdGU7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIEl0ZXJhYmxlPEVudGl0eVJlZmVyZW5jZT4gbWFwKCBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgYXNzb2NpYXRpb25EZXNjcmlwdG9yICkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzb2NpYXRpb25TdGF0ZUhvbGRlciBzdGF0ZSA9IFZhbHVlSW5zdGFuY2UudmFsdWVJbnN0YW5jZU9mKCAoVmFsdWVDb21wb3NpdGUpIHZhbHVlICkuc3RhdGUoKTsKKyAgICAgICAgICAgIE1hbnlBc3NvY2lhdGlvbkluc3RhbmNlPFQ+IGFzc29jaWF0aW9uID0KKyAgICAgICAgICAgICAgICAoTWFueUFzc29jaWF0aW9uSW5zdGFuY2U8VD4pIHN0YXRlLm1hbnlBc3NvY2lhdGlvbkZvciggYXNzb2NpYXRpb25EZXNjcmlwdG9yLmFjY2Vzc29yKCkgKTsKKyAgICAgICAgICAgIHJldHVybiBhc3NvY2lhdGlvbi5nZXRNYW55QXNzb2NpYXRpb25TdGF0ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBUb0VudGl0eU5hbWVBc3NvY2lhdGlvbk1hcHBpbmdGdW5jdGlvbjxUPgorICAgICAgICBpbXBsZW1lbnRzIEZ1bmN0aW9uPEFzc29jaWF0aW9uRGVzY3JpcHRvciwgTWFwPFN0cmluZywgRW50aXR5UmVmZXJlbmNlPj4KKyAgICB7CisgICAgICAgIHByaXZhdGUgZmluYWwgVCB2YWx1ZTsKKworICAgICAgICBwdWJsaWMgVG9FbnRpdHlOYW1lQXNzb2NpYXRpb25NYXBwaW5nRnVuY3Rpb24oIFQgdmFsdWVDb21wb3NpdGUgKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVDb21wb3NpdGU7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4gbWFwKCBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgYXNzb2NpYXRpb25EZXNjcmlwdG9yICkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzb2NpYXRpb25TdGF0ZUhvbGRlciBzdGF0ZSA9IFZhbHVlSW5zdGFuY2UudmFsdWVJbnN0YW5jZU9mKCAoVmFsdWVDb21wb3NpdGUpIHZhbHVlICkuc3RhdGUoKTsKKyAgICAgICAgICAgIE5hbWVkQXNzb2NpYXRpb25JbnN0YW5jZTxUPiBhc3NvY2lhdGlvbiA9CisgICAgICAgICAgICAgICAgKE5hbWVkQXNzb2NpYXRpb25JbnN0YW5jZTxUPikgc3RhdGUubmFtZWRBc3NvY2lhdGlvbkZvciggYXNzb2NpYXRpb25EZXNjcmlwdG9yLmFjY2Vzc29yKCkgKTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+IHJlc3VsdCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFN0cmluZywgRW50aXR5UmVmZXJlbmNlPiBlbnRyeSA6IGFzc29jaWF0aW9uLmdldEVudGl0eVJlZmVyZW5jZXMoKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnB1dCggZW50cnkuZ2V0S2V5KCksIGVudHJ5LmdldFZhbHVlKCkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9UeXBlTG9va3VwLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9UeXBlTG9va3VwLmphdmEKaW5kZXggMTM4M2NlOC4uOTFiNDlmZiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvVHlwZUxvb2t1cC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL1R5cGVMb29rdXAuamF2YQpAQCAtMjcsNyArMjcsNiBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudEhhc2hNYXA7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuQW1iaWd1b3VzVHlwZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLk1vZGVsRGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5Ob1N1Y2hTZXJ2aWNlRXhjZXB0aW9uOwpAQCAtMzksNyArMzgsMTEgQEAKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmVudGl0eS5FbnRpdHlNb2RlbDsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLm9iamVjdC5PYmplY3RNb2RlbDsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnZhbHVlLlZhbHVlTW9kZWw7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2RlbE1vZHVsZTsKIAoraW1wb3J0IHN0YXRpYyBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHkuYXBwbGljYXRpb247CitpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eS5sYXllcjsKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5Lm1vZHVsZTsKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouYXBpLnV0aWwuQ2xhc3Nlcy5SQVdfQ0xBU1M7CiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmFwaS51dGlsLkNsYXNzZXMuaW50ZXJmYWNlc09mOwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5jYXN0OwpAQCAtOTksOCArMTAyLDkgQEAKICAgICAgKgogICAgICAqIDxwPlR5cGUgbG9va3VwIGlzIGRvbmUgbGF6aWx5IGFuZCBjYWNoZWQuPC9wPgogICAgICAqCi0gICAgICogQHBhcmFtIHR5cGUgIExvb2tlZCB1cCBUeXBlCi0gICAgICogQHJldHVybiAgICAgIEZpcnN0IG1hdGNoaW5nIE9iamVjdCBNb2RlbAorICAgICAqIEBwYXJhbSB0eXBlIExvb2tlZCB1cCBUeXBlCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEZpcnN0IG1hdGNoaW5nIE9iamVjdCBNb2RlbAogICAgICAqLwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCB7ICJyYXciLCAidW5jaGVja2VkIiB9ICkKICAgICAvKiBwYWNrYWdlICovIE1vZGVsTW9kdWxlPE9iamVjdE1vZGVsPiBsb29rdXBPYmplY3RNb2RlbCggZmluYWwgQ2xhc3MgdHlwZSApCkBAIC0xMTMsMTYgKzExNywyMCBAQAogICAgICAgICAgICAgSXRlcmFibGU8TW9kZWxNb2R1bGU8T2JqZWN0TW9kZWw+PiBmbGF0dGVuID0gZmxhdHRlbigKICAgICAgICAgICAgICAgICBhbWJpZ3VvdXNUeXBlQ2hlY2soIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kTW9kZWxzKCBuZXcgRXhhY3RUeXBlTG9va3VwU3BlY2lmaWNhdGlvbiggdHlwZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UudmlzaWJsZU9iamVjdHMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZU9iamVjdHMoIFZpc2liaWxpdHkubGF5ZXIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlT2JqZWN0cyggVmlzaWJpbGl0eS5hcHBsaWNhdGlvbiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnVzZWRMYXllcnNJbnN0YW5jZSgpLnZpc2libGVPYmplY3RzKCkgKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UudmlzaWJsZU9iamVjdHMoIG1vZHVsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVPYmplY3RzKCBsYXllciApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVPYmplY3RzKCBhcHBsaWNhdGlvbiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVzZWRMYXllcnNJbnN0YW5jZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZpc2libGVPYmplY3RzKCkgKSApLAogICAgICAgICAgICAgICAgIGFtYmlndW91c1R5cGVDaGVjayggdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRNb2RlbHMoIG5ldyBBc3NpZ25hYmxlVHlwZUxvb2t1cFNwZWNpZmljYXRpb24oIHR5cGUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLnZpc2libGVPYmplY3RzKCBWaXNpYmlsaXR5Lm1vZHVsZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVPYmplY3RzKCBWaXNpYmlsaXR5LmxheWVyICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZU9iamVjdHMoIFZpc2liaWxpdHkuYXBwbGljYXRpb24gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS51c2VkTGF5ZXJzSW5zdGFuY2UoKS52aXNpYmxlT2JqZWN0cygpICkgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UudmlzaWJsZU9iamVjdHMoIG1vZHVsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVPYmplY3RzKCBsYXllciApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVPYmplY3RzKCBhcHBsaWNhdGlvbiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVzZWRMYXllcnNJbnN0YW5jZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZpc2libGVPYmplY3RzKCkgKSApICk7CiAKICAgICAgICAgICAgIG1vZGVsID0gZmlyc3QoIGZsYXR0ZW4gKTsKIApAQCAtMTQ2LDggKzE1NCw5IEBACiAgICAgICoKICAgICAgKiA8cD5UeXBlIGxvb2t1cCBpcyBkb25lIGxhemlseSBhbmQgY2FjaGVkLjwvcD4KICAgICAgKgotICAgICAqIEBwYXJhbSB0eXBlICBMb29rZWQgdXAgVHlwZQotICAgICAqIEByZXR1cm4gICAgICBGaXJzdCBtYXRjaGluZyBUcmFuc2llbnQgTW9kZWwKKyAgICAgKiBAcGFyYW0gdHlwZSBMb29rZWQgdXAgVHlwZQorICAgICAqCisgICAgICogQHJldHVybiBGaXJzdCBtYXRjaGluZyBUcmFuc2llbnQgTW9kZWwKICAgICAgKi8KICAgICBAU3VwcHJlc3NXYXJuaW5ncyggeyAicmF3IiwgInVuY2hlY2tlZCIgfSApCiAgICAgLyogcGFja2FnZSAqLyBNb2RlbE1vZHVsZTxUcmFuc2llbnRNb2RlbD4gbG9va3VwVHJhbnNpZW50TW9kZWwoIGZpbmFsIENsYXNzIHR5cGUgKQpAQCAtMTYwLDE2ICsxNjksMjIgQEAKICAgICAgICAgICAgIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudE1vZGVsPj4gYWxsTW9kZWxzID0gZmxhdHRlbigKICAgICAgICAgICAgICAgICBhbWJpZ3VvdXNUeXBlQ2hlY2soIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kTW9kZWxzKCBuZXcgRXhhY3RUeXBlTG9va3VwU3BlY2lmaWNhdGlvbiggdHlwZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UudmlzaWJsZVRyYW5zaWVudHMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVRyYW5zaWVudHMoIFZpc2liaWxpdHkubGF5ZXIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlVHJhbnNpZW50cyggVmlzaWJpbGl0eS5hcHBsaWNhdGlvbiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnVzZWRMYXllcnNJbnN0YW5jZSgpLnZpc2libGVUcmFuc2llbnRzKCkgKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UudmlzaWJsZVRyYW5zaWVudHMoIG1vZHVsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVUcmFuc2llbnRzKCBsYXllciApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVUcmFuc2llbnRzKCBhcHBsaWNhdGlvbiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnVzZWRMYXllcnNJbnN0YW5jZSgpLnZpc2libGVUcmFuc2llbnRzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApLAorCiAgICAgICAgICAgICAgICAgYW1iaWd1b3VzVHlwZUNoZWNrKCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZE1vZGVscyggbmV3IEFzc2lnbmFibGVUeXBlTG9va3VwU3BlY2lmaWNhdGlvbiggdHlwZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UudmlzaWJsZVRyYW5zaWVudHMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVRyYW5zaWVudHMoIFZpc2liaWxpdHkubGF5ZXIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlVHJhbnNpZW50cyggVmlzaWJpbGl0eS5hcHBsaWNhdGlvbiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnVzZWRMYXllcnNJbnN0YW5jZSgpLnZpc2libGVUcmFuc2llbnRzKCkgKSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlVHJhbnNpZW50cyggbW9kdWxlICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVRyYW5zaWVudHMoIGxheWVyICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVRyYW5zaWVudHMoIGFwcGxpY2F0aW9uICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZVRyYW5zaWVudHMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICk7CiAgICAgICAgICAgICBtb2RlbCA9IGZpcnN0KCBhbGxNb2RlbHMgKTsKIAogICAgICAgICAgICAgaWYoIG1vZGVsICE9IG51bGwgKQpAQCAtMTkyLDggKzIwNyw5IEBACiAgICAgICoKICAgICAgKiA8cD5UeXBlIGxvb2t1cCBpcyBkb25lIGxhemlseSBhbmQgY2FjaGVkLjwvcD4KICAgICAgKgotICAgICAqIEBwYXJhbSB0eXBlICBMb29rZWQgdXAgVHlwZQotICAgICAqIEByZXR1cm4gICAgICBGaXJzdCBtYXRjaGluZyBWYWx1ZSBNb2RlbAorICAgICAqIEBwYXJhbSB0eXBlIExvb2tlZCB1cCBUeXBlCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEZpcnN0IG1hdGNoaW5nIFZhbHVlIE1vZGVsCiAgICAgICovCiAgICAgQFN1cHByZXNzV2FybmluZ3MoIHsgInJhdyIsICJ1bmNoZWNrZWQiIH0gKQogICAgIHB1YmxpYyBNb2RlbE1vZHVsZTxWYWx1ZU1vZGVsPiBsb29rdXBWYWx1ZU1vZGVsKCBmaW5hbCBDbGFzcyB0eXBlICkKQEAgLTIwNiwxNiArMjIyLDE5IEBACiAgICAgICAgICAgICBJdGVyYWJsZTxNb2RlbE1vZHVsZTxWYWx1ZU1vZGVsPj4gZmxhdHRlbiA9IGZsYXR0ZW4oCiAgICAgICAgICAgICAgICAgYW1iaWd1b3VzVHlwZUNoZWNrKCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZE1vZGVscyggbmV3IEV4YWN0VHlwZUxvb2t1cFNwZWNpZmljYXRpb24oIHR5cGUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLnZpc2libGVWYWx1ZXMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVZhbHVlcyggVmlzaWJpbGl0eS5sYXllciApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVWYWx1ZXMoIFZpc2liaWxpdHkuYXBwbGljYXRpb24gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLnZpc2libGVWYWx1ZXMoIG1vZHVsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVWYWx1ZXMoIGxheWVyICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVZhbHVlcyggYXBwbGljYXRpb24gKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS51c2VkTGF5ZXJzSW5zdGFuY2UoKS52aXNpYmxlVmFsdWVzKCkgKSApLAogICAgICAgICAgICAgICAgIGFtYmlndW91c1R5cGVDaGVjayggdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRNb2RlbHMoIG5ldyBBc3NpZ25hYmxlVHlwZUxvb2t1cFNwZWNpZmljYXRpb24oIHR5cGUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLnZpc2libGVWYWx1ZXMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVZhbHVlcyggVmlzaWJpbGl0eS5sYXllciApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVWYWx1ZXMoIFZpc2liaWxpdHkuYXBwbGljYXRpb24gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS51c2VkTGF5ZXJzSW5zdGFuY2UoKS52aXNpYmxlVmFsdWVzKCkgKSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlVmFsdWVzKCBtb2R1bGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlVmFsdWVzKCBsYXllciApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVWYWx1ZXMoIGFwcGxpY2F0aW9uICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZVZhbHVlcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKTsKIAogICAgICAgICAgICAgbW9kZWwgPSBmaXJzdCggZmxhdHRlbiApOwogCkBAIC0yNDIsOCArMjYxLDkgQEAKICAgICAgKiA8cD48Yj5TaG91bGQgYmUgdXNlZCBmb3IgY3JlYXRpb25hbCB1c2UgY2FzZXMgb25seS48L2I+IEZvciBub24tY3JlYXRpb25hbCB1c2UgY2FzZXMgc2VlCiAgICAgICoge0BsaW5rICNsb29rdXBFbnRpdHlNb2RlbHMoamF2YS5sYW5nLkNsYXNzKX0uPC9wPgogICAgICAqCi0gICAgICogQHBhcmFtIHR5cGUgIExvb2tlZCB1cCBUeXBlCi0gICAgICogQHJldHVybiAgICAgIEZpcnN0IG1hdGNoaW5nIEVudGl0eSBNb2RlbAorICAgICAqIEBwYXJhbSB0eXBlIExvb2tlZCB1cCBUeXBlCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEZpcnN0IG1hdGNoaW5nIEVudGl0eSBNb2RlbAogICAgICAqLwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCB7ICJyYXciLCAidW5jaGVja2VkIiB9ICkKICAgICAvKiBwYWNrYWdlICovIE1vZGVsTW9kdWxlPEVudGl0eU1vZGVsPiBsb29rdXBFbnRpdHlNb2RlbCggZmluYWwgQ2xhc3MgdHlwZSApCkBAIC0yNTYsMTYgKzI3NiwyMSBAQAogICAgICAgICAgICAgSXRlcmFibGU8TW9kZWxNb2R1bGU8RW50aXR5TW9kZWw+PiBhbGxNb2RlbHMgPSBmbGF0dGVuKAogICAgICAgICAgICAgICAgIGFtYmlndW91c1R5cGVDaGVjayggdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRNb2RlbHMoIG5ldyBFeGFjdFR5cGVMb29rdXBTcGVjaWZpY2F0aW9uKCB0eXBlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCBWaXNpYmlsaXR5LmxheWVyICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCkgKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UudmlzaWJsZUVudGl0aWVzKCBtb2R1bGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlRW50aXRpZXMoIGxheWVyICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCBhcHBsaWNhdGlvbiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVzZWRMYXllcnNJbnN0YW5jZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZpc2libGVFbnRpdGllcygpICkgKSwKICAgICAgICAgICAgICAgICBhbWJpZ3VvdXNUeXBlQ2hlY2soIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kTW9kZWxzKCBuZXcgQXNzaWduYWJsZVR5cGVMb29rdXBTcGVjaWZpY2F0aW9uKCB0eXBlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCBWaXNpYmlsaXR5LmxheWVyICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCkgKSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlRW50aXRpZXMoIG1vZHVsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVFbnRpdGllcyggbGF5ZXIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlRW50aXRpZXMoIGFwcGxpY2F0aW9uICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApOwogCiAgICAgICAgICAgICBtb2RlbCA9IGZpcnN0KCBhbGxNb2RlbHMgKTsKIApAQCAtMjg0LDggKzMwOSw4IEBACiAgICAgICogPHA+UmV0dXJuZWQgSXRlcmFibGUgY29udGFpbnMsIGluIG9yZGVyLCBFbnRpdHkgTW9kZWxzIHRoYXQ6IDwvcD4KICAgICAgKgogICAgICAqIDx1bD4KLSAgICAgKiAgPGxpPmV4YWN0bHkgbWF0Y2ggdGhlIGdpdmVuIHR5cGUsIGluIFZpc2liaWxpdHkgdGhlbiBBc3NlbWJseSBvcmRlciA7PC9saT4KLSAgICAgKiAgPGxpPm1hdGNoIGEgdHlwZSBhc3NpZ25hYmxlIHRvIHRoZSBnaXZlbiB0eXBlLCBpbiBWaXNpYmlsaXR5IHRoZW4gQXNzZW1ibHkgb3JkZXIuPC9saT4KKyAgICAgKiA8bGk+ZXhhY3RseSBtYXRjaCB0aGUgZ2l2ZW4gdHlwZSwgaW4gVmlzaWJpbGl0eSB0aGVuIEFzc2VtYmx5IG9yZGVyIDs8L2xpPgorICAgICAqIDxsaT5tYXRjaCBhIHR5cGUgYXNzaWduYWJsZSB0byB0aGUgZ2l2ZW4gdHlwZSwgaW4gVmlzaWJpbGl0eSB0aGVuIEFzc2VtYmx5IG9yZGVyLjwvbGk+CiAgICAgICogPC91bD4KICAgICAgKgogICAgICAqIDxwPk11bHRpcGxlIDxiPmV4YWN0PC9iPiBtYXRjaGVzIHdpdGggdGhlIHNhbWUgVmlzaWJpbGl0eSBhcmUgPGI+Zm9yYmlkZGVuPC9iPiBhbmQgcmVzdWx0IGluIGFuIEFtYmlndW91c1R5cGVFeGNlcHRpb24uPC9wPgpAQCAtMjk2LDggKzMyMSw5IEBACiAgICAgICogPHA+PGI+U2hvdWxkIGJlIHVzZWQgZm9yIG5vbi1jcmVhdGlvbmFsIHVzZSBjYXNlcyBvbmx5LjwvYj4gRm9yIGNyZWF0aW9uYWwgdXNlIGNhc2VzIHNlZQogICAgICAqIHtAbGluayAjbG9va3VwRW50aXR5TW9kZWwoamF2YS5sYW5nLkNsYXNzKX0uPC9wPgogICAgICAqCi0gICAgICogQHBhcmFtIHR5cGUgIExvb2tlZCB1cCBUeXBlCi0gICAgICogQHJldHVybiAgICAgIEFsbCBtYXRjaGluZyBFbnRpdHkgTW9kZWxzCisgICAgICogQHBhcmFtIHR5cGUgTG9va2VkIHVwIFR5cGUKKyAgICAgKgorICAgICAqIEByZXR1cm4gQWxsIG1hdGNoaW5nIEVudGl0eSBNb2RlbHMKICAgICAgKi8KICAgICBAU3VwcHJlc3NXYXJuaW5ncyggeyAicmF3IiwgInVuY2hlY2tlZCIgfSApCiAgICAgLyogcGFja2FnZSAqLyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxFbnRpdHlNb2RlbD4+IGxvb2t1cEVudGl0eU1vZGVscyggZmluYWwgQ2xhc3MgdHlwZSApCkBAIC0zMDksMTQgKzMzNSwxNiBAQAogICAgICAgICAgICAgSXRlcmFibGU8TW9kZWxNb2R1bGU8RW50aXR5TW9kZWw+PiBtYXRjaGluZ0VudGl0eU1vZGVscyA9IGZsYXR0ZW4oCiAgICAgICAgICAgICAgICAgYW1iaWd1b3VzVHlwZUNoZWNrKCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZE1vZGVscyggbmV3IEV4YWN0VHlwZUxvb2t1cFNwZWNpZmljYXRpb24oIHR5cGUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLnZpc2libGVFbnRpdGllcyggVmlzaWJpbGl0eS5tb2R1bGUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkubGF5ZXIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkuYXBwbGljYXRpb24gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS51c2VkTGF5ZXJzSW5zdGFuY2UoKS52aXNpYmxlRW50aXRpZXMoKSApICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlRW50aXRpZXMoIG1vZHVsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVFbnRpdGllcyggbGF5ZXIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlRW50aXRpZXMoIGFwcGxpY2F0aW9uICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgIGZpbmRNb2RlbHMoIG5ldyBBc3NpZ25hYmxlVHlwZUxvb2t1cFNwZWNpZmljYXRpb24oIHR5cGUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVFbnRpdGllcyggVmlzaWJpbGl0eS5sYXllciApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkuYXBwbGljYXRpb24gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlRW50aXRpZXMoIG1vZHVsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlRW50aXRpZXMoIGxheWVyICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVFbnRpdGllcyggYXBwbGljYXRpb24gKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZUVudGl0aWVzKCkgKSApOwogCiAgICAgICAgICAgICAvLyBEb24ndCByZXR1cm4gdGhlIHNhbWUgRW50aXR5TW9kZWwgbXVsdGlwbGUgdGltZXMKQEAgLTMzNSw5ICszNjMsMTAgQEAKICAgICAgKgogICAgICAqIDxwPlNlZSB7QGxpbmsgI2xvb2t1cFNlcnZpY2VSZWZlcmVuY2VzKGphdmEubGFuZy5yZWZsZWN0LlR5cGUpfS48L3A+CiAgICAgICoKLSAgICAgKiBAcGFyYW0gPFQ+ICAgICAgICAgICBTZXJ2aWNlIFR5cGUKLSAgICAgKiBAcGFyYW0gc2VydmljZVR5cGUgICBMb29rZWQgdXAgVHlwZQotICAgICAqIEByZXR1cm4gICAgICAgICAgICAgIEZpcnN0IG1hdGNoaW5nIFNlcnZpY2VSZWZlcmVuY2UKKyAgICAgKiBAcGFyYW0gPFQ+ICAgICAgICAgU2VydmljZSBUeXBlCisgICAgICogQHBhcmFtIHNlcnZpY2VUeXBlIExvb2tlZCB1cCBUeXBlCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEZpcnN0IG1hdGNoaW5nIFNlcnZpY2VSZWZlcmVuY2UKICAgICAgKi8KICAgICAvKiBwYWNrYWdlICovCiAgICAgQFN1cHByZXNzV2FybmluZ3MoICJ1bmNoZWNrZWQiICkKQEAgLTM2OCw4ICszOTcsOCBAQAogICAgICAqIDxwPlJldHVybmVkIEl0ZXJhYmxlIGNvbnRhaW5zLCBpbiBvcmRlciwgU2VydmljZVJlZmVyZW5jZXMgdGhhdDogPC9wPgogICAgICAqCiAgICAgICogPHVsPgotICAgICAqICA8bGk+ZXhhY3RseSBtYXRjaCB0aGUgZ2l2ZW4gdHlwZSwgaW4gVmlzaWJpbGl0eSB0aGVuIEFzc2VtYmx5IG9yZGVyIDs8L2xpPgotICAgICAqICA8bGk+bWF0Y2ggYSB0eXBlIGFzc2lnbmFibGUgdG8gdGhlIGdpdmVuIHR5cGUsIGluIFZpc2liaWxpdHkgdGhlbiBBc3NlbWJseSBvcmRlci48L2xpPgorICAgICAqIDxsaT5leGFjdGx5IG1hdGNoIHRoZSBnaXZlbiB0eXBlLCBpbiBWaXNpYmlsaXR5IHRoZW4gQXNzZW1ibHkgb3JkZXIgOzwvbGk+CisgICAgICogPGxpPm1hdGNoIGEgdHlwZSBhc3NpZ25hYmxlIHRvIHRoZSBnaXZlbiB0eXBlLCBpbiBWaXNpYmlsaXR5IHRoZW4gQXNzZW1ibHkgb3JkZXIuPC9saT4KICAgICAgKiA8L3VsPgogICAgICAqCiAgICAgICogPHA+TXVsdGlwbGUgPGI+ZXhhY3Q8L2I+IG1hdGNoZXMgd2l0aCB0aGUgc2FtZSBWaXNpYmlsaXR5IGFyZSA8Yj5hbGxvd2VkPC9iPiB0byBlbmFibGUgcG9seW1vcnBoaWMgbG9va3VwL2luamVjdGlvbi48L3A+CkBAIC0zNzcsOSArNDA2LDEwIEBACiAgICAgICoKICAgICAgKiA8cD5UeXBlIGxvb2t1cCBpcyBkb25lIGxhemlseSBhbmQgY2FjaGVkLjwvcD4KICAgICAgKgotICAgICAqIEBwYXJhbSA8VD4gICAgICAgICAgIFNlcnZpY2UgVHlwZQotICAgICAqIEBwYXJhbSBzZXJ2aWNlVHlwZSAgIExvb2tlZCB1cCBUeXBlCi0gICAgICogQHJldHVybiAgICAgICAgICAgICAgQWxsIG1hdGNoaW5nIFNlcnZpY2VSZWZlcmVuY2VzCisgICAgICogQHBhcmFtIDxUPiAgICAgICAgIFNlcnZpY2UgVHlwZQorICAgICAqIEBwYXJhbSBzZXJ2aWNlVHlwZSBMb29rZWQgdXAgVHlwZQorICAgICAqCisgICAgICogQHJldHVybiBBbGwgbWF0Y2hpbmcgU2VydmljZVJlZmVyZW5jZXMKICAgICAgKi8KICAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQogICAgIC8qIHBhY2thZ2UgKi8gPFQ+IEl0ZXJhYmxlPFNlcnZpY2VSZWZlcmVuY2U8VD4+IGxvb2t1cFNlcnZpY2VSZWZlcmVuY2VzKCBmaW5hbCBUeXBlIHNlcnZpY2VUeXBlICkKQEAgLTM5MCwxNCArNDIwLDE0IEBACiAgICAgICAgICAgICAvLyBMYXppbHkgcmVzb2x2ZSBTZXJ2aWNlc1JlZmVyZW5jZXMKICAgICAgICAgICAgIEl0ZXJhYmxlPFNlcnZpY2VSZWZlcmVuY2U8Pz4+IG1hdGNoaW5nU2VydmljZXMgPSBmbGF0dGVuKAogICAgICAgICAgICAgICAgIGZpbmRTZXJ2aWNlUmVmZXJlbmNlcyggbmV3IEV4YWN0VHlwZUxvb2t1cFNwZWNpZmljYXRpb24oIHNlcnZpY2VUeXBlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlU2VydmljZXMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVNlcnZpY2VzKCBWaXNpYmlsaXR5LmxheWVyICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVNlcnZpY2VzKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlU2VydmljZXMoIG1vZHVsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVTZXJ2aWNlcyggbGF5ZXIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlU2VydmljZXMoIGFwcGxpY2F0aW9uICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZVNlcnZpY2VzKCkgKSwKICAgICAgICAgICAgICAgICBmaW5kU2VydmljZVJlZmVyZW5jZXMoIG5ldyBBc3NpZ25hYmxlVHlwZUxvb2t1cFNwZWNpZmljYXRpb24oIHNlcnZpY2VUeXBlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlU2VydmljZXMoIFZpc2liaWxpdHkubW9kdWxlICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVNlcnZpY2VzKCBWaXNpYmlsaXR5LmxheWVyICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudmlzaWJsZVNlcnZpY2VzKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS52aXNpYmxlU2VydmljZXMoIG1vZHVsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSW5zdGFuY2UubGF5ZXJJbnN0YW5jZSgpLnZpc2libGVTZXJ2aWNlcyggbGF5ZXIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlLmxheWVySW5zdGFuY2UoKS52aXNpYmxlU2VydmljZXMoIGFwcGxpY2F0aW9uICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJbnN0YW5jZS5sYXllckluc3RhbmNlKCkudXNlZExheWVyc0luc3RhbmNlKCkudmlzaWJsZVNlcnZpY2VzKCkgKSApOwogCiAgICAgICAgICAgICAvLyBEb24ndCByZXR1cm4gdGhlIHNhbWUgU2VydmljZVJlZmVyZW5jZSBtdWx0aXBsZSB0aW1lcwpAQCAtNDEyLDcgKzQ0Miw4IEBACiAKICAgICBAU3VwcHJlc3NXYXJuaW5ncyggeyAicmF3IiwgInVuY2hlY2tlZCIgfSApCiAgICAgcHJpdmF0ZSBzdGF0aWMgPFQgZXh0ZW5kcyBNb2RlbERlc2NyaXB0b3I+IEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFQ+PiBmaW5kTW9kZWxzKCBTcGVjaWZpY2F0aW9uPEl0ZXJhYmxlPENsYXNzPD8+Pj4gc3BlY2lmaWNhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFQ+Pi4uLiBtb2RlbHMgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmFibGU8TW9kZWxNb2R1bGU8VD4+Li4uIG1vZGVscworICAgICkKICAgICB7CiAgICAgICAgIFNwZWNpZmljYXRpb248TW9kZWxNb2R1bGU8VD4+IHNwZWMgPSBTcGVjaWZpY2F0aW9ucy50cmFuc2xhdGUoIG5ldyBNb2RlbE1vZHVsZVR5cGVzRnVuY3Rpb24oKSwgc3BlY2lmaWNhdGlvbiApOwogICAgICAgICBJdGVyYWJsZTxNb2RlbE1vZHVsZTxUPj4gZmxhdHRlbmVkID0gZmxhdHRlbkl0ZXJhYmxlcyggaXRlcmFibGUoIG1vZGVscyApICk7CkBAIC00MjEsNyArNDUyLDggQEAKIAogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCB7ICJyYXciLCAidW5jaGVja2VkIiB9ICkKICAgICBwcml2YXRlIHN0YXRpYyBJdGVyYWJsZTxTZXJ2aWNlUmVmZXJlbmNlPD8+PiBmaW5kU2VydmljZVJlZmVyZW5jZXMoIFNwZWNpZmljYXRpb248SXRlcmFibGU8Q2xhc3M8Pz4+PiBzcGVjaWZpY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmFibGU8U2VydmljZVJlZmVyZW5jZTw/Pj4uLi4gcmVmZXJlbmNlcyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVyYWJsZTxTZXJ2aWNlUmVmZXJlbmNlPD8+Pi4uLiByZWZlcmVuY2VzCisgICAgKQogICAgIHsKICAgICAgICAgU3BlY2lmaWNhdGlvbjxTZXJ2aWNlUmVmZXJlbmNlPD8+PiBzcGVjID0gU3BlY2lmaWNhdGlvbnMudHJhbnNsYXRlKCBuZXcgU2VydmljZVJlZmVyZW5jZVR5cGVzRnVuY3Rpb24oKSwgc3BlY2lmaWNhdGlvbiApOwogICAgICAgICBJdGVyYWJsZTxTZXJ2aWNlUmVmZXJlbmNlPD8+PiBmbGF0dGVuZWQgPSBmbGF0dGVuSXRlcmFibGVzKCBpdGVyYWJsZSggcmVmZXJlbmNlcyApICk7CkBAIC00MzQsNyArNDY2LDggQEAKICAgICAgKi8KICAgICBAU3VwcHJlc3NXYXJuaW5ncyggInJhdyIgKQogICAgIHByaXZhdGUgc3RhdGljIDxUIGV4dGVuZHMgTW9kZWxEZXNjcmlwdG9yPiBJdGVyYWJsZTxNb2RlbE1vZHVsZTxUPj4gYW1iaWd1b3VzVHlwZUNoZWNrKCBmaW5hbCBDbGFzcyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBJdGVyYWJsZTxNb2RlbE1vZHVsZTxUPj4gbW9kZWxzICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgSXRlcmFibGU8TW9kZWxNb2R1bGU8VD4+IG1vZGVscworICAgICkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgSXRlcmFibGU8TW9kZWxNb2R1bGU8VD4+KCkKICAgICAgICAgewpAQCAtNDczLDcgKzUwNiw2IEBACiAgICAgICAgICAgICAgICAgLy8gQW1iaWd1aXR5IGNoZWNrIGRvbmUsIGFuZCBubyBhbWJpZ3VpdGllcyBmb3VuZC4gUmV0dXJuIHJlc3VsdHMKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5pdGVyYXRvcigpOwogICAgICAgICAgICAgfQotCiAgICAgICAgIH07CiAgICAgfQogCkBAIC00ODYsNyArNTE4LDYgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1vZGVsTW9kdWxlLm1vZGVsKCkudHlwZXMoKTsKICAgICAgICAgfQotCiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2VydmljZVJlZmVyZW5jZVR5cGVzRnVuY3Rpb24KQEAgLTQ5OCw3ICs1MjksNiBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc2VydmljZVJlZmVyZW5jZS50eXBlcygpOwogICAgICAgICB9Ci0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFR5cGVMb29rdXBTcGVjaWZpY2F0aW9uCkBAIC01NjMsNyArNTkzLDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGNoZWNrQ2xhc3NNYXRjaCggQ2xhc3M8Pz4gY2FuZGlkYXRlLCBDbGFzczw/PiBsb29rZWRVcFR5cGUgKTsKLQogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEV4YWN0VHlwZUxvb2t1cFNwZWNpZmljYXRpb24KQEAgLTU4MCw3ICs2MDksNiBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLmVxdWFscyggbG9va2VkVXBUeXBlICk7CiAgICAgICAgIH0KLQogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEFzc2lnbmFibGVUeXBlTG9va3VwU3BlY2lmaWNhdGlvbgpAQCAtNTk3LDcgKzYyNSw1IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhY2FuZGlkYXRlLmVxdWFscyggbG9va2VkVXBUeXBlICkgJiYgbG9va2VkVXBUeXBlLmlzQXNzaWduYWJsZUZyb20oIGNhbmRpZGF0ZSApOwogICAgICAgICB9Ci0KICAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL1VzZWRMYXllcnNJbnN0YW5jZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvVXNlZExheWVyc0luc3RhbmNlLmphdmEKaW5kZXggMWMwZjY1MC4uN2ViNTdiOSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvVXNlZExheWVyc0luc3RhbmNlLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvVXNlZExheWVyc0luc3RhbmNlLmphdmEKQEAgLTE2LDEyICsxNiwxNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouYXBpLm9iamVjdC5PYmplY3REZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VSZWZlcmVuY2U7CitpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlRGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlRyYW5zaWVudE1vZGVsOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuZW50aXR5LkVudGl0eU1vZGVsOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUub2JqZWN0Lk9iamVjdE1vZGVsOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUudmFsdWUuVmFsdWVNb2RlbDsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZGVsTW9kdWxlOwogCiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLio7CiAKQEAgLTM3LDQ4ICs0Miw0OCBAQAogICAgICAgICB0aGlzLnVzZWRMYXllckluc3RhbmNlcyA9IHVzZWRMYXllckluc3RhbmNlczsKICAgICB9CiAKLSAgICAvKiBwYWNrYWdlICovIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPE9iamVjdE1vZGVsPj4gdmlzaWJsZU9iamVjdHMoKQorICAgIC8qIHBhY2thZ2UgKi8gSXRlcmFibGU8TW9kZWxNb2R1bGU8T2JqZWN0RGVzY3JpcHRvcj4+IHZpc2libGVPYmplY3RzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBmbGF0dGVuSXRlcmFibGVzKCBtYXAoIG5ldyBGdW5jdGlvbjxMYXllckluc3RhbmNlLCBJdGVyYWJsZTxNb2RlbE1vZHVsZTxPYmplY3RNb2RlbD4+PigpCisgICAgICAgIHJldHVybiBmbGF0dGVuSXRlcmFibGVzKCBtYXAoIG5ldyBGdW5jdGlvbjxMYXllckluc3RhbmNlLCBJdGVyYWJsZTxNb2RlbE1vZHVsZTxPYmplY3REZXNjcmlwdG9yPj4+KCkKICAgICAgICAgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8T2JqZWN0TW9kZWw+PiBtYXAoIExheWVySW5zdGFuY2UgbGF5ZXJJbnN0YW5jZSApCisgICAgICAgICAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8T2JqZWN0RGVzY3JpcHRvcj4+IG1hcCggTGF5ZXJJbnN0YW5jZSBsYXllckluc3RhbmNlICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJJbnN0YW5jZS52aXNpYmxlT2JqZWN0cyggVmlzaWJpbGl0eS5hcHBsaWNhdGlvbiApOwogICAgICAgICAgICAgfQogICAgICAgICB9LCB1c2VkTGF5ZXJJbnN0YW5jZXMgKSApOwogICAgIH0KIAotICAgIC8qIHBhY2thZ2UgKi8gSXRlcmFibGU8TW9kZWxNb2R1bGU8VHJhbnNpZW50TW9kZWw+PiB2aXNpYmxlVHJhbnNpZW50cygpCisgICAgLyogcGFja2FnZSAqLyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxUcmFuc2llbnREZXNjcmlwdG9yPj4gdmlzaWJsZVRyYW5zaWVudHMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZsYXR0ZW5JdGVyYWJsZXMoIG1hcCggbmV3IEZ1bmN0aW9uPExheWVySW5zdGFuY2UsIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudE1vZGVsPj4+KCkKKyAgICAgICAgcmV0dXJuIGZsYXR0ZW5JdGVyYWJsZXMoIG1hcCggbmV3IEZ1bmN0aW9uPExheWVySW5zdGFuY2UsIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudERlc2NyaXB0b3I+Pj4oKQogICAgICAgICB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxUcmFuc2llbnRNb2RlbD4+IG1hcCggTGF5ZXJJbnN0YW5jZSBsYXllckluc3RhbmNlICkKKyAgICAgICAgICAgIHB1YmxpYyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxUcmFuc2llbnREZXNjcmlwdG9yPj4gbWFwKCBMYXllckluc3RhbmNlIGxheWVySW5zdGFuY2UgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBsYXllckluc3RhbmNlLnZpc2libGVUcmFuc2llbnRzKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sIHVzZWRMYXllckluc3RhbmNlcyApICk7CiAgICAgfQogCi0gICAgLyogcGFja2FnZSAqLyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxFbnRpdHlNb2RlbD4+IHZpc2libGVFbnRpdGllcygpCisgICAgLyogcGFja2FnZSAqLyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxFbnRpdHlEZXNjcmlwdG9yPj4gdmlzaWJsZUVudGl0aWVzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBmbGF0dGVuSXRlcmFibGVzKCBtYXAoIG5ldyBGdW5jdGlvbjxMYXllckluc3RhbmNlLCBJdGVyYWJsZTxNb2RlbE1vZHVsZTxFbnRpdHlNb2RlbD4+PigpCisgICAgICAgIHJldHVybiBmbGF0dGVuSXRlcmFibGVzKCBtYXAoIG5ldyBGdW5jdGlvbjxMYXllckluc3RhbmNlLCBJdGVyYWJsZTxNb2RlbE1vZHVsZTxFbnRpdHlEZXNjcmlwdG9yPj4+KCkKICAgICAgICAgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8RW50aXR5TW9kZWw+PiBtYXAoIExheWVySW5zdGFuY2UgbGF5ZXJJbnN0YW5jZSApCisgICAgICAgICAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8RW50aXR5RGVzY3JpcHRvcj4+IG1hcCggTGF5ZXJJbnN0YW5jZSBsYXllckluc3RhbmNlICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJJbnN0YW5jZS52aXNpYmxlRW50aXRpZXMoIFZpc2liaWxpdHkuYXBwbGljYXRpb24gKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwgdXNlZExheWVySW5zdGFuY2VzICkgKTsKICAgICB9CiAKLSAgICAvKiBwYWNrYWdlICovIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFZhbHVlTW9kZWw+PiB2aXNpYmxlVmFsdWVzKCkKKyAgICAvKiBwYWNrYWdlICovIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFZhbHVlRGVzY3JpcHRvcj4+IHZpc2libGVWYWx1ZXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZsYXR0ZW5JdGVyYWJsZXMoIG1hcCggbmV3IEZ1bmN0aW9uPExheWVySW5zdGFuY2UsIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFZhbHVlTW9kZWw+Pj4oKQorICAgICAgICByZXR1cm4gZmxhdHRlbkl0ZXJhYmxlcyggbWFwKCBuZXcgRnVuY3Rpb248TGF5ZXJJbnN0YW5jZSwgSXRlcmFibGU8TW9kZWxNb2R1bGU8VmFsdWVEZXNjcmlwdG9yPj4+KCkKICAgICAgICAgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgSXRlcmFibGU8TW9kZWxNb2R1bGU8VmFsdWVNb2RlbD4+IG1hcCggTGF5ZXJJbnN0YW5jZSBsYXllckluc3RhbmNlICkKKyAgICAgICAgICAgIHB1YmxpYyBJdGVyYWJsZTxNb2RlbE1vZHVsZTxWYWx1ZURlc2NyaXB0b3I+PiBtYXAoIExheWVySW5zdGFuY2UgbGF5ZXJJbnN0YW5jZSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVySW5zdGFuY2UudmlzaWJsZVZhbHVlcyggVmlzaWJpbGl0eS5hcHBsaWNhdGlvbiApOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvVmlzaWJpbGl0eVNwZWNpZmljYXRpb24uamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvc3RydWN0dXJlL1Zpc2liaWxpdHlTcGVjaWZpY2F0aW9uLmphdmEKaW5kZXggMzc4NjJiMi4uM2I1N2FkMyAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS9zdHJ1Y3R1cmUvVmlzaWJpbGl0eVNwZWNpZmljYXRpb24uamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3N0cnVjdHVyZS9WaXNpYmlsaXR5U3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS90eXBlcy9WYWx1ZVR5cGVGYWN0b3J5LmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3R5cGVzL1ZhbHVlVHlwZUZhY3RvcnkuamF2YQppbmRleCAwOTEwMjkzLi45ZjQ5OTUzIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3R5cGVzL1ZhbHVlVHlwZUZhY3RvcnkuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3R5cGVzL1ZhbHVlVHlwZUZhY3RvcnkuamF2YQpAQCAtMjcsNiArMjcsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS50eXBlLkNvbGxlY3Rpb25UeXBlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS50eXBlLkVudW1UeXBlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS50eXBlLk1hcFR5cGU7CitpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuU2VyaWFsaXphdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5WYWx1ZUNvbXBvc2l0ZVR5cGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuVmFsdWVUeXBlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51dGlsLkNsYXNzZXM7CkBAIC02MSw3ICs2Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzIGRlY2xhcmluZ0NsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyBjb21wb3NpdGVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllck1vZGVsIGxheWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGVNb2RlbCBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlTW9kZWwgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemF0aW9uLlZhcmlhbnQgdmFyaWFudAogICAgICkKICAgICB7CiAgICAgICAgIFZhbHVlVHlwZSB2YWx1ZVR5cGUgPSBudWxsOwpAQCAtNzYsMTMgKzc4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIFR5cGVWYXJpYWJsZSBjb2xsZWN0aW9uVHlwZVZhcmlhYmxlID0gKFR5cGVWYXJpYWJsZSkgY29sbGVjdGlvblR5cGU7CiAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25UeXBlID0gQ2xhc3Nlcy5yZXNvbHZlVHlwZVZhcmlhYmxlKCBjb2xsZWN0aW9uVHlwZVZhcmlhYmxlLCBkZWNsYXJpbmdDbGFzcywgY29tcG9zaXRlVHlwZSApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBWYWx1ZVR5cGUgY29sbGVjdGVkVHlwZSA9IG5ld1ZhbHVlVHlwZSggY29sbGVjdGlvblR5cGUsIGRlY2xhcmluZ0NsYXNzLCBjb21wb3NpdGVUeXBlLCBsYXllciwgbW9kdWxlICk7CisgICAgICAgICAgICAgICAgVmFsdWVUeXBlIGNvbGxlY3RlZFR5cGUgPSBuZXdWYWx1ZVR5cGUoIGNvbGxlY3Rpb25UeXBlLCBkZWNsYXJpbmdDbGFzcywgY29tcG9zaXRlVHlwZSwgbGF5ZXIsIG1vZHVsZSwgdmFyaWFudCApOwogICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IG5ldyBDb2xsZWN0aW9uVHlwZSggQ2xhc3Nlcy5SQVdfQ0xBU1MubWFwKCB0eXBlICksIGNvbGxlY3RlZFR5cGUgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWx1ZVR5cGUgPSBuZXcgQ29sbGVjdGlvblR5cGUoIENsYXNzZXMuUkFXX0NMQVNTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCggdHlwZSApLCBuZXdWYWx1ZVR5cGUoIE9iamVjdC5jbGFzcywgZGVjbGFyaW5nQ2xhc3MsIGNvbXBvc2l0ZVR5cGUsIGxheWVyLCBtb2R1bGUgKSApOworICAgICAgICAgICAgICAgIFZhbHVlVHlwZSBjb2xsZWN0ZWRUeXBlID0gbmV3VmFsdWVUeXBlKCBPYmplY3QuY2xhc3MsIGRlY2xhcmluZ0NsYXNzLCBjb21wb3NpdGVUeXBlLCBsYXllciwgbW9kdWxlLCB2YXJpYW50ICk7CisgICAgICAgICAgICAgICAgdmFsdWVUeXBlID0gbmV3IENvbGxlY3Rpb25UeXBlKCBDbGFzc2VzLlJBV19DTEFTUy5tYXAoIHR5cGUgKSwgY29sbGVjdGVkVHlwZSApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoIE1hcFR5cGUuaXNNYXAoIHR5cGUgKSApCkBAIC05NiwyMiArOTgsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgVHlwZVZhcmlhYmxlIGtleVR5cGVWYXJpYWJsZSA9IChUeXBlVmFyaWFibGUpIGtleVR5cGU7CiAgICAgICAgICAgICAgICAgICAgIGtleVR5cGUgPSBDbGFzc2VzLnJlc29sdmVUeXBlVmFyaWFibGUoIGtleVR5cGVWYXJpYWJsZSwgZGVjbGFyaW5nQ2xhc3MsIGNvbXBvc2l0ZVR5cGUgKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgVmFsdWVUeXBlIGtleWVkVHlwZSA9IG5ld1ZhbHVlVHlwZSgga2V5VHlwZSwgZGVjbGFyaW5nQ2xhc3MsIGNvbXBvc2l0ZVR5cGUsIGxheWVyLCBtb2R1bGUgKTsKLQorICAgICAgICAgICAgICAgIFZhbHVlVHlwZSBrZXllZFR5cGUgPSBuZXdWYWx1ZVR5cGUoIGtleVR5cGUsIGRlY2xhcmluZ0NsYXNzLCBjb21wb3NpdGVUeXBlLCBsYXllciwgbW9kdWxlLCB2YXJpYW50ICk7CiAgICAgICAgICAgICAgICAgVHlwZSB2YWxUeXBlID0gcHQuZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpWyAxIF07CiAgICAgICAgICAgICAgICAgaWYoIHZhbFR5cGUgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgVHlwZVZhcmlhYmxlIHZhbHVlVHlwZVZhcmlhYmxlID0gKFR5cGVWYXJpYWJsZSkgdmFsVHlwZTsKICAgICAgICAgICAgICAgICAgICAgdmFsVHlwZSA9IENsYXNzZXMucmVzb2x2ZVR5cGVWYXJpYWJsZSggdmFsdWVUeXBlVmFyaWFibGUsIGRlY2xhcmluZ0NsYXNzLCBjb21wb3NpdGVUeXBlICk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFZhbHVlVHlwZSB2YWx1ZWRUeXBlID0gbmV3VmFsdWVUeXBlKCB2YWxUeXBlLCBkZWNsYXJpbmdDbGFzcywgY29tcG9zaXRlVHlwZSwgbGF5ZXIsIG1vZHVsZSApOwotCi0gICAgICAgICAgICAgICAgdmFsdWVUeXBlID0gbmV3IE1hcFR5cGUoIENsYXNzZXMuUkFXX0NMQVNTLm1hcCggdHlwZSApLCBrZXllZFR5cGUsIHZhbHVlZFR5cGUgKTsKKyAgICAgICAgICAgICAgICBWYWx1ZVR5cGUgdmFsdWVkVHlwZSA9IG5ld1ZhbHVlVHlwZSggdmFsVHlwZSwgZGVjbGFyaW5nQ2xhc3MsIGNvbXBvc2l0ZVR5cGUsIGxheWVyLCBtb2R1bGUsIHZhcmlhbnQgKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVR5cGUgPSBuZXcgTWFwVHlwZSggQ2xhc3Nlcy5SQVdfQ0xBU1MubWFwKCB0eXBlICksIGtleWVkVHlwZSwgdmFsdWVkVHlwZSwgdmFyaWFudCApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IG5ldyBNYXBUeXBlKCBDbGFzc2VzLlJBV19DTEFTUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCggdHlwZSApLCBuZXdWYWx1ZVR5cGUoIE9iamVjdC5jbGFzcywgZGVjbGFyaW5nQ2xhc3MsIGNvbXBvc2l0ZVR5cGUsIGxheWVyLCBtb2R1bGUgKSwgbmV3VmFsdWVUeXBlKCBPYmplY3QuY2xhc3MsIGRlY2xhcmluZ0NsYXNzLCBjb21wb3NpdGVUeXBlLCBsYXllciwgbW9kdWxlICkgKTsKKyAgICAgICAgICAgICAgICBWYWx1ZVR5cGUga2V5VHlwZSA9IG5ld1ZhbHVlVHlwZSggT2JqZWN0LmNsYXNzLCBkZWNsYXJpbmdDbGFzcywgY29tcG9zaXRlVHlwZSwgbGF5ZXIsIG1vZHVsZSwgdmFyaWFudCApOworICAgICAgICAgICAgICAgIFZhbHVlVHlwZSB2YWx1ZXNUeXBlID0gbmV3VmFsdWVUeXBlKCBPYmplY3QuY2xhc3MsIGRlY2xhcmluZ0NsYXNzLCBjb21wb3NpdGVUeXBlLCBsYXllciwgbW9kdWxlLCB2YXJpYW50ICk7CisgICAgICAgICAgICAgICAgdmFsdWVUeXBlID0gbmV3IE1hcFR5cGUoIENsYXNzZXMuUkFXX0NMQVNTLm1hcCggdHlwZSApLCBrZXlUeXBlLCB2YWx1ZXNUeXBlLCB2YXJpYW50ICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiggVmFsdWVDb21wb3NpdGVUeXBlLmlzVmFsdWVDb21wb3NpdGUoIHR5cGUgKSApCmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3VuaXRvZndvcmsvRW50aXR5QnVpbGRlckluc3RhbmNlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3VuaXRvZndvcmsvRW50aXR5QnVpbGRlckluc3RhbmNlLmphdmEKaW5kZXggOGJiMGZmZC4uZjVmMzlkZCAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS91bml0b2Z3b3JrL0VudGl0eUJ1aWxkZXJJbnN0YW5jZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdW5pdG9md29yay9FbnRpdHlCdWlsZGVySW5zdGFuY2UuamF2YQpAQCAtMTYsMjIgKzE2LDE2IEBACiAgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS51bml0b2Z3b3JrOwogCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb25EZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uUXVhbGlmaWVkTmFtZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUJ1aWxkZXI7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5JZGVudGl0eTsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkxpZmVjeWNsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuRnVuY3Rpb25TdGF0ZVJlc29sdmVyOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuZW50aXR5LkVudGl0eUluc3RhbmNlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuZW50aXR5LkVudGl0eU1vZGVsOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZGVsTW9kdWxlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kZWxNb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kdWxlVW5pdE9mV29yazsKLWltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5TdGF0ZVJlc29sdmVyOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUudmFsdWUuVmFsdWVTdGF0ZU1vZGVsOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlVW5pdE9mV29yazsKIApAQCAtNjAsNyArNTQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGNhdGNoKCBOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCAiUWk0aiBDb3JlIFJ1bnRpbWUgY29kZWJhc2UgaXMgY29ycnVwdGVkLiBDb250YWN0IFFpNGogdGVhbTogRW50aXR5QnVpbGRlckluc3RhbmNlIiApOworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoICJaZXN0IENvcmUgUnVudGltZSBjb2RlYmFzZSBpcyBjb3JydXB0ZWQuIENvbnRhY3QgWmVzdCB0ZWFtOiBFbnRpdHlCdWlsZGVySW5zdGFuY2UiICk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc5LDcgKzczLDcgQEAKICAgICAgICAgTW9kdWxlVW5pdE9mV29yayB1b3csCiAgICAgICAgIEVudGl0eVN0b3JlVW5pdE9mV29yayBzdG9yZSwKICAgICAgICAgU3RyaW5nIGlkZW50aXR5LAotICAgICAgICBTdGF0ZVJlc29sdmVyIHN0YXRlUmVzb2x2ZXIKKyAgICAgICAgRnVuY3Rpb25TdGF0ZVJlc29sdmVyIHN0YXRlUmVzb2x2ZXIKICAgICApCiAgICAgewogICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7CkBAIC05MSwzMCArODUsNyBAQAogICAgICAgICBtb2RlbC5tb2RlbCgpLmluaXRTdGF0ZSggbW9kZWwubW9kdWxlKCksIGVudGl0eVN0YXRlICk7CiAgICAgICAgIGlmKCBzdGF0ZVJlc29sdmVyICE9IG51bGwgKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IoIFByb3BlcnR5RGVzY3JpcHRvciBwcm9wRGVzYyA6IG1vZGVsLm1vZGVsKCkuc3RhdGUoKS5wcm9wZXJ0aWVzKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHN0YXRlUmVzb2x2ZXIuZ2V0UHJvcGVydHlTdGF0ZSggcHJvcERlc2MgKTsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZS5zZXRQcm9wZXJ0eVZhbHVlKCBwcm9wRGVzYy5xdWFsaWZpZWROYW1lKCksIHZhbHVlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBhc3NEZXNjIDogbW9kZWwubW9kZWwoKS5zdGF0ZSgpLmFzc29jaWF0aW9ucygpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgcmVmID0gc3RhdGVSZXNvbHZlci5nZXRBc3NvY2lhdGlvblN0YXRlKCBhc3NEZXNjICk7Ci0gICAgICAgICAgICAgICAgZW50aXR5U3RhdGUuc2V0QXNzb2NpYXRpb25WYWx1ZSggYXNzRGVzYy5xdWFsaWZpZWROYW1lKCksIHJlZiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yKCBNYW55QXNzb2NpYXRpb25Nb2RlbCBtYW55QXNzRGVzYyA6IG1vZGVsLm1vZGVsKCkuc3RhdGUoKS5tYW55QXNzb2NpYXRpb25zKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciggRW50aXR5UmVmZXJlbmNlIHJlZiA6IHN0YXRlUmVzb2x2ZXIuZ2V0TWFueUFzc29jaWF0aW9uU3RhdGUoIG1hbnlBc3NEZXNjICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUubWFueUFzc29jaWF0aW9uVmFsdWVPZiggbWFueUFzc0Rlc2MucXVhbGlmaWVkTmFtZSgpICkuYWRkKCAwLCByZWYgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IoIE5hbWVkQXNzb2NpYXRpb25Nb2RlbCBuYW1lZEFzc0Rlc2MgOiBtb2RlbC5tb2RlbCgpLnN0YXRlKCkubmFtZWRBc3NvY2lhdGlvbnMoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yKCBNYXAuRW50cnk8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+IGVudHJ5IDogc3RhdGVSZXNvbHZlci5nZXROYW1lZEFzc29jaWF0aW9uU3RhdGUoIG5hbWVkQXNzRGVzYyApLmVudHJ5U2V0KCkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUubmFtZWRBc3NvY2lhdGlvblZhbHVlT2YoIG5hbWVkQXNzRGVzYy5xdWFsaWZpZWROYW1lKCkgKS5wdXQoIGVudHJ5LmdldEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVSZXNvbHZlci5wb3B1bGF0ZVN0YXRlKCBtb2RlbC5tb2RlbCgpLCBlbnRpdHlTdGF0ZSApOwogICAgICAgICB9CiAgICAgICAgIGVudGl0eVN0YXRlLnNldFByb3BlcnR5VmFsdWUoIElERU5USVRZX1NUQVRFX05BTUUsIGlkZW50aXR5ICk7CiAgICAgICAgIHByb3RvdHlwZUluc3RhbmNlID0gbW9kZWwubW9kZWwoKS5uZXdJbnN0YW5jZSggdW93LCBtb2RlbC5tb2R1bGUoKSwgZW50aXR5U3RhdGUgKTsKQEAgLTE0Niw3ICsxMTcsNyBAQAogCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hldGhlciB0byB1c2UgZ2l2ZW4gb3IgZ2VuZXJhdGVkIGlkZW50aXR5CiAgICAgICAgIGlkZW50aXR5ID0gKFN0cmluZykgZW50aXR5U3RhdGUucHJvcGVydHlWYWx1ZU9mKCBJREVOVElUWV9TVEFURV9OQU1FICk7Ci0gICAgICAgIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlID0gbW9kZWwubW9kZWwoKS5uZXdFbnRpdHlTdGF0ZSggc3RvcmUsCisgICAgICAgIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlID0gbW9kZWwubW9kZWwoKS5uZXdFbnRpdHlTdGF0ZSggc3RvcmUsIHVvdy5tb2R1bGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICkgKTsKIAogICAgICAgICBwcm90b3R5cGVJbnN0YW5jZS5pbnZva2VDcmVhdGUoKTsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdW5pdG9md29yay9Vbml0T2ZXb3JrSW5zdGFuY2UuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdW5pdG9md29yay9Vbml0T2ZXb3JrSW5zdGFuY2UuamF2YQppbmRleCA0OTE5ODYwLi42N2FiZjNhIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3VuaXRvZndvcmsvVW5pdE9mV29ya0luc3RhbmNlLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS91bml0b2Z3b3JrL1VuaXRPZldvcmtJbnN0YW5jZS5qYXZhCkBAIC0zMSw3ICszMSw2IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLm1ldHJpY3MuTWV0cmljc1Byb3ZpZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5tZXRyaWNzLk1ldHJpY3NUaW1lcjsKIGltcG9ydCBvcmcucWk0ai5hcGkubWV0cmljcy5NZXRyaWNzVGltZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLkNvbmN1cnJlbnRFbnRpdHlNb2RpZmljYXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLk5vU3VjaEVudGl0eUV4Y2VwdGlvbjsKQEAgLTQyLDggKzQxLDYgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuZW50aXR5LkVudGl0eUluc3RhbmNlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuZW50aXR5LkVudGl0eU1vZGVsOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZGVsTW9kdWxlOwotaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZUluc3RhbmNlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZVVuaXRPZldvcms7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0ZTsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXR1czsKQEAgLTUzLDkgKzUwLDEyIEBACiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlVW5pdE9mV29yazsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuU3RhdGVDb21taXR0ZXI7CiBpbXBvcnQgb3JnLnFpNGouc3BpLm1ldHJpY3MuRGVmYXVsdE1ldHJpYzsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZGVsTW9kdWxlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtDYWxsYmFjay5Vbml0T2ZXb3JrU3RhdHVzLkNPTVBMRVRFRDsKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29ya0NhbGxiYWNrLlVuaXRPZldvcmtTdGF0dXMuRElTQ0FSREVEOworaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5tYXA7CiAKIHB1YmxpYyBmaW5hbCBjbGFzcyBVbml0T2ZXb3JrSW5zdGFuY2UKIHsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICByZXR1cm4gY3VycmVudFRpbWU7CiAgICAgfQogCi0gICAgcHVibGljIEVudGl0eVN0b3JlVW5pdE9mV29yayBnZXRFbnRpdHlTdG9yZVVuaXRPZldvcmsoIEVudGl0eVN0b3JlIHN0b3JlLCBNb2R1bGUgbW9kdWxlICkKKyAgICBwdWJsaWMgRW50aXR5U3RvcmVVbml0T2ZXb3JrIGdldEVudGl0eVN0b3JlVW5pdE9mV29yayggRW50aXR5U3RvcmUgc3RvcmUsIE1vZHVsZVNwaSBtb2R1bGUgKQogICAgIHsKICAgICAgICAgRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVvdyA9IHN0b3JlVW5pdE9mV29yay5nZXQoIHN0b3JlICk7CiAgICAgICAgIGlmKCB1b3cgPT0gbnVsbCApCkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSByb290IFVvVywgb3IgaWYgbm8gcGFyZW50IFVvVyBrbm93cyBhYm91dCB0aGlzIGVudGl0eQogICAgICAgICAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSBudWxsOwogICAgICAgICAgICAgRW50aXR5TW9kZWwgbW9kZWwgPSBudWxsOwotICAgICAgICAgICAgTW9kdWxlSW5zdGFuY2UgbW9kdWxlID0gbnVsbDsKKyAgICAgICAgICAgIE1vZHVsZVNwaSBtb2R1bGUgPSBudWxsOwogICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGF0IEVudGl0eVN0b3JlIHRvIHVzZQogICAgICAgICAgICAgZm9yKCBNb2RlbE1vZHVsZTxFbnRpdHlNb2RlbD4gcG90ZW50aWFsTW9kZWwgOiBwb3RlbnRpYWxNb2RlbHMgKQogICAgICAgICAgICAgewpAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICAgICAgICAgICAgICAgRW50aXR5U3RvcmVVbml0T2ZXb3JrIHN0b3JlVW93ID0gZ2V0RW50aXR5U3RvcmVVbml0T2ZXb3JrKCBzdG9yZSwgcG90ZW50aWFsTW9kZWwubW9kdWxlKCkgKTsKICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gc3RvcmVVb3cuZW50aXR5U3RhdGVPZiggaWRlbnRpdHkgKTsKKyAgICAgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBzdG9yZVVvdy5lbnRpdHlTdGF0ZU9mKCBwb3RlbnRpYWxNb2RlbC5tb2R1bGUoKSwgaWRlbnRpdHkgKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2F0Y2goIEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uIGUgKQogICAgICAgICAgICAgICAgIHsKQEAgLTE2MiwxMSArMTYyLDE1IEBACiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgc3RhdGUgd2FzIGZvdW5kCiAgICAgICAgICAgICAgICAgaWYoIGVudGl0eVN0YXRlID09IG51bGwgKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbiggaWRlbnRpdHksIG1peGluVHlwZSApOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCBpZGVudGl0eSwgbWl4aW5UeXBlLCB1c2VjYXNlICk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlUeXBlTm90Rm91bmRFeGNlcHRpb24oIG1peGluVHlwZS5nZXROYW1lKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbiggbWl4aW5UeXBlLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLm5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCBNb2RlbE1vZHVsZS50b1N0cmluZ0Z1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5maW5kVmlzaWJsZUVudGl0eVR5cGVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTgwLDcgKzE4NCw3IEBACiAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCBoYXMgYmVlbiByZW1vdmVkCiAgICAgICAgICAgICBpZiggZW50aXR5SW5zdGFuY2Uuc3RhdHVzKCkgPT0gRW50aXR5U3RhdHVzLlJFTU9WRUQgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIGlkZW50aXR5LCBtaXhpblR5cGUgKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCBpZGVudGl0eSwgbWl4aW5UeXBlLCB1c2VjYXNlICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9NYW55QXNzb2NpYXRpb25WYWx1ZVN0YXRlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL01hbnlBc3NvY2lhdGlvblZhbHVlU3RhdGUuamF2YQppbmRleCA3MmI3M2NjLi4xOTQxMDYyIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL01hbnlBc3NvY2lhdGlvblZhbHVlU3RhdGUuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL01hbnlBc3NvY2lhdGlvblZhbHVlU3RhdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ydW50aW1lLnZhbHVlOwogCiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9OYW1lZEFzc29jaWF0aW9uVmFsdWVTdGF0ZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9OYW1lZEFzc29jaWF0aW9uVmFsdWVTdGF0ZS5qYXZhCmluZGV4IDE0ZmNkODQuLjRmMzAzMGQgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdmFsdWUvTmFtZWRBc3NvY2lhdGlvblZhbHVlU3RhdGUuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL05hbWVkQXNzb2NpYXRpb25WYWx1ZVN0YXRlLmphdmEKQEAgLTgxLDUgKzgxLDQgQEAKICAgICB7CiAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLmtleVNldCgpLml0ZXJhdG9yKCk7CiAgICAgfQotCiB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1JlZmVyZW5jZVByb3BlcnR5LmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1JlZmVyZW5jZVByb3BlcnR5LmphdmEKaW5kZXggZjYyOTJjMy4uNDBlOGRiYiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9SZWZlcmVuY2VQcm9wZXJ0eS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdmFsdWUvUmVmZXJlbmNlUHJvcGVydHkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ydW50aW1lLnZhbHVlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlQnVpbGRlckluc3RhbmNlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlQnVpbGRlckluc3RhbmNlLmphdmEKaW5kZXggMGQ3MDQ2My4uNmJkNmVlYiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZUJ1aWxkZXJJbnN0YW5jZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdmFsdWUvVmFsdWVCdWlsZGVySW5zdGFuY2UuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5Ob1N1Y2hWYWx1ZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVCdWlsZGVyOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlN0YXRlUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kZWxNb2R1bGU7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2RlbE1vZHVsZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnN0cnVjdHVyZS5Nb2R1bGVJbnN0YW5jZTsKIAogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5maXJzdDsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdmFsdWUvVmFsdWVCdWlsZGVyV2l0aFByb3RvdHlwZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZUJ1aWxkZXJXaXRoUHJvdG90eXBlLmphdmEKaW5kZXggMDYwOGFjZS4uYjZmM2U5OCAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZUJ1aWxkZXJXaXRoUHJvdG90eXBlLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZUJ1aWxkZXJXaXRoUHJvdG90eXBlLmphdmEKQEAgLTIwLDEzICsyMCwyNCBAQAogICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUudmFsdWU7CiAKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbkRlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uU3RhdGVIb2xkZXI7CitpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLk5hbWVkQXNzb2NpYXRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5Db25zdHJ1Y3Rpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CitpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5RGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVCdWlsZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZUNvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVTZXJpYWxpemF0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6YXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kZWxNb2R1bGU7CitpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5GdW5jdGlvblN0YXRlUmVzb2x2ZXI7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS5jb21wb3NpdGUuTWl4aW5Nb2RlbDsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5NaXhpbnNNb2RlbDsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5TdGF0ZVJlc29sdmVyOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlVzZXNJbnN0YW5jZTsKK2ltcG9ydCBvcmcucWk0ai5ydW50aW1lLmluamVjdGlvbi5JbmplY3Rpb25Db250ZXh0OworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kZWxNb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kdWxlSW5zdGFuY2U7CiAKIC8qKgpAQCAtMzgsMjQgKzQ5LDUzIEBACiAgICAgcHJpdmF0ZSBWYWx1ZUluc3RhbmNlIHByb3RvdHlwZUluc3RhbmNlOwogICAgIHByaXZhdGUgZmluYWwgVmFsdWVNb2RlbCB2YWx1ZU1vZGVsOwogCi0gICAgcHVibGljIFZhbHVlQnVpbGRlcldpdGhQcm90b3R5cGUoTW9kZWxNb2R1bGU8VmFsdWVNb2RlbD4gY29tcG9zaXRlTW9kZWxNb2R1bGUsIE1vZHVsZUluc3RhbmNlIGN1cnJlbnRNb2R1bGUsIFQgcHJvdG90eXBlKQorICAgIHB1YmxpYyBWYWx1ZUJ1aWxkZXJXaXRoUHJvdG90eXBlKCBNb2RlbE1vZHVsZTxWYWx1ZU1vZGVsPiBjb21wb3NpdGVNb2RlbE1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlSW5zdGFuY2UgY3VycmVudE1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCBwcm90b3R5cGUKKyAgICApCiAgICAgewogICAgICAgICB2YWx1ZU1vZGVsID0gY29tcG9zaXRlTW9kZWxNb2R1bGUubW9kZWwoKTsKLSAgICAgICAgLy8gVXNlIHNlcmlhbGl6YXRpb24tZGVzZXJpYWxpemF0aW9uIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBwcm90b3R5cGUKLSAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlOwotICAgICAgICB0cnkKKyAgICAgICAgLy8gT25seSBzaGFsbG93IGNsb25lLCBhcyBhbGwgZ2VuZXJpYyB0eXBlcyBvZiB0aGUgVmFsdWVDb21wb3NpdGVzIGFyZSBleHBlY3RlZCB0byBiZSBJbW11dGFibGUuCisKKyAgICAgICAgTWl4aW5zTW9kZWwgbWl4aW5zTW9kZWwgPSB2YWx1ZU1vZGVsLm1peGluc01vZGVsKCk7CisgICAgICAgIE9iamVjdFtdIG1peGlucyA9IG1peGluc01vZGVsLm5ld01peGluSG9sZGVyKCk7CisgICAgICAgIGZpbmFsIFZhbHVlU3RhdGVJbnN0YW5jZSBwcm90b3R5cGVTdGF0ZSA9IFZhbHVlSW5zdGFuY2UudmFsdWVJbnN0YW5jZU9mKCAoVmFsdWVDb21wb3NpdGUpIHByb3RvdHlwZSApLnN0YXRlKCk7CisgICAgICAgIFN0YXRlUmVzb2x2ZXIgcmVzb2x2ZXIgPSBuZXcgRnVuY3Rpb25TdGF0ZVJlc29sdmVyKAorICAgICAgICAgICAgbmV3IFByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uKCBwcm90b3R5cGVTdGF0ZSApLAorICAgICAgICAgICAgbmV3IEFzc29jaWF0aW9uRGVzY3JpcHRvckVudGl0eVJlZmVyZW5jZUZ1bmN0aW9uKCBwcm90b3R5cGVTdGF0ZSApLAorICAgICAgICAgICAgbmV3IEFzc29jaWF0aW9uRGVzY3JpcHRvckl0ZXJhYmxlRnVuY3Rpb24oIHByb3RvdHlwZVN0YXRlICksCisgICAgICAgICAgICBuZXcgQXNzb2NpYXRpb25EZXNjcmlwdG9yTWFwRnVuY3Rpb24oIHByb3RvdHlwZVN0YXRlICkKKyAgICAgICAgKTsKKyAgICAgICAgVmFsdWVTdGF0ZUluc3RhbmNlIHN0YXRlID0gbmV3IFZhbHVlU3RhdGVJbnN0YW5jZSggY29tcG9zaXRlTW9kZWxNb2R1bGUsIGN1cnJlbnRNb2R1bGUsIHJlc29sdmVyICk7CisgICAgICAgIFZhbHVlSW5zdGFuY2UgdmFsdWVJbnN0YW5jZSA9IG5ldyBWYWx1ZUluc3RhbmNlKAorICAgICAgICAgICAgdmFsdWVNb2RlbCwKKyAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUsCisgICAgICAgICAgICBtaXhpbnMsCisgICAgICAgICAgICBzdGF0ZQorICAgICAgICApOworCisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgSW5qZWN0aW9uQ29udGV4dCBpbmplY3Rpb25Db250ZXh0ID0gbmV3IEluamVjdGlvbkNvbnRleHQoIHZhbHVlSW5zdGFuY2UsIFVzZXNJbnN0YW5jZS5FTVBUWV9VU0VTLCBzdGF0ZSApOworICAgICAgICBmb3IoIE1peGluTW9kZWwgbWl4aW5Nb2RlbCA6IG1peGluc01vZGVsLm1peGluTW9kZWxzKCkgKQogICAgICAgICB7Ci0gICAgICAgICAgICAvLyBAVE9ETyB0aGVyZSBpcyBwcm9iYWJseSBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzCi0gICAgICAgICAgICBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uID0gY3VycmVudE1vZHVsZS52YWx1ZVNlcmlhbGl6YXRpb24oKTsKLSAgICAgICAgICAgIFN0cmluZyBzZXJpYWxpemVkID0gdmFsdWVTZXJpYWxpemF0aW9uLnNlcmlhbGl6ZSggcHJvdG90eXBlICk7Ci0gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlU2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZSggdmFsdWVNb2RlbC52YWx1ZVR5cGUoKSwgc2VyaWFsaXplZCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIFZhbHVlU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggIkNvdWxkIG5vdCBzZXJpYWxpemUtY29weSBWYWx1ZSIsIGUgKTsKKyAgICAgICAgICAgIG1peGluc1sgaSsrIF0gPSBtaXhpbk1vZGVsLm5ld0luc3RhbmNlKCBpbmplY3Rpb25Db250ZXh0ICk7CiAgICAgICAgIH0KIAotICAgICAgICBWYWx1ZUluc3RhbmNlIHZhbHVlSW5zdGFuY2UgPSBWYWx1ZUluc3RhbmNlLnZhbHVlSW5zdGFuY2VPZiggKFZhbHVlQ29tcG9zaXRlKSB2YWx1ZSApOworLy8gICAgICAgIC8vIFVzZSBzZXJpYWxpemF0aW9uLWRlc2VyaWFsaXphdGlvbiB0byBtYWtlIGEgY29weSBvZiB0aGUgcHJvdG90eXBlCisvLyAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlOworLy8gICAgICAgIHRyeQorLy8gICAgICAgIHsKKy8vICAgICAgICAgICAgLy8gQFRPRE8gdGhlcmUgaXMgcHJvYmFibHkgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcworLy8gICAgICAgICAgICBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uID0gY3VycmVudE1vZHVsZS52YWx1ZVNlcmlhbGl6YXRpb24oKTsKKy8vICAgICAgICAgICAgU3RyaW5nIHNlcmlhbGl6ZWQgPSB2YWx1ZVNlcmlhbGl6YXRpb24uc2VyaWFsaXplKCBwcm90b3R5cGUgKTsKKy8vICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoIHZhbHVlTW9kZWwudmFsdWVUeXBlKCksIHNlcmlhbGl6ZWQpOworLy8gICAgICAgIH0KKy8vICAgICAgICBjYXRjaCggVmFsdWVTZXJpYWxpemF0aW9uRXhjZXB0aW9uIGUgKQorLy8gICAgICAgIHsKKy8vICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggIkNvdWxkIG5vdCBzZXJpYWxpemUtY29weSBWYWx1ZSIsIGUgKTsKKy8vICAgICAgICB9CisKKy8vICAgICAgICBWYWx1ZUluc3RhbmNlIHZhbHVlSW5zdGFuY2UgPSBWYWx1ZUluc3RhbmNlLnZhbHVlSW5zdGFuY2VPZiggKFZhbHVlQ29tcG9zaXRlKSB2YWx1ZSApOwogICAgICAgICB2YWx1ZUluc3RhbmNlLnByZXBhcmVUb0J1aWxkKCk7CiAgICAgICAgIHRoaXMucHJvdG90eXBlSW5zdGFuY2UgPSB2YWx1ZUluc3RhbmNlOwogICAgIH0KQEAgLTExMiw0ICsxNTIsNzcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uCisgICAgICAgIGltcGxlbWVudHMgRnVuY3Rpb248UHJvcGVydHlEZXNjcmlwdG9yLCBPYmplY3Q+CisgICAgeworICAgICAgICBwcml2YXRlIGZpbmFsIFZhbHVlU3RhdGVJbnN0YW5jZSBwcm90b3R5cGVTdGF0ZTsKKworICAgICAgICBwdWJsaWMgUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb24oIFZhbHVlU3RhdGVJbnN0YW5jZSBwcm90b3R5cGVTdGF0ZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMucHJvdG90eXBlU3RhdGUgPSBwcm90b3R5cGVTdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgT2JqZWN0IG1hcCggUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlU3RhdGUucHJvcGVydHlGb3IoIGRlc2NyaXB0b3IuYWNjZXNzb3IoKSApLmdldCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQXNzb2NpYXRpb25EZXNjcmlwdG9yRW50aXR5UmVmZXJlbmNlRnVuY3Rpb24KKyAgICAgICAgaW1wbGVtZW50cyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEVudGl0eVJlZmVyZW5jZT4KKyAgICB7CisgICAgICAgIHByaXZhdGUgZmluYWwgVmFsdWVTdGF0ZUluc3RhbmNlIHByb3RvdHlwZVN0YXRlOworCisgICAgICAgIHB1YmxpYyBBc3NvY2lhdGlvbkRlc2NyaXB0b3JFbnRpdHlSZWZlcmVuY2VGdW5jdGlvbiggVmFsdWVTdGF0ZUluc3RhbmNlIHByb3RvdHlwZVN0YXRlICkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5wcm90b3R5cGVTdGF0ZSA9IHByb3RvdHlwZVN0YXRlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBFbnRpdHlSZWZlcmVuY2UgbWFwKCBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgZGVzY3JpcHRvciApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwcm90b3R5cGVTdGF0ZS5hc3NvY2lhdGlvbkZvciggZGVzY3JpcHRvci5hY2Nlc3NvcigpICkucmVmZXJlbmNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBBc3NvY2lhdGlvbkRlc2NyaXB0b3JJdGVyYWJsZUZ1bmN0aW9uCisgICAgICAgIGltcGxlbWVudHMgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+PgorICAgIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBWYWx1ZVN0YXRlSW5zdGFuY2UgcHJvdG90eXBlU3RhdGU7CisKKyAgICAgICAgcHVibGljIEFzc29jaWF0aW9uRGVzY3JpcHRvckl0ZXJhYmxlRnVuY3Rpb24oIFZhbHVlU3RhdGVJbnN0YW5jZSBwcm90b3R5cGVTdGF0ZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMucHJvdG90eXBlU3RhdGUgPSBwcm90b3R5cGVTdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgSXRlcmFibGU8RW50aXR5UmVmZXJlbmNlPiBtYXAoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHByb3RvdHlwZVN0YXRlLm1hbnlBc3NvY2lhdGlvbkZvciggZGVzY3JpcHRvci5hY2Nlc3NvcigpICkucmVmZXJlbmNlcygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQXNzb2NpYXRpb25EZXNjcmlwdG9yTWFwRnVuY3Rpb24KKyAgICAgICAgaW1wbGVtZW50cyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+CisgICAgeworICAgICAgICBwcml2YXRlIGZpbmFsIFZhbHVlU3RhdGVJbnN0YW5jZSBwcm90b3R5cGVTdGF0ZTsKKworICAgICAgICBwdWJsaWMgQXNzb2NpYXRpb25EZXNjcmlwdG9yTWFwRnVuY3Rpb24oIFZhbHVlU3RhdGVJbnN0YW5jZSBwcm90b3R5cGVTdGF0ZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMucHJvdG90eXBlU3RhdGUgPSBwcm90b3R5cGVTdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgTWFwPFN0cmluZywgRW50aXR5UmVmZXJlbmNlPiBtYXAoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yICkKKyAgICAgICAgeworICAgICAgICAgICAgTWFwPFN0cmluZywgRW50aXR5UmVmZXJlbmNlPiByZXN1bHQgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBOYW1lZEFzc29jaWF0aW9uPD8+IG5hbWVkQXNzb2NpYXRpb24gPSBwcm90b3R5cGVTdGF0ZS5uYW1lZEFzc29jaWF0aW9uRm9yKCBkZXNjcmlwdG9yLmFjY2Vzc29yKCkgKTsKKyAgICAgICAgICAgIGZvciggU3RyaW5nIG5hbWUgOiBuYW1lZEFzc29jaWF0aW9uICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQucHV0KCBuYW1lLCBuYW1lZEFzc29jaWF0aW9uLnJlZmVyZW5jZU9mKCBuYW1lICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlQnVpbGRlcldpdGhTdGF0ZS5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZUJ1aWxkZXJXaXRoU3RhdGUuamF2YQppbmRleCBlYzFmN2IzLi5iNzZlYTI2IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlQnVpbGRlcldpdGhTdGF0ZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdmFsdWUvVmFsdWVCdWlsZGVyV2l0aFN0YXRlLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLkNvbnN0cnVjdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVCdWlsZGVyOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlN0YXRlUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kZWxNb2R1bGU7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2RlbE1vZHVsZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnN0cnVjdHVyZS5Nb2R1bGVJbnN0YW5jZTsKIAogcHVibGljIGNsYXNzIFZhbHVlQnVpbGRlcldpdGhTdGF0ZTxUPiBpbXBsZW1lbnRzIFZhbHVlQnVpbGRlcjxUPgpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZUluc3RhbmNlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlSW5zdGFuY2UuamF2YQppbmRleCBhZThhNGFiLi4zYjExYzA0IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlSW5zdGFuY2UuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlSW5zdGFuY2UuamF2YQpAQCAtMjEsMTEgKzIxLDEyIEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uQXNzb2NpYXRpb25Nb2RlbDsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmFzc29jaWF0aW9uLk1hbnlBc3NvY2lhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuYXNzb2NpYXRpb24uTmFtZWRBc3NvY2lhdGlvbk1vZGVsOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLk1peGluc0luc3RhbmNlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlLlRyYW5zaWVudEluc3RhbmNlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUucHJvcGVydHkuUHJvcGVydHlJbnN0YW5jZTsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnByb3BlcnR5LlByb3BlcnR5TW9kZWw7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kdWxlSW5zdGFuY2U7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiAKIC8qKgogICogVmFsdWVDb21wb3NpdGUgaW5zdGFuY2UKQEAgLTQwLDkgKzQxLDEwIEBACiAgICAgfQogCiAgICAgcHVibGljIFZhbHVlSW5zdGFuY2UoIFZhbHVlTW9kZWwgY29tcG9zaXRlTW9kZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGVTcGkgbW9kdWxlSW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFtdIG1peGlucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVTdGF0ZUluc3RhbmNlIHN0YXRlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVTdGF0ZUluc3RhbmNlIHN0YXRlCisgICAgKQogICAgIHsKICAgICAgICAgc3VwZXIoIGNvbXBvc2l0ZU1vZGVsLCBtb2R1bGVJbnN0YW5jZSwgbWl4aW5zLCBzdGF0ZSApOwogICAgIH0KQEAgLTUwLDExICs1MiwxMiBAQAogICAgIC8qKgogICAgICAqIFBlcmZvcm0gZXF1YWxzIHdpdGgge0Bjb2RlIG99IGFyZ3VtZW50LgogICAgICAqIDxwPgotICAgICAqICAgICBUaGUgZGVmaW5pdGlvbiBvZiBlcXVhbHMoKSBmb3IgdGhlIFZhbHVlIGlzIHRoYXQgaWYgYm90aCB0aGUgc3RhdGUgYW5kIGRlc2NyaXB0b3IgYXJlIGVxdWFsLAotICAgICAqICAgICB0aGVuIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLgorICAgICAqIFRoZSBkZWZpbml0aW9uIG9mIGVxdWFscygpIGZvciB0aGUgVmFsdWUgaXMgdGhhdCBpZiBib3RoIHRoZSBzdGF0ZSBhbmQgZGVzY3JpcHRvciBhcmUgZXF1YWwsCisgICAgICogdGhlbiB0aGUgdmFsdWVzIGFyZSBlcXVhbC4KICAgICAgKiA8L3A+CiAgICAgICoKICAgICAgKiBAcGFyYW0gbyBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuCisgICAgICoKICAgICAgKiBAcmV0dXJuIFJldHVybnMgYSB7QGNvZGUgYm9vbGVhbn0gaW5kaWNhdG9yIHdoZXRoZXIgdGhpcyBvYmplY3QgaXMgZXF1YWxzIHRoZSBvdGhlci4KICAgICAgKi8KICAgICBAT3ZlcnJpZGUKQEAgLTEwNiw3ICsxMDksNyBAQAogICAgICAgICBmb3IoIFByb3BlcnR5TW9kZWwgcHJvcGVydHlEZXNjcmlwdG9yIDogZGVzY3JpcHRvcigpLnN0YXRlKCkucHJvcGVydGllcygpICkKICAgICAgICAgewogICAgICAgICAgICAgUHJvcGVydHlJbnN0YW5jZTxPYmplY3Q+IHByb3BlcnR5SW5zdGFuY2UgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQcm9wZXJ0eUluc3RhbmNlPE9iamVjdD4pIHN0YXRlLnByb3BlcnR5Rm9yKCBwcm9wZXJ0eURlc2NyaXB0b3IuYWNjZXNzb3IoKSApOworICAgICAgICAgICAgICAgIChQcm9wZXJ0eUluc3RhbmNlPE9iamVjdD4pIHN0YXRlLnByb3BlcnR5Rm9yKCBwcm9wZXJ0eURlc2NyaXB0b3IuYWNjZXNzb3IoKSApOwogCiAgICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlLnByZXBhcmVUb0J1aWxkKCBwcm9wZXJ0eURlc2NyaXB0b3IgKTsKICAgICAgICAgfQpAQCAtMTIyLDYgKzEyNSwxMiBAQAogICAgICAgICAgICAgc3RhdGUoKS5tYW55QXNzb2NpYXRpb25Gb3IoIGFzc29jaWF0aW9uRGVzY3JpcHRvci5hY2Nlc3NvcigpICkKICAgICAgICAgICAgICAgICAuc2V0QXNzb2NpYXRpb25JbmZvKCBhc3NvY2lhdGlvbkRlc2NyaXB0b3IuZ2V0QnVpbGRlckluZm8oKSApOwogICAgICAgICB9CisKKyAgICAgICAgZm9yKCBOYW1lZEFzc29jaWF0aW9uTW9kZWwgYXNzb2NpYXRpb25EZXNjcmlwdG9yIDogZGVzY3JpcHRvcigpLnN0YXRlKCkubmFtZWRBc3NvY2lhdGlvbnMoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRlKCkubmFtZWRBc3NvY2lhdGlvbkZvciggYXNzb2NpYXRpb25EZXNjcmlwdG9yLmFjY2Vzc29yKCkgKQorICAgICAgICAgICAgICAgIC5zZXRBc3NvY2lhdGlvbkluZm8oIGFzc29jaWF0aW9uRGVzY3JpcHRvci5nZXRCdWlsZGVySW5mbygpICk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTEzMyw3ICsxNDIsNyBAQAogICAgICAgICBmb3IoIFByb3BlcnR5TW9kZWwgcHJvcGVydHlEZXNjcmlwdG9yIDogZGVzY3JpcHRvcigpLnN0YXRlKCkucHJvcGVydGllcygpICkKICAgICAgICAgewogICAgICAgICAgICAgUHJvcGVydHlJbnN0YW5jZTxPYmplY3Q+IHByb3BlcnR5SW5zdGFuY2UgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQcm9wZXJ0eUluc3RhbmNlPE9iamVjdD4pIHN0YXRlLnByb3BlcnR5Rm9yKCBwcm9wZXJ0eURlc2NyaXB0b3IuYWNjZXNzb3IoKSApOworICAgICAgICAgICAgICAgIChQcm9wZXJ0eUluc3RhbmNlPE9iamVjdD4pIHN0YXRlLnByb3BlcnR5Rm9yKCBwcm9wZXJ0eURlc2NyaXB0b3IuYWNjZXNzb3IoKSApOwogICAgICAgICAgICAgcHJvcGVydHlJbnN0YW5jZS5wcmVwYXJlQnVpbGRlclN0YXRlKCBwcm9wZXJ0eURlc2NyaXB0b3IgKTsKICAgICAgICAgfQogCkBAIC0xNDYsNiArMTU1LDExIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXRlKCkubWFueUFzc29jaWF0aW9uRm9yKCBhc3NvY2lhdGlvbkRlc2NyaXB0b3IuYWNjZXNzb3IoKSApLnNldEFzc29jaWF0aW9uSW5mbyggYXNzb2NpYXRpb25EZXNjcmlwdG9yICk7CiAgICAgICAgIH0KKworICAgICAgICBmb3IoIE5hbWVkQXNzb2NpYXRpb25Nb2RlbCBhc3NvY2lhdGlvbkRlc2NyaXB0b3IgOiBkZXNjcmlwdG9yKCkuc3RhdGUoKS5uYW1lZEFzc29jaWF0aW9ucygpICkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGUoKS5uYW1lZEFzc29jaWF0aW9uRm9yKCBhc3NvY2lhdGlvbkRlc2NyaXB0b3IuYWNjZXNzb3IoKSApLnNldEFzc29jaWF0aW9uSW5mbyggYXNzb2NpYXRpb25EZXNjcmlwdG9yICk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTE2Myw2ICsxNzcsNiBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZSgpLnZhbHVlU2VyaWFsaXphdGlvbigpLnNlcmlhbGl6ZSggdGhpcy48VmFsdWVDb21wb3NpdGU+cHJveHkoKSApOworICAgICAgICByZXR1cm4gKCAoTW9kdWxlU3BpKSBtb2R1bGUoKSApLnZhbHVlU2VyaWFsaXphdGlvbigpLnNlcmlhbGl6ZSggdGhpcy48VmFsdWVDb21wb3NpdGU+cHJveHkoKSApOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdmFsdWUvVmFsdWVNb2RlbC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZU1vZGVsLmphdmEKaW5kZXggMWUzZDRjYi4uMGVmZTZmNSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZU1vZGVsLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZU1vZGVsLmphdmEKQEAgLTI4LDcgKzI4LDggQEAKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZS5Vc2VzSW5zdGFuY2U7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5pbmplY3Rpb24uSW5qZWN0aW9uQ29udGV4dDsKIGltcG9ydCBvcmcucWk0ai5ydW50aW1lLnByb3BlcnR5LlByb3BlcnR5TW9kZWw7Ci1pbXBvcnQgb3JnLnFpNGoucnVudGltZS5zdHJ1Y3R1cmUuTW9kdWxlSW5zdGFuY2U7CitpbXBvcnQgb3JnLnFpNGoucnVudGltZS51bml0b2Z3b3JrLlVuaXRPZldvcmtJbnN0YW5jZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZHVsZVNwaTsKIAogLyoqCiAgKiBNb2RlbCBmb3IgVmFsdWVDb21wb3NpdGVzCkBAIC02NCwyNiArNjUsMzIgQEAKICAgICAgICAgcmV0dXJuIChWYWx1ZVN0YXRlTW9kZWwpIHN1cGVyLnN0YXRlKCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY2hlY2tDb25zdHJhaW50cyggVmFsdWVTdGF0ZUluc3RhbmNlIHN0YXRlICkKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBPTkxZIGNhbGxlZCBieSBWYWx1ZUJ1aWxkZXJzCisgICAgdm9pZCBjaGVja0NvbnN0cmFpbnRzKCBWYWx1ZVN0YXRlSW5zdGFuY2Ugc3RhdGUgKQogICAgICAgICB0aHJvd3MgQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgZm9yKCBQcm9wZXJ0eU1vZGVsIHByb3BlcnR5TW9kZWwgOiBzdGF0ZU1vZGVsLnByb3BlcnRpZXMoKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHByb3BlcnR5TW9kZWwuY2hlY2tDb25zdHJhaW50cyggc3RhdGUuPE9iamVjdD5wcm9wZXJ0eUZvciggcHJvcGVydHlNb2RlbC5hY2Nlc3NvcigpICkuZ2V0KCkgKTsKKyAgICAgICAgICAgIHByb3BlcnR5TW9kZWwuY2hlY2tDb25zdHJhaW50cyggc3RhdGUucHJvcGVydHlGb3IoIHByb3BlcnR5TW9kZWwuYWNjZXNzb3IoKSApLmdldCgpICk7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBJRiBubyBVbml0T2ZXb3JrIGlzIGFjdGl2ZSwgdGhlbiB0aGUgQXNzb2NpYXRpb24gY2hlY2tzIHNob3VsZG4ndCBiZSBkb25lLgorICAgICAgICBpZiggVW5pdE9mV29ya0luc3RhbmNlLmdldEN1cnJlbnQoKS5lbXB0eSgpICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGZvciggQXNzb2NpYXRpb25Nb2RlbCBhc3NvY2lhdGlvbk1vZGVsIDogKCAoVmFsdWVTdGF0ZU1vZGVsKSBzdGF0ZU1vZGVsICkuYXNzb2NpYXRpb25zKCkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBhc3NvY2lhdGlvbk1vZGVsLmNoZWNrQ29uc3RyYWludHMoIHN0YXRlLjxPYmplY3Q+YXNzb2NpYXRpb25Gb3IoIGFzc29jaWF0aW9uTW9kZWwuYWNjZXNzb3IoKSApLmdldCgpICk7CisgICAgICAgICAgICBhc3NvY2lhdGlvbk1vZGVsLmNoZWNrQ29uc3RyYWludHMoIHN0YXRlLmFzc29jaWF0aW9uRm9yKCBhc3NvY2lhdGlvbk1vZGVsLmFjY2Vzc29yKCkgKS5nZXQoKSApOwogICAgICAgICB9CiAKICAgICAgICAgZm9yKCBNYW55QXNzb2NpYXRpb25Nb2RlbCBhc3NvY2lhdGlvbk1vZGVsIDogKCAoVmFsdWVTdGF0ZU1vZGVsKSBzdGF0ZU1vZGVsICkubWFueUFzc29jaWF0aW9ucygpICkKICAgICAgICAgewotICAgICAgICAgICAgYXNzb2NpYXRpb25Nb2RlbC5jaGVja0Fzc29jaWF0aW9uQ29uc3RyYWludHMoIHN0YXRlLjxPYmplY3Q+bWFueUFzc29jaWF0aW9uRm9yKCBhc3NvY2lhdGlvbk1vZGVsLmFjY2Vzc29yKCkgKSApOworICAgICAgICAgICAgYXNzb2NpYXRpb25Nb2RlbC5jaGVja0Fzc29jaWF0aW9uQ29uc3RyYWludHMoIHN0YXRlLm1hbnlBc3NvY2lhdGlvbkZvciggYXNzb2NpYXRpb25Nb2RlbC5hY2Nlc3NvcigpICkgKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBWYWx1ZUluc3RhbmNlIG5ld1ZhbHVlSW5zdGFuY2UoIE1vZHVsZUluc3RhbmNlIG1vZHVsZUluc3RhbmNlLAorICAgIHB1YmxpYyBWYWx1ZUluc3RhbmNlIG5ld1ZhbHVlSW5zdGFuY2UoIE1vZHVsZVNwaSBtb2R1bGVJbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZVN0YXRlSW5zdGFuY2Ugc3RhdGUKICAgICApCiAgICAgewpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZVN0YXRlSW5zdGFuY2UuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdmFsdWUvVmFsdWVTdGF0ZUluc3RhbmNlLmphdmEKaW5kZXggNjhkZDVjNy4uYzY2NzM0ZiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZVN0YXRlSW5zdGFuY2UuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlU3RhdGVJbnN0YW5jZS5qYXZhCkBAIC0yNSw3ICsyNSw2IEBACiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb25EZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvblN0YXRlSG9sZGVyOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eURlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbkluZm87CkBAIC0zOSw3ICszOCw3IEBACiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5wcm9wZXJ0eS5Qcm9wZXJ0eUluZm87CiBpbXBvcnQgb3JnLnFpNGoucnVudGltZS5wcm9wZXJ0eS5Qcm9wZXJ0eUluc3RhbmNlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUucHJvcGVydHkuUHJvcGVydHlNb2RlbDsKLWltcG9ydCBvcmcucWk0ai5ydW50aW1lLnN0cnVjdHVyZS5Nb2RlbE1vZHVsZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZGVsTW9kdWxlOwogaW1wb3J0IG9yZy5xaTRqLnJ1bnRpbWUuc3RydWN0dXJlLk1vZHVsZUluc3RhbmNlOwogCiAvKioKQEAgLTE4MSw3ICsxODAsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgQFN1cHByZXNzV2FybmluZ3MoICJ1bmNoZWNrZWQiICkKLSAgICBwdWJsaWMgPFQ+IE5hbWVkQXNzb2NpYXRpb248VD4gbmFtZWRBc3NvY2lhdGlvbkZvciggQWNjZXNzaWJsZU9iamVjdCBhY2Nlc3NvciApCisgICAgcHVibGljIDxUPiBOYW1lZEFzc29jaWF0aW9uSW5zdGFuY2U8VD4gbmFtZWRBc3NvY2lhdGlvbkZvciggQWNjZXNzaWJsZU9iamVjdCBhY2Nlc3NvciApCiAgICAgewogICAgICAgICBOYW1lZEFzc29jaWF0aW9uSW5zdGFuY2U8VD4gbmFtZWRBc3NvY2lhdGlvbiA9IChOYW1lZEFzc29jaWF0aW9uSW5zdGFuY2U8VD4pIG5hbWVkQXNzb2NpYXRpb25zLmdldCggYWNjZXNzb3IgKTsKIApAQCAtMTk0LDcgKzE5Myw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEl0ZXJhYmxlPD8gZXh0ZW5kcyBOYW1lZEFzc29jaWF0aW9uPD8+PiBhbGxOYW1lZEFzc29jaWF0aW9ucygpCisgICAgcHVibGljIEl0ZXJhYmxlPD8gZXh0ZW5kcyBOYW1lZEFzc29jaWF0aW9uSW5zdGFuY2U8Pz4+IGFsbE5hbWVkQXNzb2NpYXRpb25zKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuYW1lZEFzc29jaWF0aW9ucy52YWx1ZXMoKTsKICAgICB9CkBAIC0yMTUsNyArMjE0LDExIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbWFueUFzc29jaWF0aW9ucy5lcXVhbHMoIHN0YXRlLm1hbnlBc3NvY2lhdGlvbnMgKTsKKyAgICAgICAgaWYoICFtYW55QXNzb2NpYXRpb25zLmVxdWFscyggc3RhdGUubWFueUFzc29jaWF0aW9ucyApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuYW1lZEFzc29jaWF0aW9ucy5lcXVhbHMoIHN0YXRlLm5hbWVkQXNzb2NpYXRpb25zICk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0yMjQsNiArMjI3LDcgQEAKICAgICAgICAgaW50IHJlc3VsdCA9IHByb3BlcnRpZXMuaGFzaENvZGUoKTsKICAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyBhc3NvY2lhdGlvbnMuaGFzaENvZGUoKTsKICAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyBtYW55QXNzb2NpYXRpb25zLmhhc2hDb2RlKCk7CisgICAgICAgIHJlc3VsdCA9IDMxICogcmVzdWx0ICsgbmFtZWRBc3NvY2lhdGlvbnMuaGFzaENvZGUoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlU3RhdGVNb2RlbC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZVN0YXRlTW9kZWwuamF2YQppbmRleCBkM2Y4MDYwLi43NmU0YmI4IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlU3RhdGVNb2RlbC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdmFsdWUvVmFsdWVTdGF0ZU1vZGVsLmphdmEKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJdGVyYWJsZTw/IGV4dGVuZHMgQXNzb2NpYXRpb25EZXNjcmlwdG9yPiBuYW1lZEFzc29jaWF0aW9ucygpCisgICAgcHVibGljIEl0ZXJhYmxlPE5hbWVkQXNzb2NpYXRpb25Nb2RlbD4gbmFtZWRBc3NvY2lhdGlvbnMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5hbWVkQXNzb2NpYXRpb25zTW9kZWwubmFtZWRBc3NvY2lhdGlvbnMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9hcGkvY29tbW9uL1VuaXRPZldvcmtDYWxsYmFja0VudGl0eVRlc3QuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vVW5pdE9mV29ya0NhbGxiYWNrRW50aXR5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWRiMzFmLi4wMDAwMDAwCi0tLSBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2FwaS9jb21tb24vVW5pdE9mV29ya0NhbGxiYWNrRW50aXR5VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgUmlja2FyZCDDlmJlcmcuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqCi0gKi8KLQotcGFja2FnZSBvcmcucWk0ai5hcGkuY29tbW9uOwotCi1pbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrOwotaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7Ci1pbXBvcnQgb3JnLnFpNGoudGVzdC5BYnN0cmFjdFFpNGpUZXN0OwotaW1wb3J0IG9yZy5xaTRqLnRlc3QuRW50aXR5VGVzdEFzc2VtYmxlcjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogVGVzdCBVbml0T2ZXb3JrQ2FsbGJhY2sgYW5kIFZhbGlkYXRhYmxlCi0gKi8KLXB1YmxpYyBjbGFzcyBVbml0T2ZXb3JrQ2FsbGJhY2tFbnRpdHlUZXN0Ci0gICAgZXh0ZW5kcyBBYnN0cmFjdFFpNGpUZXN0Ci17Ci0gICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCi0gICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgbW9kdWxlLmVudGl0aWVzKCBUZXN0Q2FzZS5jbGFzcyApOwotICAgICAgICBuZXcgRW50aXR5VGVzdEFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBJZ25vcmUoICJWYWxpZGF0aW9uIGlzIG1vdmVkIHRvIHNhbmRib3gsIGFuZCBVb1cgaXMgdW5kZXIgbWFzc2l2ZSByZWZhY3RvcmluZy4iICkKLSAgICBwdWJsaWMgdm9pZCBnaXZlbkNvbXBvc2l0ZVdpdGhWYWxpZGF0YWJsZVdoZW5Vbml0Q29tcGxldGVzVGhlblBlcmZvcm1WYWxpZGF0aW9uKCkKLSAgICAgICAgdGhyb3dzIFVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uCi0gICAgewotICAgICAgICBVbml0T2ZXb3JrIHVvdyA9IG1vZHVsZS5uZXdVbml0T2ZXb3JrKCk7Ci0gICAgICAgIFRlc3RDYXNlIHRlc3QgPSB1b3cubmV3RW50aXR5KCBUZXN0Q2FzZS5jbGFzcyApOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICB1b3cuY29tcGxldGUoKTsKLSAgICAgICAgICAgIGZhaWwoICJWYWxpZGF0aW9uIGRpZCBub3Qgb2NjdXIiICk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgICB1b3cuZGlzY2FyZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gICAgQENvbmNlcm5zKCBUZXN0VmFsaWRhdGFibGVDb25jZXJuLmNsYXNzICkKLQotICAgIGludGVyZmFjZSBUZXN0Q2FzZQotICAgICAgICBleHRlbmRzIEVudGl0eUNvbXBvc2l0ZSAgLy8sIFZhbGlkYXRhYmxlQWJzdHJhY3RDb21wb3NpdGUKLSAgICB7Ci0gICAgfQotLyoKLSAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIFRlc3RWYWxpZGF0YWJsZUNvbmNlcm4gZXh0ZW5kcyBBYnN0cmFjdFZhbGlkYXRhYmxlQ29uY2VybgotICAgIHsKLSAgICAgICAgQE92ZXJyaWRlIHByb3RlY3RlZCB2b2lkIGlzVmFsaWQoIFZhbGlkYXRvciB2YWxpZGF0b3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWxpZGF0b3IuZXJyb3IoIHRydWUsICJWYWxpZGF0aW9uIGVycm9yIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlIHByb3RlY3RlZCBTdHJpbmcgZ2V0UmVzb3VyY2VCdW5kbGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLSovCi19CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQXBwbGljYXRpb25Bc3NlbWJsZXJUZXN0LmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ib290c3RyYXAvQXBwbGljYXRpb25Bc3NlbWJsZXJUZXN0LmphdmEKaW5kZXggNmQ1Zjg1Yy4uMDg5NDYxOSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovYm9vdHN0cmFwL0FwcGxpY2F0aW9uQXNzZW1ibGVyVGVzdC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2Jvb3RzdHJhcC9BcHBsaWNhdGlvbkFzc2VtYmxlclRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ib290c3RyYXA7CiAKIGltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcmVncmVzc2lvbi9xaTM3Ny9JbnRlcmZhY2VDb2xsaXNpb25XaXRoUmVsYXRlZFJldHVyblR5cGVzVGVzdC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcmVncmVzc2lvbi9xaTM3Ny9JbnRlcmZhY2VDb2xsaXNpb25XaXRoUmVsYXRlZFJldHVyblR5cGVzVGVzdC5qYXZhCmluZGV4IGQxNzQxYWMuLmI0NjdhNGQgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3JlZ3Jlc3Npb24vcWkzNzcvSW50ZXJmYWNlQ29sbGlzaW9uV2l0aFJlbGF0ZWRSZXR1cm5UeXBlc1Rlc3QuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9yZWdyZXNzaW9uL3FpMzc3L0ludGVyZmFjZUNvbGxpc2lvbldpdGhSZWxhdGVkUmV0dXJuVHlwZXNUZXN0LmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKICAqLwogcGFja2FnZSBvcmcucWk0ai5yZWdyZXNzaW9uLnFpMzc3OwogCi1pbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLk1hbnlBc3NvY2lhdGlvbjsKQEAgLTM2LDcgKzM1LDYgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNOdWxsLm5vdE51bGxWYWx1ZTsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaGF0OwogCi1ASWdub3JlKCAiVGhpcyB0ZXN0IGV4aGliaXQgUUktMzc3IiApCiBwdWJsaWMgY2xhc3MgSW50ZXJmYWNlQ29sbGlzaW9uV2l0aFJlbGF0ZWRSZXR1cm5UeXBlc1Rlc3QKICAgICBleHRlbmRzIEFic3RyYWN0UWk0alRlc3QKIHsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3JlZ3Jlc3Npb24vcWkzNzcvVmFsdWVDb2xsaXNpb25XaXRoUmVsYXRlZFJldHVyblR5cGVzVGVzdC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcmVncmVzc2lvbi9xaTM3Ny9WYWx1ZUNvbGxpc2lvbldpdGhSZWxhdGVkUmV0dXJuVHlwZXNUZXN0LmphdmEKaW5kZXggMjBlYjcwZi4uZWEyMzJjMSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcmVncmVzc2lvbi9xaTM3Ny9WYWx1ZUNvbGxpc2lvbldpdGhSZWxhdGVkUmV0dXJuVHlwZXNUZXN0LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcmVncmVzc2lvbi9xaTM3Ny9WYWx1ZUNvbGxpc2lvbldpdGhSZWxhdGVkUmV0dXJuVHlwZXNUZXN0LmphdmEKQEAgLTE4LDIxICsxOCwyMCBAQAogICovCiBwYWNrYWdlIG9yZy5xaTRqLnJlZ3Jlc3Npb24ucWkzNzc7CiAKLWltcG9ydCBvcmcuanVuaXQuSWdub3JlOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHk7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5NYW55QXNzb2NpYXRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5PcHRpb25hbDsKIGltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7CitpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQnVpbGRlcjsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwogaW1wb3J0IG9yZy5xaTRqLnRlc3QuQWJzdHJhY3RRaTRqVGVzdDsKIAotQElnbm9yZSggIlRoaXMgdGVzdCBleGhpYml0IFFJLTM3NyIgKQogcHVibGljIGNsYXNzIFZhbHVlQ29sbGlzaW9uV2l0aFJlbGF0ZWRSZXR1cm5UeXBlc1Rlc3QKICAgICBleHRlbmRzIEFic3RyYWN0UWk0alRlc3QKIHsKLQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQogICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KQEAgLTQzLDE1ICs0MiwxOCBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmVBYmxlVG9TZXROYW1lVG9UaGVDb21wYW55KCkKICAgICB7Ci0gICAgICAgIENvbXBhbnkgc3RhcnRVcCA9IG1vZHVsZS5uZXdWYWx1ZSggQ29tcGFueS5jbGFzcyApOwotICAgICAgICBzdGFydFVwLm5hbWUoKS5zZXQoICJBY21lIiApOworICAgICAgICBWYWx1ZUJ1aWxkZXI8Q29tcGFueT4gYnVpbGRlciA9IG1vZHVsZS5uZXdWYWx1ZUJ1aWxkZXIoIENvbXBhbnkuY2xhc3MgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5uYW1lKCkuc2V0KCAiQWNtZSIgKTsKKyAgICAgICAgQ29tcGFueSBzdGFydFVwID0gYnVpbGRlci5uZXdJbnN0YW5jZSgpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmVBYmxlVG9TZXRMZWFkVG9UaGVDb21wYW55KCkKICAgICB7CiAgICAgICAgIENvbXBhbnkgc3RhcnRVcCA9IG1vZHVsZS5uZXdWYWx1ZSggQ29tcGFueS5jbGFzcyApOwotICAgICAgICBFbXBsb3llZSBuaWNsYXMgPSBtb2R1bGUubmV3VmFsdWUoIEVtcGxveWVlLmNsYXNzICk7CisgICAgICAgIFZhbHVlQnVpbGRlcjxFbXBsb3llZT4gYnVpbGRlciA9IG1vZHVsZS5uZXdWYWx1ZUJ1aWxkZXIoIEVtcGxveWVlLmNsYXNzICk7CisgICAgICAgIGJ1aWxkZXIucHJvdG90eXBlKCkuaWRlbnRpdHkoKS5zZXQoICJuaWNsYXMiICk7CisgICAgICAgIEVtcGxveWVlIG5pY2xhcyA9IGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKICAgICAgICAgc3RhcnRVcC5sZWFkKCkuc2V0KCBuaWNsYXMgKTsKICAgICB9CiAKQEAgLTU5LDcgKzYxLDkgQEAKICAgICBwdWJsaWMgdm9pZCBzaG91bGRCZUFibGVUb1NldExlYWRUb1RoZVNhbGVzVGVhbSgpCiAgICAgewogICAgICAgICBTYWxlc1RlYW0gc3RhcnRVcCA9IG1vZHVsZS5uZXdWYWx1ZSggU2FsZXNUZWFtLmNsYXNzICk7Ci0gICAgICAgIEVtcGxveWVlIG5pY2xhcyA9IG1vZHVsZS5uZXdWYWx1ZSggRW1wbG95ZWUuY2xhc3MgKTsKKyAgICAgICAgVmFsdWVCdWlsZGVyPEVtcGxveWVlPiBidWlsZGVyID0gbW9kdWxlLm5ld1ZhbHVlQnVpbGRlciggRW1wbG95ZWUuY2xhc3MgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5pZGVudGl0eSgpLnNldCggIm5pY2xhcyIgKTsKKyAgICAgICAgRW1wbG95ZWUgbmljbGFzID0gYnVpbGRlci5uZXdJbnN0YW5jZSgpOwogICAgICAgICBzdGFydFVwLmxlYWQoKS5zZXQoIG5pY2xhcyApOwogICAgIH0KIApAQCAtNjcsNyArNzEsOSBAQAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEJlQWJsZVRvU2V0TGVhZFRvVGhlUmVzZWFyY2hUZWFtKCkKICAgICB7CiAgICAgICAgIFJlc2VhcmNoVGVhbSBzdGFydFVwID0gbW9kdWxlLm5ld1ZhbHVlKCBSZXNlYXJjaFRlYW0uY2xhc3MgKTsKLSAgICAgICAgRW1wbG95ZWUgbmljbGFzID0gbW9kdWxlLm5ld1ZhbHVlKCBFbXBsb3llZS5jbGFzcyApOworICAgICAgICBWYWx1ZUJ1aWxkZXI8RW1wbG95ZWU+IGJ1aWxkZXIgPSBtb2R1bGUubmV3VmFsdWVCdWlsZGVyKCBFbXBsb3llZS5jbGFzcyApOworICAgICAgICBidWlsZGVyLnByb3RvdHlwZSgpLmlkZW50aXR5KCkuc2V0KCAibmljbGFzIiApOworICAgICAgICBFbXBsb3llZSBuaWNsYXMgPSBidWlsZGVyLm5ld0luc3RhbmNlKCk7CiAgICAgICAgIHN0YXJ0VXAubGVhZCgpLnNldCggbmljbGFzICk7CiAgICAgfQogCkBAIC03NSw3ICs4MSw5IEBACiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmVBYmxlVG9BZGRFbXBsb3llZXNUb1RoZUNvbXBhbnkoKQogICAgIHsKICAgICAgICAgQ29tcGFueSBzdGFydFVwID0gbW9kdWxlLm5ld1ZhbHVlKCBDb21wYW55LmNsYXNzICk7Ci0gICAgICAgIEVtcGxveWVlIG5pY2xhcyA9IG1vZHVsZS5uZXdWYWx1ZSggRW1wbG95ZWUuY2xhc3MgKTsKKyAgICAgICAgVmFsdWVCdWlsZGVyPEVtcGxveWVlPiBidWlsZGVyID0gbW9kdWxlLm5ld1ZhbHVlQnVpbGRlciggRW1wbG95ZWUuY2xhc3MgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5pZGVudGl0eSgpLnNldCggIm5pY2xhcyIgKTsKKyAgICAgICAgRW1wbG95ZWUgbmljbGFzID0gYnVpbGRlci5uZXdJbnN0YW5jZSgpOwogICAgICAgICBzdGFydFVwLmVtcGxveWVlcygpLmFkZCggbmljbGFzICk7CiAgICAgfQogCkBAIC04Myw3ICs5MSw5IEBACiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmVBYmxlVG9BZGRFbXBsb3llZXNUb1RoZVNhbGVzVGVhbSgpCiAgICAgewogICAgICAgICBTYWxlc1RlYW0gc3RhcnRVcCA9IG1vZHVsZS5uZXdWYWx1ZSggU2FsZXNUZWFtLmNsYXNzICk7Ci0gICAgICAgIEVtcGxveWVlIG5pY2xhcyA9IG1vZHVsZS5uZXdWYWx1ZSggRW1wbG95ZWUuY2xhc3MgKTsKKyAgICAgICAgVmFsdWVCdWlsZGVyPEVtcGxveWVlPiBidWlsZGVyID0gbW9kdWxlLm5ld1ZhbHVlQnVpbGRlciggRW1wbG95ZWUuY2xhc3MgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5pZGVudGl0eSgpLnNldCggIm5pY2xhcyIgKTsKKyAgICAgICAgRW1wbG95ZWUgbmljbGFzID0gYnVpbGRlci5uZXdJbnN0YW5jZSgpOwogICAgICAgICBzdGFydFVwLmVtcGxveWVlcygpLmFkZCggbmljbGFzICk7CiAgICAgfQogCkBAIC05MSwxMSArMTAxLDE0IEBACiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmVBYmxlVG9BZGRFbXBsb3llZXNUb1RoZVJlc2VhcmNoVGVhbSgpCiAgICAgewogICAgICAgICBSZXNlYXJjaFRlYW0gc3RhcnRVcCA9IG1vZHVsZS5uZXdWYWx1ZSggUmVzZWFyY2hUZWFtLmNsYXNzICk7Ci0gICAgICAgIEVtcGxveWVlIG5pY2xhcyA9IG1vZHVsZS5uZXdWYWx1ZSggRW1wbG95ZWUuY2xhc3MgKTsKKyAgICAgICAgVmFsdWVCdWlsZGVyPEVtcGxveWVlPiBidWlsZGVyID0gbW9kdWxlLm5ld1ZhbHVlQnVpbGRlciggRW1wbG95ZWUuY2xhc3MgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5pZGVudGl0eSgpLnNldCggIm5pY2xhcyIgKTsKKyAgICAgICAgRW1wbG95ZWUgbmljbGFzID0gYnVpbGRlci5uZXdJbnN0YW5jZSgpOwogICAgICAgICBzdGFydFVwLmVtcGxveWVlcygpLmFkZCggbmljbGFzICk7CiAgICAgfQogCiAgICAgcHVibGljIGludGVyZmFjZSBFbXBsb3llZQorICAgICAgICBleHRlbmRzIElkZW50aXR5CiAgICAgewogICAgIH0KIApAQCAtMTI4LDUgKzE0MSw0IEBACiAgICAgICAgIGV4dGVuZHMgU2FsZXNUZWFtLCBSZXNlYXJjaFRlYW0KICAgICB7CiAgICAgfQotCiB9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9yZWdyZXNzaW9uL3FpNTMvSXNzdWVUZXN0LmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9yZWdyZXNzaW9uL3FpNTMvSXNzdWVUZXN0LmphdmEKaW5kZXggNmNiYzA0Yi4uYzFiNTE1NiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcmVncmVzc2lvbi9xaTUzL0lzc3VlVGVzdC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3JlZ3Jlc3Npb24vcWk1My9Jc3N1ZVRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5yZWdyZXNzaW9uLnFpNTM7CiAKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3JlZ3Jlc3Npb24vcWk1NS9Jc3N1ZVRlc3QuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3JlZ3Jlc3Npb24vcWk1NS9Jc3N1ZVRlc3QuamF2YQppbmRleCAwOWY4YTNiLi42MTcxMzA4IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9yZWdyZXNzaW9uL3FpNTUvSXNzdWVUZXN0LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcmVncmVzc2lvbi9xaTU1L0lzc3VlVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJlZ3Jlc3Npb24ucWk1NTsKIAogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcmVncmVzc2lvbi9xaTY1L0lzc3VlVGVzdC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcmVncmVzc2lvbi9xaTY1L0lzc3VlVGVzdC5qYXZhCmluZGV4IDFmZGIzMTMuLjE2OWNkMWIgMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3JlZ3Jlc3Npb24vcWk2NS9Jc3N1ZVRlc3QuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9yZWdyZXNzaW9uL3FpNjUvSXNzdWVUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucmVncmVzc2lvbi5xaTY1OwogCiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2FwcGxpZXN0by9BcHBsaWVzVG9PckNvbmRpdGlvblFJMjQxVGVzdC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9hcHBsaWVzdG8vQXBwbGllc1RvT3JDb25kaXRpb25RSTI0MVRlc3QuamF2YQppbmRleCA4YTk1NDVmLi4yNjIzZmExIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2FwcGxpZXN0by9BcHBsaWVzVG9PckNvbmRpdGlvblFJMjQxVGVzdC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYXBwbGllc3RvL0FwcGxpZXNUb09yQ29uZGl0aW9uUUkyNDFUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5hcHBsaWVzdG87CiAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZTsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYXNzb2NpYXRpb24vQXNzb2NpYXRpb25FcXVhbGl0eVRlc3QuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvYXNzb2NpYXRpb24vQXNzb2NpYXRpb25FcXVhbGl0eVRlc3QuamF2YQppbmRleCAxYzM4NTJlLi43YWFiYzhjIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2Fzc29jaWF0aW9uL0Fzc29jaWF0aW9uRXF1YWxpdHlUZXN0LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9hc3NvY2lhdGlvbi9Bc3NvY2lhdGlvbkVxdWFsaXR5VGVzdC5qYXZhCkBAIC0yMCw2ICsyMCw3IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbkRlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLk1hbnlBc3NvY2lhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTmFtZWRBc3NvY2lhdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLk9wdGlvbmFsOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcms7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQnVpbGRlcjsKQEAgLTMzLDcgKzM0LDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaGF0OwogCiAvKioKLSAqIEFzc2VydCB0aGF0IEFzc29jaWF0aW9uIGFuZCBNYW55QXNzb2NpYXRpb24gZXF1YWxzL2hhc2hjb2RlIG1ldGhvZHMgY29tYmluZSBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgYW5kIFN0YXRlLgorICogQXNzZXJ0IHRoYXQgQXNzb2NpYXRpb24sIE1hbnlBc3NvY2lhdGlvbiBhbmQgTmFtZWRBc3NvY2lhdGlvbiBlcXVhbHMvaGFzaGNvZGUgbWV0aG9kcyBjb21iaW5lIEFzc29jaWF0aW9uRGVzY3JpcHRvciBhbmQgU3RhdGUuCiAgKi8KIHB1YmxpYyBjbGFzcyBBc3NvY2lhdGlvbkVxdWFsaXR5VGVzdAogICAgIGV4dGVuZHMgQWJzdHJhY3RRaTRqVGVzdApAQCAtNjIsNiArNjMsOCBAQAogICAgICAgICBBc3NvY2lhdGlvbjxBbkVudGl0eT4gYW5FbnRpdHkoKTsKIAogICAgICAgICBNYW55QXNzb2NpYXRpb248QW5FbnRpdHk+IG1hbnlFbnRpdGllcygpOworCisgICAgICAgIE5hbWVkQXNzb2NpYXRpb248QW5FbnRpdHk+IG5hbWVkRW50aXRpZXMoKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50ZXJmYWNlIE90aGVyV2l0aEFzc29jaWF0aW9ucwpAQCAtNzEsNiArNzQsOCBAQAogICAgICAgICBBc3NvY2lhdGlvbjxBbkVudGl0eT4gYW5FbnRpdHkoKTsKIAogICAgICAgICBNYW55QXNzb2NpYXRpb248QW5FbnRpdHk+IG1hbnlFbnRpdGllcygpOworCisgICAgICAgIE5hbWVkQXNzb2NpYXRpb248QW5FbnRpdHk+IG5hbWVkRW50aXRpZXMoKTsKICAgICB9CiAKICAgICAvLwpAQCAtODcsMTAgKzkyLDEyIEBACiAgICAgICAgICAgICBTb21lV2l0aEFzc29jaWF0aW9ucyBzb21lID0gYnVpbGRTb21lV2l0aEFzc29jaWF0aW9uKCBhbkVudGl0eSApOwogICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHNvbWVBc3NvY0Rlc2MgPSBxaTRqLmFwaSgpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggc29tZS5hbkVudGl0eSgpICk7CiAgICAgICAgICAgICBBc3NvY2lhdGlvbkRlc2NyaXB0b3Igc29tZU1hbnlBc3NvY0Rlc2MgPSBxaTRqLmFwaSgpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggc29tZS5tYW55RW50aXRpZXMoKSApOworICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHNvbWVOYW1lZEFzc29jRGVzYyA9IHFpNGouYXBpKCkuYXNzb2NpYXRpb25EZXNjcmlwdG9yRm9yKCBzb21lLm5hbWVkRW50aXRpZXMoKSApOwogCiAgICAgICAgICAgICBTb21lV2l0aEFzc29jaWF0aW9ucyBzb21lMiA9IGJ1aWxkU29tZVdpdGhBc3NvY2lhdGlvbiggYW5FbnRpdHkgKTsKICAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciBzb21lMkFzc29jRGVzYyA9IHFpNGouYXBpKCkuYXNzb2NpYXRpb25EZXNjcmlwdG9yRm9yKCBzb21lMi5hbkVudGl0eSgpICk7CiAgICAgICAgICAgICBBc3NvY2lhdGlvbkRlc2NyaXB0b3Igc29tZTJNYW55QXNzb2NEZXNjID0gcWk0ai5hcGkoKS5hc3NvY2lhdGlvbkRlc2NyaXB0b3JGb3IoIHNvbWUyLm1hbnlFbnRpdGllcygpICk7CisgICAgICAgICAgICBBc3NvY2lhdGlvbkRlc2NyaXB0b3Igc29tZTJOYW1lZEFzc29jRGVzYyA9IHFpNGouYXBpKCkuYXNzb2NpYXRpb25EZXNjcmlwdG9yRm9yKCBzb21lMi5uYW1lZEVudGl0aWVzKCkgKTsKIAogICAgICAgICAgICAgYXNzZXJ0VGhhdCggIkFzc29jaWF0aW9uRGVzY3JpcHRvciBlcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzb21lQXNzb2NEZXNjLApAQCAtMTA0LDYgKzExMSwxMiBAQAogICAgICAgICAgICAgYXNzZXJ0VGhhdCggIk1hbnlBc3NvY2lhdGlvbkRlc2NyaXB0b3IgaGFzaGNvZGUgZXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgc29tZU1hbnlBc3NvY0Rlc2MuaGFzaENvZGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsVG8oIHNvbWUyTWFueUFzc29jRGVzYy5oYXNoQ29kZSgpICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoICJOYW1lZEFzc29jaWF0aW9uRGVzY3JpcHRvciBlcXVhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb21lTmFtZWRBc3NvY0Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFRvKCBzb21lMk5hbWVkQXNzb2NEZXNjICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoICJOYW1lZEFzc29jaWF0aW9uRGVzY3JpcHRvciBoYXNoY29kZSBlcXVhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb21lTmFtZWRBc3NvY0Rlc2MuaGFzaENvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsVG8oIHNvbWUyTmFtZWRBc3NvY0Rlc2MuaGFzaENvZGUoKSApICk7CiAgICAgICAgIH0KICAgICAgICAgZmluYWxseQogICAgICAgICB7CkBAIC0xMjAsMTAgKzEzMywxMiBAQAogICAgICAgICAgICAgU29tZVdpdGhBc3NvY2lhdGlvbnMgc29tZSA9IGJ1aWxkU29tZVdpdGhBc3NvY2lhdGlvbiggdW93Lm5ld0VudGl0eSggQW5FbnRpdHkuY2xhc3MgKSApOwogICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHNvbWVBc3NvY0Rlc2MgPSBxaTRqLmFwaSgpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggc29tZS5hbkVudGl0eSgpICk7CiAgICAgICAgICAgICBBc3NvY2lhdGlvbkRlc2NyaXB0b3Igc29tZU1hbnlBc3NvY0Rlc2MgPSBxaTRqLmFwaSgpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggc29tZS5tYW55RW50aXRpZXMoKSApOworICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHNvbWVOYW1lZEFzc29jRGVzYyA9IHFpNGouYXBpKCkuYXNzb2NpYXRpb25EZXNjcmlwdG9yRm9yKCBzb21lLm5hbWVkRW50aXRpZXMoKSApOwogCiAgICAgICAgICAgICBTb21lV2l0aEFzc29jaWF0aW9ucyBzb21lMiA9IGJ1aWxkU29tZVdpdGhBc3NvY2lhdGlvbiggdW93Lm5ld0VudGl0eSggQW5FbnRpdHkuY2xhc3MgKSApOwogICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHNvbWUyQXNzb2NEZXNjID0gcWk0ai5hcGkoKS5hc3NvY2lhdGlvbkRlc2NyaXB0b3JGb3IoIHNvbWUyLmFuRW50aXR5KCkgKTsKICAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciBzb21lMk1hbnlBc3NvY0Rlc2MgPSBxaTRqLmFwaSgpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggc29tZTIubWFueUVudGl0aWVzKCkgKTsKKyAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciBzb21lMk5hbWVkQXNzb2NEZXNjID0gcWk0ai5hcGkoKS5hc3NvY2lhdGlvbkRlc2NyaXB0b3JGb3IoIHNvbWUyLm5hbWVkRW50aXRpZXMoKSApOwogCiAgICAgICAgICAgICBhc3NlcnRUaGF0KCAiQXNzb2NpYXRpb25EZXNjcmlwdG9yIGVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVBc3NvY0Rlc2MsCkBAIC0xMzcsNiArMTUyLDEyIEBACiAgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTWFueUFzc29jaWF0aW9uRGVzY3JpcHRvciBoYXNoY29kZSBlcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzb21lTWFueUFzc29jRGVzYy5oYXNoQ29kZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxUbyggc29tZTJNYW55QXNzb2NEZXNjLmhhc2hDb2RlKCkgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggIk5hbWVkQXNzb2NpYXRpb25EZXNjcmlwdG9yIGVxdWFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVOYW1lZEFzc29jRGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsVG8oIHNvbWUyTmFtZWRBc3NvY0Rlc2MgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggIk5hbWVkQXNzb2NpYXRpb25EZXNjcmlwdG9yIGhhc2hjb2RlIGVxdWFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVOYW1lZEFzc29jRGVzYy5oYXNoQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxUbyggc29tZTJOYW1lZEFzc29jRGVzYy5oYXNoQ29kZSgpICkgKTsKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKQEAgLTE1NSwxMCArMTc2LDEyIEBACiAgICAgICAgICAgICBTb21lV2l0aEFzc29jaWF0aW9ucyBzb21lID0gYnVpbGRTb21lV2l0aEFzc29jaWF0aW9uKCBhbkVudGl0eSApOwogICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHNvbWVBc3NvY0Rlc2MgPSBxaTRqLmFwaSgpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggc29tZS5hbkVudGl0eSgpICk7CiAgICAgICAgICAgICBBc3NvY2lhdGlvbkRlc2NyaXB0b3Igc29tZU1hbnlBc3NvY0Rlc2MgPSBxaTRqLmFwaSgpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggc29tZS5tYW55RW50aXRpZXMoKSApOworICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHNvbWVOYW1lZEFzc29jRGVzYyA9IHFpNGouYXBpKCkuYXNzb2NpYXRpb25EZXNjcmlwdG9yRm9yKCBzb21lLm5hbWVkRW50aXRpZXMoKSApOwogCiAgICAgICAgICAgICBPdGhlcldpdGhBc3NvY2lhdGlvbnMgb3RoZXIgPSBidWlsZE90aGVyV2l0aEFzc29jaWF0aW9uKCBhbkVudGl0eSApOwogICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIG90aGVyQXNzb2NEZXNjID0gcWk0ai5hcGkoKS5hc3NvY2lhdGlvbkRlc2NyaXB0b3JGb3IoIG90aGVyLmFuRW50aXR5KCkgKTsKLSAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciBzb21lMk1hbnlBc3NvY0Rlc2MgPSBxaTRqLmFwaSgpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggb3RoZXIubWFueUVudGl0aWVzKCkgKTsKKyAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciBvdGhlck1hbnlBc3NvY0Rlc2MgPSBxaTRqLmFwaSgpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggb3RoZXIubWFueUVudGl0aWVzKCkgKTsKKyAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciBvdGhlck5hbWVkQXNzb2NEZXNjID0gcWk0ai5hcGkoKS5hc3NvY2lhdGlvbkRlc2NyaXB0b3JGb3IoIG90aGVyLm5hbWVkRW50aXRpZXMoKSApOwogCiAgICAgICAgICAgICBhc3NlcnRUaGF0KCAiQXNzb2NpYXRpb25EZXNjcmlwdG9yIG5vdCBlcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzb21lQXNzb2NEZXNjLApAQCAtMTY4LDEwICsxOTEsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCggZXF1YWxUbyggb3RoZXJBc3NvY0Rlc2MuaGFzaENvZGUoKSApICkgKTsKICAgICAgICAgICAgIGFzc2VydFRoYXQoICJNYW55QXNzb2NpYXRpb25EZXNjcmlwdG9yIG5vdCBlcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzb21lTWFueUFzc29jRGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vdCggZXF1YWxUbyggc29tZTJNYW55QXNzb2NEZXNjICkgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgbm90KCBlcXVhbFRvKCBvdGhlck1hbnlBc3NvY0Rlc2MgKSApICk7CiAgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTWFueUFzc29jaWF0aW9uRGVzY3JpcHRvciBoYXNoY29kZSBub3QgZXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgc29tZU1hbnlBc3NvY0Rlc2MuaGFzaENvZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vdCggZXF1YWxUbyggc29tZTJNYW55QXNzb2NEZXNjLmhhc2hDb2RlKCkgKSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3QoIGVxdWFsVG8oIG90aGVyTWFueUFzc29jRGVzYy5oYXNoQ29kZSgpICkgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggIk5hbWVkQXNzb2NpYXRpb25EZXNjcmlwdG9yIG5vdCBlcXVhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb21lTmFtZWRBc3NvY0Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICBub3QoIGVxdWFsVG8oIG90aGVyTmFtZWRBc3NvY0Rlc2MgKSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTmFtZWRBc3NvY2lhdGlvbkRlc2NyaXB0b3IgaGFzaGNvZGUgbm90IGVxdWFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVOYW1lZEFzc29jRGVzYy5oYXNoQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm90KCBlcXVhbFRvKCBvdGhlck5hbWVkQXNzb2NEZXNjLmhhc2hDb2RlKCkgKSApICk7CiAgICAgICAgIH0KICAgICAgICAgZmluYWxseQogICAgICAgICB7CkBAIC0yMDMsNiArMjMyLDEyIEBACiAgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTWFueUFzc29jaWF0aW9uIFN0YXRlIGhhc2hjb2RlIG5vdCBlcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzb21lLm1hbnlFbnRpdGllcygpLnRvTGlzdCgpLmhhc2hDb2RlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBub3QoIGVxdWFsVG8oIHNvbWUyLm1hbnlFbnRpdGllcygpLnRvTGlzdCgpLmhhc2hDb2RlKCkgKSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTmFtZWRBc3NvY2lhdGlvbiBTdGF0ZSBub3QgZXF1YWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZS5uYW1lZEVudGl0aWVzKCkudG9NYXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCggZXF1YWxUbyggc29tZTIubmFtZWRFbnRpdGllcygpLnRvTWFwKCkgKSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTmFtZWRBc3NvY2lhdGlvbiBTdGF0ZSBoYXNoY29kZSBub3QgZXF1YWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZS5uYW1lZEVudGl0aWVzKCkudG9NYXAoKS5oYXNoQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm90KCBlcXVhbFRvKCBzb21lMi5uYW1lZEVudGl0aWVzKCkudG9NYXAoKS5oYXNoQ29kZSgpICkgKSApOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewpAQCAtMjMzLDYgKzI2OCwxMiBAQAogICAgICAgICAgICAgYXNzZXJ0VGhhdCggIk1hbnlBc3NvY2lhdGlvbiBTdGF0ZSBoYXNoY29kZSBlcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzb21lLm1hbnlFbnRpdGllcygpLnRvTGlzdCgpLmhhc2hDb2RlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFRvKCBvdGhlci5tYW55RW50aXRpZXMoKS50b0xpc3QoKS5oYXNoQ29kZSgpICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoICJOYW1lZEFzc29jaWF0aW9uIFN0YXRlIGVxdWFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUubmFtZWRFbnRpdGllcygpLnRvTWFwKCksCisgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFRvKCBvdGhlci5uYW1lZEVudGl0aWVzKCkudG9NYXAoKSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTmFtZWRBc3NvY2lhdGlvbiBTdGF0ZSBoYXNoY29kZSBlcXVhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb21lLm5hbWVkRW50aXRpZXMoKS50b01hcCgpLmhhc2hDb2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFRvKCBvdGhlci5uYW1lZEVudGl0aWVzKCkudG9NYXAoKS5oYXNoQ29kZSgpICkgKTsKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKQEAgLTI2Niw2ICszMDcsMTIgQEAKICAgICAgICAgICAgIGFzc2VydFRoYXQoICJNYW55QXNzb2NpYXRpb24gaGFzaGNvZGUgZXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgc29tZS5tYW55RW50aXRpZXMoKS5oYXNoQ29kZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxUbyggc29tZTIubWFueUVudGl0aWVzKCkuaGFzaENvZGUoKSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTmFtZWRBc3NvY2lhdGlvbiBlcXVhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb21lLm5hbWVkRW50aXRpZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsVG8oIHNvbWUyLm5hbWVkRW50aXRpZXMoKSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTmFtZWRBc3NvY2lhdGlvbiBoYXNoY29kZSBlcXVhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb21lLm5hbWVkRW50aXRpZXMoKS5oYXNoQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxUbyggc29tZTIubmFtZWRFbnRpdGllcygpLmhhc2hDb2RlKCkgKSApOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewpAQCAtMjk0LDYgKzM0MSwxMiBAQAogICAgICAgICAgICAgYXNzZXJ0VGhhdCggIk1hbnlBc3NvY2lhdGlvbiBoYXNoY29kZSBub3QgZXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgc29tZS5tYW55RW50aXRpZXMoKS5oYXNoQ29kZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgbm90KCBlcXVhbFRvKCBzb21lMi5tYW55RW50aXRpZXMoKS5oYXNoQ29kZSgpICkgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggIk5hbWVkQXNzb2NpYXRpb24gbm90IGVxdWFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUubmFtZWRFbnRpdGllcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm90KCBlcXVhbFRvKCBzb21lMi5uYW1lZEVudGl0aWVzKCkgKSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTmFtZWRBc3NvY2lhdGlvbiBoYXNoY29kZSBub3QgZXF1YWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZS5uYW1lZEVudGl0aWVzKCkuaGFzaENvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCggZXF1YWxUbyggc29tZTIubmFtZWRFbnRpdGllcygpLmhhc2hDb2RlKCkgKSApICk7CiAgICAgICAgIH0KICAgICAgICAgZmluYWxseQogICAgICAgICB7CkBAIC0zMjQsNiArMzc3LDEyIEBACiAgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTWFueUFzc29jaWF0aW9uIGhhc2hjb2RlIG5vdCBlcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzb21lLm1hbnlFbnRpdGllcygpLmhhc2hDb2RlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBub3QoIGVxdWFsVG8oIG90aGVyLm1hbnlFbnRpdGllcygpLmhhc2hDb2RlKCkgKSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCAiTmFtZWRBc3NvY2lhdGlvbiBub3QgZXF1YWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZS5uYW1lZEVudGl0aWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICBub3QoIGVxdWFsVG8oIG90aGVyLm5hbWVkRW50aXRpZXMoKSApICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoICJOYW1lZEFzc29jaWF0aW9uIGhhc2hjb2RlIG5vdCBlcXVhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb21lLm5hbWVkRW50aXRpZXMoKS5oYXNoQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm90KCBlcXVhbFRvKCBvdGhlci5uYW1lZEVudGl0aWVzKCkuaGFzaENvZGUoKSApICkgKTsKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKQEAgLTM1Miw2ICs0MTEsMTIgQEAKICAgICAgICAgICAgIGFzc2VydFRoYXQoICJNYW55QXNzb2NpYXRpb24gaGFzaGNvZGUgbm90IGVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUubWFueUVudGl0aWVzKCkuaGFzaENvZGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCggZXF1YWxUbyggb3RoZXIubWFueUVudGl0aWVzKCkuaGFzaENvZGUoKSApICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoICJOYW1lZEFzc29jaWF0aW9uIG5vdCBlcXVhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb21lLm5hbWVkRW50aXRpZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCggZXF1YWxUbyggb3RoZXIubmFtZWRFbnRpdGllcygpICkgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggIk5hbWVkQXNzb2NpYXRpb24gaGFzaGNvZGUgbm90IGVxdWFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUubmFtZWRFbnRpdGllcygpLmhhc2hDb2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBub3QoIGVxdWFsVG8oIG90aGVyLm5hbWVkRW50aXRpZXMoKS5oYXNoQ29kZSgpICkgKSApOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewpAQCAtMzY5LDYgKzQzNCw3IEBACiAgICAgICAgICAgICBWYWx1ZUJ1aWxkZXI8U29tZVdpdGhBc3NvY2lhdGlvbnM+IGJ1aWxkZXIgPSBtb2R1bGUubmV3VmFsdWVCdWlsZGVyKCBTb21lV2l0aEFzc29jaWF0aW9ucy5jbGFzcyApOwogICAgICAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5hbkVudGl0eSgpLnNldCggYXNzb2NpYXRlZCApOwogICAgICAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5tYW55RW50aXRpZXMoKS5hZGQoIGFzc29jaWF0ZWQgKTsKKyAgICAgICAgICAgIGJ1aWxkZXIucHJvdG90eXBlKCkubmFtZWRFbnRpdGllcygpLnB1dCggInNvbWVLZXkiLCBhc3NvY2lhdGVkICk7CiAgICAgICAgICAgICBzb21lID0gYnVpbGRlci5uZXdJbnN0YW5jZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzb21lOwpAQCAtMzgxLDYgKzQ0Nyw3IEBACiAgICAgICAgICAgICBWYWx1ZUJ1aWxkZXI8T3RoZXJXaXRoQXNzb2NpYXRpb25zPiBidWlsZGVyID0gbW9kdWxlLm5ld1ZhbHVlQnVpbGRlciggT3RoZXJXaXRoQXNzb2NpYXRpb25zLmNsYXNzICk7CiAgICAgICAgICAgICBidWlsZGVyLnByb3RvdHlwZSgpLmFuRW50aXR5KCkuc2V0KCBhc3NvY2lhdGVkICk7CiAgICAgICAgICAgICBidWlsZGVyLnByb3RvdHlwZSgpLm1hbnlFbnRpdGllcygpLmFkZCggYXNzb2NpYXRlZCApOworICAgICAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5uYW1lZEVudGl0aWVzKCkucHV0KCAic29tZUtleSIsIGFzc29jaWF0ZWQgKTsKICAgICAgICAgICAgIHNvbWUgPSBidWlsZGVyLm5ld0luc3RhbmNlKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNvbWU7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9GdW5jdGlvbmFsTGlzdFRlc3QuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0Z1bmN0aW9uYWxMaXN0VGVzdC5qYXZhCmluZGV4IGRhMGM3MWYuLmI4NDg5NTggMTAwNjQ0Ci0tLSBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0Z1bmN0aW9uYWxMaXN0VGVzdC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL0Z1bmN0aW9uYWxMaXN0VGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1FJMjQ3VGVzdDEuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1FJMjQ3VGVzdDEuamF2YQppbmRleCA5MGM3NzNjLi5kMTg3MTU1IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9RSTI0N1Rlc3QxLmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvUUkyNDdUZXN0MS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlOwogCiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9RSTI0N1Rlc3QyLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9RSTI0N1Rlc3QyLmphdmEKaW5kZXggYmFmZmE0MS4uZTcwYzkwYSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvUUkyNDdUZXN0Mi5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1FJMjQ3VGVzdDIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ydW50aW1lLmNvbXBvc2l0ZTsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHJhbnNpZW50QXNDbGFzc1Rlc3QuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29tcG9zaXRlL1RyYW5zaWVudEFzQ2xhc3NUZXN0LmphdmEKaW5kZXggYjQ3NDRiMS4uNjQ0ZGEwZCAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9jb21wb3NpdGUvVHJhbnNpZW50QXNDbGFzc1Rlc3QuamF2YQorKysgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbXBvc2l0ZS9UcmFuc2llbnRBc0NsYXNzVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuY29tcG9zaXRlOwogCiBpbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29uY2VybnMvUHJvcGVydHlJbmhlcml0YW5jZVRlc3QuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29uY2VybnMvUHJvcGVydHlJbmhlcml0YW5jZVRlc3QuamF2YQppbmRleCBlYTViMjRmLi43OWIzZDQ5IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbmNlcm5zL1Byb3BlcnR5SW5oZXJpdGFuY2VUZXN0LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9jb25jZXJucy9Qcm9wZXJ0eUluaGVyaXRhbmNlVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUuY29uY2VybnM7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9jb25zdHJhaW50cy9Db25zdHJhaW50c1Rlc3QucHJvcGVydGllcyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvY29uc3RyYWludHMvQ29uc3RyYWludHNUZXN0LnByb3BlcnRpZXMKaW5kZXggZDQ1ZDU3MS4uYmIxOGQ1ZiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9jb25zdHJhaW50cy9Db25zdHJhaW50c1Rlc3QucHJvcGVydGllcworKysgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2NvbnN0cmFpbnRzL0NvbnN0cmFpbnRzVGVzdC5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIHFpNGouY29uc3RyYWludC5Db25zdHJhaW50c1Rlc3QkTXlPbmVDb21wb3NpdGU9TWVzc2FnZTEKIAogcWk0ai5jb25zdHJhaW50Lk5vdE51bGw9TWVzc2FnZTIKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvZW50aXR5L0VudGl0eUNvbXBvc2l0ZUVxdWFsaXR5VGVzdC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9lbnRpdHkvRW50aXR5Q29tcG9zaXRlRXF1YWxpdHlUZXN0LmphdmEKaW5kZXggNjU4ZGU5Yy4uMzU0ZTVkMCAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9lbnRpdHkvRW50aXR5Q29tcG9zaXRlRXF1YWxpdHlUZXN0LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9lbnRpdHkvRW50aXR5Q29tcG9zaXRlRXF1YWxpdHlUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5lbnRpdHk7CiAKIGltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9JbnZvY2F0aW9uSW5qZWN0aW9uVGVzdC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vSW52b2NhdGlvbkluamVjdGlvblRlc3QuamF2YQppbmRleCA3NDI0ZGMzLi5iZjUwOTFjIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9JbnZvY2F0aW9uSW5qZWN0aW9uVGVzdC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL0ludm9jYXRpb25JbmplY3Rpb25UZXN0LmphdmEKQEAgLTU5LDI3ICs1OSwyOSBAQAogCiAgICAgQE1peGlucyggTXlNaXhpbi5jbGFzcyApCiAgICAgQENvbmNlcm5zKCBNeUNvbmNlcm4uY2xhc3MgKQorLy8gU1RBUlQgU05JUFBFVDogZGVjbGFyYXRpb24KICAgICBwdWJsaWMgaW50ZXJmYWNlIE15Q29tcG9zaXRlCiAgICAgICAgIGV4dGVuZHMgVHJhbnNpZW50Q29tcG9zaXRlCiAgICAgewogICAgICAgICBARm9vKCAiMSIgKQogICAgICAgICB2b2lkIGRvU3R1ZmYoKTsKLQorLy8gRU5EIFNOSVBQRVQ6IGRlY2xhcmF0aW9uCiAgICAgICAgIHZvaWQgZG9TdHVmZjIoKTsKIAogICAgICAgICBARm9vKCAiWCIgKQogICAgICAgICB2b2lkIGRvU3R1ZmYzKCk7CiAgICAgfQogCisvLyBTVEFSVCBTTklQUEVUOiB1c2UxCiAgICAgcHVibGljIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBNeUNvbmNlcm4KICAgICAgICAgZXh0ZW5kcyBDb25jZXJuT2Y8TXlDb21wb3NpdGU+CiAgICAgICAgIGltcGxlbWVudHMgTXlDb21wb3NpdGUKICAgICB7CiAgICAgICAgIEBJbnZvY2F0aW9uCi0gICAgICAgIE1ldGhvZCBtZXRob2Q7Ci0KLSAgICAgICAgQEludm9jYXRpb24KICAgICAgICAgRm9vIGZvbzsKKy8vIEVORCBTTklQUEVUOiB1c2UxCisgICAgICAgIEBJbnZvY2F0aW9uCisgICAgICAgIE1ldGhvZCBtZXRob2Q7CiAKICAgICAgICAgQEludm9jYXRpb24KICAgICAgICAgQW5ub3RhdGVkRWxlbWVudCBhZTsKQEAgLTEyOSwxMCArMTMxLDExIEBACiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH0KLQorLy8gU1RBUlQgU05JUFBFVDogYW5ub3RhdGlvbgogICAgIEBSZXRlbnRpb24oIFJVTlRJTUUgKQogICAgIEBpbnRlcmZhY2UgRm9vCiAgICAgewogICAgICAgICBTdHJpbmcgdmFsdWUoKTsKICAgICB9CisvLyBFTkQgU05JUFBFVDogYW5ub3RhdGlvbgogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL1N0cnVjdHVyZUluamVjdGlvblRlc3QuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL1N0cnVjdHVyZUluamVjdGlvblRlc3QuamF2YQppbmRleCBmNDQ2NDkzLi5jYmM4ODU4IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9TdHJ1Y3R1cmVJbmplY3Rpb25UZXN0LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9pbmplY3Rpb24vU3RydWN0dXJlSW5qZWN0aW9uVGVzdC5qYXZhCkBAIC05NiwxMyArOTYsMTMgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUZXN0cyBpbmplY3RlZCBtaXhpbiBmb3IgYSBRaTRqIGFubm90YXRlZCB3aXRoIHtAbGluayBAb3JnLnFpNGouY29tcG9zaXRlLnNjb3BlLlN0cnVjdHVyZX0uCisgICAgICogVGVzdHMgaW5qZWN0ZWQgbWl4aW4gZm9yIGEgWmVzdCBhbm5vdGF0ZWQgd2l0aCB7QGxpbmsgQG9yZy5xaTRqLmNvbXBvc2l0ZS5zY29wZS5TdHJ1Y3R1cmV9LgogICAgICAqLwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgaW5qZWN0ZWRTdHJ1Y3R1cmVGb3JRaTRqKCkKICAgICB7CiAgICAgICAgIFN0cnVjdHVyZUluamVjdGlvbkNvbXBvc2l0ZSBzaWMgPSBtb2R1bGUubmV3VHJhbnNpZW50KCBTdHJ1Y3R1cmVJbmplY3Rpb25Db21wb3NpdGUuY2xhc3MgKTsKLSAgICAgICAgYXNzZXJ0VGhhdCggIkluamVjdGVkIFFpNGoiLCBzaWMuZ2V0UWk0aigpLCBpcyggbm90TnVsbFZhbHVlKCkgKSApOworICAgICAgICBhc3NlcnRUaGF0KCAiSW5qZWN0ZWQgWmVzdCIsIHNpYy5nZXRRaTRqKCksIGlzKCBub3ROdWxsVmFsdWUoKSApICk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL29iamVjdHMvT3V0ZXJDbGFzcy5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9vYmplY3RzL091dGVyQ2xhc3MuamF2YQppbmRleCAzYzIxMGU0Li44MTVmZTk5IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL29iamVjdHMvT3V0ZXJDbGFzcy5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvb2JqZWN0cy9PdXRlckNsYXNzLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS5vYmplY3RzOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TdHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL3F1ZXJ5L21vZGVsL0Rlc2NyaWJhYmxlLmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL3F1ZXJ5L21vZGVsL0Rlc2NyaWJhYmxlLmphdmEKaW5kZXggMWMxODNhMC4uYjFjYTg4ZiAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS9xdWVyeS9tb2RlbC9EZXNjcmliYWJsZS5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvcXVlcnkvbW9kZWwvRGVzY3JpYmFibGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5ydW50aW1lLnF1ZXJ5Lm1vZGVsOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5Vc2VEZWZhdWx0czsKZGlmZiAtLWdpdCBhL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdXRpbC9Bbm5vdGF0aW9uc1Rlc3QuamF2YSBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdXRpbC9Bbm5vdGF0aW9uc1Rlc3QuamF2YQppbmRleCAzNzdlOGRlLi42MGYxMTg4IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL3V0aWwvQW5ub3RhdGlvbnNUZXN0LmphdmEKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS91dGlsL0Fubm90YXRpb25zVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUudXRpbDsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlR5cGU7CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlQ29tcG9zaXRlQmFzaWNzVGVzdC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZUNvbXBvc2l0ZUJhc2ljc1Rlc3QuamF2YQppbmRleCA2YTc1ZDI2Li4zYWQ0ZmQ5IDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlQ29tcG9zaXRlQmFzaWNzVGVzdC5qYXZhCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvdmFsdWUvVmFsdWVDb21wb3NpdGVCYXNpY3NUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoucnVudGltZS52YWx1ZTsKIAogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZVNlcmlhbGl6YXRpb25SZWdyZXNzaW9uVGVzdC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZVNlcmlhbGl6YXRpb25SZWdyZXNzaW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ODRkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlU2VyaWFsaXphdGlvblJlZ3Jlc3Npb25UZXN0LmphdmEKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGoucnVudGltZS52YWx1ZTsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHk7CitpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OworaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZUJ1aWxkZXI7CitpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlU2VyaWFsaXphdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmVudGl0eXN0b3JlLm1lbW9yeS5NZW1vcnlFbnRpdHlTdG9yZVNlcnZpY2U7CitpbXBvcnQgb3JnLnFpNGouc3BpLnV1aWQuVXVpZElkZW50aXR5R2VuZXJhdG9yU2VydmljZTsKK2ltcG9ydCBvcmcucWk0ai50ZXN0LkFic3RyYWN0UWk0alRlc3Q7CitpbXBvcnQgb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLm9yZ2pzb24uT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvblNlcnZpY2U7CisKK3B1YmxpYyBjbGFzcyBWYWx1ZVNlcmlhbGl6YXRpb25SZWdyZXNzaW9uVGVzdCBleHRlbmRzIEFic3RyYWN0UWk0alRlc3QKK3sKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBtb2R1bGUuZW50aXRpZXMoIFNpbXBsZUVudGl0eS5jbGFzcyApOworICAgICAgICBtb2R1bGUuZW50aXRpZXMoIER1YWxGYWNlZC5jbGFzcyApOworICAgICAgICBtb2R1bGUudmFsdWVzKCBEdWFsRmFjZWQuY2xhc3MgKTsKKyAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBNZW1vcnlFbnRpdHlTdG9yZVNlcnZpY2UuY2xhc3MgKTsKKyAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBVdWlkSWRlbnRpdHlHZW5lcmF0b3JTZXJ2aWNlLmNsYXNzICk7CisgICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvblNlcnZpY2UuY2xhc3MgKS50YWdnZWRXaXRoKCBWYWx1ZVNlcmlhbGl6YXRpb24uRm9ybWF0cy5KU09OICk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBnaXZlbk5ld1ZhbHVlV2hlbkNvbnZlcnRpbmdUb0VudGl0eUV4cGVjdE5ld0VudGl0eUluU3RvcmUoKQorICAgICAgICB0aHJvd3MgVW5pdE9mV29ya0NvbXBsZXRpb25FeGNlcHRpb24KKyAgICB7CisgICAgICAgIFZhbHVlQnVpbGRlcjxEdWFsRmFjZWQ+IGJ1aWxkZXIgPSBtb2R1bGUubmV3VmFsdWVCdWlsZGVyKCBEdWFsRmFjZWQuY2xhc3MgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5pZGVudGl0eSgpLnNldCggIjEyMzQiICk7CisgICAgICAgIGJ1aWxkZXIucHJvdG90eXBlKCkubmFtZSgpLnNldCggIkhlZGhtYW4iICk7CisgICAgICAgIER1YWxGYWNlZCB2YWx1ZSA9IGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIFNpbXBsZUVudGl0eSBleHRlbmRzIElkZW50aXR5CisgICAgeworICAgICAgICBQcm9wZXJ0eTxTdHJpbmc+IG5hbWUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIER1YWxGYWNlZCBleHRlbmRzIElkZW50aXR5CisgICAgeworICAgICAgICBQcm9wZXJ0eTxTdHJpbmc+IG5hbWUoKTsKKworICAgICAgICBBc3NvY2lhdGlvbjxTaW1wbGVFbnRpdHk+IHNpbXBsZSgpOworCisgICAgICAgIE1hbnlBc3NvY2lhdGlvbjxTaW1wbGVFbnRpdHk+IHNpbXBsZXMoKTsKKworICAgICAgICBOYW1lZEFzc29jaWF0aW9uPFNpbXBsZUVudGl0eT4gbmFtZWRTaW1wbGVzKCk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL3ZhbHVlL1ZhbHVlV2l0aEFzc29jaWF0aW9uVGVzdC5qYXZhIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZVdpdGhBc3NvY2lhdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk1NDJlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS92YWx1ZS9WYWx1ZVdpdGhBc3NvY2lhdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGoucnVudGltZS52YWx1ZTsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb25TdGF0ZUhvbGRlcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uT3B0aW9uYWw7CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlCdWlsZGVyOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHk7CitpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OworaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcms7CitpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29ya0NvbXBsZXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQnVpbGRlcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVTZXJpYWxpemF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouZW50aXR5c3RvcmUubWVtb3J5Lk1lbW9yeUVudGl0eVN0b3JlU2VydmljZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkudXVpZC5VdWlkSWRlbnRpdHlHZW5lcmF0b3JTZXJ2aWNlOworaW1wb3J0IG9yZy5xaTRqLnRlc3QuQWJzdHJhY3RRaTRqVGVzdDsKK2ltcG9ydCBvcmcucWk0ai52YWx1ZXNlcmlhbGl6YXRpb24ub3JnanNvbi5PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uU2VydmljZTsKKworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jc0VxdWFsLmVxdWFsVG87CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhhdDsKKworcHVibGljIGNsYXNzIFZhbHVlV2l0aEFzc29jaWF0aW9uVGVzdCBleHRlbmRzIEFic3RyYWN0UWk0alRlc3QKK3sKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBtb2R1bGUuZW50aXRpZXMoIFNpbXBsZU5hbWUuY2xhc3MgKTsKKyAgICAgICAgbW9kdWxlLmVudGl0aWVzKCBEdWFsRmFjZWQuY2xhc3MgKTsKKyAgICAgICAgbW9kdWxlLnZhbHVlcyggU2ltcGxlTmFtZS5jbGFzcyApOworICAgICAgICBtb2R1bGUudmFsdWVzKCBEdWFsRmFjZWQuY2xhc3MgKTsKKyAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBNZW1vcnlFbnRpdHlTdG9yZVNlcnZpY2UuY2xhc3MgKTsKKyAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBVdWlkSWRlbnRpdHlHZW5lcmF0b3JTZXJ2aWNlLmNsYXNzICk7CisgICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvblNlcnZpY2UuY2xhc3MgKS50YWdnZWRXaXRoKCBWYWx1ZVNlcmlhbGl6YXRpb24uRm9ybWF0cy5KU09OICk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBnaXZlbkVudGl0eUluU3RvcmVXaGVuRmV0Y2hFbnRpdHlSZWZlcmVuY2VFeHBlY3RTdWNjZXNzKCkKKyAgICAgICAgdGhyb3dzIFVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uCisgICAgeworICAgICAgICBTdHJpbmcgaWRlbnRpdHkxOworICAgICAgICBTdHJpbmcgaWRlbnRpdHkyOworICAgICAgICBEdWFsRmFjZWQgdmFsdWU7CisgICAgICAgIHRyeSAoVW5pdE9mV29yayB1b3cgPSBtb2R1bGUubmV3VW5pdE9mV29yaygpKQorICAgICAgICB7CisgICAgICAgICAgICBFbnRpdHlCdWlsZGVyPFNpbXBsZU5hbWU+IGJ1aWxkZXIxID0gdW93Lm5ld0VudGl0eUJ1aWxkZXIoIFNpbXBsZU5hbWUuY2xhc3MgKTsKKyAgICAgICAgICAgIGJ1aWxkZXIxLmluc3RhbmNlKCkubmFtZSgpLnNldCggIk5pY2xhcyIgKTsKKyAgICAgICAgICAgIFNpbXBsZU5hbWUgc2ltcGxlRW50aXR5ID0gYnVpbGRlcjEubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIGlkZW50aXR5MSA9IHNpbXBsZUVudGl0eS5pZGVudGl0eSgpLmdldCgpOworCisgICAgICAgICAgICBFbnRpdHlCdWlsZGVyPER1YWxGYWNlZD4gYnVpbGRlcjIgPSB1b3cubmV3RW50aXR5QnVpbGRlciggRHVhbEZhY2VkLmNsYXNzICk7CisgICAgICAgICAgICBEdWFsRmFjZWQgcHJvdG8gPSBidWlsZGVyMi5pbnN0YW5jZSgpOworICAgICAgICAgICAgcHJvdG8ubmFtZSgpLnNldCggIkhlZGhtYW4iICk7CisgICAgICAgICAgICBwcm90by5zaW1wbGUoKS5zZXQoIHNpbXBsZUVudGl0eSApOworICAgICAgICAgICAgcHJvdG8uc2ltcGxlcygpLmFkZCggc2ltcGxlRW50aXR5ICk7CisgICAgICAgICAgICBwcm90by5uYW1lZFNpbXBsZXMoKS5wdXQoICJuaWNsYXMiLCBzaW1wbGVFbnRpdHkgKTsKKyAgICAgICAgICAgIER1YWxGYWNlZCBmYWNlZCA9IGJ1aWxkZXIyLm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICBpZGVudGl0eTIgPSBmYWNlZC5pZGVudGl0eSgpLmdldCgpOworICAgICAgICAgICAgdmFsdWUgPSB1b3cudG9WYWx1ZSggRHVhbEZhY2VkLmNsYXNzLCBmYWNlZCApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggdmFsdWUuaWRlbnRpdHkoKS5nZXQoKSwgZXF1YWxUbyggaWRlbnRpdHkyICkgKTsKKyAgICAgICAgICAgIHVvdy5jb21wbGV0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IChVbml0T2ZXb3JrIHVvdyA9IG1vZHVsZS5uZXdVbml0T2ZXb3JrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIER1YWxGYWNlZCBlbnRpdHkgPSB1b3cuZ2V0KCBEdWFsRmFjZWQuY2xhc3MsIGlkZW50aXR5MiApOworICAgICAgICAgICAgQXNzb2NpYXRpb25TdGF0ZUhvbGRlciBob2xkZXIgPSBzcGkuc3RhdGVPZiggKEVudGl0eUNvbXBvc2l0ZSkgZW50aXR5ICk7CisgICAgICAgICAgICBBc3NvY2lhdGlvbjw/PiBzaW1wbGUgPSBob2xkZXIuYWxsQXNzb2NpYXRpb25zKCkuaXRlcmF0b3IoKS5uZXh0KCk7CisgICAgICAgICAgICBNYW55QXNzb2NpYXRpb248Pz4gc2ltcGxlcyA9IGhvbGRlci5hbGxNYW55QXNzb2NpYXRpb25zKCkuaXRlcmF0b3IoKS5uZXh0KCk7CisgICAgICAgICAgICBOYW1lZEFzc29jaWF0aW9uPD8+IG5hbWVkU2ltcGxlcyA9IGhvbGRlci5hbGxOYW1lZEFzc29jaWF0aW9ucygpLml0ZXJhdG9yKCkubmV4dCgpOworCisgICAgICAgICAgICBhc3NlcnRUaGF0KCBzcGkuZW50aXR5UmVmZXJlbmNlT2YoIHNpbXBsZSApLCBlcXVhbFRvKCBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5MSApICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIHNwaS5lbnRpdHlSZWZlcmVuY2VPZiggc2ltcGxlcyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLml0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAubmV4dCgpLCBlcXVhbFRvKCBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5MSApICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIHNwaS5lbnRpdHlSZWZlcmVuY2VPZiggbmFtZWRTaW1wbGVzICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5uZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0VmFsdWUoKSwgZXF1YWxUbyggRW50aXR5UmVmZXJlbmNlLnBhcnNlRW50aXR5UmVmZXJlbmNlKCBpZGVudGl0eTEgKSApICk7CisKKyAgICAgICAgICAgIER1YWxGYWNlZCByZXN1cnJlY3RlZCA9IHVvdy50b0VudGl0eSggRHVhbEZhY2VkLmNsYXNzLCB2YWx1ZSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggcmVzdXJyZWN0ZWQuc2ltcGxlKCksIGVxdWFsVG8oIGVudGl0eS5zaW1wbGUoKSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCByZXN1cnJlY3RlZC5zaW1wbGVzKCksIGVxdWFsVG8oIGVudGl0eS5zaW1wbGVzKCkgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggcmVzdXJyZWN0ZWQubmFtZWRTaW1wbGVzKCksIGVxdWFsVG8oIGVudGl0eS5uYW1lZFNpbXBsZXMoKSApICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdpdmVuTmV3VmFsdWVXaGVuQ29udmVydGluZ1RvRW50aXR5RXhwZWN0TmV3RW50aXR5SW5TdG9yZSgpCisgICAgICAgIHRocm93cyBVbml0T2ZXb3JrQ29tcGxldGlvbkV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgVmFsdWVCdWlsZGVyPER1YWxGYWNlZD4gYnVpbGRlciA9IG1vZHVsZS5uZXdWYWx1ZUJ1aWxkZXIoIER1YWxGYWNlZC5jbGFzcyApOworICAgICAgICBidWlsZGVyLnByb3RvdHlwZSgpLmlkZW50aXR5KCkuc2V0KCAiMTIzNCIgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5uYW1lKCkuc2V0KCAiSGVkaG1hbiIgKTsKKyAgICAgICAgRHVhbEZhY2VkIHZhbHVlID0gYnVpbGRlci5uZXdJbnN0YW5jZSgpOworCisgICAgICAgIHRyeSAoVW5pdE9mV29yayB1b3cgPSBtb2R1bGUubmV3VW5pdE9mV29yaygpKQorICAgICAgICB7CisgICAgICAgICAgICB1b3cudG9FbnRpdHkoIER1YWxGYWNlZC5jbGFzcywgdmFsdWUgKTsKKyAgICAgICAgICAgIHVvdy5jb21wbGV0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IChVbml0T2ZXb3JrIHVvdyA9IG1vZHVsZS5uZXdVbml0T2ZXb3JrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIER1YWxGYWNlZCBlbnRpdHkgPSB1b3cuZ2V0KCBEdWFsRmFjZWQuY2xhc3MsICIxMjM0IiApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggZW50aXR5LmlkZW50aXR5KCkuZ2V0KCksIGVxdWFsVG8oICIxMjM0IiApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBlbnRpdHkubmFtZSgpLmdldCgpLCBlcXVhbFRvKCAiSGVkaG1hbiIgKSApOworICAgICAgICAgICAgdW93LmNvbXBsZXRlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdpdmVuVmFsdWVXaXRoSWRlbnRpdHlBbHJlYWR5SW5TdG9yZVdoZW5Db252ZXJ0aW5nVG9FbnRpdHlFeHBlY3RFeGlzdGluZ0VudGl0eVRvQmVVcGRhdGVkKCkKKyAgICAgICAgdGhyb3dzIFVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uCisgICAgeworICAgICAgICBTdHJpbmcgaWRlbnRpdHkxOworICAgICAgICBTdHJpbmcgaWRlbnRpdHkyOworICAgICAgICB0cnkgKFVuaXRPZldvcmsgdW93ID0gbW9kdWxlLm5ld1VuaXRPZldvcmsoKSkKKyAgICAgICAgeworICAgICAgICAgICAgRW50aXR5QnVpbGRlcjxTaW1wbGVOYW1lPiBidWlsZGVyMSA9IHVvdy5uZXdFbnRpdHlCdWlsZGVyKCBTaW1wbGVOYW1lLmNsYXNzICk7CisgICAgICAgICAgICBidWlsZGVyMS5pbnN0YW5jZSgpLm5hbWUoKS5zZXQoICJOaWNsYXMiICk7CisgICAgICAgICAgICBTaW1wbGVOYW1lIHNpbXBsZUVudGl0eSA9IGJ1aWxkZXIxLm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICBpZGVudGl0eTEgPSBzaW1wbGVFbnRpdHkuaWRlbnRpdHkoKS5nZXQoKTsKKworICAgICAgICAgICAgRW50aXR5QnVpbGRlcjxEdWFsRmFjZWQ+IGJ1aWxkZXIyID0gdW93Lm5ld0VudGl0eUJ1aWxkZXIoIER1YWxGYWNlZC5jbGFzcyApOworICAgICAgICAgICAgRHVhbEZhY2VkIHByb3RvID0gYnVpbGRlcjIuaW5zdGFuY2UoKTsKKyAgICAgICAgICAgIHByb3RvLm5hbWUoKS5zZXQoICJIZWRobWFuIiApOworICAgICAgICAgICAgcHJvdG8uc2ltcGxlKCkuc2V0KCBzaW1wbGVFbnRpdHkgKTsKKyAgICAgICAgICAgIHByb3RvLnNpbXBsZXMoKS5hZGQoIHNpbXBsZUVudGl0eSApOworICAgICAgICAgICAgcHJvdG8ubmFtZWRTaW1wbGVzKCkucHV0KCAibmljbGFzIiwgc2ltcGxlRW50aXR5ICk7CisgICAgICAgICAgICBEdWFsRmFjZWQgZmFjZWQgPSBidWlsZGVyMi5uZXdJbnN0YW5jZSgpOworICAgICAgICAgICAgaWRlbnRpdHkyID0gZmFjZWQuaWRlbnRpdHkoKS5nZXQoKTsKKyAgICAgICAgICAgIHVvdy5jb21wbGV0ZSgpOworICAgICAgICB9CisgICAgICAgIFZhbHVlQnVpbGRlcjxTaW1wbGVOYW1lPiB2YjEgPSBtb2R1bGUubmV3VmFsdWVCdWlsZGVyKCBTaW1wbGVOYW1lLmNsYXNzICk7CisgICAgICAgIHZiMS5wcm90b3R5cGUoKS5pZGVudGl0eSgpLnNldCggaWRlbnRpdHkxICk7CisgICAgICAgIHZiMS5wcm90b3R5cGUoKS5uYW1lKCkuc2V0KCAiUGF1bCIgKTsKKyAgICAgICAgU2ltcGxlTmFtZSBzaW1wbGVWYWx1ZSA9IHZiMS5uZXdJbnN0YW5jZSgpOworCisgICAgICAgIFZhbHVlQnVpbGRlcjxEdWFsRmFjZWQ+IHZiMiA9IG1vZHVsZS5uZXdWYWx1ZUJ1aWxkZXIoIER1YWxGYWNlZC5jbGFzcyApOworICAgICAgICB2YjIucHJvdG90eXBlKCkuaWRlbnRpdHkoKS5zZXQoIGlkZW50aXR5MiApOworICAgICAgICB2YjIucHJvdG90eXBlKCkubmFtZSgpLnNldCggIk1lcmxpbiIgKTsKKyAgICAgICAgdmIyLnByb3RvdHlwZSgpLnNpbXBsZSgpLnNldCggc2ltcGxlVmFsdWUgKTsKKyAgICAgICAgdmIyLnByb3RvdHlwZSgpLnNpbXBsZXMoKS5hZGQoIHNpbXBsZVZhbHVlICk7CisgICAgICAgIHZiMi5wcm90b3R5cGUoKS5uYW1lZFNpbXBsZXMoKS5wdXQoICJwYXVsIiwgc2ltcGxlVmFsdWUgKTsKKyAgICAgICAgRHVhbEZhY2VkIGR1YWxWYWx1ZSA9IHZiMi5uZXdJbnN0YW5jZSgpOworCisgICAgICAgIHRyeSAoVW5pdE9mV29yayB1b3cgPSBtb2R1bGUubmV3VW5pdE9mV29yaygpKQorICAgICAgICB7CisgICAgICAgICAgICBEdWFsRmFjZWQgZHVhbEVudGl0eSA9IHVvdy50b0VudGl0eSggRHVhbEZhY2VkLmNsYXNzLCBkdWFsVmFsdWUgKTsKKyAgICAgICAgICAgIC8vIFRoZSByb290IGVudGl0eSBpcyBleHBlY3RlZCB0byBoYXZlIGNoYW5nZWQgdmFsdWUsCisgICAgICAgICAgICBhc3NlcnRUaGF0KCBkdWFsRW50aXR5Lm5hbWUoKS5nZXQoKSwgZXF1YWxUbyggIk1lcmxpbiIgKSApOworICAgICAgICAgICAgLy8gQnV0IHRoZSByZWZlcmVuY2VkIGVudGl0eSBpcyBub3QgdXBkYXRlZCwgb25seSB1c2luZyB0aGUgRW50aXR5UmVmZXJlbmNlLCB3aGljaCBzdGlsbCBwb2ludHMgdG8gIk5pY2xhcyIsCisgICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGUgdmFsdWUgY29udGFpbnMgIlBhdWwiIGZvciB0aGF0IGVudGl0eS4gVGhhdCBlbnRpdHkgbmVlZGRzIHRvIGJlIHVwZGF0ZWQgc2VwYXJhdGVseQorICAgICAgICAgICAgYXNzZXJ0VGhhdCggZHVhbEVudGl0eS5zaW1wbGUoKS5nZXQoKS5uYW1lKCkuZ2V0KCksIGVxdWFsVG8oICJOaWNsYXMiICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGR1YWxFbnRpdHkuc2ltcGxlcygpLmdldCgwKS5uYW1lKCkuZ2V0KCksIGVxdWFsVG8oICJOaWNsYXMiICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGR1YWxFbnRpdHkubmFtZWRTaW1wbGVzKCkuZ2V0KCJwYXVsIikubmFtZSgpLmdldCgpLCBlcXVhbFRvKCAiTmljbGFzIiApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBkdWFsRW50aXR5Lm5hbWVkU2ltcGxlcygpLmdldCgibmljbGFzIiksIGVxdWFsVG8oIG51bGwgKSApOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGludGVyZmFjZSBTaW1wbGVOYW1lIGV4dGVuZHMgSWRlbnRpdHkKKyAgICB7CisgICAgICAgIFByb3BlcnR5PFN0cmluZz4gbmFtZSgpOworICAgIH0KKworICAgIHB1YmxpYyBpbnRlcmZhY2UgRHVhbEZhY2VkIGV4dGVuZHMgSWRlbnRpdHkKKyAgICB7CisgICAgICAgIFByb3BlcnR5PFN0cmluZz4gbmFtZSgpOworCisgICAgICAgIEBPcHRpb25hbAorICAgICAgICBBc3NvY2lhdGlvbjxTaW1wbGVOYW1lPiBzaW1wbGUoKTsKKworICAgICAgICBNYW55QXNzb2NpYXRpb248U2ltcGxlTmFtZT4gc2ltcGxlcygpOworCisgICAgICAgIE5hbWVkQXNzb2NpYXRpb248U2ltcGxlTmFtZT4gbmFtZWRTaW1wbGVzKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS92aXNpYmlsaXR5L1Zpc2liaWxpdHlJblVuaXRPZldvcmtUZXN0LmphdmEgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL3Zpc2liaWxpdHkvVmlzaWJpbGl0eUluVW5pdE9mV29ya1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTllZjZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovcnVudGltZS92aXNpYmlsaXR5L1Zpc2liaWxpdHlJblVuaXRPZldvcmtUZXN0LmphdmEKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKgorKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoKKyogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCitwYWNrYWdlIG9yZy5xaTRqLnJ1bnRpbWUudmlzaWJpbGl0eTsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlNlcnZpY2U7CitpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TdHJ1Y3R1cmU7CitpbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKK2ltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlUmVmZXJlbmNlOworaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CitpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29yazsKK2ltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVTZXJpYWxpemF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5BcHBsaWNhdGlvbkFzc2VtYmxlcjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXBwbGljYXRpb25Bc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXBwbGljYXRpb25Bc3NlbWJseUZhY3Rvcnk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5FbmVyZ3k0SmF2YTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouZW50aXR5c3RvcmUubWVtb3J5Lk1lbW9yeUVudGl0eVN0b3JlU2VydmljZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkudXVpZC5VdWlkSWRlbnRpdHlHZW5lcmF0b3JTZXJ2aWNlOworaW1wb3J0IG9yZy5xaTRqLnZhbHVlc2VyaWFsaXphdGlvbi5vcmdqc29uLk9yZ0pzb25WYWx1ZVNlcmlhbGl6YXRpb25TZXJ2aWNlOworCitwdWJsaWMgY2xhc3MgVmlzaWJpbGl0eUluVW5pdE9mV29ya1Rlc3QKK3sKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdpdmVuVHdvTW9kdWxlc1dpdGhTZXJ2aWNlQW5kRW50aXR5SW5PbmVBbmRFbnRpdHlJbk90aGVyV2hlbk90aGVyRW50aXR5QWNjZXNzU2VydmljZVdoaWNoVXNlc0l0c0VudGl0eUV4cGVjdFNlcnZpY2VUb0hhdmVWaXNpYmlsaXR5KCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgQXBwbGljYXRpb24gdW5kZXJUZXN0ID0gY3JlYXRlQXBwbGljYXRpb24oKTsKKyAgICAgICAgTW9kdWxlIG1vZHVsZSA9IHVuZGVyVGVzdC5maW5kTW9kdWxlKCAibGF5ZXIxIiwgIk15IE1vZHVsZSIgKTsKKyAgICAgICAgU2VydmljZVJlZmVyZW5jZTxNeVNlcnZpY2U+IHNlcnZpY2UgPSBtb2R1bGUuZmluZFNlcnZpY2UoIE15U2VydmljZS5jbGFzcyApOworICAgICAgICBzZXJ2aWNlLmdldCgpLmNyZWF0ZSgpOworICAgIH0KKworICAgIEBNaXhpbnMoIFlvdXJTZXJ2aWNlLk1peGluLmNsYXNzICkKKyAgICBwdWJsaWMgaW50ZXJmYWNlIFlvdXJTZXJ2aWNlCisgICAgeworICAgICAgICB2b2lkIGNyZWF0ZSgpOworCisgICAgICAgIFlvdXJFbnRpdHkgZ2V0KCk7CisKKyAgICAgICAgY2xhc3MgTWl4aW4KKyAgICAgICAgICAgIGltcGxlbWVudHMgWW91clNlcnZpY2UKKyAgICAgICAgeworICAgICAgICAgICAgQFN0cnVjdHVyZQorICAgICAgICAgICAgcHJpdmF0ZSBNb2R1bGUgbW9kdWxlOworCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNyZWF0ZSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVW5pdE9mV29yayB1b3cgPSBtb2R1bGUuY3VycmVudFVuaXRPZldvcmsoKTsKKyAgICAgICAgICAgICAgICBZb3VyRW50aXR5IGVudGl0eSA9IHVvdy5uZXdFbnRpdHkoIFlvdXJFbnRpdHkuY2xhc3MsICIzNDUiICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFlvdXJFbnRpdHkgZ2V0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVbml0T2ZXb3JrIHVvdyA9IG1vZHVsZS5jdXJyZW50VW5pdE9mV29yaygpOworICAgICAgICAgICAgICAgIHJldHVybiB1b3cuZ2V0KCBZb3VyRW50aXR5LmNsYXNzLCAiMzQ1IiApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGludGVyZmFjZSBZb3VyRW50aXR5CisgICAgeworICAgIH0KKworICAgIEBNaXhpbnMoIE15RW50aXR5Lk1peGluLmNsYXNzICkKKyAgICBwdWJsaWMgaW50ZXJmYWNlIE15RW50aXR5CisgICAgeworICAgICAgICB2b2lkIGxvZ2ljKCk7CisKKyAgICAgICAgY2xhc3MgTWl4aW4KKyAgICAgICAgICAgIGltcGxlbWVudHMgTXlFbnRpdHkKKyAgICAgICAgeworICAgICAgICAgICAgQFNlcnZpY2UKKyAgICAgICAgICAgIHByaXZhdGUgWW91clNlcnZpY2Ugc2VydmljZTsKKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBsb2dpYygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgWW91ckVudGl0eSByZXN1bHQgPSBzZXJ2aWNlLmdldCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE1peGlucyggTXlTZXJ2aWNlLk1peGluLmNsYXNzICkKKyAgICBwdWJsaWMgaW50ZXJmYWNlIE15U2VydmljZQorICAgIHsKKyAgICAgICAgdm9pZCBjcmVhdGUoKTsKKworICAgICAgICBjbGFzcyBNaXhpbgorICAgICAgICAgICAgaW1wbGVtZW50cyBNeVNlcnZpY2UKKyAgICAgICAgeworCisgICAgICAgICAgICBAU2VydmljZQorICAgICAgICAgICAgcHJpdmF0ZSBZb3VyU2VydmljZSBzZXJ2aWNlOworCisgICAgICAgICAgICBAU3RydWN0dXJlCisgICAgICAgICAgICBwcml2YXRlIE1vZHVsZSBtb2R1bGU7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgY3JlYXRlKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cnkgKFVuaXRPZldvcmsgdW93ID0gbW9kdWxlLm5ld1VuaXRPZldvcmsoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVvdy5uZXdFbnRpdHkoIE15RW50aXR5LmNsYXNzLCAiMTIzIiApOworICAgICAgICAgICAgICAgICAgICBNeUVudGl0eSBlbnRpdHkxID0gdW93LmdldCggTXlFbnRpdHkuY2xhc3MsICIxMjMiICk7CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuY3JlYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIFlvdXJFbnRpdHkgZW50aXR5MiA9IHNlcnZpY2UuZ2V0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBBcHBsaWNhdGlvbiBjcmVhdGVBcHBsaWNhdGlvbigpCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgRW5lcmd5NEphdmEgcWk0aiA9IG5ldyBFbmVyZ3k0SmF2YSgpOworICAgICAgICByZXR1cm4gcWk0ai5uZXdBcHBsaWNhdGlvbiggbmV3IEFwcGxpY2F0aW9uQXNzZW1ibGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgQXBwbGljYXRpb25Bc3NlbWJseSBhc3NlbWJsZSggQXBwbGljYXRpb25Bc3NlbWJseUZhY3RvcnkgYXBwRmFjdG9yeSApCisgICAgICAgICAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Bc3NlbWJseSBhcHBBc3NlbWJseSA9IGFwcEZhY3RvcnkubmV3QXBwbGljYXRpb25Bc3NlbWJseSgpOworICAgICAgICAgICAgICAgIExheWVyQXNzZW1ibHkgbGF5ZXIxID0gYXBwQXNzZW1ibHkubGF5ZXIoICJsYXllcjEiICk7CisgICAgICAgICAgICAgICAgTW9kdWxlQXNzZW1ibHkgbXlNb2R1bGUgPSBsYXllcjEubW9kdWxlKCAiTXkgTW9kdWxlIiApOworICAgICAgICAgICAgICAgIE1vZHVsZUFzc2VtYmx5IHlvdXJNb2R1bGUgPSBsYXllcjEubW9kdWxlKCAiWW91ciBNb2R1bGUiICk7CisgICAgICAgICAgICAgICAgTW9kdWxlQXNzZW1ibHkgaW5mcmFNb2R1bGUgPSBsYXllcjEubW9kdWxlKCAiSW5mcmEgTW9kdWxlIiApOworICAgICAgICAgICAgICAgIG15TW9kdWxlLnNlcnZpY2VzKCBNeVNlcnZpY2UuY2xhc3MgKTsKKyAgICAgICAgICAgICAgICBteU1vZHVsZS5lbnRpdGllcyggTXlFbnRpdHkuY2xhc3MgKTsKKyAgICAgICAgICAgICAgICB5b3VyTW9kdWxlLmVudGl0aWVzKCBZb3VyRW50aXR5LmNsYXNzICk7CisgICAgICAgICAgICAgICAgeW91ck1vZHVsZS5zZXJ2aWNlcyggWW91clNlcnZpY2UuY2xhc3MgKS52aXNpYmxlSW4oIFZpc2liaWxpdHkubGF5ZXIgKTsKKyAgICAgICAgICAgICAgICBpbmZyYU1vZHVsZS5zZXJ2aWNlcyggTWVtb3J5RW50aXR5U3RvcmVTZXJ2aWNlLmNsYXNzICkudmlzaWJsZUluKCBWaXNpYmlsaXR5LmxheWVyICk7CisgICAgICAgICAgICAgICAgaW5mcmFNb2R1bGUuc2VydmljZXMoIFV1aWRJZGVudGl0eUdlbmVyYXRvclNlcnZpY2UuY2xhc3MgKS52aXNpYmxlSW4oIFZpc2liaWxpdHkubGF5ZXIgKTsKKyAgICAgICAgICAgICAgICBpbmZyYU1vZHVsZS5zZXJ2aWNlcyggT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvblNlcnZpY2UuY2xhc3MgKS52aXNpYmxlSW4oIFZpc2liaWxpdHkubGF5ZXIpLnRhZ2dlZFdpdGgoIFZhbHVlU2VyaWFsaXphdGlvbi5Gb3JtYXRzLkpTT04gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXBwQXNzZW1ibHk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL3J1bnRpbWUvaW5zdGFudGlhdGlvbi9NeS5wcm9wZXJ0aWVzIGIvY29yZS9ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9ydW50aW1lL2luc3RhbnRpYXRpb24vTXkucHJvcGVydGllcwppbmRleCBiNjJlODE2Li43MDQ0ODEzIDEwMDY0NAotLS0gYS9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL3J1bnRpbWUvaW5zdGFudGlhdGlvbi9NeS5wcm9wZXJ0aWVzCisrKyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovcnVudGltZS9pbnN0YW50aWF0aW9uL015LnByb3BlcnRpZXMKQEAgLTEgKzEsMTYgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGRhdGE9SGFiYmFab3V0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9ydW50aW1lL3NlcnZpY2UvSGVsbG9Xb3JsZFNlcnZpY2UucHJvcGVydGllcyBiL2NvcmUvcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovcnVudGltZS9zZXJ2aWNlL0hlbGxvV29ybGRTZXJ2aWNlLnByb3BlcnRpZXMKaW5kZXggZTY3MGRmNS4uZjYzMDhiYSAxMDA2NDQKLS0tIGEvY29yZS9ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9ydW50aW1lL3NlcnZpY2UvSGVsbG9Xb3JsZFNlcnZpY2UucHJvcGVydGllcworKysgYi9jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL3J1bnRpbWUvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZS5wcm9wZXJ0aWVzCkBAIC0xLDIgKzEsMTcgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIHBocmFzZT1IZWxsbwogbmFtZT1Xb3JsZApkaWZmIC0tZ2l0IGEvY29yZS9zcGkvYnVpbGQuZ3JhZGxlIGIvY29yZS9zcGkvYnVpbGQuZ3JhZGxlCmluZGV4IDcyODgzMDMuLjM5MDhiYzYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL2J1aWxkLmdyYWRsZQorKysgYi9jb3JlL3NwaS9idWlsZC5ncmFkbGUKQEAgLTEsNCArMSwyMyBAQAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogQ29yZSBTUEkifX0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBDb3JlIFNQSSJ9fQogCiBkZXBlbmRlbmNpZXMgewogCmRpZmYgLS1naXQgYS9jb3JlL3NwaS9kZXYtc3RhdHVzLnhtbCBiL2NvcmUvc3BpL2Rldi1zdGF0dXMueG1sCmluZGV4IDU1MDQ4ZmUuLjRmMDM0ZGMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL2Rldi1zdGF0dXMueG1sCisrKyBiL2NvcmUvc3BpL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL2RvY3MvY2FjaGUudHh0IGIvY29yZS9zcGkvc3JjL2RvY3MvY2FjaGUudHh0CmluZGV4IDI3M2RjMDEuLmZkZDFjOTAgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9kb2NzL2NhY2hlLnR4dAorKysgYi9jb3JlL3NwaS9zcmMvZG9jcy9jYWNoZS50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbY29yZS1zcGktY2FjaGUsQ2FjaGUgU1BJXV0KID0gQ2FjaGUgU1BJID0KIApkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL2RvY3MvZW50aXR5c3RvcmUudHh0IGIvY29yZS9zcGkvc3JjL2RvY3MvZW50aXR5c3RvcmUudHh0CmluZGV4IDZiZmE1MGUuLjI2NzQ1MDMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9kb2NzL2VudGl0eXN0b3JlLnR4dAorKysgYi9jb3JlL3NwaS9zcmMvZG9jcy9lbnRpdHlzdG9yZS50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbY29yZS1zcGktZW50aXR5c3RvcmUsRW50aXR5U3RvcmUgU1BJXV0KID0gRW50aXR5U3RvcmUgU1BJID0KIApkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL2RvY3MvaW5kZXhpbmcudHh0IGIvY29yZS9zcGkvc3JjL2RvY3MvaW5kZXhpbmcudHh0CmluZGV4IDVmZjEzNjEuLmMzNTZiNTkgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9kb2NzL2luZGV4aW5nLnR4dAorKysgYi9jb3JlL3NwaS9zcmMvZG9jcy9pbmRleGluZy50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbY29yZS1zcGktaW5kZXhpbmcsSW5kZXhpbmcvUXVlcnkgU1BJXV0KID0gSW5kZXhpbmcvUXVlcnkgU1BJID0KIApkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1zcGkudHh0IGIvY29yZS9zcGkvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi1zcGkudHh0CmluZGV4IGU2OWRlMjkuLmZjN2FhYzYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9kb2NzL3JlZmVyZW5jZS9yZWYtc3BpLnR4dAorKysgYi9jb3JlL3NwaS9zcmMvZG9jcy9yZWZlcmVuY2UvcmVmLXNwaS50eHQKQEAgLTAsMCArMSwxOCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvZG9jcy9zcGkudHh0IGIvY29yZS9zcGkvc3JjL2RvY3Mvc3BpLnR4dAppbmRleCAzMDU0NDlmLi4zMmZjOGIyIDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvZG9jcy9zcGkudHh0CisrKyBiL2NvcmUvc3BpL3NyYy9kb2NzL3NwaS50eHQKQEAgLTIxLDcgKzIxLDcgQEAKIHNvdXJjZT1jb3JlL3NwaS9kZXYtc3RhdHVzLnhtbAogLS0tLS0tLS0tLS0tLS0KIAotVGhlIFFpNGogQ29yZSBSdW50aW1lIGhhcyBhIG51bWJlciBvZiBleHRlbnNpb24gcG9pbnRzLCB3aGljaCB3ZSBjYWxsIHRoZSBfUWk0aiBDb3JlIEV4dGVuc2lvbiBTUElfLiBUaGVzZSBhcmUgZGVmaW5lZAorVGhlIFplc3TihKIgQ29yZSBSdW50aW1lIGhhcyBhIG51bWJlciBvZiBleHRlbnNpb24gcG9pbnRzLCB3aGljaCB3ZSBjYWxsIHRoZSBfUWk0aiBDb3JlIEV4dGVuc2lvbiBTUElfLiBUaGVzZSBhcmUgZGVmaW5lZAogaW50ZXJmYWNlcyB1c2VkICpvbmx5KiBieSB0aGUgQ29yZSBSdW50aW1lIGFuZCAqbmV2ZXIqIGRpcmVjdGx5IGJ5IGFwcGxpY2F0aW9uIGNvZGUuIDw8ZXh0ZW5zaW9ucz4+IGFyZSBhc3NlbWJsZWQgaW4KIGFwcGxpY2F0aW9ucyBkdXJpbmcgdGhlIGJvb3RzdHJhcCBwaGFzZS4KIApAQCAtMzUsNyArMzUsNyBAQAogICAgICogPDxjb3JlLXNwaS1pbmRleGluZz4+CiAgICAgKiA8PGNvcmUtc3BpLW1ldHJpY3M+PgogCi1RaTRqIFJ1bnRpbWUgRXh0ZW5zaW9ucyBpbXBsZW1lbnRhdGlvbnMgbWF5IGRlcGVuZCBvbiBRaTRqIExpYnJhcmllcywgYnV0IExpYnJhcmllcyBhcmUgTk9UIEFMTE9XRUQgdG8gZGVwZW5kIG9uCitaZXN04oSiIFJ1bnRpbWUgRXh0ZW5zaW9ucyBpbXBsZW1lbnRhdGlvbnMgbWF5IGRlcGVuZCBvbiBaZXN04oSiIExpYnJhcmllcywgYnV0IExpYnJhcmllcyBhcmUgTk9UIEFMTE9XRUQgdG8gZGVwZW5kIG9uCiBFeHRlbnNpb25zLiBBcHBsaWNhdGlvbnMgY29kZSBpcyBOT1QgQUxMT1dFRCB0byBkZXBlbmQgb24gZXh0ZW5zaW9ucy4gQW5kIGFwcGxpY2F0aW9uIGNvZGUgU0hPVUxEIE5PVCBkZXBlbmQgb24gdGhlCiBDb3JlIEV4dGVuc2lvbiBTUEkuIElmIHlvdSB0aGluayB0aGF0IGlzIG5lZWRlZCwgcGxlYXNlIGNvbnRhY3QgcWk0ai1kZXYgZm9ydW0gYXQgR29vZ2xlIEdyb3VwcywgdG8gc2VlIGlmIHlvdXIgdXNlY2FzZQogY2FuIGJlIHNvbHZlZCBpbiBhIHN1cHBvcnQgbWFubmVyLCBvciB0aGF0IHdlIG5lZWQgdG8gZXh0ZW5kIHRoZSBDb3JlIEFQSSB0byBzdXBwb3J0IGl0LgpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL2RvY3MvdmFsdWVzZXJpYWxpemF0aW9uLnR4dCBiL2NvcmUvc3BpL3NyYy9kb2NzL3ZhbHVlc2VyaWFsaXphdGlvbi50eHQKaW5kZXggMjY5NmNmMy4uZmE1ZmI4NiAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL2RvY3MvdmFsdWVzZXJpYWxpemF0aW9uLnR4dAorKysgYi9jb3JlL3NwaS9zcmMvZG9jcy92YWx1ZXNlcmlhbGl6YXRpb24udHh0CkBAIC0xLDkgKzEsMjggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2NvcmUtc3BpLXZhbHVlc2VyaWFsaXphdGlvbixWYWx1ZVNlcmlhbGl6YXRpb24gU1BJXV0KID0gVmFsdWVTZXJpYWxpemF0aW9uIFNQSSA9CiAKID09IE92ZXJ2aWV3ID09CiAKLVRoZSBRaTRqIENvcmUgUnVudGltZSB1c2UgVmFsdWVTZXJpYWxpemF0aW9uIHRvIHByb3ZpZGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIFZhbHVlQ29tcG9zaXRlcyB2aWEgdGhlaXIgYHRvU3RyaW5nKClgCitUaGUgWmVzdOKEoiBDb3JlIFJ1bnRpbWUgdXNlIFZhbHVlU2VyaWFsaXphdGlvbiB0byBwcm92aWRlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBWYWx1ZUNvbXBvc2l0ZXMgdmlhIHRoZWlyIGB0b1N0cmluZygpYAogbWV0aG9kLCBhbmQsIHRoZWlyIGluc3RhbmNpYXRpb24gZnJvbSB0aGUgdmVyeSBzYW1lIHJlcHJlc2VudGF0aW9uIHZpYSB0aGUgYG5ld1ZhbHVlRnJvbVNlcmlhbGl6ZWRTdGF0ZSguLilgIG1ldGhvZCBvZgogdGhlIFZhbHVlQnVpbGRlckZhY3RvcnkgQVBJLgogCmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL21lbW9yeS9NZW1vcnlNYXBFbnRpdHlTdG9yZU1peGluLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL21lbW9yeS9NZW1vcnlNYXBFbnRpdHlTdG9yZU1peGluLmphdmEKaW5kZXggMTczNDgxYS4uZDAzMWZiNSAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9tZW1vcnkvTWVtb3J5TWFwRW50aXR5U3RvcmVNaXhpbi5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbWVtb3J5L01lbW9yeU1hcEVudGl0eVN0b3JlTWl4aW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5tZW1vcnk7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9tZW1vcnkvcGFja2FnZS5odG1sIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9tZW1vcnkvcGFja2FnZS5odG1sCmluZGV4IGFiODEwZWYuLmQ5MDdiNmMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbWVtb3J5L3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL21lbW9yeS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkluLU1lbW9yeSBFbnRpdHlTdG9yZS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvUWk0alNQSS5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvUWk0alNQSS5qYXZhCmluZGV4IDI1ODZkOTUuLmViNDRkNmQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL1FpNGpTUEkuamF2YQorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9RaTRqU1BJLmphdmEKQEAgLTE0LDE2ICsxNCwyMSBAQAogCiBwYWNrYWdlIG9yZy5xaTRqLnNwaTsKIAoraW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgb3JnLnFpNGouYXBpLlFpNGo7CitpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5Bc3NvY2lhdGlvblN0YXRlSG9sZGVyOworaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5NYW55QXNzb2NpYXRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLk5hbWVkQXNzb2NpYXRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5UcmFuc2llbnRDb21wb3NpdGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlN0YXRlSG9sZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZUNvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXRlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRpb24gb2YgdGhlIFFpNGogU1BJLiBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IHRoZSBydW50aW1lLgorICogRW5jYXBzdWxhdGlvbiBvZiB0aGUgWmVzdCBTUEkuIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIHJ1bnRpbWUuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUWk0alNQSQogICAgIGV4dGVuZHMgUWk0agpAQCAtMzYsNCArNDEsMjkgQEAKIAogICAgIC8vIEVudGl0aWVzCiAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGVPZiggRW50aXR5Q29tcG9zaXRlIGNvbXBvc2l0ZSApOworCisgICAgLyoqCisgICAgICogRmV0Y2hlcyB0aGUgRW50aXR5UmVmZXJlbmNlIHdpdGhvdXQgbG9hZGluZyB0aGUgcmVmZXJlbmNlZCBlbnRpdHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYXNzb2MgVGhlIEFzc29jaWF0aW9uIGZvciB3aGljaCB3ZSB3YW50IHRvIG9idGFpbiB0aGUgRW50aXR5UmVmZXJlbmNlCisgICAgICogQHJldHVybiBUaGUgRW50aXR5UmVmZXJlbmNlIG9mIHRoZSBnaXZlbiBBc3NvY2lhdGlvbi4KKyAgICAgKi8KKyAgICBFbnRpdHlSZWZlcmVuY2UgZW50aXR5UmVmZXJlbmNlT2YoIEFzc29jaWF0aW9uIGFzc29jICk7CisKKyAgICAvKioKKyAgICAgKiBGZXRjaGVzIHRoZSBFbnRpdHlSZWZlcmVuY2VzIHdpdGhvdXQgbG9hZGluZyB0aGUgcmVmZXJlbmNlZCBlbnRpdGllcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhc3NvYyBUaGUgTWFueUFzc29jaWF0aW9uIGZvciB3aGljaCB3ZSB3YW50IHRvIG9idGFpbiB0aGUgRW50aXR5UmVmZXJlbmNlcy4KKyAgICAgKiBAcmV0dXJuIEFuIEl0ZXJhbmJsZSBvZiBhbGwgdGhlIEVudGl0eVJlZmVyZW5jZXMgb2YgdGhlIGdpdmVuIE1hbnlBc3NvY2lhdGlvbi4KKyAgICAgKi8KKyAgICBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+IGVudGl0eVJlZmVyZW5jZU9mKCBNYW55QXNzb2NpYXRpb24gYXNzb2MgKTsKKworICAgIC8qKgorICAgICAqIEZldGNoZXMgdGhlIEVudGl0eVJlZmVyZW5jZXMgd2l0aG91dCBsb2FkaW5nIHRoZSByZWZlcmVuY2VkIGVudGl0aWVzLgorICAgICAqCisgICAgICogQHBhcmFtIGFzc29jIFRoZSBOYW1lZEFzc29jaWF0aW9uIGZvciB3aGljaCB3ZSB3YW50IHRvIG9idGFpbiB0aGUgRW50aXR5UmVmZXJlbmNlCisgICAgICogQHJldHVybiBBbiBJdGVyYW5ibGUgb2YgTWFwLkVudHJ5IHdpdGggdGhlIG5hbWUgYW5kIEVudGl0eVJlZmVyZW5jZSBvZiB0aGUgZ2l2ZW4gTmFtZWRBc3NvY2lhdGlvbi4KKyAgICAgKi8KKyAgICBJdGVyYWJsZTxNYXAuRW50cnk8U3RyaW5nLEVudGl0eVJlZmVyZW5jZT4+IGVudGl0eVJlZmVyZW5jZU9mKCBOYW1lZEFzc29jaWF0aW9uIGFzc29jICk7CisKIH0KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2NhY2hlL0NhY2hlUG9vbC5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvY2FjaGUvQ2FjaGVQb29sLmphdmEKaW5kZXggZTg5MjUxNC4uYzRlZTVhYyAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvY2FjaGUvQ2FjaGVQb29sLmphdmEKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvY2FjaGUvQ2FjaGVQb29sLmphdmEKQEAgLTIwLDggKzIwLDggQEAKIC8qKgogICogQSBDYWNoZVBvb2wgaXMgYSBzZXJ2aWNlIHRoYXQgbWFuYWdlcyB0aGUgUGVyc2lzdGVuY2UgQ2FjaGVzLgogICogPHA+Ci0gKiBUaGUgQ2FjaGVQb29sIGlzIHR5cGljYWxseSBpbXBsZW1lbnRlZCBhcyBhIFFpNGogRXh0ZW5zaW9uLCBhbmQgaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIGluIHRoZSBwZXJzaXN0ZW5jZQotICogc3Vic3lzdGVtIG9mIFFpNGouIElmIGEgQ2FjaGUgRXh0ZW5zaW9uIGlzIG5vdCBwcm92aWRlZCwgY2FjaGluZyB3aWxsIGJlIHR1cm5lZCBvZmYuIEhvd2V2ZXIsIHNpbmNlIGNhY2hpbmcKKyAqIFRoZSBDYWNoZVBvb2wgaXMgdHlwaWNhbGx5IGltcGxlbWVudGVkIGFzIGEgWmVzdCBFeHRlbnNpb24sIGFuZCBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gaW4gdGhlIHBlcnNpc3RlbmNlCisgKiBzdWJzeXN0ZW0gb2YgWmVzdC4gSWYgYSBDYWNoZSBFeHRlbnNpb24gaXMgbm90IHByb3ZpZGVkLCBjYWNoaW5nIHdpbGwgYmUgdHVybmVkIG9mZi4gSG93ZXZlciwgc2luY2UgY2FjaGluZwogICogb3BlcmF0ZSBvbiBFbnRpdHlTdG9yZSBsZXZlbCwgYW5kIGlzIGFuIG9wdGlvbmFsIGNvbXBvbmVudCBhdCB0aGF0LCBqdXN0IGJlY2F1c2UgeW91IGhhdmUgZGVmaW5lZCBhIENhY2hlCiAgKiBFeHRlbnNpb24gZG9lcyBub3QgbmVjZXNzYXJ5IG1lYW4gdGhhdCB5b3VyIHN5c3RlbSB3aWxsIHVzZSBpdC4gQ2hlY2sgdGhlIEVudGl0eVN0b3JlIGltcGxlbWVudGF0aW9ucyBmb3IKICAqIGRldGFpbHMgaWYgdGhleSBhcmUgQ2FjaGUgZW5hYmxlZC4gTW9zdCBFbnRpdHlTdG9yZSBpbXBsZW1lbnRhdGlvbnMgaGFzIHRoaXMgZW5hYmxlZCwgb2Z0ZW4gdmlhIHRoZSBNYXBFbnRpdHlTdG9yZQpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvY2FjaGUvcGFja2FnZS5odG1sIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvY2FjaGUvcGFja2FnZS5odG1sCmluZGV4IDJlOTgyZGYuLmM5Njk5NGEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2NhY2hlL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9jYWNoZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkNhY2hlIFNQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5L0VudGl0eVN0YXR1cy5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5L0VudGl0eVN0YXR1cy5qYXZhCmluZGV4IGM0MjgyZTIuLjE5MmNmZDcgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eS9FbnRpdHlTdGF0dXMuamF2YQorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHkvRW50aXR5U3RhdHVzLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc3BpLmVudGl0eTsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHkvTmFtZWRBc3NvY2lhdGlvblN0YXRlLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHkvTmFtZWRBc3NvY2lhdGlvblN0YXRlLmphdmEKaW5kZXggNWNmMzI1Ny4uNTg0ZmVlZSAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5L05hbWVkQXNzb2NpYXRpb25TdGF0ZS5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eS9OYW1lZEFzc29jaWF0aW9uU3RhdGUuamF2YQpAQCAtNDAsNSArNDAsNCBAQAogICAgIEVudGl0eVJlZmVyZW5jZSBnZXQoIFN0cmluZyBuYW1lICk7CiAKICAgICBTdHJpbmcgbmFtZU9mKCBFbnRpdHlSZWZlcmVuY2UgZW50aXR5UmVmZXJlbmNlICk7Ci0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eS9wYWNrYWdlLmh0bWwgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHkvcGFja2FnZS5odG1sCmluZGV4IDg5OTI3MzkuLjJiOWMyMDYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RW50aXR5IFNQSS48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvQ29uY3VycmVudE1vZGlmaWNhdGlvbkNoZWNrQ29uY2Vybi5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvQ29uY3VycmVudE1vZGlmaWNhdGlvbkNoZWNrQ29uY2Vybi5qYXZhCmluZGV4IGNmZWVhZDYuLjExODM4OWMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL0NvbmN1cnJlbnRNb2RpZmljYXRpb25DaGVja0NvbmNlcm4uamF2YQorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9Db25jdXJyZW50TW9kaWZpY2F0aW9uQ2hlY2tDb25jZXJuLmphdmEKQEAgLTE0LDE5ICsxNCwxOCBAQAogCiBwYWNrYWdlIG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZTsKIAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50UmVhZFdyaXRlTG9jazsKIGltcG9ydCBvcmcucWk0ai5hcGkuUWk0ajsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uY2Vybi5Db25jZXJuT2Y7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlEZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKIGltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlZW50cmFudFJlYWRXcml0ZUxvY2s7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiAKIC8qKgogICogQ29uY2VybiB0aGF0IGhlbHBzIEVudGl0eVN0b3JlcyBkbyBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBjaGVja3MuCkBAIC00NCwxMSArNDMsMTIgQEAKIHsKICAgICBAVGhpcwogICAgIHByaXZhdGUgRW50aXR5U3RhdGVWZXJzaW9ucyB2ZXJzaW9uczsKKwogICAgIEBTdHJ1Y3R1cmUKICAgICBwcml2YXRlIFFpNGogYXBpOwogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVN0b3JlVW5pdE9mV29yayBuZXdVbml0T2ZXb3JrKCBVc2VjYXNlIHVzZWNhc2UsIE1vZHVsZSBtb2R1bGUsIGxvbmcgY3VycmVudFRpbWUgKQorICAgIHB1YmxpYyBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlLCBNb2R1bGVTcGkgbW9kdWxlLCBsb25nIGN1cnJlbnRUaW1lICkKICAgICB7CiAgICAgICAgIGZpbmFsIEVudGl0eVN0b3JlVW5pdE9mV29yayB1b3cgPSBuZXh0Lm5ld1VuaXRPZldvcmsoIHVzZWNhc2UsIG1vZHVsZSwgY3VycmVudFRpbWUgKTsKICAgICAgICAgcmV0dXJuIG5ldyBDb25jdXJyZW50Q2hlY2tpbmdFbnRpdHlTdG9yZVVuaXRPZldvcmsoIHVvdywgYXBpLmRlcmVmZXJlbmNlKCB2ZXJzaW9ucyApLCBtb2R1bGUsIGN1cnJlbnRUaW1lICk7CkBAIC01OSwxNiArNTksMTYgQEAKICAgICB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVvdzsKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlTdGF0ZVZlcnNpb25zIHZlcnNpb25zOwotICAgICAgICBwcml2YXRlIE1vZHVsZSBtb2R1bGU7CisgICAgICAgIHByaXZhdGUgTW9kdWxlU3BpIG1vZHVsZTsKICAgICAgICAgcHJpdmF0ZSBsb25nIGN1cnJlbnRUaW1lOwogCi0gICAgICAgIHByaXZhdGUgTGlzdDxFbnRpdHlTdGF0ZT4gbG9hZGVkID0gbmV3IEFycmF5TGlzdDxFbnRpdHlTdGF0ZT4oKTsKKyAgICAgICAgcHJpdmF0ZSBMaXN0PEVudGl0eVN0YXRlPiBsb2FkZWQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAotICAgICAgICBwcml2YXRlIFJlZW50cmFudFJlYWRXcml0ZUxvY2sgbG9jayA9IG5ldyBSZWVudHJhbnRSZWFkV3JpdGVMb2NrKCAgKTsKKyAgICAgICAgcHJpdmF0ZSBSZWVudHJhbnRSZWFkV3JpdGVMb2NrIGxvY2sgPSBuZXcgUmVlbnRyYW50UmVhZFdyaXRlTG9jaygpOwogCiAgICAgICAgIHB1YmxpYyBDb25jdXJyZW50Q2hlY2tpbmdFbnRpdHlTdG9yZVVuaXRPZldvcmsoIEVudGl0eVN0b3JlVW5pdE9mV29yayB1b3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVN0YXRlVmVyc2lvbnMgdmVyc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZSBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZVNwaSBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY3VycmVudFRpbWUKICAgICAgICAgKQogICAgICAgICB7CkBAIC05MSwxMCArOTEsMTMgQEAKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRW50aXR5U3RhdGUgbmV3RW50aXR5U3RhdGUoIEVudGl0eVJlZmVyZW5jZSBhbklkZW50aXR5LCBFbnRpdHlEZXNjcmlwdG9yIGVudGl0eURlc2NyaXB0b3IgKQorICAgICAgICBwdWJsaWMgRW50aXR5U3RhdGUgbmV3RW50aXR5U3RhdGUoIE1vZHVsZVNwaSBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmZXJlbmNlIGFuSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5RGVzY3JpcHRvciBlbnRpdHlEZXNjcmlwdG9yCisgICAgICAgICkKICAgICAgICAgICAgIHRocm93cyBFbnRpdHlTdG9yZUV4Y2VwdGlvbgogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdW93Lm5ld0VudGl0eVN0YXRlKCBhbklkZW50aXR5LCBlbnRpdHlEZXNjcmlwdG9yICk7CisgICAgICAgICAgICByZXR1cm4gdW93Lm5ld0VudGl0eVN0YXRlKCBtb2R1bGUsIGFuSWRlbnRpdHksIGVudGl0eURlc2NyaXB0b3IgKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMTA1LDM0ICsxMDgsMzUgQEAKIAogICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICB2ZXJzaW9ucy5jaGVja0ZvckNvbmN1cnJlbnRNb2RpZmljYXRpb24oIGxvYWRlZCwgbW9kdWxlLCBjdXJyZW50VGltZSApOworICAgICAgICAgICAgICAgIHZlcnNpb25zLmNoZWNrRm9yQ29uY3VycmVudE1vZGlmaWNhdGlvbiggbG9hZGVkLCBtb2R1bGUsIGN1cnJlbnRUaW1lICk7CiAKLSAgICAgICAgICAgICAgIGZpbmFsIFN0YXRlQ29tbWl0dGVyIGNvbW1pdHRlciA9IHVvdy5hcHBseUNoYW5nZXMoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdGF0ZUNvbW1pdHRlciBjb21taXR0ZXIgPSB1b3cuYXBwbHlDaGFuZ2VzKCk7CiAKLSAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhdGVDb21taXR0ZXIoKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpCi0gICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZXIuY29tbWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zLmZvcmdldFZlcnNpb25zKCBsb2FkZWQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YXRlQ29tbWl0dGVyKCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBjb21taXQoKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZXIuY29tbWl0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucy5mb3JnZXRWZXJzaW9ucyggbG9hZGVkICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9jay53cml0ZUxvY2soKS51bmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrLndyaXRlTG9jaygpLnVubG9jaygpOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYW5jZWwoKQotICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0dGVyLmNhbmNlbCgpOwotICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucy5mb3JnZXRWZXJzaW9ucyggbG9hZGVkICk7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYW5jZWwoKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZXIuY2FuY2VsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucy5mb3JnZXRWZXJzaW9ucyggbG9hZGVkICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9jay53cml0ZUxvY2soKS51bmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSBjYXRjaCggRW50aXR5U3RvcmVFeGNlcHRpb24gZSApCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrLndyaXRlTG9jaygpLnVubG9jaygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKCBFbnRpdHlTdG9yZUV4Y2VwdGlvbiBlICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGxvY2sud3JpdGVMb2NrKCkudW5sb2NrKCk7Ci0gICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgICAgIGxvY2sud3JpdGVMb2NrKCkudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNDksMjkgKzE1MywzOCBAQAogCiAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgIHZlcnNpb25zLmZvcmdldFZlcnNpb25zKCBsb2FkZWQgKTsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMuZm9yZ2V0VmVyc2lvbnMoIGxvYWRlZCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaW5hbGx5CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgIGxvY2sud3JpdGVMb2NrKCkudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgIGxvY2sud3JpdGVMb2NrKCkudW5sb2NrKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZU9mKCBFbnRpdHlSZWZlcmVuY2UgYW5JZGVudGl0eSApCisgICAgICAgIHB1YmxpYyBVc2VjYXNlIHVzZWNhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdW93LnVzZWNhc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAiRHVwbGljYXRlVGhyb3dzIiApCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgRW50aXR5U3RhdGUgZW50aXR5U3RhdGVPZiggTW9kdWxlU3BpIG1vZHVsZSwgRW50aXR5UmVmZXJlbmNlIGFuSWRlbnRpdHkgKQogICAgICAgICAgICAgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uLCBFbnRpdHlOb3RGb3VuZEV4Y2VwdGlvbgogICAgICAgICB7CiAgICAgICAgICAgICBsb2NrLnJlYWRMb2NrKCkubG9jaygpOwogCiAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gdW93LmVudGl0eVN0YXRlT2YoIGFuSWRlbnRpdHkgKTsKLSAgICAgICAgICAgICAgIHZlcnNpb25zLnJlbWVtYmVyVmVyc2lvbiggZW50aXR5U3RhdGUuaWRlbnRpdHkoKSwgZW50aXR5U3RhdGUudmVyc2lvbigpICk7Ci0gICAgICAgICAgICAgICBsb2FkZWQuYWRkKCBlbnRpdHlTdGF0ZSApOwotICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0eVN0YXRlOwotICAgICAgICAgICAgfSBmaW5hbGx5CisgICAgICAgICAgICAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSB1b3cuZW50aXR5U3RhdGVPZiggbW9kdWxlLCBhbklkZW50aXR5ICk7CisgICAgICAgICAgICAgICAgdmVyc2lvbnMucmVtZW1iZXJWZXJzaW9uKCBlbnRpdHlTdGF0ZS5pZGVudGl0eSgpLCBlbnRpdHlTdGF0ZS52ZXJzaW9uKCkgKTsKKyAgICAgICAgICAgICAgICBsb2FkZWQuYWRkKCBlbnRpdHlTdGF0ZSApOworICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHlTdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsbHkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGxvY2sucmVhZExvY2soKS51bmxvY2soKTsKKyAgICAgICAgICAgICAgICBsb2NrLnJlYWRMb2NrKCkudW5sb2NrKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9EZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9EZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrLmphdmEKaW5kZXggY2M5MzQzMC4uMWMxZDc5NCAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yay5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL0RlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsuamF2YQpAQCAtMTcsOSArMTcsOSBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5RGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKIGltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiAKIC8qKgogICogRGVmYXVsdCBFbnRpdHlTdG9yZSBVbml0T2ZXb3JrLgpAQCAtMjksMjEgKzI5LDE4IEBACiB7CiAgICAgcHJpdmF0ZSBFbnRpdHlTdG9yZVNQSSBlbnRpdHlTdG9yZVNQSTsKICAgICBwcml2YXRlIFN0cmluZyBpZGVudGl0eTsKLSAgICBwcml2YXRlIE1vZHVsZSBtb2R1bGU7CiAgICAgcHJpdmF0ZSBIYXNoTWFwPEVudGl0eVJlZmVyZW5jZSwgRW50aXR5U3RhdGU+IHN0YXRlcyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICBwcml2YXRlIFVzZWNhc2UgdXNlY2FzZTsKICAgICBwcml2YXRlIGxvbmcgY3VycmVudFRpbWU7CiAKICAgICBwdWJsaWMgRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yayggRW50aXR5U3RvcmVTUEkgZW50aXR5U3RvcmVTUEksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZGVudGl0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlY2FzZSB1c2VjYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGN1cnJlbnRUaW1lCiAgICAgKQogICAgIHsKICAgICAgICAgdGhpcy5lbnRpdHlTdG9yZVNQSSA9IGVudGl0eVN0b3JlU1BJOwogICAgICAgICB0aGlzLmlkZW50aXR5ID0gaWRlbnRpdHk7Ci0gICAgICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOwogICAgICAgICB0aGlzLnVzZWNhc2UgPSB1c2VjYXNlOwogICAgICAgICB0aGlzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7CiAgICAgfQpAQCAtNTQsMTEgKzUxLDYgQEAKICAgICAgICAgcmV0dXJuIGlkZW50aXR5OwogICAgIH0KIAotICAgIHB1YmxpYyBNb2R1bGUgbW9kdWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtb2R1bGU7Ci0gICAgfQotCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGxvbmcgY3VycmVudFRpbWUoKQogICAgIHsKQEAgLTczLDcgKzY1LDcgQEAKICAgICAvLyBFbnRpdHlTdG9yZQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlKCBFbnRpdHlSZWZlcmVuY2UgYW5JZGVudGl0eSwgRW50aXR5RGVzY3JpcHRvciBkZXNjcmlwdG9yICkKKyAgICBwdWJsaWMgRW50aXR5U3RhdGUgbmV3RW50aXR5U3RhdGUoIE1vZHVsZVNwaSBtb2R1bGUsIEVudGl0eVJlZmVyZW5jZSBhbklkZW50aXR5LCBFbnRpdHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgKQogICAgICAgICB0aHJvd3MgRW50aXR5U3RvcmVFeGNlcHRpb24KICAgICB7CiAgICAgICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gc3RhdGVzLmdldCggYW5JZGVudGl0eSApOwpAQCAtODEsMTMgKzczLDEzIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlBbHJlYWR5RXhpc3RzRXhjZXB0aW9uKCBhbklkZW50aXR5ICk7CiAgICAgICAgIH0KLSAgICAgICAgRW50aXR5U3RhdGUgc3RhdGUgPSBlbnRpdHlTdG9yZVNQSS5uZXdFbnRpdHlTdGF0ZSggdGhpcywgYW5JZGVudGl0eSwgZGVzY3JpcHRvciApOworICAgICAgICBFbnRpdHlTdGF0ZSBzdGF0ZSA9IGVudGl0eVN0b3JlU1BJLm5ld0VudGl0eVN0YXRlKCB0aGlzLCBtb2R1bGUsIGFuSWRlbnRpdHksIGRlc2NyaXB0b3IgKTsKICAgICAgICAgc3RhdGVzLnB1dCggYW5JZGVudGl0eSwgc3RhdGUgKTsKICAgICAgICAgcmV0dXJuIHN0YXRlOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZU9mKCBFbnRpdHlSZWZlcmVuY2UgYW5JZGVudGl0eSApCisgICAgcHVibGljIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlT2YoIE1vZHVsZVNwaSBtb2R1bGUsIEVudGl0eVJlZmVyZW5jZSBhbklkZW50aXR5ICkKICAgICAgICAgdGhyb3dzIEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uCiAgICAgewogCkBAIC05Niw3ICs4OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlbnRpdHlTdGF0ZTsKICAgICAgICAgfQotICAgICAgICBlbnRpdHlTdGF0ZSA9IGVudGl0eVN0b3JlU1BJLmVudGl0eVN0YXRlT2YoIHRoaXMsIGFuSWRlbnRpdHkgKTsKKyAgICAgICAgZW50aXR5U3RhdGUgPSBlbnRpdHlTdG9yZVNQSS5lbnRpdHlTdGF0ZU9mKCB0aGlzLCBtb2R1bGUsIGFuSWRlbnRpdHkgKTsKICAgICAgICAgc3RhdGVzLnB1dCggYW5JZGVudGl0eSwgZW50aXR5U3RhdGUgKTsKICAgICAgICAgcmV0dXJuIGVudGl0eVN0YXRlOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL0VudGl0eUFscmVhZHlFeGlzdHNFeGNlcHRpb24uamF2YSBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL0VudGl0eUFscmVhZHlFeGlzdHNFeGNlcHRpb24uamF2YQppbmRleCAxMTZlOWJmLi42MDU0ZGNkIDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9FbnRpdHlBbHJlYWR5RXhpc3RzRXhjZXB0aW9uLmphdmEKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvRW50aXR5QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKICAgICBwdWJsaWMgRW50aXR5QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbiggRW50aXR5UmVmZXJlbmNlIGlkZW50aXR5ICkKICAgICB7Ci0gICAgICAgIHN1cGVyKCJFbnRpdHkgIiArIGlkZW50aXR5ICsgIiBhbHJlYWR5IGV4aXN0ZWQiKTsKKyAgICAgICAgc3VwZXIoIkVudGl0eSAiICsgaWRlbnRpdHkgKyAiIGFscmVhZHkgZXhpc3RzLiIpOwogICAgICAgICB0aGlzLmlkZW50aXR5ID0gaWRlbnRpdHk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9FbnRpdHlTdGF0ZVZlcnNpb25zLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9FbnRpdHlTdGF0ZVZlcnNpb25zLmphdmEKaW5kZXggZGRmMTc1OC4uMDhlMjY4ZCAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvRW50aXR5U3RhdGVWZXJzaW9ucy5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL0VudGl0eVN0YXRlVmVyc2lvbnMuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5UaGlzOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVzZWNhc2UuVXNlY2FzZTsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXRlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdHVzOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiAvKioKICAqIEVudGl0eSB2ZXJzaW9ucyBzdGF0ZS4KQEAgLTM2LDcgKzM2LDcgQEAKIAogICAgIHZvaWQgcmVtZW1iZXJWZXJzaW9uKCBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHksIFN0cmluZyB2ZXJzaW9uICk7CiAKLSAgICB2b2lkIGNoZWNrRm9yQ29uY3VycmVudE1vZGlmaWNhdGlvbiggSXRlcmFibGU8RW50aXR5U3RhdGU+IGxvYWRlZCwgTW9kdWxlIG1vZHVsZSwgbG9uZyBjdXJyZW50VGltZSApCisgICAgdm9pZCBjaGVja0ZvckNvbmN1cnJlbnRNb2RpZmljYXRpb24oIEl0ZXJhYmxlPEVudGl0eVN0YXRlPiBsb2FkZWQsIE1vZHVsZVNwaSBtb2R1bGUsIGxvbmcgY3VycmVudFRpbWUgKQogICAgICAgICB0aHJvd3MgQ29uY3VycmVudEVudGl0eVN0YXRlTW9kaWZpY2F0aW9uRXhjZXB0aW9uOwogCiAgICAgLyoqCkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgIEBUaGlzCiAgICAgICAgIHByaXZhdGUgRW50aXR5U3RvcmUgc3RvcmU7CiAKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8RW50aXR5UmVmZXJlbmNlLCBTdHJpbmc+IHZlcnNpb25zID0gbmV3IFdlYWtIYXNoTWFwPEVudGl0eVJlZmVyZW5jZSwgU3RyaW5nPigpOworICAgICAgICBwcml2YXRlIGZpbmFsIE1hcDxFbnRpdHlSZWZlcmVuY2UsIFN0cmluZz4gdmVyc2lvbnMgPSBuZXcgV2Vha0hhc2hNYXA8PigpOwogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZm9yZ2V0VmVyc2lvbnMoIEl0ZXJhYmxlPEVudGl0eVN0YXRlPiBzdGF0ZXMgKQpAQCAtNjcsNyArNjcsNyBAQAogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgY2hlY2tGb3JDb25jdXJyZW50TW9kaWZpY2F0aW9uKCBJdGVyYWJsZTxFbnRpdHlTdGF0ZT4gbG9hZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGVTcGkgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGN1cnJlbnRUaW1lCiAgICAgICAgICkKICAgICAgICAgICAgIHRocm93cyBDb25jdXJyZW50RW50aXR5U3RhdGVNb2RpZmljYXRpb25FeGNlcHRpb24KQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgICAgICAgICBpZiggc3RvcmVWZXJzaW9uID09IG51bGwgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmsgPSBzdG9yZS5uZXdVbml0T2ZXb3JrKCBVc2VjYXNlLkRFRkFVTFQsIG1vZHVsZSwgY3VycmVudFRpbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgRW50aXR5U3RhdGUgc3RhdGUgPSB1bml0T2ZXb3JrLmVudGl0eVN0YXRlT2YoIGVudGl0eVN0YXRlLmlkZW50aXR5KCkgKTsKKyAgICAgICAgICAgICAgICAgICAgRW50aXR5U3RhdGUgc3RhdGUgPSB1bml0T2ZXb3JrLmVudGl0eVN0YXRlT2YoIG1vZHVsZSwgZW50aXR5U3RhdGUuaWRlbnRpdHkoKSApOwogICAgICAgICAgICAgICAgICAgICBzdG9yZVZlcnNpb24gPSBzdGF0ZS52ZXJzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIHVuaXRPZldvcmsuZGlzY2FyZCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmKCBjaGFuZ2VkID09IG51bGwgKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gbmV3IEFycmF5TGlzdDxFbnRpdHlSZWZlcmVuY2U+KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC5hZGQoIGVudGl0eVN0YXRlLmlkZW50aXR5KCkgKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9FbnRpdHlTdG9yZS5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvRW50aXR5U3RvcmUuamF2YQppbmRleCBmYTVhYzFiLi5iOGRlMzA1IDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9FbnRpdHlTdG9yZS5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL0VudGl0eVN0b3JlLmphdmEKQEAgLTIwLDEzICsyMCwxNCBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2U7CiBpbXBvcnQgb3JnLnFpNGouaW8uSW5wdXQ7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0ZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZHVsZVNwaTsKIAogLyoqCiAgKiBJbnRlcmZhY2UgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN0b3JlIGZvciBwZXJzaXN0ZW50IHN0YXRlIG9mIEVudGl0eUNvbXBvc2l0ZXMuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRW50aXR5U3RvcmUKIHsKLSAgICBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlLCBNb2R1bGUgbW9kdWxlLCBsb25nIGN1cnJlbnRUaW1lICk7CisgICAgRW50aXR5U3RvcmVVbml0T2ZXb3JrIG5ld1VuaXRPZldvcmsoIFVzZWNhc2UgdXNlY2FzZSwgTW9kdWxlU3BpIG1vZHVsZSwgbG9uZyBjdXJyZW50VGltZSApOwogCi0gICAgSW5wdXQ8RW50aXR5U3RhdGUsIEVudGl0eVN0b3JlRXhjZXB0aW9uPiBlbnRpdHlTdGF0ZXMoIE1vZHVsZSBtb2R1bGUgKTsKKyAgICBJbnB1dDxFbnRpdHlTdGF0ZSwgRW50aXR5U3RvcmVFeGNlcHRpb24+IGVudGl0eVN0YXRlcyggTW9kdWxlU3BpIG1vZHVsZSApOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvRW50aXR5U3RvcmVTUEkuamF2YSBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL0VudGl0eVN0b3JlU1BJLmphdmEKaW5kZXggNTM2Y2ViOS4uNTIxZDJjZSAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvRW50aXR5U3RvcmVTUEkuamF2YQorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9FbnRpdHlTdG9yZVNQSS5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlEZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiAKIC8qKgogICogRW50aXR5U3RvcmUgU1BJLgpAQCAtMjQsMTAgKzI1LDExIEBACiBwdWJsaWMgaW50ZXJmYWNlIEVudGl0eVN0b3JlU1BJCiB7CiAgICAgRW50aXR5U3RhdGUgbmV3RW50aXR5U3RhdGUoIEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGVTcGkgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHksIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvcgogICAgICk7CiAKLSAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZU9mKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywgRW50aXR5UmVmZXJlbmNlIGlkZW50aXR5ICk7CisgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGVPZiggRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmssIE1vZHVsZVNwaSBtb2R1bGUsIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSApOwogCiAgICAgU3RhdGVDb21taXR0ZXIgYXBwbHlDaGFuZ2VzKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywgSXRlcmFibGU8RW50aXR5U3RhdGU+IHN0YXRlCiAgICAgKTsKZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL0VudGl0eVN0b3JlVW5pdE9mV29yay5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvRW50aXR5U3RvcmVVbml0T2ZXb3JrLmphdmEKaW5kZXggMjE2NTVjZC4uMGIwNTViZiAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvRW50aXR5U3RvcmVVbml0T2ZXb3JrLmphdmEKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvRW50aXR5U3RvcmVVbml0T2ZXb3JrLmphdmEKQEAgLTE0LDkgKzE0LDEyIEBACiAKIHBhY2thZ2Ugb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlOwogCitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5NZXRhSW5mbzsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eURlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CitpbXBvcnQgb3JnLnFpNGouYXBpLnVzZWNhc2UuVXNlY2FzZTsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXRlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiAvKioKICAqIEVudGl0eVN0b3JlIFVuaXRPZldvcmsuCkBAIC00MCw3ICs0Myw3IEBACiAgICAgICoKICAgICAgKiBAdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uIFRocm93biBpZiBjcmVhdGlvbmFsIGZhaWxzLgogICAgICAqLwotICAgIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlKCBFbnRpdHlSZWZlcmVuY2UgYW5JZGVudGl0eSwgRW50aXR5RGVzY3JpcHRvciBlbnRpdHlEZXNjcmlwdG9yICkKKyAgICBFbnRpdHlTdGF0ZSBuZXdFbnRpdHlTdGF0ZSggTW9kdWxlU3BpIG1vZHVsZSwgRW50aXR5UmVmZXJlbmNlIGFuSWRlbnRpdHksIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvciApCiAgICAgICAgIHRocm93cyBFbnRpdHlTdG9yZUV4Y2VwdGlvbjsKIAogICAgIC8qKgpAQCAtNTQsMTEgKzU3LDEzIEBACiAgICAgICogQHRocm93cyBFbnRpdHlTdG9yZUV4Y2VwdGlvbiAgICB0aHJvd24gaWYgcmV0cmlldmFsIGZhaWxlZC4KICAgICAgKiBAdGhyb3dzIEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uIGlmIHJlcXVlc3RlZCBlbnRpdHkgZG9lcyBub3QgZXhpc3QKICAgICAgKi8KLSAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZU9mKCBFbnRpdHlSZWZlcmVuY2UgYW5JZGVudGl0eSApCisgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGVPZiggTW9kdWxlU3BpIG1vZHVsZSwgRW50aXR5UmVmZXJlbmNlIGFuSWRlbnRpdHkgKQogICAgICAgICB0aHJvd3MgRW50aXR5U3RvcmVFeGNlcHRpb24sIEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgU3RhdGVDb21taXR0ZXIgYXBwbHlDaGFuZ2VzKCkKICAgICAgICAgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uOwogCiAgICAgdm9pZCBkaXNjYXJkKCk7CisKKyAgICBVc2VjYXNlIHVzZWNhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL01vZHVsZUVudGl0eVN0b3JlVW5pdE9mV29yay5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvTW9kdWxlRW50aXR5U3RvcmVVbml0T2ZXb3JrLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhZTY1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL01vZHVsZUVudGl0eVN0b3JlVW5pdE9mV29yay5qYXZhCkBAIC0wLDAgKzEsODUgQEAKKy8qCisqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKgorKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoKKyogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCitwYWNrYWdlIG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZTsKKworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CisKK3B1YmxpYyBjbGFzcyBNb2R1bGVFbnRpdHlTdG9yZVVuaXRPZldvcmsKKyAgICBpbXBsZW1lbnRzIEVudGl0eVN0b3JlVW5pdE9mV29yaworeworICAgIHByaXZhdGUgZmluYWwgTW9kdWxlU3BpIG1vZHVsZTsKKyAgICBwcml2YXRlIGZpbmFsIEVudGl0eVN0b3JlVW5pdE9mV29yayB1bmRlcmx5aW5nOworCisgICAgcHVibGljIE1vZHVsZUVudGl0eVN0b3JlVW5pdE9mV29yayggTW9kdWxlU3BpIG1vZHVsZSwgRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuZGVybHlpbmcgKQorICAgIHsKKyAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CisgICAgICAgIHRoaXMudW5kZXJseWluZyA9IHVuZGVybHlpbmc7CisgICAgfQorCisgICAgcHVibGljIE1vZHVsZVNwaSBtb2R1bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1vZHVsZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGlkZW50aXR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiB1bmRlcmx5aW5nLmlkZW50aXR5KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGxvbmcgY3VycmVudFRpbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuZGVybHlpbmcuY3VycmVudFRpbWUoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRW50aXR5U3RhdGUgbmV3RW50aXR5U3RhdGUoIE1vZHVsZVNwaSBtb2R1bGUsIEVudGl0eVJlZmVyZW5jZSByZWZlcmVuY2UsIEVudGl0eURlc2NyaXB0b3IgZGVzY3JpcHRvciApCisgICAgICAgIHRocm93cyBFbnRpdHlTdG9yZUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuZGVybHlpbmcubmV3RW50aXR5U3RhdGUoIG1vZHVsZSwgcmVmZXJlbmNlLCBkZXNjcmlwdG9yICk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlT2YoIE1vZHVsZVNwaSBtb2R1bGUsIEVudGl0eVJlZmVyZW5jZSByZWZlcmVuY2UgKQorICAgICAgICB0aHJvd3MgRW50aXR5U3RvcmVFeGNlcHRpb24sIEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uCisgICAgeworICAgICAgICByZXR1cm4gdW5kZXJseWluZy5lbnRpdHlTdGF0ZU9mKCBtb2R1bGUsIHJlZmVyZW5jZSApOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdGF0ZUNvbW1pdHRlciBhcHBseUNoYW5nZXMoKQorICAgICAgICB0aHJvd3MgRW50aXR5U3RvcmVFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHJldHVybiB1bmRlcmx5aW5nLmFwcGx5Q2hhbmdlcygpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGRpc2NhcmQoKQorICAgIHsKKyAgICAgICAgdW5kZXJseWluZy5kaXNjYXJkKCk7CisgICAgfQorCisgICAgcHVibGljIFVzZWNhc2UgdXNlY2FzZSgpCisgICAgeworICAgICAgICByZXR1cm4gdW5kZXJseWluZy51c2VjYXNlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvU3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Db25jZXJuLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkNvbmNlcm4uamF2YQppbmRleCBkNDllNWViLi4xMzY1ODgxIDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkNvbmNlcm4uamF2YQorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkNvbmNlcm4uamF2YQpAQCAtMTcsNiArMTcsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25jZXJuLkNvbmNlcm5PZjsKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlNlcnZpY2U7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0ZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZHVsZVNwaTsKIAogLyoqCiAgKiBTdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIENvbmNlcm4uCmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9TdGF0ZUNvbW1pdHRlci5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvU3RhdGVDb21taXR0ZXIuamF2YQppbmRleCBhZDkyYzA1Li41MTE5YjExIDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9TdGF0ZUNvbW1pdHRlci5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL1N0YXRlQ29tbWl0dGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvRGVmYXVsdEVudGl0eVN0YXRlLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0RlZmF1bHRFbnRpdHlTdGF0ZS5qYXZhCmluZGV4IGU3OTM4YzMuLjRkNjYwNzMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvRGVmYXVsdEVudGl0eVN0YXRlLmphdmEKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvaGVscGVycy9EZWZhdWx0RW50aXR5U3RhdGUuamF2YQpAQCAtMzIsNyArMzIsNiBAQAogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdHVzOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuTWFueUFzc29jaWF0aW9uU3RhdGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5OYW1lZEFzc29jaWF0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkRlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcms7CiAKIC8qKgogICogU3RhbmRhcmQgaW1wbGVtZW50YXRpb24gb2YgRW50aXR5U3RhdGUuCkBAIC00MCw4ICszOSw2IEBACiBwdWJsaWMgZmluYWwgY2xhc3MgRGVmYXVsdEVudGl0eVN0YXRlCiAgICAgaW1wbGVtZW50cyBFbnRpdHlTdGF0ZQogewotICAgIHByaXZhdGUgRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrOwotCiAgICAgcHJpdmF0ZSBFbnRpdHlTdGF0dXMgc3RhdHVzOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbjsKQEAgLTU0LDEzICs1MSwxMyBAQAogICAgIHByaXZhdGUgZmluYWwgTWFwPFF1YWxpZmllZE5hbWUsIExpc3Q8RW50aXR5UmVmZXJlbmNlPj4gbWFueUFzc29jaWF0aW9uczsKICAgICBwcml2YXRlIGZpbmFsIE1hcDxRdWFsaWZpZWROYW1lLCBNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+PiBuYW1lZEFzc29jaWF0aW9uczsKIAotICAgIHB1YmxpYyBEZWZhdWx0RW50aXR5U3RhdGUoIERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywKKyAgICBwdWJsaWMgRGVmYXVsdEVudGl0eVN0YXRlKCBsb25nIGN1cnJlbnRUaW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlEZXNjcmlwdG9yIGVudGl0eURlc2NyaXB0b3IKICAgICApCiAgICAgewotICAgICAgICB0aGlzKCB1bml0T2ZXb3JrLCAiIiwKLSAgICAgICAgICAgICAgdW5pdE9mV29yay5jdXJyZW50VGltZSgpLAorICAgICAgICB0aGlzKCAiIiwKKyAgICAgICAgICAgICAgY3VycmVudFRpbWUsCiAgICAgICAgICAgICAgIGlkZW50aXR5LAogICAgICAgICAgICAgICBFbnRpdHlTdGF0dXMuTkVXLAogICAgICAgICAgICAgICBlbnRpdHlEZXNjcmlwdG9yLApAQCAtNzAsOCArNjcsNyBAQAogICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxRdWFsaWZpZWROYW1lLCBNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+PigpICk7CiAgICAgfQogCi0gICAgcHVibGljIERlZmF1bHRFbnRpdHlTdGF0ZSggRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2ZXJzaW9uLAorICAgIHB1YmxpYyBEZWZhdWx0RW50aXR5U3RhdGUoIFN0cmluZyB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGFzdE1vZGlmaWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlTdGF0dXMgc3RhdHVzLApAQCAtODIsNyArNzgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcDxRdWFsaWZpZWROYW1lLCBNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+PiBuYW1lZEFzc29jaWF0aW9ucwogICAgICkKICAgICB7Ci0gICAgICAgIHRoaXMudW5pdE9mV29yayA9IHVuaXRPZldvcms7CiAgICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CiAgICAgICAgIHRoaXMubGFzdE1vZGlmaWVkID0gbGFzdE1vZGlmaWVkOwogICAgICAgICB0aGlzLmlkZW50aXR5ID0gaWRlbnRpdHk7CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0pTT05FbnRpdHlTdGF0ZS5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvaGVscGVycy9KU09ORW50aXR5U3RhdGUuamF2YQppbmRleCBiZWY2MjI5Li5hZTYwODA5IDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0pTT05FbnRpdHlTdGF0ZS5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvSlNPTkVudGl0eVN0YXRlLmphdmEKQEAgLTMzLDcgKzMzLDYgQEAKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXR1czsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5Lk1hbnlBc3NvY2lhdGlvblN0YXRlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuTmFtZWRBc3NvY2lhdGlvblN0YXRlOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5EZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZUV4Y2VwdGlvbjsKIAogLyoqCkBAIC00NCwxNSArNDMsMTQgQEAKIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFTVBUWV9OQU1FUyA9IG5ldyBTdHJpbmdbIDAgXTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBDTE9ORV9OQU1FUyA9Ci0gICAgewotICAgICAgICBKU09OS2V5cy5JREVOVElUWSwKLSAgICAgICAgSlNPTktleXMuQVBQTElDQVRJT05fVkVSU0lPTiwKLSAgICAgICAgSlNPTktleXMuVFlQRSwKLSAgICAgICAgSlNPTktleXMuVkVSU0lPTiwKLSAgICAgICAgSlNPTktleXMuTU9ESUZJRUQKLSAgICB9OworICAgICAgICB7CisgICAgICAgICAgICBKU09OS2V5cy5JREVOVElUWSwKKyAgICAgICAgICAgIEpTT05LZXlzLkFQUExJQ0FUSU9OX1ZFUlNJT04sCisgICAgICAgICAgICBKU09OS2V5cy5UWVBFLAorICAgICAgICAgICAgSlNPTktleXMuVkVSU0lPTiwKKyAgICAgICAgICAgIEpTT05LZXlzLk1PRElGSUVECisgICAgICAgIH07CiAKLSAgICBwcml2YXRlIGZpbmFsIERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yazsKICAgICBwcml2YXRlIGZpbmFsIFZhbHVlU2VyaWFsaXphdGlvbiB2YWx1ZVNlcmlhbGl6YXRpb247CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdmVyc2lvbjsKICAgICBwcml2YXRlIGZpbmFsIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eTsKQEAgLTYyLDI0ICs2MCwyMyBAQAogICAgIHByaXZhdGUgbG9uZyBsYXN0TW9kaWZpZWQ7CiAgICAgcHJpdmF0ZSBKU09OT2JqZWN0IHN0YXRlOwogCi0gICAgLyogcGFja2FnZSAqLyBKU09ORW50aXR5U3RhdGUoIERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywKKyAgICAvKiBwYWNrYWdlICovIEpTT05FbnRpdHlTdGF0ZSggbG9uZyB0aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTk9iamVjdCBpbml0aWFsU3RhdGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OT2JqZWN0IGluaXRpYWxTdGF0ZQorICAgICkKICAgICB7Ci0gICAgICAgIHRoaXMoIHVuaXRPZldvcmssCi0gICAgICAgICAgICAgIHZhbHVlU2VyaWFsaXphdGlvbiwKKyAgICAgICAgdGhpcyggdmFsdWVTZXJpYWxpemF0aW9uLAogICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgdW5pdE9mV29yay5jdXJyZW50VGltZSgpLAorICAgICAgICAgICAgICB0aW1lLAogICAgICAgICAgICAgICBpZGVudGl0eSwKICAgICAgICAgICAgICAgRW50aXR5U3RhdHVzLk5FVywKICAgICAgICAgICAgICAgZW50aXR5RGVzY3JpcHRvciwKICAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlICk7CiAgICAgfQogCi0gICAgLyogcGFja2FnZSAqLyBKU09ORW50aXR5U3RhdGUoIERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVTZXJpYWxpemF0aW9uIHZhbHVlU2VyaWFsaXphdGlvbiwKKyAgICAvKiBwYWNrYWdlICovIEpTT05FbnRpdHlTdGF0ZSggVmFsdWVTZXJpYWxpemF0aW9uIHZhbHVlU2VyaWFsaXphdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGFzdE1vZGlmaWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHksCkBAIC04OCw3ICs4NSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT05PYmplY3Qgc3RhdGUKICAgICApCiAgICAgewotICAgICAgICB0aGlzLnVuaXRPZldvcmsgPSB1bml0T2ZXb3JrOwogICAgICAgICB0aGlzLnZhbHVlU2VyaWFsaXphdGlvbiA9IHZhbHVlU2VyaWFsaXphdGlvbjsKICAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKICAgICAgICAgdGhpcy5sYXN0TW9kaWZpZWQgPSBsYXN0TW9kaWZpZWQ7CkBAIC0zMTIsMTQgKzMwOCw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sZWFuIGlzU3RhdGVOb3RDbG9uZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXR1cyA9PSBFbnRpdHlTdGF0dXMuTE9BREVEOwotICAgIH0KLQogICAgIHZvaWQgY2xvbmVTdGF0ZUlmR2xvYmFsU3RhdGVMb2FkZWQoKQogICAgIHsKLSAgICAgICAgaWYoIGlzU3RhdGVOb3RDbG9uZWQoKSApCisgICAgICAgIGlmKCBzdGF0dXMgIT0gRW50aXR5U3RhdHVzLkxPQURFRCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvaGVscGVycy9KU09OTWFwRW50aXR5U3RvcmVBY3RpdmF0aW9uLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0pTT05NYXBFbnRpdHlTdG9yZUFjdGl2YXRpb24uamF2YQppbmRleCBkMjY0MzYyLi4wZGEwZGUwIDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0pTT05NYXBFbnRpdHlTdG9yZUFjdGl2YXRpb24uamF2YQorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0pTT05NYXBFbnRpdHlTdG9yZUFjdGl2YXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuaGVscGVyczsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRvckFkYXB0ZXI7CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0pTT05NYXBFbnRpdHlTdG9yZU1peGluLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0pTT05NYXBFbnRpdHlTdG9yZU1peGluLmphdmEKaW5kZXggZDY0NjE3YS4uY2FjOGVjOSAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvaGVscGVycy9KU09OTWFwRW50aXR5U3RvcmVNaXhpbi5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvSlNPTk1hcEVudGl0eVN0b3JlTWl4aW4uamF2YQpAQCAtNDIsMTUgKzQyLDE0IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZURlc2NyaXB0b3I7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UucXVhbGlmaWVyLlRhZ2dlZDsKIGltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkFwcGxpY2F0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLkVudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2VCdWlsZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6YXRpb247CiBpbXBvcnQgb3JnLnFpNGouaW8uSW5wdXQ7CiBpbXBvcnQgb3JnLnFpNGouaW8uT3V0cHV0OwogaW1wb3J0IG9yZy5xaTRqLmlvLlJlY2VpdmVyOwogaW1wb3J0IG9yZy5xaTRqLmlvLlNlbmRlcjsKK2ltcG9ydCBvcmcucWk0ai5zcGkuUWk0alNQSTsKIGltcG9ydCBvcmcucWk0ai5zcGkuY2FjaGUuQ2FjaGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmNhY2hlLkNhY2hlUG9vbDsKIGltcG9ydCBvcmcucWk0ai5zcGkuY2FjaGUuTnVsbENhY2hlOwpAQCAtNjEsMTEgKzYwLDEzIEBACiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZVNQSTsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RvcmVVbml0T2ZXb3JrOworaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5Nb2R1bGVFbnRpdHlTdG9yZVVuaXRPZldvcms7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLlN0YXRlQ29tbWl0dGVyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2RlbE1vZHVsZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZHVsZVNwaTsKIAogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5maXJzdDsKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMubWFwOwogCiAvKioKICAqIEltcGxlbWVudGF0aW9uIG9mIEVudGl0eVN0b3JlIHRoYXQgd29ya3Mgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBNYXBFbnRpdHlTdG9yZS4KQEAgLTg1LDYgKzg2LDkgQEAKICAgICBwcml2YXRlIEVudGl0eVN0b3JlU1BJIGVudGl0eVN0b3JlU3BpOwogCiAgICAgQFN0cnVjdHVyZQorICAgIHByaXZhdGUgUWk0alNQSSBzcGk7CisKKyAgICBAU3RydWN0dXJlCiAgICAgcHJpdmF0ZSBBcHBsaWNhdGlvbiBhcHBsaWNhdGlvbjsKIAogICAgIEBTZXJ2aWNlCkBAIC0xMDYsOCArMTEwLDYgQEAKICAgICBwcm90ZWN0ZWQgU3RyaW5nIHV1aWQ7CiAgICAgcHJpdmF0ZSBpbnQgY291bnQ7CiAKLSAgICBwcml2YXRlIExvZ2dlciBsb2dnZXI7Ci0KICAgICBwdWJsaWMgSlNPTk1hcEVudGl0eVN0b3JlTWl4aW4oKQogICAgIHsKICAgICB9CkBAIC0xMTYsOCArMTE4LDYgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRVcEpTT05NYXBFUygpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCBkZXNjcmlwdG9yLmlkZW50aXR5KCkgKTsKLQogICAgICAgICB1dWlkID0gZGVzY3JpcHRvci5pZGVudGl0eSgpICsgIi0iICsgVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKTsKICAgICAgICAgaWYoIGNhY2hpbmcgIT0gbnVsbCApCiAgICAgICAgIHsKQEAgLTE0MywxNSArMTQzLDE4IEBACiAgICAgLy8gRW50aXR5U3RvcmUKIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlTWV0YUluZm8sIE1vZHVsZSBtb2R1bGUsIGxvbmcgY3VycmVudFRpbWUgKQorICAgIHB1YmxpYyBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlTWV0YUluZm8sIE1vZHVsZVNwaSBtb2R1bGUsIGxvbmcgY3VycmVudFRpbWUgKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrKCBlbnRpdHlTdG9yZVNwaSwgbmV3VW5pdE9mV29ya0lkKCksIG1vZHVsZSwgdXNlY2FzZU1ldGFJbmZvLCBjdXJyZW50VGltZSApOworICAgICAgICBFbnRpdHlTdG9yZVVuaXRPZldvcmsgc3RvcmVVbml0T2ZXb3JrID0gbmV3IERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsoIGVudGl0eVN0b3JlU3BpLCBuZXdVbml0T2ZXb3JrSWQoKSwgdXNlY2FzZU1ldGFJbmZvLCBjdXJyZW50VGltZSApOworICAgICAgICBzdG9yZVVuaXRPZldvcmsgPSBuZXcgTW9kdWxlRW50aXR5U3RvcmVVbml0T2ZXb3JrKCBtb2R1bGUsIHN0b3JlVW5pdE9mV29yayApOworICAgICAgICByZXR1cm4gc3RvcmVVbml0T2ZXb3JrOwogICAgIH0KIAogICAgIC8vIEVudGl0eVN0b3JlU1BJCiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgRW50aXR5U3RhdGUgbmV3RW50aXR5U3RhdGUoIEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlU3BpIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvcgogICAgICkKQEAgLTE2OCw3ICsxNzEsNyBAQAogICAgICAgICAgICAgc3RhdGUucHV0KCBKU09OS2V5cy5BU1NPQ0lBVElPTlMsIG5ldyBKU09OT2JqZWN0KCkgKTsKICAgICAgICAgICAgIHN0YXRlLnB1dCggSlNPTktleXMuTUFOWV9BU1NPQ0lBVElPTlMsIG5ldyBKU09OT2JqZWN0KCkgKTsKICAgICAgICAgICAgIHN0YXRlLnB1dCggSlNPTktleXMuTkFNRURfQVNTT0NJQVRJT05TLCBuZXcgSlNPTk9iamVjdCgpICk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEpTT05FbnRpdHlTdGF0ZSggKERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmspIHVuaXRPZldvcmssIHZhbHVlU2VyaWFsaXphdGlvbiwKKyAgICAgICAgICAgIHJldHVybiBuZXcgSlNPTkVudGl0eVN0YXRlKCB1bml0T2ZXb3JrLmN1cnJlbnRUaW1lKCksIHZhbHVlU2VyaWFsaXphdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eSwgZW50aXR5RGVzY3JpcHRvciwgc3RhdGUgKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCggSlNPTkV4Y2VwdGlvbiBlICkKQEAgLTE3OCwxNyArMTgxLDIwIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZU9mKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywgRW50aXR5UmVmZXJlbmNlIGlkZW50aXR5ICkKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlT2YoIEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlU3BpIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eQorICAgICkKICAgICB7Ci0gICAgICAgIEVudGl0eVN0YXRlIHN0YXRlID0gZmV0Y2hDYWNoZWRTdGF0ZSggaWRlbnRpdHksIChEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrKSB1bml0T2ZXb3JrICk7CisgICAgICAgIEVudGl0eVN0YXRlIHN0YXRlID0gZmV0Y2hDYWNoZWRTdGF0ZSggaWRlbnRpdHksIG1vZHVsZSwgdW5pdE9mV29yay5jdXJyZW50VGltZSgpICk7CiAgICAgICAgIGlmKCBzdGF0ZSAhPSBudWxsICkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwogICAgICAgICB9CiAgICAgICAgIC8vIEdldCBzdGF0ZQogICAgICAgICBSZWFkZXIgaW4gPSBtYXBFbnRpdHlTdG9yZS5nZXQoIGlkZW50aXR5ICk7Ci0gICAgICAgIEpTT05FbnRpdHlTdGF0ZSBsb2FkZWRTdGF0ZSA9IHJlYWRFbnRpdHlTdGF0ZSggKERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmspIHVuaXRPZldvcmssIGluICk7Ci0gICAgICAgIGlmKCBkb0NhY2hlT25SZWFkKCAoRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yaykgdW5pdE9mV29yayApICkKKyAgICAgICAgSlNPTkVudGl0eVN0YXRlIGxvYWRlZFN0YXRlID0gcmVhZEVudGl0eVN0YXRlKCBtb2R1bGUsIGluICk7CisgICAgICAgIGlmKCBkb0NhY2hlT25SZWFkKCB1bml0T2ZXb3JrICkgKQogICAgICAgICB7CiAgICAgICAgICAgICBjYWNoZS5wdXQoIGlkZW50aXR5LmlkZW50aXR5KCksIG5ldyBDYWNoZVN0YXRlKCBsb2FkZWRTdGF0ZS5zdGF0ZSgpICkgKTsKICAgICAgICAgfQpAQCAtMTk2LDcgKzIwMiw4IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0YXRlQ29tbWl0dGVyIGFwcGx5Q2hhbmdlcyggZmluYWwgRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmssIGZpbmFsIEl0ZXJhYmxlPEVudGl0eVN0YXRlPiBzdGF0ZQorICAgIHB1YmxpYyBTdGF0ZUNvbW1pdHRlciBhcHBseUNoYW5nZXMoIGZpbmFsIEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEl0ZXJhYmxlPEVudGl0eVN0YXRlPiBzdGF0ZQogICAgICkKICAgICAgICAgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uCiAgICAgewpAQCAtMjEzLDggKzIyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1hcCggTWFwRW50aXR5U3RvcmUuTWFwQ2hhbmdlciBjaGFuZ2VyICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrIHVvdyA9IChEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrKSB1bml0T2ZXb3JrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhY2hlT3B0aW9ucyBvcHRpb25zID0gdW93LnVzZWNhc2UoKS5tZXRhSW5mbyggQ2FjaGVPcHRpb25zLmNsYXNzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGVPcHRpb25zIG9wdGlvbnMgPSB1bml0T2ZXb3JrLnVzZWNhc2UoKS5tZXRhSW5mbyggQ2FjaGVPcHRpb25zLmNsYXNzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG9wdGlvbnMgPT0gbnVsbCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gQ2FjaGVPcHRpb25zLkFMV0FZUzsKQEAgLTIyNSw3ICsyMzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09ORW50aXR5U3RhdGUgc3RhdGUgPSAoSlNPTkVudGl0eVN0YXRlKSBlbnRpdHlTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHN0YXRlLnN0YXR1cygpLmVxdWFscyggRW50aXR5U3RhdHVzLk5FVyApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5KCBXcml0ZXIgd3JpdGVyID0gY2hhbmdlci5uZXdFbnRpdHkoIHN0YXRlLmlkZW50aXR5KCksIHN0YXRlLmVudGl0eURlc2NyaXB0b3IoKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSAoV3JpdGVyIHdyaXRlciA9IGNoYW5nZXIubmV3RW50aXR5KCBzdGF0ZS5pZGVudGl0eSgpLCBzdGF0ZS5lbnRpdHlEZXNjcmlwdG9yKCkgKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUVudGl0eVN0YXRlKCBzdGF0ZSwgd3JpdGVyLCB1bml0T2ZXb3JrLmlkZW50aXR5KCksIHVuaXRPZldvcmsuY3VycmVudFRpbWUoKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM2LDcgKzI0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RhdGUuc3RhdHVzKCkuZXF1YWxzKCBFbnRpdHlTdGF0dXMuVVBEQVRFRCApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5KCBXcml0ZXIgd3JpdGVyID0gY2hhbmdlci51cGRhdGVFbnRpdHkoIHN0YXRlLmlkZW50aXR5KCksIHN0YXRlLmVudGl0eURlc2NyaXB0b3IoKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSAoV3JpdGVyIHdyaXRlciA9IGNoYW5nZXIudXBkYXRlRW50aXR5KCBzdGF0ZS5pZGVudGl0eSgpLCBzdGF0ZS5lbnRpdHlEZXNjcmlwdG9yKCkgKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUVudGl0eVN0YXRlKCBzdGF0ZSwgd3JpdGVyLCB1bml0T2ZXb3JrLmlkZW50aXR5KCksIHVuaXRPZldvcmsuY3VycmVudFRpbWUoKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjY4LDcgKzI3NCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElucHV0PEVudGl0eVN0YXRlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbj4gZW50aXR5U3RhdGVzKCBmaW5hbCBNb2R1bGUgbW9kdWxlICkKKyAgICBwdWJsaWMgSW5wdXQ8RW50aXR5U3RhdGUsIEVudGl0eVN0b3JlRXhjZXB0aW9uPiBlbnRpdHlTdGF0ZXMoIGZpbmFsIE1vZHVsZVNwaSBtb2R1bGUgKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBJbnB1dDxFbnRpdHlTdGF0ZSwgRW50aXR5U3RvcmVFeGNlcHRpb24+KCkKICAgICAgICAgewpAQCAtMjgyLDIwICsyODgsNyBAQAogICAgICAgICAgICAgICAgICAgICBwdWJsaWMgPFJlY2VpdmVyVGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBzZW5kVG8oIGZpbmFsIFJlY2VpdmVyPD8gc3VwZXIgRW50aXR5U3RhdGUsIFJlY2VpdmVyVGhyb3dhYmxlVHlwZT4gcmVjZWl2ZXIgKQogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlY2VpdmVyVGhyb3dhYmxlVHlwZSwgRW50aXR5U3RvcmVFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgVXNlY2FzZSB1c2VjYXNlID0gVXNlY2FzZUJ1aWxkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGRVc2VjYXNlKCAicWk0ai5lbnRpdHlzdG9yZS5lbnRpdHlzdGF0ZXMiICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aE1ldGFJbmZvKCBDYWNoZU9wdGlvbnMuTkVWRVIgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5uZXdVc2VjYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW93ID0gbmV3IERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5U3RvcmVTcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VW5pdE9mV29ya0lkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWNhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxFbnRpdHlTdGF0ZT4gbWlncmF0ZWQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwRW50aXR5U3RvcmUuZW50aXR5U3RhdGVzKCkudHJhbnNmZXJUbyggbmV3IE91dHB1dDxSZWFkZXIsIFJlY2VpdmVyVGhyb3dhYmxlVHlwZT4oKQpAQCAtMzEwLDcgKzMwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVjZWl2ZSggUmVhZGVyIGl0ZW0gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVjZWl2ZXJUaHJvd2FibGVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBFbnRpdHlTdGF0ZSBlbnRpdHkgPSByZWFkRW50aXR5U3RhdGUoIHVvdywgaXRlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBFbnRpdHlTdGF0ZSBlbnRpdHkgPSByZWFkRW50aXR5U3RhdGUoIG1vZHVsZSwgaXRlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggZW50aXR5LnN0YXR1cygpID09IEVudGl0eVN0YXR1cy5VUERBVEVEICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlncmF0ZWQuYWRkKCBlbnRpdHkgKTsKQEAgLTMxOCw3ICszMTEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN5bmNoIGJhY2sgMTAwIGF0IGEgdGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG1pZ3JhdGVkLnNpemUoKSA+IDEwMCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hNaWdyYXRlZEVudGl0aWVzKCBtaWdyYXRlZCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hNaWdyYXRlZEVudGl0aWVzKCBtaWdyYXRlZCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCggSU9FeGNlcHRpb24gZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5U3RvcmVFeGNlcHRpb24oICJTeW5jaHJvbml6YXRpb24gb2YgTWlncmF0ZWQgRW50aXRpZXMgZmFpbGVkLiIsIGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIucmVjZWl2ZSggZW50aXR5ICk7CkBAIC0zMjgsNyArMzI4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTeW5jaCBhbnkgcmVtYWluaW5nIG1pZ3JhdGVkIGVudGl0aWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIW1pZ3JhdGVkLmlzRW1wdHkoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hNaWdyYXRlZEVudGl0aWVzKCBtaWdyYXRlZCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hNaWdyYXRlZEVudGl0aWVzKCBtaWdyYXRlZCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCggSU9FeGNlcHRpb24gZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5U3RvcmVFeGNlcHRpb24oICJTeW5jaHJvbml6YXRpb24gb2YgTWlncmF0ZWQgRW50aXRpZXMgZmFpbGVkLiIsIGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7CkBAIC0zNDQsMzEgKzM1MSwyNSBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzeW5jaE1pZ3JhdGVkRW50aXRpZXMoIGZpbmFsIExpc3Q8RW50aXR5U3RhdGU+IG1pZ3JhdGVkRW50aXRpZXMgKQorICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAgICB7Ci0gICAgICAgIHRyeQorICAgICAgICBtYXBFbnRpdHlTdG9yZS5hcHBseUNoYW5nZXMoIG5ldyBNYXBFbnRpdHlTdG9yZS5NYXBDaGFuZ2VzKCkKICAgICAgICAgewotICAgICAgICAgICAgbWFwRW50aXR5U3RvcmUuYXBwbHlDaGFuZ2VzKCBuZXcgTWFwRW50aXR5U3RvcmUuTWFwQ2hhbmdlcygpCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TWFwKCBNYXBFbnRpdHlTdG9yZS5NYXBDaGFuZ2VyIGNoYW5nZXIgKQorICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TWFwKCBNYXBFbnRpdHlTdG9yZS5NYXBDaGFuZ2VyIGNoYW5nZXIgKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgICAgICAgICAgICBmb3IoIEVudGl0eVN0YXRlIG1pZ3JhdGVkRW50aXR5IDogbWlncmF0ZWRFbnRpdGllcyApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IoIEVudGl0eVN0YXRlIG1pZ3JhdGVkRW50aXR5IDogbWlncmF0ZWRFbnRpdGllcyApCisgICAgICAgICAgICAgICAgICAgIEpTT05FbnRpdHlTdGF0ZSBzdGF0ZSA9IChKU09ORW50aXR5U3RhdGUpIG1pZ3JhdGVkRW50aXR5OworICAgICAgICAgICAgICAgICAgICB0cnkgKFdyaXRlciB3cml0ZXIgPSBjaGFuZ2VyLnVwZGF0ZUVudGl0eSggc3RhdGUuaWRlbnRpdHkoKSwgc3RhdGUuZW50aXR5RGVzY3JpcHRvcigpICkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTT05FbnRpdHlTdGF0ZSBzdGF0ZSA9IChKU09ORW50aXR5U3RhdGUpIG1pZ3JhdGVkRW50aXR5OwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5KCBXcml0ZXIgd3JpdGVyID0gY2hhbmdlci51cGRhdGVFbnRpdHkoIHN0YXRlLmlkZW50aXR5KCksIHN0YXRlLmVudGl0eURlc2NyaXB0b3IoKSApICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUVudGl0eVN0YXRlKCBzdGF0ZSwgd3JpdGVyLCBzdGF0ZS52ZXJzaW9uKCksIHN0YXRlLmxhc3RNb2RpZmllZCgpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUVudGl0eVN0YXRlKCBzdGF0ZSwgd3JpdGVyLCBzdGF0ZS52ZXJzaW9uKCksIHN0YXRlLmxhc3RNb2RpZmllZCgpICk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9ICk7Ci0gICAgICAgICAgICBtaWdyYXRlZEVudGl0aWVzLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIElPRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybiggIkNvdWxkIG5vdCBzdG9yZSBtaWdyYXRlZCBlbnRpdGVzIiwgZSApOwotICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICAgICAgbWlncmF0ZWRFbnRpdGllcy5jbGVhcigpOwogICAgIH0KIAogICAgIHByb3RlY3RlZCBTdHJpbmcgbmV3VW5pdE9mV29ya0lkKCkKQEAgLTM5MiwxMiArMzkzLDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgSlNPTkVudGl0eVN0YXRlIHJlYWRFbnRpdHlTdGF0ZSggRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrLCBSZWFkZXIgZW50aXR5U3RhdGUgKQorICAgIHByb3RlY3RlZCBKU09ORW50aXR5U3RhdGUgcmVhZEVudGl0eVN0YXRlKCBNb2R1bGVTcGkgbW9kdWxlLCBSZWFkZXIgZW50aXR5U3RhdGUgKQogICAgICAgICB0aHJvd3MgRW50aXR5U3RvcmVFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBNb2R1bGUgbW9kdWxlID0gdW5pdE9mV29yay5tb2R1bGUoKTsKICAgICAgICAgICAgIEpTT05PYmplY3QganNvbk9iamVjdCA9IG5ldyBKU09OT2JqZWN0KCBuZXcgSlNPTlRva2VuZXIoIGVudGl0eVN0YXRlICkgKTsKICAgICAgICAgICAgIEVudGl0eVN0YXR1cyBzdGF0dXMgPSBFbnRpdHlTdGF0dXMuTE9BREVEOwogCkBAIC00MjQsMTEgKzQyNCw2IEBACiAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgLSBzZXQgdmVyc2lvbiB0byBiZSBjb3JyZWN0CiAgICAgICAgICAgICAgICAgICAgIGpzb25PYmplY3QucHV0KCBKU09OS2V5cy5BUFBMSUNBVElPTl9WRVJTSU9OLCBhcHBsaWNhdGlvbi52ZXJzaW9uKCkgKTsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBMb2dnZXJGYWN0b3J5LmdldExvZ2dlciggZ2V0Q2xhc3MoKSApLmRlYnVnKCAiVXBkYXRlZCB2ZXJzaW9uIG5yIG9uICIgKyBpZGVudGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmcm9tICIgKyBjdXJyZW50QXBwVmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB0byAiICsgYXBwbGljYXRpb24udmVyc2lvbigpICk7Ci0KICAgICAgICAgICAgICAgICAvLyBTdGF0ZSBjaGFuZ2VkCiAgICAgICAgICAgICAgICAgc3RhdHVzID0gRW50aXR5U3RhdHVzLlVQREFURUQ7CiAgICAgICAgICAgICB9CkBAIC00MzgsMTEgKzQzMywxNCBAQAogICAgICAgICAgICAgRW50aXR5RGVzY3JpcHRvciBlbnRpdHlEZXNjcmlwdG9yID0gbW9kdWxlLmVudGl0eURlc2NyaXB0b3IoIHR5cGUgKTsKICAgICAgICAgICAgIGlmKCBlbnRpdHlEZXNjcmlwdG9yID09IG51bGwgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlUeXBlTm90Rm91bmRFeGNlcHRpb24oIHR5cGUgKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uKCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCBNb2RlbE1vZHVsZS50b1N0cmluZ0Z1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmZpbmRWaXNpYmxlRW50aXR5VHlwZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIG5ldyBKU09ORW50aXR5U3RhdGUoIHVuaXRPZldvcmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVTZXJpYWxpemF0aW9uLAorICAgICAgICAgICAgcmV0dXJuIG5ldyBKU09ORW50aXR5U3RhdGUoIHZhbHVlU2VyaWFsaXphdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggaWRlbnRpdHkgKSwKQEAgLTQ2MSw3ICs0NTksNyBAQAogICAgIHB1YmxpYyBKU09OT2JqZWN0IGpzb25TdGF0ZU9mKCBTdHJpbmcgaWQgKQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAgICB7Ci0gICAgICAgIHRyeSggUmVhZGVyIHJlYWRlciA9IG1hcEVudGl0eVN0b3JlLmdldCggRW50aXR5UmVmZXJlbmNlLnBhcnNlRW50aXR5UmVmZXJlbmNlKCBpZCApICkgKQorICAgICAgICB0cnkgKFJlYWRlciByZWFkZXIgPSBtYXBFbnRpdHlTdG9yZS5nZXQoIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggaWQgKSApKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbmV3IEpTT05PYmplY3QoIG5ldyBKU09OVG9rZW5lciggcmVhZGVyICkgKTsKICAgICAgICAgfQpAQCAtNDcxLDcgKzQ2OSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIEVudGl0eVN0YXRlIGZldGNoQ2FjaGVkU3RhdGUoIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSwgRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrICkKKyAgICBwcml2YXRlIEVudGl0eVN0YXRlIGZldGNoQ2FjaGVkU3RhdGUoIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSwgTW9kdWxlU3BpIG1vZHVsZSwgbG9uZyBjdXJyZW50VGltZSApCiAgICAgewogICAgICAgICBDYWNoZVN0YXRlIGNhY2hlU3RhdGUgPSBjYWNoZS5nZXQoIGlkZW50aXR5LmlkZW50aXR5KCkgKTsKICAgICAgICAgaWYoIGNhY2hlU3RhdGUgIT0gbnVsbCApCkBAIC00ODAsOCArNDc4LDkgQEAKICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFN0cmluZyB0eXBlID0gZGF0YS5nZXRTdHJpbmcoIEpTT05LZXlzLlRZUEUgKTsKLSAgICAgICAgICAgICAgICBFbnRpdHlEZXNjcmlwdG9yIGVudGl0eURlc2NyaXB0b3IgPSB1bml0T2ZXb3JrLm1vZHVsZSgpLmVudGl0eURlc2NyaXB0b3IoIHR5cGUgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpTT05FbnRpdHlTdGF0ZSggdW5pdE9mV29yaywgdmFsdWVTZXJpYWxpemF0aW9uLCBpZGVudGl0eSwgZW50aXR5RGVzY3JpcHRvciwgZGF0YSApOworICAgICAgICAgICAgICAgIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvciA9IG1vZHVsZS5lbnRpdHlEZXNjcmlwdG9yKCB0eXBlICk7CisvLyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpTT05FbnRpdHlTdGF0ZSggY3VycmVudFRpbWUsIHZhbHVlU2VyaWFsaXphdGlvbiwgaWRlbnRpdHksIGVudGl0eURlc2NyaXB0b3IsIGRhdGEgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpTT05FbnRpdHlTdGF0ZSggdmFsdWVTZXJpYWxpemF0aW9uLCBkYXRhLmdldFN0cmluZyggSlNPTktleXMuVkVSU0lPTiApLCBkYXRhLmdldExvbmcoIEpTT05LZXlzLk1PRElGSUVEICksIGlkZW50aXR5LCBFbnRpdHlTdGF0dXMuTE9BREVELCBlbnRpdHlEZXNjcmlwdG9yLCBkYXRhICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCggSlNPTkV4Y2VwdGlvbiBlICkKICAgICAgICAgICAgIHsKQEAgLTQ5MiwxOCArNDkxLDE4IEBACiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiBkb0NhY2hlT25SZWFkKCBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmsgKQorICAgIHByaXZhdGUgYm9vbGVhbiBkb0NhY2hlT25SZWFkKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yayApCiAgICAgewogICAgICAgICBDYWNoZU9wdGlvbnMgY2FjaGVPcHRpb25zID0gdW5pdE9mV29yay51c2VjYXNlKCkubWV0YUluZm8oIENhY2hlT3B0aW9ucy5jbGFzcyApOwogICAgICAgICByZXR1cm4gY2FjaGVPcHRpb25zID09IG51bGwgfHwgY2FjaGVPcHRpb25zLmNhY2hlT25SZWFkKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2FjaGVTdGF0ZQorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2FjaGVTdGF0ZQogICAgICAgICBpbXBsZW1lbnRzIEV4dGVybmFsaXphYmxlCiAgICAgewogICAgICAgICBwdWJsaWMgSlNPTk9iamVjdCBqc29uOwogCi0gICAgICAgIHByaXZhdGUgQ2FjaGVTdGF0ZSgpCisgICAgICAgIHB1YmxpYyBDYWNoZVN0YXRlKCkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTUzMyw1ICs1MzIsNCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCiB9CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0pTT05OYW1lZEFzc29jaWF0aW9uU3RhdGUuamF2YSBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvSlNPTk5hbWVkQXNzb2NpYXRpb25TdGF0ZS5qYXZhCmluZGV4IDEzYjJlM2YuLmUxODNlNTMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvSlNPTk5hbWVkQXNzb2NpYXRpb25TdGF0ZS5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvSlNPTk5hbWVkQXNzb2NpYXRpb25TdGF0ZS5qYXZhCkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIEpTT05FeGNlcHRpb24gZXggKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5U3RvcmVFeGNlcHRpb24oIGV4ICk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvaGVscGVycy9NYXBFbnRpdHlTdG9yZU1peGluLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL01hcEVudGl0eVN0b3JlTWl4aW4uamF2YQppbmRleCBiNGFiZjUzLi5hMmQwMmJjIDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL01hcEVudGl0eVN0b3JlTWl4aW4uamF2YQorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL01hcEVudGl0eVN0b3JlTWl4aW4uamF2YQpAQCAtMzQsNyArMzQsNiBAQAogaW1wb3J0IG9yZy5qc29uLkpTT05Ub2tlbmVyOwogaW1wb3J0IG9yZy5qc29uLkpTT05Xcml0ZXI7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuY2FjaGUuQ2FjaGVPcHRpb25zOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uT3B0aW9uYWw7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5RdWFsaWZpZWROYW1lOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5RGVzY3JpcHRvcjsKQEAgLTQ3LDE2ICs0NiwxNSBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VEZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLnF1YWxpZmllci5UYWdnZWQ7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5BcHBsaWNhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKIGltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5WYWx1ZVR5cGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2U7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnVzZWNhc2UuVXNlY2FzZUJ1aWxkZXI7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlU2VyaWFsaXphdGlvbjsKIGltcG9ydCBvcmcucWk0ai5pby5JbnB1dDsKIGltcG9ydCBvcmcucWk0ai5pby5PdXRwdXQ7CiBpbXBvcnQgb3JnLnFpNGouaW8uUmVjZWl2ZXI7CiBpbXBvcnQgb3JnLnFpNGouaW8uU2VuZGVyOworaW1wb3J0IG9yZy5xaTRqLnNwaS5RaTRqU1BJOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0dXM7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkRlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcms7CkBAIC02NCwxMSArNjIsMTMgQEAKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RvcmVFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlU1BJOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZVVuaXRPZldvcms7CitpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLk1vZHVsZUVudGl0eVN0b3JlVW5pdE9mV29yazsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuU3RhdGVDb21taXR0ZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZGVsTW9kdWxlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogCiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLmZpcnN0OworaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5tYXA7CiAKIC8qKgogICogSW1wbGVtZW50YXRpb24gb2YgRW50aXR5U3RvcmUgdGhhdCB3b3JrcyB3aXRoIGFuIGltcGxlbWVudGF0aW9uIG9mIE1hcEVudGl0eVN0b3JlLgpAQCAtODgsNiArODgsOSBAQAogICAgIHByaXZhdGUgRW50aXR5U3RvcmVTUEkgZW50aXR5U3RvcmVTcGk7CiAKICAgICBAU3RydWN0dXJlCisgICAgcHJpdmF0ZSBRaTRqU1BJIHNwaTsKKworICAgIEBTdHJ1Y3R1cmUKICAgICBwcml2YXRlIEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uOwogCiAgICAgQFNlcnZpY2UKQEAgLTEwNCw0MCArMTA3LDQyIEBACiAgICAgcHJvdGVjdGVkIFN0cmluZyB1dWlkOwogICAgIHByaXZhdGUgaW50IGNvdW50OwogCi0gICAgcHJpdmF0ZSBMb2dnZXIgbG9nZ2VyOwotCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgYWN0aXZhdGVNYXBFbnRpdHlTdG9yZSgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHV1aWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpICsgIi0iOwotCi0gICAgICAgIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCBkZXNjcmlwdG9yLmlkZW50aXR5KCkgKTsKICAgICB9CiAKICAgICAvLyBFbnRpdHlTdG9yZQogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlTWV0YUluZm8sIE1vZHVsZSBtb2R1bGUsIGxvbmcgY3VycmVudFRpbWUgKQorICAgIHB1YmxpYyBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlTWV0YUluZm8sIE1vZHVsZVNwaSBtb2R1bGUsIGxvbmcgY3VycmVudFRpbWUgKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrKCBlbnRpdHlTdG9yZVNwaSwgbmV3VW5pdE9mV29ya0lkKCksIG1vZHVsZSwgdXNlY2FzZU1ldGFJbmZvLCBjdXJyZW50VGltZSApOworICAgICAgICBFbnRpdHlTdG9yZVVuaXRPZldvcmsgc3RvcmVVbml0T2ZXb3JrID0KKyAgICAgICAgICAgIG5ldyBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrKCBlbnRpdHlTdG9yZVNwaSwgbmV3VW5pdE9mV29ya0lkKCksIHVzZWNhc2VNZXRhSW5mbywgY3VycmVudFRpbWUgKTsKKyAgICAgICAgc3RvcmVVbml0T2ZXb3JrID0gbmV3IE1vZHVsZUVudGl0eVN0b3JlVW5pdE9mV29yayggbW9kdWxlLCBzdG9yZVVuaXRPZldvcmsgKTsKKyAgICAgICAgcmV0dXJuIHN0b3JlVW5pdE9mV29yazsKICAgICB9CiAKICAgICAvLyBFbnRpdHlTdG9yZVNQSQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBFbnRpdHlTdGF0ZSBuZXdFbnRpdHlTdGF0ZSggRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGVTcGkgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmZXJlbmNlIGlkZW50aXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5RGVzY3JpcHRvciBlbnRpdHlEZXNjcmlwdG9yCiAgICAgKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0RW50aXR5U3RhdGUoIChEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrKSB1bml0T2ZXb3JrLCBpZGVudGl0eSwgZW50aXR5RGVzY3JpcHRvciApOworICAgICAgICByZXR1cm4gbmV3IERlZmF1bHRFbnRpdHlTdGF0ZSggdW5pdE9mV29yay5jdXJyZW50VGltZSgpLCBpZGVudGl0eSwgZW50aXR5RGVzY3JpcHRvciApOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgRW50aXR5U3RhdGUgZW50aXR5U3RhdGVPZiggRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRvZndvcmssIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSApCisgICAgcHVibGljIHN5bmNocm9uaXplZCBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZU9mKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdG9md29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZVNwaSBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHkKKyAgICApCiAgICAgewotICAgICAgICBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmsgPSAoRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yaykgdW5pdG9md29yazsKICAgICAgICAgUmVhZGVyIGluID0gbWFwRW50aXR5U3RvcmUuZ2V0KCBpZGVudGl0eSApOwotICAgICAgICByZXR1cm4gcmVhZEVudGl0eVN0YXRlKCB1bml0T2ZXb3JrLCBpbiApOworICAgICAgICByZXR1cm4gcmVhZEVudGl0eVN0YXRlKCBtb2R1bGUsIGluICk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xNjMsMTQgKzE2OCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0RW50aXR5U3RhdGUgc3RhdGUgPSAoRGVmYXVsdEVudGl0eVN0YXRlKSBlbnRpdHlTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHN0YXRlLnN0YXR1cygpLmVxdWFscyggRW50aXR5U3RhdHVzLk5FVyApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5KCBXcml0ZXIgd3JpdGVyID0gY2hhbmdlci5uZXdFbnRpdHkoIHN0YXRlLmlkZW50aXR5KCksIHN0YXRlLmVudGl0eURlc2NyaXB0b3IoKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSAoV3JpdGVyIHdyaXRlciA9IGNoYW5nZXIubmV3RW50aXR5KCBzdGF0ZS5pZGVudGl0eSgpLCBzdGF0ZS5lbnRpdHlEZXNjcmlwdG9yKCkgKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUVudGl0eVN0YXRlKCBzdGF0ZSwgd3JpdGVyLCB1bml0b2Z3b3JrLmlkZW50aXR5KCksIHVuaXRvZndvcmsuY3VycmVudFRpbWUoKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0YXRlLnN0YXR1cygpLmVxdWFscyggRW50aXR5U3RhdHVzLlVQREFURUQgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSggV3JpdGVyIHdyaXRlciA9IGNoYW5nZXIudXBkYXRlRW50aXR5KCBzdGF0ZS5pZGVudGl0eSgpLCBzdGF0ZS5lbnRpdHlEZXNjcmlwdG9yKCkgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgKFdyaXRlciB3cml0ZXIgPSBjaGFuZ2VyLnVwZGF0ZUVudGl0eSggc3RhdGUuaWRlbnRpdHkoKSwgc3RhdGUuZW50aXR5RGVzY3JpcHRvcigpICkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVFbnRpdHlTdGF0ZSggc3RhdGUsIHdyaXRlciwgdW5pdG9md29yay5pZGVudGl0eSgpLCB1bml0b2Z3b3JrLmN1cnJlbnRUaW1lKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE5Nyw3ICsyMDIsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnB1dDxFbnRpdHlTdGF0ZSwgRW50aXR5U3RvcmVFeGNlcHRpb24+IGVudGl0eVN0YXRlcyggZmluYWwgTW9kdWxlIG1vZHVsZSApCisgICAgcHVibGljIElucHV0PEVudGl0eVN0YXRlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbj4gZW50aXR5U3RhdGVzKCBmaW5hbCBNb2R1bGVTcGkgbW9kdWxlICkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgSW5wdXQ8RW50aXR5U3RhdGUsIEVudGl0eVN0b3JlRXhjZXB0aW9uPigpCiAgICAgICAgIHsKQEAgLTIxMSwyMCArMjE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcHVibGljIDxSZWNlaXZlclRocm93YWJsZVR5cGUgZXh0ZW5kcyBUaHJvd2FibGU+IHZvaWQgc2VuZFRvKCBmaW5hbCBSZWNlaXZlcjw/IHN1cGVyIEVudGl0eVN0YXRlLCBSZWNlaXZlclRocm93YWJsZVR5cGU+IHJlY2VpdmVyICkKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZWNlaXZlclRocm93YWJsZVR5cGUsIEVudGl0eVN0b3JlRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZWNhc2UgdXNlY2FzZSA9IFVzZWNhc2VCdWlsZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkVXNlY2FzZSggInFpNGouZW50aXR5c3RvcmUuZW50aXR5c3RhdGVzIiApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhNZXRhSW5mbyggQ2FjaGVPcHRpb25zLk5FVkVSICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAubmV3VXNlY2FzZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrIHVvdyA9IG5ldyBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eVN0b3JlU3BpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1VuaXRPZldvcmtJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VjYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICk7Ci0KICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8RW50aXR5U3RhdGU+IG1pZ3JhdGVkID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcEVudGl0eVN0b3JlLmVudGl0eVN0YXRlcygpLnRyYW5zZmVyVG8oIG5ldyBPdXRwdXQ8UmVhZGVyLCBSZWNlaXZlclRocm93YWJsZVR5cGU+KCkKQEAgLTIzOSw3ICsyMzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlY2VpdmUoIFJlYWRlciBpdGVtICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlY2VpdmVyVGhyb3dhYmxlVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRW50aXR5U3RhdGUgZW50aXR5ID0gcmVhZEVudGl0eVN0YXRlKCB1b3csIGl0ZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRW50aXR5U3RhdGUgZW50aXR5ID0gcmVhZEVudGl0eVN0YXRlKCBtb2R1bGUsIGl0ZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGVudGl0eS5zdGF0dXMoKSA9PSBFbnRpdHlTdGF0dXMuVVBEQVRFRCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pZ3JhdGVkLmFkZCggZW50aXR5ICk7CkBAIC0yNDcsNyArMjM5LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTeW5jaCBiYWNrIDEwMCBhdCBhIHRpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBtaWdyYXRlZC5zaXplKCkgPiAxMDAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoTWlncmF0ZWRFbnRpdGllcyggbWlncmF0ZWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoTWlncmF0ZWRFbnRpdGllcyggbWlncmF0ZWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goIElPRXhjZXB0aW9uIGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVN0b3JlRXhjZXB0aW9uKCAiU3luY2hyb25pemF0aW9uIG9mIE1pZ3JhdGVkIEVudGl0aWVzIGZhaWxlZC4iLCBlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLnJlY2VpdmUoIGVudGl0eSApOwpAQCAtMjU3LDcgKzI1NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3luY2ggYW55IHJlbWFpbmluZyBtaWdyYXRlZCBlbnRpdGllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFtaWdyYXRlZC5pc0VtcHR5KCkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoTWlncmF0ZWRFbnRpdGllcyggbWlncmF0ZWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoTWlncmF0ZWRFbnRpdGllcyggbWlncmF0ZWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goIElPRXhjZXB0aW9uIGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVN0b3JlRXhjZXB0aW9uKCAiU3luY2hyb25pemF0aW9uIG9mIE1pZ3JhdGVkIEVudGl0aWVzIGZhaWxlZC4iLCBlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwpAQCAtMjczLDMxICsyNzksMjUgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc3luY2hNaWdyYXRlZEVudGl0aWVzKCBmaW5hbCBMaXN0PEVudGl0eVN0YXRlPiBtaWdyYXRlZEVudGl0aWVzICkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCiAgICAgewotICAgICAgICB0cnkKKyAgICAgICAgbWFwRW50aXR5U3RvcmUuYXBwbHlDaGFuZ2VzKCBuZXcgTWFwRW50aXR5U3RvcmUuTWFwQ2hhbmdlcygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1hcEVudGl0eVN0b3JlLmFwcGx5Q2hhbmdlcyggbmV3IE1hcEVudGl0eVN0b3JlLk1hcENoYW5nZXMoKQorICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1hcCggTWFwRW50aXR5U3RvcmUuTWFwQ2hhbmdlciBjaGFuZ2VyICkKKyAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1hcCggTWFwRW50aXR5U3RvcmUuTWFwQ2hhbmdlciBjaGFuZ2VyICkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgZm9yKCBFbnRpdHlTdGF0ZSBtaWdyYXRlZEVudGl0eSA6IG1pZ3JhdGVkRW50aXRpZXMgKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKCBFbnRpdHlTdGF0ZSBtaWdyYXRlZEVudGl0eSA6IG1pZ3JhdGVkRW50aXRpZXMgKQorICAgICAgICAgICAgICAgICAgICBEZWZhdWx0RW50aXR5U3RhdGUgc3RhdGUgPSAoRGVmYXVsdEVudGl0eVN0YXRlKSBtaWdyYXRlZEVudGl0eTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IChXcml0ZXIgd3JpdGVyID0gY2hhbmdlci51cGRhdGVFbnRpdHkoIHN0YXRlLmlkZW50aXR5KCksIHN0YXRlLmVudGl0eURlc2NyaXB0b3IoKSApKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0RW50aXR5U3RhdGUgc3RhdGUgPSAoRGVmYXVsdEVudGl0eVN0YXRlKSBtaWdyYXRlZEVudGl0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSggV3JpdGVyIHdyaXRlciA9IGNoYW5nZXIudXBkYXRlRW50aXR5KCBzdGF0ZS5pZGVudGl0eSgpLCBzdGF0ZS5lbnRpdHlEZXNjcmlwdG9yKCkgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVFbnRpdHlTdGF0ZSggc3RhdGUsIHdyaXRlciwgc3RhdGUudmVyc2lvbigpLCBzdGF0ZS5sYXN0TW9kaWZpZWQoKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVFbnRpdHlTdGF0ZSggc3RhdGUsIHdyaXRlciwgc3RhdGUudmVyc2lvbigpLCBzdGF0ZS5sYXN0TW9kaWZpZWQoKSApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSApOwotICAgICAgICAgICAgbWlncmF0ZWRFbnRpdGllcy5jbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBJT0V4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oICJDb3VsZCBub3Qgc3RvcmUgbWlncmF0ZWQgZW50aXRlcyIsIGUgKTsKLSAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgICAgIG1pZ3JhdGVkRW50aXRpZXMuY2xlYXIoKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1VuaXRPZldvcmtJZCgpCkBAIC0zNDYsNyArMzQ2LDggQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgSlNPTldyaXRlciBhc3NvY2lhdGlvbnMgPSBwcm9wZXJ0aWVzLmVuZE9iamVjdCgpLmtleSggSlNPTktleXMuQVNTT0NJQVRJT05TICkub2JqZWN0KCk7Ci0gICAgICAgICAgICBmb3IoIE1hcC5FbnRyeTxRdWFsaWZpZWROYW1lLCBFbnRpdHlSZWZlcmVuY2U+IHN0YXRlTmFtZUVudGl0eVJlZmVyZW5jZUVudHJ5IDogc3RhdGUuYXNzb2NpYXRpb25zKCkuZW50cnlTZXQoKSApCisgICAgICAgICAgICBmb3IoIE1hcC5FbnRyeTxRdWFsaWZpZWROYW1lLCBFbnRpdHlSZWZlcmVuY2U+IHN0YXRlTmFtZUVudGl0eVJlZmVyZW5jZUVudHJ5IDogc3RhdGUuYXNzb2NpYXRpb25zKCkKKyAgICAgICAgICAgICAgICAuZW50cnlTZXQoKSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRW50aXR5UmVmZXJlbmNlIHZhbHVlID0gc3RhdGVOYW1lRW50aXR5UmVmZXJlbmNlRW50cnkuZ2V0VmFsdWUoKTsKICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMua2V5KCBzdGF0ZU5hbWVFbnRpdHlSZWZlcmVuY2VFbnRyeS5nZXRLZXkoKS5uYW1lKCkgKS4KQEAgLTM1NCw3ICszNTUsOCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBKU09OV3JpdGVyIG1hbnlBc3NvY2lhdGlvbnMgPSBhc3NvY2lhdGlvbnMuZW5kT2JqZWN0KCkua2V5KCBKU09OS2V5cy5NQU5ZX0FTU09DSUFUSU9OUyApLm9iamVjdCgpOwotICAgICAgICAgICAgZm9yKCBNYXAuRW50cnk8UXVhbGlmaWVkTmFtZSwgTGlzdDxFbnRpdHlSZWZlcmVuY2U+PiBzdGF0ZU5hbWVMaXN0RW50cnkgOiBzdGF0ZS5tYW55QXNzb2NpYXRpb25zKCkuZW50cnlTZXQoKSApCisgICAgICAgICAgICBmb3IoIE1hcC5FbnRyeTxRdWFsaWZpZWROYW1lLCBMaXN0PEVudGl0eVJlZmVyZW5jZT4+IHN0YXRlTmFtZUxpc3RFbnRyeSA6IHN0YXRlLm1hbnlBc3NvY2lhdGlvbnMoKQorICAgICAgICAgICAgICAgIC5lbnRyeVNldCgpICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBKU09OV3JpdGVyIGFzc29jcyA9IG1hbnlBc3NvY2lhdGlvbnMua2V5KCBzdGF0ZU5hbWVMaXN0RW50cnkuZ2V0S2V5KCkubmFtZSgpICkuYXJyYXkoKTsKICAgICAgICAgICAgICAgICBmb3IoIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWZlcmVuY2UgOiBzdGF0ZU5hbWVMaXN0RW50cnkuZ2V0VmFsdWUoKSApCkBAIC0zNjUsNyArMzY3LDggQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgSlNPTldyaXRlciBuYW1lZEFzc29jaWF0aW9ucyA9IG1hbnlBc3NvY2lhdGlvbnMuZW5kT2JqZWN0KCkua2V5KCBKU09OS2V5cy5OQU1FRF9BU1NPQ0lBVElPTlMgKS5vYmplY3QoKTsKLSAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFF1YWxpZmllZE5hbWUsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+IHN0YXRlTmFtZU1hcEVudHJ5IDogc3RhdGUubmFtZWRBc3NvY2lhdGlvbnMoKS5lbnRyeVNldCgpICkKKyAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFF1YWxpZmllZE5hbWUsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+IHN0YXRlTmFtZU1hcEVudHJ5IDogc3RhdGUubmFtZWRBc3NvY2lhdGlvbnMoKQorICAgICAgICAgICAgICAgIC5lbnRyeVNldCgpICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBKU09OV3JpdGVyIGFzc29jcyA9IG5hbWVkQXNzb2NpYXRpb25zLmtleSggc3RhdGVOYW1lTWFwRW50cnkuZ2V0S2V5KCkubmFtZSgpICkub2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgZm9yKCBNYXAuRW50cnk8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+IG5hbWVkUmVmIDogc3RhdGVOYW1lTWFwRW50cnkuZ2V0VmFsdWUoKS5lbnRyeVNldCgpICkKQEAgLTM4MiwxMiArMzg1LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgRW50aXR5U3RhdGUgcmVhZEVudGl0eVN0YXRlKCBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmssIFJlYWRlciBlbnRpdHlTdGF0ZSApCisgICAgcHJvdGVjdGVkIEVudGl0eVN0YXRlIHJlYWRFbnRpdHlTdGF0ZSggTW9kdWxlU3BpIG1vZHVsZSwgUmVhZGVyIGVudGl0eVN0YXRlICkKICAgICAgICAgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uCiAgICAgewogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgTW9kdWxlIG1vZHVsZSA9IHVuaXRPZldvcmsubW9kdWxlKCk7CiAgICAgICAgICAgICBKU09OT2JqZWN0IGpzb25PYmplY3QgPSBuZXcgSlNPTk9iamVjdCggbmV3IEpTT05Ub2tlbmVyKCBlbnRpdHlTdGF0ZSApICk7CiAgICAgICAgICAgICBFbnRpdHlTdGF0dXMgc3RhdHVzID0gRW50aXR5U3RhdHVzLkxPQURFRDsKIApAQCAtNDA4LDExICs0MTAsNiBAQAogICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIC0gc2V0IHZlcnNpb24gdG8gYmUgY29ycmVjdAogICAgICAgICAgICAgICAgICAgICBqc29uT2JqZWN0LnB1dCggSlNPTktleXMuQVBQTElDQVRJT05fVkVSU0lPTiwgYXBwbGljYXRpb24udmVyc2lvbigpICk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoIE1hcEVudGl0eVN0b3JlTWl4aW4uY2xhc3MgKQotICAgICAgICAgICAgICAgICAgICAuZGVidWcoCi0gICAgICAgICAgICAgICAgICAgICAgICAiVXBkYXRlZCB2ZXJzaW9uIG5yIG9uICIgKyBpZGVudGl0eSArICIgZnJvbSAiICsgY3VycmVudEFwcFZlcnNpb24gKyAiIHRvICIgKyBhcHBsaWNhdGlvbi52ZXJzaW9uKCkgKTsKLQogICAgICAgICAgICAgICAgIC8vIFN0YXRlIGNoYW5nZWQKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBFbnRpdHlTdGF0dXMuVVBEQVRFRDsKICAgICAgICAgICAgIH0KQEAgLTQyMiw3ICs0MTksMTEgQEAKICAgICAgICAgICAgIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvciA9IG1vZHVsZS5lbnRpdHlEZXNjcmlwdG9yKCB0eXBlICk7CiAgICAgICAgICAgICBpZiggZW50aXR5RGVzY3JpcHRvciA9PSBudWxsICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uKCB0eXBlICk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbiggdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUubmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCggTW9kZWxNb2R1bGUudG9TdHJpbmdGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5maW5kVmlzaWJsZUVudGl0eVR5cGVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE1hcDxRdWFsaWZpZWROYW1lLCBPYmplY3Q+IHByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDw+KCk7CkBAIC01MjgsOCArNTI5LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEVudGl0eVN0YXRlKCB1bml0T2ZXb3JrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24sCisgICAgICAgICAgICByZXR1cm4gbmV3IERlZmF1bHRFbnRpdHlTdGF0ZSggdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLApAQCAtNTUxLDcgKzU1MSw3IEBACiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgogICAgIHsKICAgICAgICAgSlNPTk9iamVjdCBqc29uT2JqZWN0OwotICAgICAgICB0cnkoIFJlYWRlciByZWFkZXIgPSBtYXBFbnRpdHlTdG9yZS5nZXQoIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggaWQgKSApICkKKyAgICAgICAgdHJ5IChSZWFkZXIgcmVhZGVyID0gbWFwRW50aXR5U3RvcmUuZ2V0KCBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkICkgKSkKICAgICAgICAgewogICAgICAgICAgICAganNvbk9iamVjdCA9IG5ldyBKU09OT2JqZWN0KCBuZXcgSlNPTlRva2VuZXIoIHJlYWRlciApICk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvcGFja2FnZS5odG1sIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvaGVscGVycy9wYWNrYWdlLmh0bWwKaW5kZXggYzQ1ZmQ2Zi4uMTE5NjUyNiAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvaGVscGVycy9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvaGVscGVycy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkVudGl0eVN0b3JlIEhlbHBlcnMuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL3BhY2thZ2UuaHRtbCBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL3BhY2thZ2UuaHRtbAppbmRleCBjMWQ4YTNmLi41ZjU1Mzk5IDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvZW50aXR5c3RvcmUvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5FbnRpdHlTdG9yZSBTUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL21ldHJpY3MvcGFja2FnZS5odG1sIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvbWV0cmljcy9wYWNrYWdlLmh0bWwKaW5kZXggNTZjMzRlNS4uYTZlYWEzNiAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvbWV0cmljcy9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvbWV0cmljcy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPk1ldHJpY3MgU1BJLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9tb2R1bGUvTW9kZWxNb2R1bGUuamF2YSBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL21vZHVsZS9Nb2RlbE1vZHVsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkN2QzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9tb2R1bGUvTW9kZWxNb2R1bGUuamF2YQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGouc3BpLm1vZHVsZTsKKworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuTW9kZWxEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuRnVuY3Rpb247CitpbXBvcnQgb3JnLnFpNGouc3BpLlFpNGpTUEk7CisKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMubWFwOworCisvKioKKyAqIFRPRE8KKyAqLworcHVibGljIGNsYXNzIE1vZGVsTW9kdWxlPFQgZXh0ZW5kcyBNb2RlbERlc2NyaXB0b3I+Cit7CisKKyAgICBwdWJsaWMgc3RhdGljIEZ1bmN0aW9uPD8sIFN0cmluZz4gdG9TdHJpbmdGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbjxNb2RlbE1vZHVsZTw/PiwgU3RyaW5nPigpCisgICAgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyBtYXAoIE1vZGVsTW9kdWxlIGl0ZW0gKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlbS5tb2RlbCgpCisgICAgICAgICAgICAgICAgICAgICAgIC50eXBlcygpCisgICAgICAgICAgICAgICAgICAgICAgIC5pdGVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgIC5uZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgLmdldE5hbWUoKSArICJbIiArIGl0ZW0ubW9kdWxlKCkubmFtZSgpICsgIl0iOworICAgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBzdGF0aWMgPFQgZXh0ZW5kcyBNb2RlbERlc2NyaXB0b3I+IEZ1bmN0aW9uPFQsIE1vZGVsTW9kdWxlPFQ+PiBtb2RlbE1vZHVsZUZ1bmN0aW9uKCBmaW5hbCBNb2R1bGVTcGkgbW9kdWxlICkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb248VCwgTW9kZWxNb2R1bGU8VD4+KCkKKyAgICAgICAgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgTW9kZWxNb2R1bGU8VD4gbWFwKCBUIG1vZGVsICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsTW9kdWxlPD4oIG1vZHVsZSwgbW9kZWwgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgTW9kZWxEZXNjcmlwdG9yPiBGdW5jdGlvbjxNb2RlbE1vZHVsZTxUPiwgVD4gbW9kZWxGdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPE1vZGVsTW9kdWxlPFQ+LCBUPigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFQgbWFwKCBNb2RlbE1vZHVsZTxUPiBtb2RlbE1vZHVsZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsTW9kdWxlLm1vZGVsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBNb2R1bGVTcGkgbW9kdWxlOworICAgIHByaXZhdGUgZmluYWwgVCBtb2RlbDsKKworICAgIHB1YmxpYyBNb2RlbE1vZHVsZSggTW9kdWxlU3BpIG1vZHVsZSwgVCBtb2RlbCApCisgICAgeworICAgICAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsOworICAgIH0KKworICAgIHB1YmxpYyBNb2R1bGVTcGkgbW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtb2R1bGU7CisgICAgfQorCisgICAgcHVibGljIFQgbW9kZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1vZGVsOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyggT2JqZWN0IG8gKQorICAgIHsKKyAgICAgICAgaWYoIHRoaXMgPT0gbyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmKCBvID09IG51bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvLmdldENsYXNzKCkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBNb2RlbE1vZHVsZSB0aGF0ID0gKE1vZGVsTW9kdWxlKSBvOworCisgICAgICAgIGlmKCBtb2RlbCAhPSBudWxsID8gIW1vZGVsLmVxdWFscyggdGhhdC5tb2RlbCApIDogdGhhdC5tb2RlbCAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICEoIG1vZHVsZSAhPSBudWxsID8gIW1vZHVsZS5lcXVhbHMoIHRoYXQubW9kdWxlICkgOiB0aGF0Lm1vZHVsZSAhPSBudWxsICk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpCisgICAgeworICAgICAgICBpbnQgcmVzdWx0ID0gbW9kdWxlICE9IG51bGwgPyBtb2R1bGUuaGFzaENvZGUoKSA6IDA7CisgICAgICAgIHJlc3VsdCA9IDMxICogcmVzdWx0ICsgKCBtb2RlbCAhPSBudWxsID8gbW9kZWwuaGFzaENvZGUoKSA6IDAgKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtb2R1bGUubmFtZSgpICsgIjoiICsgbW9kZWw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvbW9kdWxlL01vZHVsZVNwaS5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvbW9kdWxlL01vZHVsZVNwaS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNGE3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9tb2R1bGUvTW9kdWxlU3BpLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLyoKKyogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqCisqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKgorKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KK3BhY2thZ2Ugb3JnLnFpNGouc3BpLm1vZHVsZTsKKworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5JZGVudGl0eUdlbmVyYXRvcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkub2JqZWN0Lk9iamVjdERlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CitpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVTZXJpYWxpemF0aW9uOworaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZTsKKworcHVibGljIGludGVyZmFjZSBNb2R1bGVTcGkgZXh0ZW5kcyBNb2R1bGUKK3sKKyAgICBFbnRpdHlTdG9yZSBlbnRpdHlTdG9yZSgpOworCisgICAgSWRlbnRpdHlHZW5lcmF0b3IgaWRlbnRpdHlHZW5lcmF0b3IoKTsKKworICAgIFZhbHVlU2VyaWFsaXphdGlvbiB2YWx1ZVNlcmlhbGl6YXRpb24oKTsKKworICAgIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPEVudGl0eURlc2NyaXB0b3I+PiBmaW5kVmlzaWJsZUVudGl0eVR5cGVzKCk7CisKKyAgICBJdGVyYWJsZTxNb2RlbE1vZHVsZTxWYWx1ZURlc2NyaXB0b3I+PiBmaW5kVmlzaWJsZVZhbHVlVHlwZXMoKTsKKworICAgIEl0ZXJhYmxlPE1vZGVsTW9kdWxlPFRyYW5zaWVudERlc2NyaXB0b3I+PiBmaW5kVmlzaWJsZVRyYW5zaWVudFR5cGVzKCk7CisKKyAgICBJdGVyYWJsZTxNb2RlbE1vZHVsZTxPYmplY3REZXNjcmlwdG9yPj4gZmluZFZpc2libGVPYmplY3RUeXBlcygpOworCisgICAgSXRlcmFibGU8TW9kZWxNb2R1bGU8U2VydmljZURlc2NyaXB0b3I+PiBmaW5kVmlzaWJsZVNlcnZpY2VUeXBlcygpOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvbW9kdWxlL3BhY2thZ2UuaHRtbCBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL21vZHVsZS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM2ZGRjZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL21vZHVsZS9wYWNrYWdlLmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8aHRtbD4KKyAgICA8Ym9keT4KKyAgICAgICAgPGgyPk1vZHVsZSBTUEkuPC9oMj4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9wYWNrYWdlLmh0bWwgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9wYWNrYWdlLmh0bWwKaW5kZXggNDVhM2RjMy4uZmFhZjFiNyAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3BhY2thZ2UuaHRtbApAQCAtMSw1ICsxLDIxIEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgotICAgICAgICA8aDI+UWk0aiBTUEkuPC9oMj4KKyAgICAgICAgPGgyPkFwYWNoZSBaZXN04oSiIFNQSS48L2gyPgogICAgIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3F1ZXJ5L1F1ZXJ5QnVpbGRlclNQSS5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvcXVlcnkvUXVlcnlCdWlsZGVyU1BJLmphdmEKaW5kZXggYTVlZGQ2MS4uZDA0YjFmYiAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvcXVlcnkvUXVlcnlCdWlsZGVyU1BJLmphdmEKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvcXVlcnkvUXVlcnlCdWlsZGVyU1BJLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc3BpLnF1ZXJ5OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnF1ZXJ5LlF1ZXJ5OwpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvcXVlcnkvUXVlcnlTb3VyY2UuamF2YSBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3F1ZXJ5L1F1ZXJ5U291cmNlLmphdmEKaW5kZXggMzVhMzY2MS4uN2U5MDA4NCAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvcXVlcnkvUXVlcnlTb3VyY2UuamF2YQorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9xdWVyeS9RdWVyeVNvdXJjZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNwaS5xdWVyeTsKIAogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3F1ZXJ5L3BhY2thZ2UuaHRtbCBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3F1ZXJ5L3BhY2thZ2UuaHRtbAppbmRleCBkZDQwNjQwLi4zY2FiOTMwIDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS9xdWVyeS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvcXVlcnkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5JbmRleC9RdWVyeSBTUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3V1aWQvcGFja2FnZS5odG1sIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvdXVpZC9wYWNrYWdlLmh0bWwKaW5kZXggMTUxYmI2Mi4uZmMzN2UzNiAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvdXVpZC9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvdXVpZC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlVVSUQgSWRlbnRpdHkgU1BJLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS92YWx1ZS9WYWx1ZURlc2VyaWFsaXplckFkYXB0ZXIuamF2YSBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3ZhbHVlL1ZhbHVlRGVzZXJpYWxpemVyQWRhcHRlci5qYXZhCmluZGV4IDM3NzM4ZjguLjUzY2Y4MWQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3ZhbHVlL1ZhbHVlRGVzZXJpYWxpemVyQWRhcHRlci5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3ZhbHVlL1ZhbHVlRGVzZXJpYWxpemVyQWRhcHRlci5qYXZhCkBAIC00OCw2ICs0OCw3IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuTWFwVHlwZTsKIGltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5WYWx1ZUNvbXBvc2l0ZVR5cGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuVmFsdWVUeXBlOworaW1wb3J0IG9yZy5xaTRqLmFwaS50eXBlLlNlcmlhbGl6YXRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLnV0aWwuQmFzZTY0RW5jb2RlcjsKIGltcG9ydCBvcmcucWk0ai5hcGkudXRpbC5EYXRlczsKIGltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVCdWlsZGVyOwpAQCAtNTYsOCArNTcsNiBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6YXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uMjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLmVtcHR5OwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5maXJzdDsKQEAgLTEwNiw5ICsxMDUsNiBAQAogICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoIFZhbHVlRGVzZXJpYWxpemVyQWRhcHRlci5jbGFzcyApOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBQVUxMX1BBUlNJTkdfTE9HID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoIFZhbHVlRGVzZXJpYWxpemVyQWRhcHRlci5jbGFzcy5nZXROYW1lKCkgKyAiI1B1bGxQYXJzaW5nIiApOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBUUkVFX1BBUlNJTkdfTE9HID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoIFZhbHVlRGVzZXJpYWxpemVyQWRhcHRlci5jbGFzcy5nZXROYW1lKCkgKyAiI1RyZWVQYXJzaW5nIiApOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVEZfOCA9ICJVVEYtOCI7CiAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8Q2xhc3M8Pz4sIEZ1bmN0aW9uPE9iamVjdCwgT2JqZWN0Pj4gZGVzZXJpYWxpemVycyA9IG5ldyBIYXNoTWFwPD4oIDE2ICk7CiAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8Q2xhc3M8Pz4sIENvbXBsZXhEZXNlcmlhbGl6ZXI8T2JqZWN0LCBJbnB1dFR5cGUsIElucHV0Tm9kZVR5cGU+PiBjb21wbGV4RGVzZXJpYWxpemVycyA9IG5ldyBIYXNoTWFwPD4oIDIgKTsKQEAgLTMwOCwxMSArMzA0LDYgQEAKIAogICAgIHByaXZhdGUgdm9pZCBzZXRWYWx1ZXNNb2R1bGVGaW5kZXIoIEZ1bmN0aW9uPEFwcGxpY2F0aW9uLCBNb2R1bGU+IHZhbHVlc01vZHVsZUZpbmRlciApCiAgICAgewotICAgICAgICBpZiggdmFsdWVzTW9kdWxlRmluZGVyICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBMT0cuZGVidWcoICJXaWxsIHVzZSB0aGUgcHJvdmlkZWQgRnVuY3Rpb24gdG8gZmluZCBNb2R1bGUgdG8gYnVpbGQgbmV3IFZhbHVlQ29tcG9zaXRlcyBpbnN0YW5jZXM6IHt9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzTW9kdWxlRmluZGVyICk7Ci0gICAgICAgIH0KICAgICAgICAgdGhpcy52YWx1ZXNNb2R1bGVGaW5kZXIgPSB2YWx1ZXNNb2R1bGVGaW5kZXI7CiAgICAgICAgIHRoaXMudmFsdWVzTW9kdWxlID0gbnVsbDsKICAgICB9CkBAIC0zMzIsNyArMzIzLDYgQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZVNlcmlhbGl6YXRpb25FeGNlcHRpb24oICJWYWx1ZXMgTW9kdWxlIHByb3ZpZGVkIGJ5IHRoZSBmaW5kZXIgRnVuY3Rpb24gd2FzIG51bGwuIiApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBMT0cuZGVidWcoICJXaWxsIHVzZSBhIHNwZWNpZmljIE1vZHVsZSB0byBidWlsZCBuZXcgVmFsdWVDb21wb3NpdGVzIGluc3RhbmNlczoge30iLCB2YWx1ZXNNb2R1bGUgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdmFsdWVzTW9kdWxlOwpAQCAtNTA5LDI1ICs0OTksMjEgQEAKICAgICAgICAgZWxzZSAvLyBFeHBsaWNpdCBWYWx1ZUNvbXBvc2l0ZQogICAgICAgICBpZiggVmFsdWVDb21wb3NpdGVUeXBlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIHZhbHVlVHlwZS5nZXRDbGFzcygpICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBQVUxMX1BBUlNJTkdfTE9HLnRyYWNlKCAiVmFsdWVDb21wb3NpdGVUeXBlIGFzc2lnbmFibGUgLSBkZXNlcmlhbGl6ZVZhbHVlQ29tcG9zaXRlKCB7fSApIiwgaW5wdXQgKTsKICAgICAgICAgICAgIHJldHVybiAoVCkgZGVzZXJpYWxpemVWYWx1ZUNvbXBvc2l0ZSggdmFsdWVUeXBlLCBpbnB1dCApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgLy8gRXhwbGljaXQgQ29sbGVjdGlvbnMKICAgICAgICAgaWYoIENvbGxlY3Rpb25UeXBlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIHZhbHVlVHlwZS5nZXRDbGFzcygpICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBQVUxMX1BBUlNJTkdfTE9HLnRyYWNlKCAiQ29sbGVjdGlvblR5cGUgYXNzaWduYWJsZSAtIGRlc2VyaWFsaXplQ29sbGVjdGlvbigge30gKSIsIGlucHV0ICk7CiAgICAgICAgICAgICByZXR1cm4gKFQpIGRlc2VyaWFsaXplQ29sbGVjdGlvbiggKENvbGxlY3Rpb25UeXBlKSB2YWx1ZVR5cGUsIGlucHV0ICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSAvLyBFeHBsaWNpdCBNYXAKICAgICAgICAgaWYoIE1hcFR5cGUuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggdmFsdWVUeXBlLmdldENsYXNzKCkgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFBVTExfUEFSU0lOR19MT0cudHJhY2UoICJNYXBUeXBlIGFzc2lnbmFibGUgLSBkZXNlcmlhbGl6ZU1hcCgge30gKSIsIGlucHV0ICk7CiAgICAgICAgICAgICByZXR1cm4gKFQpIGRlc2VyaWFsaXplTWFwKCAoTWFwVHlwZSkgdmFsdWVUeXBlLCBpbnB1dCApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgLy8gRW51bQogICAgICAgICBpZiggRW51bVR5cGUuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggdmFsdWVUeXBlLmdldENsYXNzKCkgKSB8fCB0eXBlLmlzRW51bSgpICkKICAgICAgICAgewotICAgICAgICAgICAgUFVMTF9QQVJTSU5HX0xPRy50cmFjZSggIkVudW1UeXBlIGFzc2lnbmFibGUgLSByZWFkVmFsdWUoIHt9ICkiLCBpbnB1dCApOwogICAgICAgICAgICAgcmV0dXJuIChUKSBFbnVtLnZhbHVlT2YoIChDbGFzcykgdHlwZSwgcmVhZFBsYWluVmFsdWUoIGlucHV0ICkudG9TdHJpbmcoKSApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgLy8gQXJyYXkKQEAgLTUzNiw3ICs1MjIsNiBAQAogICAgICAgICAgICAgcmV0dXJuIChUKSBkZXNlcmlhbGl6ZUJhc2U2NFNlcmlhbGl6ZWQoIHJlYWRQbGFpblZhbHVlKCBpbnB1dCApLnRvU3RyaW5nKCkgKTsKICAgICAgICAgfQogICAgICAgICAvLyBHdWVzc2VkIERlc2VyaWFsaXphdGlvbgotICAgICAgICBQVUxMX1BBUlNJTkdfTE9HLnRyYWNlKCAiVW5rbm93biBWYWx1ZVR5cGUgLSBkZXNlcmlhbGl6ZUd1ZXNzZWQoIHt9ICkiLCBpbnB1dCApOwogICAgICAgICByZXR1cm4gKFQpIGRlc2VyaWFsaXplR3Vlc3NlZCggdmFsdWVUeXBlLCBpbnB1dCApOwogICAgIH0KIApAQCAtNTkzLDEwICs1NzgsNyBAQAogICAgIHByaXZhdGUgPFQ+IFQgZGVzZXJpYWxpemVWYWx1ZUNvbXBvc2l0ZSggVmFsdWVUeXBlIHZhbHVlVHlwZSwgSW5wdXRUeXBlIGlucHV0ICkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgUFVMTF9QQVJTSU5HX0xPRy50cmFjZSggIlN3aXRjaGluZyB0byBUUkVFIFBBUlNJTkcgQCgge30gKSIsIGlucHV0ICk7CiAgICAgICAgIElucHV0Tm9kZVR5cGUgaW5wdXROb2RlID0gcmVhZE9iamVjdFRyZWUoIGlucHV0ICk7Ci0gICAgICAgIFRSRUVfUEFSU0lOR19MT0cudHJhY2UoICJTd2l0Y2hlZCB0byBUUkVFIFBBUlNJTkcgQCgge30gKSIsIGlucHV0ICk7Ci0gICAgICAgIFRSRUVfUEFSU0lOR19MT0cudHJhY2UoICJPYmplY3ROb2RlIGlzIHt9IiwgaW5wdXROb2RlICk7CiAgICAgICAgIGlmKCBpbnB1dE5vZGUgPT0gbnVsbCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjEzLDkgKzU5NSw2IEBACiAgICAgICAgICAgICBpbnB1dE5vZGUsCiAgICAgICAgICAgICAiX3R5cGUiLAogICAgICAgICAgICAgdGhpcy48U3RyaW5nPmJ1aWxkRGVzZXJpYWxpemVJbnB1dE5vZGVGdW5jdGlvbiggbmV3IFZhbHVlVHlwZSggU3RyaW5nLmNsYXNzICkgKSApOwotICAgICAgICBUUkVFX1BBUlNJTkdfTE9HLnRyYWNlKAotICAgICAgICAgICAgIkluIGRlc2VyaWFsaXplTm9kZVZhbHVlQ29tcG9zaXRlKCksIGdldE9iamVjdEZpZWxkVmFsdWUoIHt9ICkgcmV0dXJuZWQgJ3t9JyIsCi0gICAgICAgICAgICBpbnB1dE5vZGUsIHR5cGVJbmZvICk7CiAgICAgICAgIGlmKCB0eXBlSW5mbyAhPSBudWxsICkKICAgICAgICAgewogICAgICAgICAgICAgVmFsdWVEZXNjcmlwdG9yIHZhbHVlRGVzY3JpcHRvciA9IHZhbHVlc01vZHVsZSgpLnZhbHVlRGVzY3JpcHRvciggdHlwZUluZm8gKTsKQEAgLTYyNSwxMiArNjA0LDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhbHVlQ29tcG9zaXRlVHlwZSA9IHZhbHVlRGVzY3JpcHRvci52YWx1ZVR5cGUoKTsKICAgICAgICAgICAgIHZhbHVlQnVpbGRlclR5cGUgPSBDbGFzcy5mb3JOYW1lKCB0eXBlSW5mbyApOwotICAgICAgICAgICAgaWYoICF2YWx1ZVR5cGUuZXF1YWxzKCB2YWx1ZUNvbXBvc2l0ZVR5cGUgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVFJFRV9QQVJTSU5HX0xPRy5kZWJ1ZygKLSAgICAgICAgICAgICAgICAgICAgIk92ZXJyaWRpbmcge30gd2l0aCB7fSBhcyBkZWZpbmVkIGluIF90eXBlIGZpZWxkLiIsCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlVHlwZSwgdmFsdWVDb21wb3NpdGVUeXBlICk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplVmFsdWVDb21wb3NpdGUoIHZhbHVlQ29tcG9zaXRlVHlwZSwgdmFsdWVCdWlsZGVyVHlwZSwgaW5wdXROb2RlICk7CiAgICAgfQpAQCAtNjUyLDkgKzYyNSw2IEBACiAgICAgICAgICAgICAgICAgICAgIGlucHV0Tm9kZSwKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICBidWlsZERlc2VyaWFsaXplSW5wdXROb2RlRnVuY3Rpb24oIHByb3BlcnR5LnZhbHVlVHlwZSgpICkgKTsKLSAgICAgICAgICAgICAgICBUUkVFX1BBUlNJTkdfTE9HLnRyYWNlKAotICAgICAgICAgICAgICAgICAgICAiSW4gZGVzZXJpYWxpemVWYWx1ZUNvbXBvc2l0ZSgpLCBnZXRPYmplY3RGaWVsZFZhbHVlKCB7fSApIGZvciBrZXkge30gcmV0dXJuZWQgJ3t9JyBvZiBjbGFzcyB7fSIsCi0gICAgICAgICAgICAgICAgICAgIGlucHV0Tm9kZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgdmFsdWUgPT0gbnVsbCA/ICJOL0EiIDogdmFsdWUuZ2V0Q2xhc3MoKSApOwogICAgICAgICAgICAgICAgIGlmKCBwcm9wZXJ0eS5pc0ltbXV0YWJsZSgpICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmKCB2YWx1ZSBpbnN0YW5jZW9mIFNldCApCkBAIC02NzAsMjAgKzY0MCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAoIChNYXA8PywgPz4pIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgVFJFRV9QQVJTSU5HX0xPRy50cmFjZSggIlByb3BlcnR5IHt9I3t9KCB7fSApIGRlc2VyaWFsaXplZCB2YWx1ZSBpcyAne30nIG9mIGNsYXNzIHt9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5xdWFsaWZpZWROYW1lKCkudHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LnF1YWxpZmllZE5hbWUoKS5uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkudmFsdWVUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPT0gbnVsbCA/ICJOL0EiIDogdmFsdWUuZ2V0Q2xhc3MoKSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZWQgb2JqZWN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIGZpZWxkLCB0cnkgdG8gZGVmYXVsdCBpdAogICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvcGVydHkuaW5pdGlhbFZhbHVlKCB2YWx1ZXNNb2R1bGUoKSApOwotICAgICAgICAgICAgICAgIFRSRUVfUEFSU0lOR19MT0cudHJhY2UoCi0gICAgICAgICAgICAgICAgICAgICJQcm9wZXJ0eSB7fSB3YXMgbm90IGRlZmluZWQgaW4gc2VyaWFsaXplZCBvYmplY3QgYW5kIGhhcyBiZWVuIGRlZmF1bHRlZCB0byAne30nIiwKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkucXVhbGlmaWVkTmFtZSgpLCB2YWx1ZSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhdGVNYXAucHV0KCBwcm9wZXJ0eU5hbWUsIHZhbHVlICk7CiAgICAgICAgIH0KQEAgLTcyNiw3ICs2ODcsNyBAQAogICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGdldE9iamVjdEZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgICAgICAgIGlucHV0Tm9kZSwKICAgICAgICAgICAgICAgICAgICAgbmFtZWRBc3NvY2lhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkRGVzZXJpYWxpemVJbnB1dE5vZGVGdW5jdGlvbiggTWFwVHlwZS5vZiggU3RyaW5nLmNsYXNzLCBFbnRpdHlSZWZlcmVuY2UuY2xhc3MgKSApICk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkRGVzZXJpYWxpemVJbnB1dE5vZGVGdW5jdGlvbiggTWFwVHlwZS5vZiggU3RyaW5nLmNsYXNzLCBFbnRpdHlSZWZlcmVuY2UuY2xhc3MsIFNlcmlhbGl6YXRpb24uVmFyaWFudC5vYmplY3QgKSApICk7CiAgICAgICAgICAgICAgICAgc3RhdGVNYXAucHV0KCBuYW1lZEFzc29jaWF0aW9uTmFtZSwgdmFsdWUgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzcxLDkgKzczMiw2IEBACiAgICAgICAgIGlmKCBkZXNlcmlhbGl6ZXJzLmdldCggdHlwZSApICE9IG51bGwgKQogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBhc1NpbXBsZVZhbHVlKCBpbnB1dE5vZGUgKTsKLSAgICAgICAgICAgIFRSRUVfUEFSU0lOR19MT0cudHJhY2UoCi0gICAgICAgICAgICAgICAgIldoaWxlIHJlZ2lzdGVyZWQgZGVzZXJpYWxpemVyIGF0dGVtcHQsIGFzU2ltcGxlVmFsdWUoIHt9ICkgcmV0dXJuZWQgJ3t9JyIsCi0gICAgICAgICAgICAgICAgaW5wdXROb2RlLCB2YWx1ZSApOwogICAgICAgICAgICAgaWYoIHZhbHVlID09IG51bGwgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNzk3LDE1ICs3NTUsMjAgQEAKICAgICAgICAgZWxzZSAvLyBFeHBsaWNpdCBNYXAKICAgICAgICAgaWYoIE1hcFR5cGUuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggdmFsdWVUeXBlLmdldENsYXNzKCkgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoVCkgZGVzZXJpYWxpemVOb2RlTWFwKCAoTWFwVHlwZSkgdmFsdWVUeXBlLCBpbnB1dE5vZGUgKTsKKyAgICAgICAgICAgIE1hcFR5cGUgbWFwVHlwZSA9IChNYXBUeXBlKSB2YWx1ZVR5cGU7CisgICAgICAgICAgICBpZiggbWFwVHlwZS52YXJpYW50KCkuZXF1YWxzKCBTZXJpYWxpemF0aW9uLlZhcmlhbnQuZW50cnkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChUKSBkZXNlcmlhbGl6ZU5vZGVFbnRyeU1hcCggKE1hcFR5cGUpIHZhbHVlVHlwZSwgaW5wdXROb2RlICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChUKSBkZXNlcmlhbGl6ZU5vZGVPYmplY3RNYXAoIChNYXBUeXBlKSB2YWx1ZVR5cGUsIGlucHV0Tm9kZSApOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgLy8gRW51bQogICAgICAgICBpZiggRW51bVR5cGUuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggdmFsdWVUeXBlLmdldENsYXNzKCkgKSB8fCB0eXBlLmlzRW51bSgpICkKICAgICAgICAgewogICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gYXNTaW1wbGVWYWx1ZSggaW5wdXROb2RlICk7Ci0gICAgICAgICAgICBUUkVFX1BBUlNJTkdfTE9HLnRyYWNlKAotICAgICAgICAgICAgICAgICJXaGlsZSBFbnVtIGRlc2VyaWFsaXplIGF0dGVtcHQsIGFzU2ltcGxlVmFsdWUoIHt9ICkgcmV0dXJuZWQgJ3t9JyIsCi0gICAgICAgICAgICAgICAgaW5wdXROb2RlLCB2YWx1ZSApOwogICAgICAgICAgICAgaWYoIHZhbHVlID09IG51bGwgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtOTAyLDcgKzg2NSw3IEBACiAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uOwogICAgIH0KIAotICAgIHByaXZhdGUgPEssIFY+IE1hcDxLLCBWPiBkZXNlcmlhbGl6ZU5vZGVNYXAoIE1hcFR5cGUgbWFwVHlwZSwgSW5wdXROb2RlVHlwZSBpbnB1dE5vZGUgKQorICAgIHByaXZhdGUgPEssIFY+IE1hcDxLLCBWPiBkZXNlcmlhbGl6ZU5vZGVFbnRyeU1hcCggTWFwVHlwZSBtYXBUeXBlLCBJbnB1dE5vZGVUeXBlIGlucHV0Tm9kZSApCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIE1hcDxLLCBWPiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7CkBAIC05MTMsNiArODc2LDE2IEBACiAgICAgICAgIHJldHVybiBtYXA7CiAgICAgfQogCisgICAgcHJpdmF0ZSA8Vj4gTWFwPFN0cmluZywgVj4gZGVzZXJpYWxpemVOb2RlT2JqZWN0TWFwKCBNYXBUeXBlIG1hcFR5cGUsIElucHV0Tm9kZVR5cGUgaW5wdXROb2RlICkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgTWFwPFN0cmluZywgVj4gbWFwID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBwdXRPYmplY3ROb2RlSW5NYXAoIGlucHV0Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLjxWPmJ1aWxkRGVzZXJpYWxpemVJbnB1dE5vZGVGdW5jdGlvbiggbWFwVHlwZS52YWx1ZVR5cGUoKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCApOworICAgICAgICByZXR1cm4gbWFwOworICAgIH0KKwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAidW5jaGVja2VkIiApCiAgICAgcHJpdmF0ZSA8VD4gVCBkZXNlcmlhbGl6ZU5vZGVHdWVzc2VkKCBWYWx1ZVR5cGUgdmFsdWVUeXBlLCBJbnB1dE5vZGVUeXBlIGlucHV0Tm9kZSApCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KQEAgLTkyNywxOCArOTAwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIGlucHV0Tm9kZSwKICAgICAgICAgICAgICAgICAgICAgIl90eXBlIiwKICAgICAgICAgICAgICAgICAgICAgdGhpcy48U3RyaW5nPmJ1aWxkRGVzZXJpYWxpemVJbnB1dE5vZGVGdW5jdGlvbiggbmV3IFZhbHVlVHlwZSggU3RyaW5nLmNsYXNzICkgKSApOwotICAgICAgICAgICAgICAgIFRSRUVfUEFSU0lOR19MT0cudHJhY2UoCi0gICAgICAgICAgICAgICAgICAgICJJbiBkZXNlcmlhbGl6ZU5vZGVHdWVzc2VkKCksIGdldE9iamVjdEZpZWxkVmFsdWUoIHt9ICkgcmV0dXJuZWQgJ3t9JyIsCi0gICAgICAgICAgICAgICAgICAgIGlucHV0Tm9kZSwgdHlwZUluZm8gKTsKICAgICAgICAgICAgICAgICBWYWx1ZURlc2NyaXB0b3IgdmFsdWVEZXNjcmlwdG9yID0gdmFsdWVzTW9kdWxlKCkudmFsdWVEZXNjcmlwdG9yKCB0eXBlSW5mbyApOwogICAgICAgICAgICAgICAgIGlmKCB2YWx1ZURlc2NyaXB0b3IgPT0gbnVsbCApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVTZXJpYWxpemF0aW9uRXhjZXB0aW9uKCAiU3BlY2lmaWVkIHZhbHVlIHR5cGUgY291bGQgbm90IGJlIHJlc29sdmVkOiAiICsgdHlwZUluZm8gKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdmFsdWVDb21wb3NpdGVUeXBlID0gdmFsdWVEZXNjcmlwdG9yLnZhbHVlVHlwZSgpOwotICAgICAgICAgICAgICAgIFRSRUVfUEFSU0lOR19MT0cuZGVidWcoCi0gICAgICAgICAgICAgICAgICAgICJPdmVycmlkaW5nIHt9IHdpdGgge30gYXMgZGVmaW5lZCBpbiBfdHlwZSBmaWVsZC4iLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZVR5cGUsIHZhbHVlQ29tcG9zaXRlVHlwZSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSAvLyB3aXRob3V0IF90eXBlIGluZm8KICAgICAgICAgICAgIHsKQEAgLTk0OCw5ICs5MTUsNiBAQAogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVTZXJpYWxpemF0aW9uRXhjZXB0aW9uKCAiRG9uJ3Qga25vdyBob3cgdG8gZGVzZXJpYWxpemUgIiArIGlucHV0Tm9kZSApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2YWx1ZUNvbXBvc2l0ZVR5cGUgPSB2YWx1ZURlc2NyaXB0b3IudmFsdWVUeXBlKCk7Ci0gICAgICAgICAgICAgICAgVFJFRV9QQVJTSU5HX0xPRy5kZWJ1ZygKLSAgICAgICAgICAgICAgICAgICAgIk92ZXJyaWRpbmcge33CoHdpdGgge33CoGFzIGZvdW5kIGluIGF2YWlsYWJsZSBWYWx1ZUNvbXBvc2l0ZXMuIiwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVUeXBlLCB2YWx1ZUNvbXBvc2l0ZVR5cGUgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIENsYXNzPD8+IHZhbHVlQnVpbGRlclR5cGUgPSBmaXJzdCggdmFsdWVDb21wb3NpdGVUeXBlLnR5cGVzKCkgKTsKICAgICAgICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZVZhbHVlQ29tcG9zaXRlKCB2YWx1ZUNvbXBvc2l0ZVR5cGUsIHZhbHVlQnVpbGRlclR5cGUsIGlucHV0Tm9kZSApOwpAQCAtOTY0LDkgKzkyOCw2IEBACiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGFzU2ltcGxlVmFsdWUoIGlucHV0Tm9kZSApOwotICAgICAgICBUUkVFX1BBUlNJTkdfTE9HLnRyYWNlKAotICAgICAgICAgICAgIldoaWxlIEJhc2U2NCBkZXNlcmlhbGl6ZSBhdHRlbXB0LCBhc1NpbXBsZVZhbHVlKCB7fSApIHJldHVybmVkICd7fSciLAotICAgICAgICAgICAgaW5wdXROb2RlLCB2YWx1ZSApOwogICAgICAgICBpZiggdmFsdWUgPT0gbnVsbCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMTEyNyw2ICsxMDg4LDEzIEBACiAgICAgcHJvdGVjdGVkIGFic3RyYWN0IDxLLCBWPiB2b2lkIHB1dEFycmF5Tm9kZUluTWFwKCBJbnB1dE5vZGVUeXBlIGlucHV0Tm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uPElucHV0Tm9kZVR5cGUsIEs+IGtleURlc2VyaWFsaXplciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uPElucHV0Tm9kZVR5cGUsIFY+IHZhbHVlRGVzZXJpYWxpemVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPEssIFY+IG1hcCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8SywgVj4gbWFwCisgICAgKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOworCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IDxWPiB2b2lkIHB1dE9iamVjdE5vZGVJbk1hcCggSW5wdXROb2RlVHlwZSBpbnB1dE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb248SW5wdXROb2RlVHlwZSwgVj4gdmFsdWVEZXNlcmlhbGl6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgVj4gbWFwCisgICAgKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvdmFsdWUvVmFsdWVTZXJpYWxpemVyQWRhcHRlci5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvdmFsdWUvVmFsdWVTZXJpYWxpemVyQWRhcHRlci5qYXZhCmluZGV4IDhlMjE0MTYuLjZmMTc1NjkgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3ZhbHVlL1ZhbHVlU2VyaWFsaXplckFkYXB0ZXIuamF2YQorKysgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS92YWx1ZS9WYWx1ZVNlcmlhbGl6ZXJBZGFwdGVyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA3LCBSaWNrYXJkIMOWYmVyZy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgTmljbGFzIEhlaGRtYW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIE5pY2xhcyBIZWRubWFuLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQsIFBhdWwgTWVybGluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtNDgsOCArNDgsNiBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uMjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLmZpcnN0OwogCkBAIC01NywyOSArNTUsMjkgQEAKICAqIEFkYXB0ZXIgZm9yIHB1bGwtcGFyc2luZyBjYXBhYmxlIFZhbHVlU2VyaWFsaXplcnMuCiAgKgogICogPHA+Ci0gKiAgICAgQW1vbmcgUGxhaW4gdmFsdWVzIChzZWUge0BsaW5rIFZhbHVlU2VyaWFsaXplcn0pIHNvbWUgYXJlIGNvbnNpZGVyZWQgcHJpbWl0aXZlcyB0byB1bmRlcmx5aW5nIHNlcmlhbGl6YXRpb24KLSAqICAgICBtZWNoYW5pc21zIGFuZCBieSBzbyBoYW5kZWQvY29tZSB3aXRob3V0IGNvbnZlcnNpb24gdG8vZnJvbSBpbXBsZW1lbnRhdGlvbnMuIFByaW1pdGl2ZSB2YWx1ZXMgY2FuIGJlIG9uZSBvZjoKKyAqIEFtb25nIFBsYWluIHZhbHVlcyAoc2VlIHtAbGluayBWYWx1ZVNlcmlhbGl6ZXJ9KSBzb21lIGFyZSBjb25zaWRlcmVkIHByaW1pdGl2ZXMgdG8gdW5kZXJseWluZyBzZXJpYWxpemF0aW9uCisgKiBtZWNoYW5pc21zIGFuZCBieSBzbyBoYW5kZWQvY29tZSB3aXRob3V0IGNvbnZlcnNpb24gdG8vZnJvbSBpbXBsZW1lbnRhdGlvbnMuIFByaW1pdGl2ZSB2YWx1ZXMgY2FuIGJlIG9uZSBvZjoKICAqIDwvcD4KICAqIDx1bD4KLSAqICAgICA8bGk+U3RyaW5nLDwvbGk+Ci0gKiAgICAgPGxpPkNoYXJhY3RlciBvciBjaGFyLDwvbGk+Ci0gKiAgICAgPGxpPkJvb2xlYW4gb3IgYm9vbGVhbiw8L2xpPgotICogICAgIDxsaT5JbnRlZ2VyIG9yIGludCw8L2xpPgotICogICAgIDxsaT5Mb25nIG9yIGxvbmcsPC9saT4KLSAqICAgICA8bGk+U2hvcnQgb3Igc2hvcnQsPC9saT4KLSAqICAgICA8bGk+Qnl0ZSBvciBieXRlLDwvbGk+Ci0gKiAgICAgPGxpPkZsb2F0IG9yIGZsb2F0LDwvbGk+Ci0gKiAgICAgPGxpPkRvdWJsZSBvciBkb3VibGUuPC9saT4KKyAqIDxsaT5TdHJpbmcsPC9saT4KKyAqIDxsaT5DaGFyYWN0ZXIgb3IgY2hhciw8L2xpPgorICogPGxpPkJvb2xlYW4gb3IgYm9vbGVhbiw8L2xpPgorICogPGxpPkludGVnZXIgb3IgaW50LDwvbGk+CisgKiA8bGk+TG9uZyBvciBsb25nLDwvbGk+CisgKiA8bGk+U2hvcnQgb3Igc2hvcnQsPC9saT4KKyAqIDxsaT5CeXRlIG9yIGJ5dGUsPC9saT4KKyAqIDxsaT5GbG9hdCBvciBmbG9hdCw8L2xpPgorICogPGxpPkRvdWJsZSBvciBkb3VibGUuPC9saT4KICAqIDwvdWw+CiAgKiA8cD4KLSAqICAgICBTb21lIG90aGVyIFBsYWluIHZhbHVlcyBhcmUgdHJhbnNmb3JtZWQgYmVmb3JlIGJlaW5nIGhhbmRlZCB0byBpbXBsZW1lbnRhdGlvbnM6CisgKiBTb21lIG90aGVyIFBsYWluIHZhbHVlcyBhcmUgdHJhbnNmb3JtZWQgYmVmb3JlIGJlaW5nIGhhbmRlZCB0byBpbXBsZW1lbnRhdGlvbnM6CiAgKiA8L3A+CiAgKiA8dWw+Ci0gKiAgICAgPGxpPkJpZ0ludGVnZXIgYW5kIEJpZ0RlY2ltYWwgZGVwZW5kcyBvbiBWYWx1ZVNlcmlhbGl6ZXIue0BsaW5rIE9wdGlvbnN9OzwvbGk+Ci0gKiAgICAgPGxpPkRhdGUgYXMgYSBJU08tODYwMSBVVEMgU3RyaW5nOzwvbGk+Ci0gKiAgICAgPGxpPkRhdGVUaW1lIChKb2RhVGltZSkgYXMgYSBJU08tODYwMSBTdHJpbmcgd2l0aCB0aW1lem9uZSBvZmZzZXQgb3IgWiBmb3IgVVRDOzwvbGk+Ci0gKiAgICAgPGxpPkxvY2FsRGF0ZVRpbWUgKEpvZGFUaW1lKSBhcyBhIElTTy04NjAxIFN0cmluZyB3aXRoIG5vIHRpbWV6b25lIG9mZnNldDs8L2xpPgotICogICAgIDxsaT5Mb2NhbERhdGUgKEpvZGFUaW1lKSBhcyBhIElTTy04NjAxIFN0cmluZyB3aXRoIG5vIHRpbWUgaW5mbzs8L2xpPgorICogPGxpPkJpZ0ludGVnZXIgYW5kIEJpZ0RlY2ltYWwgZGVwZW5kcyBvbiBWYWx1ZVNlcmlhbGl6ZXIue0BsaW5rIG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6ZXIuT3B0aW9uc307PC9saT4KKyAqIDxsaT5EYXRlIGFzIGEgSVNPLTg2MDEgVVRDIFN0cmluZzs8L2xpPgorICogPGxpPkRhdGVUaW1lIChKb2RhVGltZSkgYXMgYSBJU08tODYwMSBTdHJpbmcgd2l0aCB0aW1lem9uZSBvZmZzZXQgb3IgWiBmb3IgVVRDOzwvbGk+CisgKiA8bGk+TG9jYWxEYXRlVGltZSAoSm9kYVRpbWUpIGFzIGEgSVNPLTg2MDEgU3RyaW5nIHdpdGggbm8gdGltZXpvbmUgb2Zmc2V0OzwvbGk+CisgKiA8bGk+TG9jYWxEYXRlIChKb2RhVGltZSkgYXMgYSBJU08tODYwMSBTdHJpbmcgd2l0aCBubyB0aW1lIGluZm87PC9saT4KICAqIDwvdWw+CiAgKgogICogQHBhcmFtIDxPdXRwdXRUeXBlPiBJbXBsZW1lbnRvciBvdXRwdXQgdHlwZQpAQCAtOTQsNyArOTIsNiBAQAogICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoIFZhbHVlU2VyaWFsaXplckFkYXB0ZXIuY2xhc3MgKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVRGXzggPSAiVVRGLTgiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgPFRPLCBGUk9NIGV4dGVuZHMgVE8+IEZ1bmN0aW9uMjxPcHRpb25zLCBGUk9NLCBUTz4gaWRlbnRpdHlTZXJpYWxpemVyKCkKQEAgLTExNSw4ICsxMTIsOCBAQAogICAgIC8qKgogICAgICAqIFJlZ2lzdGVyIGEgUGxhaW4gVmFsdWUgdHlwZSBzZXJpYWxpemF0aW9uIEZ1bmN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtIDxUPiBQbGFpbiBWYWx1ZSBwYXJhbWV0cml6ZWQgVHlwZQotICAgICAqIEBwYXJhbSB0eXBlIFBsYWluIFZhbHVlIFR5cGUKKyAgICAgKiBAcGFyYW0gPFQ+ICAgICAgICBQbGFpbiBWYWx1ZSBwYXJhbWV0cml6ZWQgVHlwZQorICAgICAqIEBwYXJhbSB0eXBlICAgICAgIFBsYWluIFZhbHVlIFR5cGUKICAgICAgKiBAcGFyYW0gc2VyaWFsaXplciBTZXJpYWxpemF0aW9uIEZ1bmN0aW9uCiAgICAgICovCiAgICAgQFN1cHByZXNzV2FybmluZ3MoICJ1bmNoZWNrZWQiICkKQEAgLTEyOCw4ICsxMjUsOCBAQAogICAgIC8qKgogICAgICAqIFJlZ2lzdGVyIGEgQ29tcGxleCBWYWx1ZSB0eXBlIHNlcmlhbGl6YXRpb24gRnVuY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gPFQ+IENvbXBsZXggVmFsdWUgcGFyYW1ldHJpemVkIFR5cGUKLSAgICAgKiBAcGFyYW0gdHlwZSBDb21wbGV4IFZhbHVlIFR5cGUKKyAgICAgKiBAcGFyYW0gPFQ+ICAgICAgICBDb21wbGV4IFZhbHVlIHBhcmFtZXRyaXplZCBUeXBlCisgICAgICogQHBhcmFtIHR5cGUgICAgICAgQ29tcGxleCBWYWx1ZSBUeXBlCiAgICAgICogQHBhcmFtIHNlcmlhbGl6ZXIgU2VyaWFsaXphdGlvbiBGdW5jdGlvbgogICAgICAqLwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAidW5jaGVja2VkIiApCkBAIC0zMzAsNyArMzI3LDYgQEAKICAgICB7CiAgICAgICAgIGlmKCBvYmplY3QgIT0gbnVsbCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbiggIj4+Pj4+Pj4+Pj4+PiAiICsgKCBvYmplY3QgPT0gbnVsbCA/ICJudWxsIiA6IG9iamVjdC5nZXRDbGFzcygpICkgKTsKICAgICAgICAgICAgIGlmKCBzZXJpYWxpemVycy5nZXQoIG9iamVjdC5nZXRDbGFzcygpICkgIT0gbnVsbCApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gUGxhaW4gVmFsdWUKQEAgLTM2NCw2MCArMzYwLDUxIEBACiAgICAgICAgIC8vIE51bGwKICAgICAgICAgaWYoIG9iamVjdCA9PSBudWxsICkKICAgICAgICAgewotICAgICAgICAgICAgTE9HLnRyYWNlKCAiTnVsbCBvYmplY3QgLT4gb25WYWx1ZSggbnVsbCApIiApOwogICAgICAgICAgICAgb25WYWx1ZSggb3V0cHV0LCBudWxsICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSAvLyBSZWdpc3RlcmVkIHNlcmlhbGl6ZXIKLSAgICAgICAgaWYoIHNlcmlhbGl6ZXJzLmdldCggb2JqZWN0LmdldENsYXNzKCkgKSAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgTE9HLnRyYWNlKCAiUmVnaXN0ZXJlZCBzZXJpYWxpemVyIG1hdGNoZXMgLT4gb25WYWx1ZSggc2VyaWFsaXplZCApIiApOwotICAgICAgICAgICAgb25WYWx1ZSggb3V0cHV0LCBzZXJpYWxpemVycy5nZXQoIG9iamVjdC5nZXRDbGFzcygpICkubWFwKCBvcHRpb25zLCBvYmplY3QgKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIGNvbXBsZXhTZXJpYWxpemVycy5nZXQoIG9iamVjdC5nZXRDbGFzcygpICkgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbXBsZXhTZXJpYWxpemVycy5nZXQoIG9iamVjdC5nZXRDbGFzcygpICkuc2VyaWFsaXplKCBvcHRpb25zLCBvYmplY3QsIG91dHB1dCApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgLy8gVmFsdWVDb21wb3NpdGUKLSAgICAgICAgaWYoIFZhbHVlQ29tcG9zaXRlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIG9iamVjdC5nZXRDbGFzcygpICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBMT0cudHJhY2UoICJWYWx1ZUNvbXBvc2l0ZSBhc3NpZ25hYmxlIC0+IHNlcmlhbGl6ZVZhbHVlQ29tcG9zaXRlKCBvYmplY3QgKSIgKTsKLSAgICAgICAgICAgIHNlcmlhbGl6ZVZhbHVlQ29tcG9zaXRlKCBvcHRpb25zLCBvYmplY3QsIG91dHB1dCwgcm9vdFBhc3MgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIC8vIEVudGl0eUNvbXBvc2l0ZQotICAgICAgICBpZiggRW50aXR5Q29tcG9zaXRlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIG9iamVjdC5nZXRDbGFzcygpICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBMT0cudHJhY2UoICJFbnRpdHlDb21wb3NpdGUgYXNzaWduYWJsZSAtPiBzZXJpYWxpemVFbnRpdHlDb21wb3NpdGUoIG9iamVjdCApIiApOwotICAgICAgICAgICAgc2VyaWFsaXplRW50aXR5Q29tcG9zaXRlKCBvYmplY3QsIG91dHB1dCApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgLy8gQ29sbGVjdGlvbiAtIEl0ZXJhYmxlCi0gICAgICAgIGlmKCBJdGVyYWJsZS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCBvYmplY3QuZ2V0Q2xhc3MoKSApICkKLSAgICAgICAgewotICAgICAgICAgICAgTE9HLnRyYWNlKCAiSXRlcmFibGUgYXNzaWduYWJsZSAtPiBzZXJpYWxpemVJdGVyYWJsZSggb2JqZWN0ICkiICk7Ci0gICAgICAgICAgICBzZXJpYWxpemVJdGVyYWJsZSggb3B0aW9ucywgb2JqZWN0LCBvdXRwdXQgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIC8vIEFycmF5IC0gUVVJRCBSZW1vdmUgdGhpcyBhbmQgdXNlIGphdmEgc2VyaWFsaXphdGlvbiBmb3IgYXJyYXlzPwotICAgICAgICBpZiggb2JqZWN0LmdldENsYXNzKCkuaXNBcnJheSgpICkKLSAgICAgICAgewotICAgICAgICAgICAgTE9HLnRyYWNlKCAiT2JqZWN0IGlzQXJyYXkgLT4gc2VyaWFsaXplQmFzZTY0U2VyaWFsaXphYmxlKCBvYmplY3QgKSIgKTsKLSAgICAgICAgICAgIHNlcmlhbGl6ZUJhc2U2NFNlcmlhbGl6YWJsZSggb2JqZWN0LCBvdXRwdXQgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIC8vIE1hcAotICAgICAgICBpZiggTWFwLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIG9iamVjdC5nZXRDbGFzcygpICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBMT0cudHJhY2UoICJNYXAgYXNzaWduYWJsZSAtPiBzZXJpYWxpemVNYXAoIG9iamVjdCApIiApOwotICAgICAgICAgICAgc2VyaWFsaXplTWFwKCBvcHRpb25zLCBvYmplY3QsIG91dHB1dCApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgLy8gRW51bQotICAgICAgICBpZiggb2JqZWN0LmdldENsYXNzKCkuaXNFbnVtKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBMT0cudHJhY2UoICJPYmplY3QgaXMgYW4gZW51bSAtPiBvblZhbHVlKCBvYmplY3QudG9TdHJpbmcoKSApIiApOwotICAgICAgICAgICAgb25WYWx1ZSggb3V0cHV0LCBvYmplY3QudG9TdHJpbmcoKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgLy8gRmFsbGJhY2sgdG8gQmFzZTY0IGVuY29kZWQgSmF2YSBTZXJpYWxpemF0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIExPRy50cmFjZSggIlVua25vd24gb2JqZWN0IHR5cGUgLT4gc2VyaWFsaXplQmFzZTY0U2VyaWFsaXphYmxlKCBvYmplY3QgKSIgKTsKLSAgICAgICAgICAgIHNlcmlhbGl6ZUJhc2U2NFNlcmlhbGl6YWJsZSggb2JqZWN0LCBvdXRwdXQgKTsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYoIHNlcmlhbGl6ZXJzLmdldCggb2JqZWN0LmdldENsYXNzKCkgKSAhPSBudWxsICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvblZhbHVlKCBvdXRwdXQsIHNlcmlhbGl6ZXJzLmdldCggb2JqZWN0LmdldENsYXNzKCkgKS5tYXAoIG9wdGlvbnMsIG9iamVjdCApICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCBjb21wbGV4U2VyaWFsaXplcnMuZ2V0KCBvYmplY3QuZ2V0Q2xhc3MoKSApICE9IG51bGwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbXBsZXhTZXJpYWxpemVycy5nZXQoIG9iamVjdC5nZXRDbGFzcygpICkuc2VyaWFsaXplKCBvcHRpb25zLCBvYmplY3QsIG91dHB1dCApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAvLyBWYWx1ZUNvbXBvc2l0ZQorICAgICAgICAgICAgICAgIGlmKCBWYWx1ZUNvbXBvc2l0ZS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCBvYmplY3QuZ2V0Q2xhc3MoKSApICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZVZhbHVlQ29tcG9zaXRlKCBvcHRpb25zLCBvYmplY3QsIG91dHB1dCwgcm9vdFBhc3MgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAvLyBFbnRpdHlDb21wb3NpdGUKKyAgICAgICAgICAgICAgICAgICAgaWYoIEVudGl0eUNvbXBvc2l0ZS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCBvYmplY3QuZ2V0Q2xhc3MoKSApICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplRW50aXR5Q29tcG9zaXRlKCBvYmplY3QsIG91dHB1dCApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgLy8gQ29sbGVjdGlvbiAtIEl0ZXJhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiggSXRlcmFibGUuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggb2JqZWN0LmdldENsYXNzKCkgKSApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplSXRlcmFibGUoIG9wdGlvbnMsIG9iamVjdCwgb3V0cHV0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIC8vIEFycmF5IC0gUVVJRCBSZW1vdmUgdGhpcyBhbmQgdXNlIGphdmEgc2VyaWFsaXphdGlvbiBmb3IgYXJyYXlzPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvYmplY3QuZ2V0Q2xhc3MoKS5pc0FycmF5KCkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplQmFzZTY0U2VyaWFsaXphYmxlKCBvYmplY3QsIG91dHB1dCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIC8vIE1hcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggTWFwLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIG9iamVjdC5nZXRDbGFzcygpICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVNYXAoIG9wdGlvbnMsIG9iamVjdCwgb3V0cHV0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvLyBFbnVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggb2JqZWN0LmdldENsYXNzKCkuaXNFbnVtKCkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWUoIG91dHB1dCwgb2JqZWN0LnRvU3RyaW5nKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLy8gRmFsbGJhY2sgdG8gQmFzZTY0IGVuY29kZWQgSmF2YSBTZXJpYWxpemF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplQmFzZTY0U2VyaWFsaXphYmxlKCBvYmplY3QsIG91dHB1dCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzZXJpYWxpemVWYWx1ZUNvbXBvc2l0ZSggT3B0aW9ucyBvcHRpb25zLCBPYmplY3Qgb2JqZWN0LCBPdXRwdXRUeXBlIG91dHB1dCwgYm9vbGVhbiByb290UGFzcyApCkBAIC00MjksNiArNDE2LDcgQEAKIAogICAgICAgICBvbk9iamVjdFN0YXJ0KCBvdXRwdXQgKTsKIAorICAgICAgICAvL25vaW5zcGVjdGlvbiBDb25zdGFudENvbmRpdGlvbnMKICAgICAgICAgaWYoIG9wdGlvbnMuZ2V0Qm9vbGVhbiggT3B0aW9ucy5JTkNMVURFX1RZUEVfSU5GTyApICYmICFyb290UGFzcyApCiAgICAgICAgIHsKICAgICAgICAgICAgIG9uRmllbGRTdGFydCggb3V0cHV0LCAiX3R5cGUiICk7CkBAIC00NTAsMTYgKzQzOCwxNiBAQAogICAgICAgICBmb3IoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBhc3NvY2lhdGlvbkRlc2NyaXB0b3IgOiBkZXNjcmlwdG9yLnZhbHVlVHlwZSgpLmFzc29jaWF0aW9ucygpICkKICAgICAgICAgewogICAgICAgICAgICAgQXNzb2NpYXRpb248Pz4gYXNzb2NpYXRpb24gPSBzdGF0ZS5hc3NvY2lhdGlvbkZvciggYXNzb2NpYXRpb25EZXNjcmlwdG9yLmFjY2Vzc29yKCkgKTsKLSAgICAgICAgICAgIE9iamVjdCBpbnN0YW5jZSA9IGFzc29jaWF0aW9uLmdldCgpOwogICAgICAgICAgICAgb25GaWVsZFN0YXJ0KCBvdXRwdXQsIGFzc29jaWF0aW9uRGVzY3JpcHRvci5xdWFsaWZpZWROYW1lKCkubmFtZSgpICk7CiAgICAgICAgICAgICBvblZhbHVlU3RhcnQoIG91dHB1dCApOwotICAgICAgICAgICAgaWYoIGluc3RhbmNlID09IG51bGwgKQorICAgICAgICAgICAgRW50aXR5UmVmZXJlbmNlIHJlZiA9IGFzc29jaWF0aW9uLnJlZmVyZW5jZSgpOworICAgICAgICAgICAgaWYoIHJlZiA9PSBudWxsICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvblZhbHVlKCBvdXRwdXQsIG51bGwgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvblZhbHVlKCBvdXRwdXQsICggKElkZW50aXR5KSBpbnN0YW5jZSApLmlkZW50aXR5KCkuZ2V0KCkgKTsKKyAgICAgICAgICAgICAgICBvblZhbHVlKCBvdXRwdXQsIHJlZi5pZGVudGl0eSgpICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvblZhbHVlRW5kKCBvdXRwdXQgKTsKICAgICAgICAgICAgIG9uRmllbGRFbmQoIG91dHB1dCApOwpAQCAtNDcwLDEwICs0NTgsMTAgQEAKICAgICAgICAgICAgIG9uRmllbGRTdGFydCggb3V0cHV0LCBhc3NvY2lhdGlvbkRlc2NyaXB0b3IucXVhbGlmaWVkTmFtZSgpLm5hbWUoKSApOwogICAgICAgICAgICAgb25WYWx1ZVN0YXJ0KCBvdXRwdXQgKTsKICAgICAgICAgICAgIG9uQXJyYXlTdGFydCggb3V0cHV0ICk7Ci0gICAgICAgICAgICBmb3IoIE9iamVjdCBpbnN0YW5jZSA6IG1hbnlBc3NvY2lhdGlvbiApCisgICAgICAgICAgICBmb3IoIEVudGl0eVJlZmVyZW5jZSByZWYgOiBtYW55QXNzb2NpYXRpb24ucmVmZXJlbmNlcygpICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvblZhbHVlU3RhcnQoIG91dHB1dCApOwotICAgICAgICAgICAgICAgIG9uVmFsdWUoIG91dHB1dCwgKCAoSWRlbnRpdHkpIGluc3RhbmNlICkuaWRlbnRpdHkoKS5nZXQoKSApOworICAgICAgICAgICAgICAgIG9uVmFsdWUoIG91dHB1dCwgcmVmLmlkZW50aXR5KCkgKTsKICAgICAgICAgICAgICAgICBvblZhbHVlRW5kKCBvdXRwdXQgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9uQXJyYXlFbmQoIG91dHB1dCApOwpAQCAtNDkwLDcgKzQ3OCw4IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb25GaWVsZFN0YXJ0KCBvdXRwdXQsIG5hbWUgKTsKICAgICAgICAgICAgICAgICBvblZhbHVlU3RhcnQoIG91dHB1dCApOwotICAgICAgICAgICAgICAgIG9uVmFsdWUoIG91dHB1dCwgKCAoSWRlbnRpdHkpIG5hbWVkQXNzb2NpYXRpb24uZ2V0KCBuYW1lICkgKS5pZGVudGl0eSgpLmdldCgpICk7CisgICAgICAgICAgICAgICAgRW50aXR5UmVmZXJlbmNlIHJlZiA9IG5hbWVkQXNzb2NpYXRpb24ucmVmZXJlbmNlT2YoIG5hbWUgKTsKKyAgICAgICAgICAgICAgICBvblZhbHVlKCBvdXRwdXQsIHJlZi5pZGVudGl0eSgpICk7CiAgICAgICAgICAgICAgICAgb25WYWx1ZUVuZCggb3V0cHV0ICk7CiAgICAgICAgICAgICAgICAgb25GaWVsZEVuZCggb3V0cHV0ICk7CiAgICAgICAgICAgICB9CkBAIC01MjgsMjYgKzUxNyw0MiBAQAogICAgIHsKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoICJ1bmNoZWNrZWQiICkKICAgICAgICAgTWFwPE9iamVjdCwgT2JqZWN0PiBtYXAgPSAoTWFwPE9iamVjdCwgT2JqZWN0Pikgb2JqZWN0OwotICAgICAgICBvbkFycmF5U3RhcnQoIG91dHB1dCApOwotICAgICAgICBmb3IoIE1hcC5FbnRyeTxPYmplY3QsIE9iamVjdD4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSApCisgICAgICAgIGlmKCBvcHRpb25zLmdldEJvb2xlYW4oIE9wdGlvbnMuTUFQX0VOVFJJRVNfQVNfT0JKRUNUUyApICkKICAgICAgICAgewogICAgICAgICAgICAgb25PYmplY3RTdGFydCggb3V0cHV0ICk7Ci0KLSAgICAgICAgICAgIG9uRmllbGRTdGFydCggb3V0cHV0LCAia2V5IiApOwotICAgICAgICAgICAgb25WYWx1ZVN0YXJ0KCBvdXRwdXQgKTsKLSAgICAgICAgICAgIG9uVmFsdWUoIG91dHB1dCwgZW50cnkuZ2V0S2V5KCkudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgb25WYWx1ZUVuZCggb3V0cHV0ICk7Ci0gICAgICAgICAgICBvbkZpZWxkRW5kKCBvdXRwdXQgKTsKLQotICAgICAgICAgICAgb25GaWVsZFN0YXJ0KCBvdXRwdXQsICJ2YWx1ZSIgKTsKLSAgICAgICAgICAgIG9uVmFsdWVTdGFydCggb3V0cHV0ICk7Ci0gICAgICAgICAgICBkb1NlcmlhbGl6ZSggb3B0aW9ucywgZW50cnkuZ2V0VmFsdWUoKSwgb3V0cHV0LCBmYWxzZSApOwotICAgICAgICAgICAgb25WYWx1ZUVuZCggb3V0cHV0ICk7Ci0gICAgICAgICAgICBvbkZpZWxkRW5kKCBvdXRwdXQgKTsKLQorICAgICAgICAgICAgZm9yKCBNYXAuRW50cnk8T2JqZWN0LCBPYmplY3Q+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9uRmllbGRTdGFydCggb3V0cHV0LCBlbnRyeS5nZXRLZXkoKS50b1N0cmluZygpICk7CisgICAgICAgICAgICAgICAgb25WYWx1ZVN0YXJ0KCBvdXRwdXQgKTsKKyAgICAgICAgICAgICAgICBkb1NlcmlhbGl6ZSggb3B0aW9ucywgZW50cnkuZ2V0VmFsdWUoKSwgb3V0cHV0LCBmYWxzZSApOworICAgICAgICAgICAgICAgIG9uVmFsdWVFbmQoIG91dHB1dCApOworICAgICAgICAgICAgICAgIG9uRmllbGRFbmQoIG91dHB1dCApOworICAgICAgICAgICAgfQogICAgICAgICAgICAgb25PYmplY3RFbmQoIG91dHB1dCApOwogICAgICAgICB9Ci0gICAgICAgIG9uQXJyYXlFbmQoIG91dHB1dCApOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG9uQXJyYXlTdGFydCggb3V0cHV0ICk7CisgICAgICAgICAgICBmb3IoIE1hcC5FbnRyeTxPYmplY3QsIE9iamVjdD4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb25PYmplY3RTdGFydCggb3V0cHV0ICk7CisKKyAgICAgICAgICAgICAgICBvbkZpZWxkU3RhcnQoIG91dHB1dCwgImtleSIgKTsKKyAgICAgICAgICAgICAgICBvblZhbHVlU3RhcnQoIG91dHB1dCApOworICAgICAgICAgICAgICAgIG9uVmFsdWUoIG91dHB1dCwgZW50cnkuZ2V0S2V5KCkudG9TdHJpbmcoKSApOworICAgICAgICAgICAgICAgIG9uVmFsdWVFbmQoIG91dHB1dCApOworICAgICAgICAgICAgICAgIG9uRmllbGRFbmQoIG91dHB1dCApOworCisgICAgICAgICAgICAgICAgb25GaWVsZFN0YXJ0KCBvdXRwdXQsICJ2YWx1ZSIgKTsKKyAgICAgICAgICAgICAgICBvblZhbHVlU3RhcnQoIG91dHB1dCApOworICAgICAgICAgICAgICAgIGRvU2VyaWFsaXplKCBvcHRpb25zLCBlbnRyeS5nZXRWYWx1ZSgpLCBvdXRwdXQsIGZhbHNlICk7CisgICAgICAgICAgICAgICAgb25WYWx1ZUVuZCggb3V0cHV0ICk7CisgICAgICAgICAgICAgICAgb25GaWVsZEVuZCggb3V0cHV0ICk7CisKKyAgICAgICAgICAgICAgICBvbk9iamVjdEVuZCggb3V0cHV0ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvbkFycmF5RW5kKCBvdXRwdXQgKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzZXJpYWxpemVCYXNlNjRTZXJpYWxpemFibGUoIE9iamVjdCBvYmplY3QsIE91dHB1dFR5cGUgb3V0cHV0ICkKQEAgLTU2MCw3ICs1NjUsNyBAQAogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYm91dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICAgICAgdHJ5KCBPYmplY3RPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbSggYm91dCApICkKKyAgICAgICAgdHJ5IChPYmplY3RPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbSggYm91dCApKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQud3JpdGVVbnNoYXJlZCggb2JqZWN0ICk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3ZhbHVlL3BhY2thZ2UuaHRtbCBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc3BpL3ZhbHVlL3BhY2thZ2UuaHRtbAppbmRleCA4MzUzNjkxLi43MjdiYzJjIDEwMDY0NAotLS0gYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NwaS92YWx1ZS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zcGkvdmFsdWUvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5WYWx1ZSBTUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL29yZ2pzb24vT3JnSnNvblZhbHVlRGVzZXJpYWxpemVyLmphdmEgYi9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9vcmdqc29uL09yZ0pzb25WYWx1ZURlc2VyaWFsaXplci5qYXZhCmluZGV4IDQ1MmY3NWUuLjIyM2JjOTkgMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL29yZ2pzb24vT3JnSnNvblZhbHVlRGVzZXJpYWxpemVyLmphdmEKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vb3JnanNvbi9PcmdKc29uVmFsdWVEZXNlcmlhbGl6ZXIuamF2YQpAQCAtMjAsNiArMjAsNyBAQAogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBvcmcuanNvbi5KU09OQXJyYXk7CiBpbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsKQEAgLTQ0OSw0ICs0NTAsMzIgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCA8Vj4gdm9pZCBwdXRPYmplY3ROb2RlSW5NYXAoIE9iamVjdCBpbnB1dE5vZGUsIEZ1bmN0aW9uPE9iamVjdCwgVj4gdmFsdWVEZXNlcmlhbGl6ZXIsIE1hcDxTdHJpbmcsIFY+IG1hcCApCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGlmKCBKU09OT2JqZWN0Lk5VTEwuZXF1YWxzKCBpbnB1dE5vZGUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiggISggaW5wdXROb2RlIGluc3RhbmNlb2YgSlNPTk9iamVjdCApICkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IFZhbHVlU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiggIkV4cGVjdGVkIGFuIG9iamVjdCBidXQgZ290ICIgKyBpbnB1dE5vZGUgKTsKKyAgICAgICAgfQorICAgICAgICBKU09OT2JqZWN0IG9iamVjdCA9IChKU09OT2JqZWN0KSBpbnB1dE5vZGU7CisKKyAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoICJ1bmNoZWNrZWQiICkKKyAgICAgICAgSXRlcmF0b3I8U3RyaW5nPiBpdCA9IG9iamVjdC5rZXlzKCk7CisgICAgICAgIHdoaWxlKCBpdC5oYXNOZXh0KCkgKQorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQubmV4dCgpOworICAgICAgICAgICAgT2JqZWN0IGl0ZW0gPSBvYmplY3QuZ2V0KCBrZXkgKTsKKyAgICAgICAgICAgIFYgdmFsdWVWYWx1ZSA9IHZhbHVlRGVzZXJpYWxpemVyLm1hcCggaXRlbSApOworICAgICAgICAgICAgaWYoIGtleSAhPSBudWxsICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXAucHV0KCBrZXksIHZhbHVlVmFsdWUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL29yZ2pzb24vT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbi5qYXZhIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vb3JnanNvbi9PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uLmphdmEKaW5kZXggMGM3NThmYS4uMmU1NDEzZiAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vb3JnanNvbi9PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uLmphdmEKKysrIGIvY29yZS9zcGkvc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vb3JnanNvbi9PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAqIFZhbHVlU2VyaWFsaXphdGlvbiBwcm9kdWNpbmcgYW5kIGNvbnN1bWluZyBKU09OIGRvY3VtZW50cyB1c2luZyBvcmcuanNvbi4KICAqCiAgKiA8cD4KLSAqICAgICBUaGlzIGNsYXNzIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgUWk0aiBSdW50aW1lIHRvIHByb3ZpZGUgZGVmYXVsdCBWYWx1ZVNlcmlhbGl6YXRpb24gd2hlbiBubworICogICAgIFRoaXMgY2xhc3MgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBaZXN0IFJ1bnRpbWUgdG8gcHJvdmlkZSBkZWZhdWx0IFZhbHVlU2VyaWFsaXphdGlvbiB3aGVuIG5vCiAgKiAgICAgVmFsdWVTZXJpYWxpemF0aW9uIFNlcnZpY2UgaXMgYXZhaWxhYmxlLgogICogPC9wPgogICogPHA+CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9vcmdqc29uL3BhY2thZ2UuaHRtbCBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL29yZ2pzb24vcGFja2FnZS5odG1sCmluZGV4IGQwNjk0M2IuLmY4OGJmZjggMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL29yZ2pzb24vcGFja2FnZS5odG1sCisrKyBiL2NvcmUvc3BpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL29yZ2pzb24vcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5vcmcuanNvbiBWYWx1ZSBTZXJpYWxpemF0aW9uLjwvaDI+CmRpZmYgLS1naXQgYS9jb3JlL3NwaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3NwaS9lbnRpdHlzdG9yZS9oZWxwZXJzL0pTT05NYW55QXNzb2NpYXRpb25TdGF0ZVRlc3QuamF2YSBiL2NvcmUvc3BpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvSlNPTk1hbnlBc3NvY2lhdGlvblN0YXRlVGVzdC5qYXZhCmluZGV4IGQwYzM0MjYuLmRiYTRiNTggMTAwNjQ0Ci0tLSBhL2NvcmUvc3BpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvSlNPTk1hbnlBc3NvY2lhdGlvblN0YXRlVGVzdC5qYXZhCisrKyBiL2NvcmUvc3BpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovc3BpL2VudGl0eXN0b3JlL2hlbHBlcnMvSlNPTk1hbnlBc3NvY2lhdGlvblN0YXRlVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw2IEBACiAgICAgICAgIHN0YXRlLnB1dCggSlNPTktleXMuTUFOWV9BU1NPQ0lBVElPTlMsIG5ldyBKU09OT2JqZWN0KCkgKTsKICAgICAgICAgc3RhdGUucHV0KCBKU09OS2V5cy5OQU1FRF9BU1NPQ0lBVElPTlMsIG5ldyBKU09OT2JqZWN0KCkgKTsKICAgICAgICAgSlNPTkVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gbmV3IEpTT05FbnRpdHlTdGF0ZSggbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmZXJlbmNlLnBhcnNlRW50aXR5UmVmZXJlbmNlKCAiMTIzIiApLApAQCAtNzEsNyArNzAsNiBAQAogICAgICAgICBzdGF0ZS5wdXQoIEpTT05LZXlzLk1BTllfQVNTT0NJQVRJT05TLCBuZXcgSlNPTk9iamVjdCgpICk7CiAgICAgICAgIHN0YXRlLnB1dCggSlNPTktleXMuTkFNRURfQVNTT0NJQVRJT05TLCBuZXcgSlNPTk9iamVjdCgpICk7CiAgICAgICAgIEpTT05FbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IG5ldyBKU09ORW50aXR5U3RhdGUoIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggIjEyMyIgKSwKZGlmZiAtLWdpdCBhL2NvcmUvc3BpL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sIGIvY29yZS9zcGkvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stdGVzdC54bWwKaW5kZXggMmRhYjljNS4uY2U2ZTAyOCAxMDA2NDQKLS0tIGEvY29yZS9zcGkvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stdGVzdC54bWwKKysrIGIvY29yZS9zcGkvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stdGVzdC54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxjb25maWd1cmF0aW9uPgogCiAgICAgPGFwcGVuZGVyIG5hbWU9InN0ZG91dCIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNvcmUuQ29uc29sZUFwcGVuZGVyIj4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvYnVpbGQuZ3JhZGxlIGIvY29yZS90ZXN0c3VwcG9ydC9idWlsZC5ncmFkbGUKaW5kZXggOWZjYjRkMi4uMmYwYWY1OCAxMDA2NDQKLS0tIGEvY29yZS90ZXN0c3VwcG9ydC9idWlsZC5ncmFkbGUKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9idWlsZC5ncmFkbGUKQEAgLTEsOCArMSwyOSBAQAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogQ29yZSBUZXN0U3VwcG9ydCJ9fQorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIENvcmUgVGVzdFN1cHBvcnQifX0KIAogZGVwZW5kZW5jaWVzIHsKIAogICBjb21waWxlIHByb2plY3QoICc6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCcgKQogICBjb21waWxlIGxpYnJhcmllcy5qdW5pdAogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICB0ZXN0UnVudGltZSBwcm9qZWN0KCAnOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lJyApCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvZGV2LXN0YXR1cy54bWwgYi9jb3JlL3Rlc3RzdXBwb3J0L2Rldi1zdGF0dXMueG1sCmluZGV4IGViZmFlZDYuLjdiMWEzMGIgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvZGV2LXN0YXR1cy54bWwKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL2RvY3MvcmVmZXJlbmNlL0Fic3RyYWN0RW50aXR5U3RvcmVUZXN0LnR4dCBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL2RvY3MvcmVmZXJlbmNlL0Fic3RyYWN0RW50aXR5U3RvcmVUZXN0LnR4dAppbmRleCBlNjlkZTI5Li5mYzdhYWM2IDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9kb2NzL3JlZmVyZW5jZS9BYnN0cmFjdEVudGl0eVN0b3JlVGVzdC50eHQKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvZG9jcy9yZWZlcmVuY2UvQWJzdHJhY3RFbnRpdHlTdG9yZVRlc3QudHh0CkBAIC0wLDAgKzEsMTggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvZG9jcy9yZWZlcmVuY2UvQWJzdHJhY3RRaTRqU2NlbmFyaW9UZXN0LnR4dCBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL2RvY3MvcmVmZXJlbmNlL0Fic3RyYWN0UWk0alNjZW5hcmlvVGVzdC50eHQKaW5kZXggZTY5ZGUyOS4uZmM3YWFjNiAxMDA2NDQKLS0tIGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvZG9jcy9yZWZlcmVuY2UvQWJzdHJhY3RRaTRqU2NlbmFyaW9UZXN0LnR4dAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9kb2NzL3JlZmVyZW5jZS9BYnN0cmFjdFFpNGpTY2VuYXJpb1Rlc3QudHh0CkBAIC0wLDAgKzEsMTggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvZG9jcy9yZWZlcmVuY2UvQWJzdHJhY3RRaTRqVGVzdC50eHQgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9kb2NzL3JlZmVyZW5jZS9BYnN0cmFjdFFpNGpUZXN0LnR4dAppbmRleCBlNjlkZTI5Li5mYzdhYWM2IDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9kb2NzL3JlZmVyZW5jZS9BYnN0cmFjdFFpNGpUZXN0LnR4dAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9kb2NzL3JlZmVyZW5jZS9BYnN0cmFjdFFpNGpUZXN0LnR4dApAQCAtMCwwICsxLDE4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi10ZXN0c3VwcG9ydC50eHQgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9kb2NzL3JlZmVyZW5jZS9yZWYtdGVzdHN1cHBvcnQudHh0CmluZGV4IGIwMmM0YjQuLmUxZjExN2YgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL2RvY3MvcmVmZXJlbmNlL3JlZi10ZXN0c3VwcG9ydC50eHQKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvZG9jcy9yZWZlcmVuY2UvcmVmLXRlc3RzdXBwb3J0LnR4dApAQCAtMSwzICsxLDIxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogaW5jbHVkZTo6QWJzdHJhY3RRaTRqVGVzdC50eHQKIApkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvZG9jcy90ZXN0c3VwcG9ydC50eHQgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9kb2NzL3Rlc3RzdXBwb3J0LnR4dAppbmRleCAyNTFmMzM4Li5mM2M5NTg1IDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9kb2NzL3Rlc3RzdXBwb3J0LnR4dAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9kb2NzL3Rlc3RzdXBwb3J0LnR4dApAQCAtMjEsMTUgKzIxLDE1IEBACiBzb3VyY2U9Y29yZS90ZXN0c3VwcG9ydC9kZXYtc3RhdHVzLnhtbAogLS0tLS0tLS0tLS0tLS0KIAotUWk0aiBjb21lcyB3aXRoIGNsYXNzZXMgdG8gaGVscCB3aXRoIHRlc3RpbmcuIEZvciBnZW5lcmFsIGRldmVsb3BtZW50LCBvbmx5IGEgY291cGxlIG9mIGNsYXNzZXMgYXJlIG9mIGludGVyZXN0IGFzIHRoZQorWmVzdOKEoiBjb21lcyB3aXRoIGNsYXNzZXMgdG8gaGVscCB3aXRoIHRlc3RpbmcuIEZvciBnZW5lcmFsIGRldmVsb3BtZW50LCBvbmx5IGEgY291cGxlIG9mIGNsYXNzZXMgYXJlIG9mIGludGVyZXN0IGFzIHRoZQogb3RoZXJzIGFyZSBtb3N0bHkgZm9yIEVudGl0eVN0b3JlIGFuZCBJbmRleC9RdWVyeSBTUEkgaW1wbGVtZW50YXRpb25zLiBUaGVyZSBpcyBhbHNvIHNvbWUgbW9ja2luZyBzdXBwb3J0LCB0byBhbGxvdwotc29tZSBvZiBRaTRqJ3MgdW5pcXVlIGFzcGVjdHMgdG8gYmUgbW9ja2VkLCBidXQgc2luY2UgUWk0aiBpcyBzbyBmbGV4aWJsZSBhdCBhIGZpbmUtZ3JhbnVsYXIgbGV2ZWwsIHdlIGhhdmUgZm91bmQgdGhhdAorc29tZSBvZiBaZXN0J3MgdW5pcXVlIGFzcGVjdHMgdG8gYmUgbW9ja2VkLCBidXQgc2luY2UgWmVzdOKEoiBpcyBzbyBmbGV4aWJsZSBhdCBhIGZpbmUtZ3JhbnVsYXIgbGV2ZWwsIHdlIGhhdmUgZm91bmQgdGhhdAogbW9ja2luZyBpcyBzZWxkb20sIGlmIGV2ZXIsIG5lZWRlZC4KIAogaW5jbHVkZTo6Li4vLi4vYnVpbGQvZG9jcy9idWlsZGluZm8vYXJ0aWZhY3QudHh0W10KIAogPT0gWW91ciBGaXJzdCBUZXN0Y2FzZSA9PQotSW4gbW9zdCBjYXNlcywgeW91IHdpbGwgcHJvYmFibHkgdXNlIHRoZSBBYnN0cmFjdFFpNGpUZXN0IGNsYXNzIHRvIHNpbXBsaWZ5IHN0YXJ0aW5nIGEgUWk0aiB0ZXN0IGluc3RhbmNlLgorSW4gbW9zdCBjYXNlcywgeW91IHdpbGwgcHJvYmFibHkgdXNlIHRoZSBBYnN0cmFjdFFpNGpUZXN0IGNsYXNzIHRvIHNpbXBsaWZ5IHN0YXJ0aW5nIGEgWmVzdOKEoiB0ZXN0IGluc3RhbmNlLgogCiBbc25pcHBldCxqYXZhXQogLS0tLS0tLS0tLS0tLS0KQEAgLTM3LDcgKzM3LDcgQEAKIHRhZz1zdGVwMQogLS0tLS0tLS0tLS0tLS0KIAotVGhpcyB3aWxsIGRvIGFsbCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYSBRaTRqIHJ1bnRpbWUgaW5zdGFuY2UgYW5kIGNyZWF0ZSBhIHNpbmdsZSBsYXllciB3aXRoIGEgc2luZ2xlIG1vZHVsZSBpbiBpdC4KK1RoaXMgd2lsbCBkbyBhbGwgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgWmVzdOKEoiBydW50aW1lIGluc3RhbmNlIGFuZCBjcmVhdGUgYSBzaW5nbGUgbGF5ZXIgd2l0aCBhIHNpbmdsZSBtb2R1bGUgaW4gaXQuCiBXaGF0IGdvZXMgaW50byB0aGF0IG1vZHVsZSBpcyBkZWNsYXJlZCBpbiB0aGUgYXNzZW1ibHkoKSBtZXRob2Q7CiAKIFtzbmlwcGV0LGphdmFdCmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9BYnN0cmFjdFFpNGpCYXNlVGVzdC5qYXZhIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvQWJzdHJhY3RRaTRqQmFzZVRlc3QuamF2YQppbmRleCAzYzg3OGExLi45NDlkY2EzIDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9BYnN0cmFjdFFpNGpCYXNlVGVzdC5qYXZhCisrKyBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L0Fic3RyYWN0UWk0akJhc2VUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudGVzdDsKIAogaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKQEAgLTExLDggKzI5LDYgQEAKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkVuZXJneTRKYXZhOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5RaTRqU1BJOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFFpNGpCYXNlVGVzdAogewpAQCAtMjMsOCArMzksNiBAQAogICAgIHByb3RlY3RlZCBBcHBsaWNhdGlvbkRlc2NyaXB0b3IgYXBwbGljYXRpb25Nb2RlbDsKICAgICBwcm90ZWN0ZWQgQXBwbGljYXRpb24gYXBwbGljYXRpb247CiAKLSAgICBwcml2YXRlIExvZ2dlciBsb2c7Ci0KICAgICBAQmVmb3JlCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCkBAIC04Myw3ICs5Nyw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlcmUgd2FzIGFuIEFzc2VtYmx5RXhjZXB0aW9uIGluIHRoZSBjcmVhdGlvbiBvZiB0aGUgUWk0aiBhcHBsaWNhdGlvbiBtb2RlbC4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgYW4gQXNzZW1ibHlFeGNlcHRpb24gaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBaZXN0IGFwcGxpY2F0aW9uIG1vZGVsLgogICAgICAqIDxwPgogICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGNhdGNoIHZhbGlkIGZhaWx1cmVzIHRvIHBsYWNlIGludG8gc2F0aXNmaWVkQnkgc3VpdGVzLgogICAgICAqIDwvcD4KQEAgLTExMSwxNCArMTI1LDQgQEAKICAgICAgICAgICAgIGFwcGxpY2F0aW9uLnBhc3NpdmF0ZSgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcHJvdGVjdGVkIExvZ2dlciBnZXRMb2coKQotICAgIHsKLSAgICAgICAgaWYoIHRoaXMubG9nID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCB0aGlzLmdldENsYXNzKCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzLmxvZzsKLSAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9BYnN0cmFjdFFpNGpTY2VuYXJpb1Rlc3QuamF2YSBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L0Fic3RyYWN0UWk0alNjZW5hcmlvVGVzdC5qYXZhCmluZGV4IDQ4ZTFmMGIuLjI3OTQ4ZjYgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L0Fic3RyYWN0UWk0alNjZW5hcmlvVGVzdC5qYXZhCisrKyBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L0Fic3RyYWN0UWk0alNjZW5hcmlvVGVzdC5qYXZhCkBAIC0yOCwxMSArMjgsOSBAQAogaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuRW5lcmd5NEphdmE7CiBpbXBvcnQgb3JnLnFpNGouc3BpLlFpNGpTUEk7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKIAogLyoqCi0gKiBCYXNlIGNsYXNzIGZvciBRaTRqIHNjZW5hcmlvIHRlc3RzLiBUaGlzIHdpbGwgY3JlYXRlIG9uZSBRaTRqIGFwcGxpY2F0aW9uIHBlciBjbGFzcyBpbnN0ZWFkIG9mIHBlciB0ZXN0LgorICogQmFzZSBjbGFzcyBmb3IgWmVzdCBzY2VuYXJpbyB0ZXN0cy4gVGhpcyB3aWxsIGNyZWF0ZSBvbmUgWmVzdCBhcHBsaWNhdGlvbiBwZXIgY2xhc3MgaW5zdGVhZCBvZiBwZXIgdGVzdC4KICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UWk0alNjZW5hcmlvVGVzdAogICAgIGltcGxlbWVudHMgQXNzZW1ibGVyCkBAIC00OCw4ICs0Niw2IEBACiAKICAgICBzdGF0aWMgcHJvdGVjdGVkIEFzc2VtYmxlciBhc3NlbWJsZXI7IC8vIEluaXRpYWxpemUgdGhpcyBpbiBzdGF0aWMgYmxvY2sgb2Ygc3ViY2xhc3MKIAotICAgIHN0YXRpYyBwcml2YXRlIExvZ2dlciBsb2c7Ci0KICAgICBAQmVmb3JlQ2xhc3MKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VXAoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCkBAIC05Niw3ICs5Miw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlcmUgd2FzIGFuIEFzc2VtYmx5RXhjZXB0aW9uIGluIHRoZSBjcmVhdGlvbiBvZiB0aGUgUWk0aiBhcHBsaWNhdGlvbiBtb2RlbC4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgYW4gQXNzZW1ibHlFeGNlcHRpb24gaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBaZXN0IGFwcGxpY2F0aW9uIG1vZGVsLgogICAgICAqIDxwPgogICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGNhdGNoIHZhbGlkIGZhaWx1cmVzIHRvIHBsYWNlIGludG8gc2F0aXNmaWVkQnkgc3VpdGVzLgogICAgICAqIDwvcD4KQEAgLTE0NCwxNCArMTQwLDQgQEAKICAgICAgICAgICAgIGFwcGxpY2F0aW9uLnBhc3NpdmF0ZSgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcHJvdGVjdGVkIExvZ2dlciBnZXRMb2coKQotICAgIHsKLSAgICAgICAgaWYoIHRoaXMubG9nID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCB0aGlzLmdldENsYXNzKCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzLmxvZzsKLSAgICB9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvQWJzdHJhY3RRaTRqVGVzdC5qYXZhIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvQWJzdHJhY3RRaTRqVGVzdC5qYXZhCmluZGV4IDdiN2FkYmIuLjJlZjA2NDcgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L0Fic3RyYWN0UWk0alRlc3QuamF2YQorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9BYnN0cmFjdFFpNGpUZXN0LmphdmEKQEAgLTE2LDEzICsxNiwxMyBAQAogCiBpbXBvcnQgb3JnLmp1bml0LkFmdGVyOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29yazsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXBwbGljYXRpb25Bc3NlbWJseTsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibGVyOwogaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiAKIC8qKgogICogQmFzZSBjbGFzcyBmb3IgQ29tcG9zaXRlIHRlc3RzLgpAQCAtMzAsNyArMzAsNyBAQAogcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UWk0alRlc3QgZXh0ZW5kcyBBYnN0cmFjdFFpNGpCYXNlVGVzdAogICAgIGltcGxlbWVudHMgQXNzZW1ibGVyCiB7Ci0gICAgcHJvdGVjdGVkIE1vZHVsZSBtb2R1bGU7CisgICAgcHJvdGVjdGVkIE1vZHVsZVNwaSBtb2R1bGU7CiAKICAgICBAQmVmb3JlCiAgICAgQE92ZXJyaWRlCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybjsgLy8gZmFpbHVyZSBpbiBBc3NlbWJseS4KICAgICAgICAgfQotICAgICAgICBtb2R1bGUgPSBhcHBsaWNhdGlvbi5maW5kTW9kdWxlKCAiTGF5ZXIgMSIsICJNb2R1bGUgMSIgKTsKKyAgICAgICAgbW9kdWxlID0gKE1vZHVsZVNwaSkgYXBwbGljYXRpb24uZmluZE1vZHVsZSggIkxheWVyIDEiLCAiTW9kdWxlIDEiICk7CiAgICAgICAgIG1vZHVsZS5pbmplY3RUbyggdGhpcyApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvY2FjaGUvQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YSBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2NhY2hlL0Fic3RyYWN0RW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzZGU1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2NhY2hlL0Fic3RyYWN0RW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0LmphdmEKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLnRlc3QuY2FjaGU7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLk9wdGlvbmFsOworaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU2VydmljZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrQ29tcGxldGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLnRlc3QuZW50aXR5LkFic3RyYWN0RW50aXR5U3RvcmVUZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuaXM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhhdDsKKworLyoqCisgKiBBc3NlcnQgQ2FjaGUgYmVoYXZpb3VyIHdoZW4gdXNlZCBieSBhbiBFbnRpdHlTdG9yZS4KKyAqIDxwPgorICogVXNlIGFuIGluLW1lbW9yeSBDYWNoZVBvb2wgYnkgZGVmYXVsdCwgaW1wbGVtZW50IHRoZSA8Y29kZT5hc3NlbWJsZUNhY2hlUG9vbDwvY29kZT4gbWV0aG9kIHRvIG92ZXJyaWRlLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QKKyAgICBleHRlbmRzIEFic3RyYWN0RW50aXR5U3RvcmVUZXN0Cit7CisgICAgQE9wdGlvbmFsIEBTZXJ2aWNlIE1lbW9yeUNhY2hlUG9vbFNlcnZpY2UgY2FjaGVQb29sOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgc3VwZXIuYXNzZW1ibGUoIG1vZHVsZSApOworICAgICAgICBhc3NlbWJsZUNhY2hlUG9vbCggbW9kdWxlICk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgYXNzZW1ibGVDYWNoZVBvb2woIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBNZW1vcnlDYWNoZVBvb2xTZXJ2aWNlLmNsYXNzICk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB3aGVuTmV3RW50aXR5VGhlbkNhbkZpbmRFbnRpdHlBbmRDb3JyZWN0VmFsdWVzKCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgc3VwZXIud2hlbk5ld0VudGl0eVRoZW5DYW5GaW5kRW50aXR5QW5kQ29ycmVjdFZhbHVlcygpOworICAgICAgICBpZiggY2FjaGVQb29sICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBNZW1vcnlDYWNoZUltcGw8Pz4gY2FjaGUgPSBjYWNoZVBvb2wuc2luZ2xlQ2FjaGUoKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLnNpemUoKSwgaXMoIDEgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggY2FjaGUuZ2V0cygpLCBpcyggMSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5wdXRzKCksIGlzKCAxICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLnJlbW92ZXMoKSwgaXMoIDAgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggY2FjaGUuZXhpc3RzKCksIGlzKCAwICkgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgd2hlblJlbW92ZWRFbnRpdHlUaGVuQ2Fubm90RmluZEVudGl0eSgpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN1cGVyLndoZW5SZW1vdmVkRW50aXR5VGhlbkNhbm5vdEZpbmRFbnRpdHkoKTsKKyAgICAgICAgaWYoIGNhY2hlUG9vbCAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgTWVtb3J5Q2FjaGVJbXBsPD8+IGNhY2hlID0gY2FjaGVQb29sLnNpbmdsZUNhY2hlKCk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5zaXplKCksIGlzKCAwICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmdldHMoKSwgaXMoIDIgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggY2FjaGUucHV0cygpLCBpcyggMSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5yZW1vdmVzKCksIGlzKCAxICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmV4aXN0cygpLCBpcyggMCApICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdpdmVuRW50aXR5SXNOb3RNb2RpZmllZFdoZW5Vbml0T2ZXb3JrQ29tcGxldGVzVGhlbkRvbnRTdG9yZVN0YXRlKCkKKyAgICAgICAgdGhyb3dzIFVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlci5naXZlbkVudGl0eUlzTm90TW9kaWZpZWRXaGVuVW5pdE9mV29ya0NvbXBsZXRlc1RoZW5Eb250U3RvcmVTdGF0ZSgpOworICAgICAgICBpZiggY2FjaGVQb29sICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBNZW1vcnlDYWNoZUltcGw8Pz4gY2FjaGUgPSBjYWNoZVBvb2wuc2luZ2xlQ2FjaGUoKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLnNpemUoKSwgaXMoIDEgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggY2FjaGUuZ2V0cygpLCBpcyggMiApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5wdXRzKCksIGlzKCAxICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLnJlbW92ZXMoKSwgaXMoIDAgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggY2FjaGUuZXhpc3RzKCksIGlzKCAwICkgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgZ2l2ZW5Qcm9wZXJ0eUlzTW9kaWZpZWRXaGVuVW5pdE9mV29ya0NvbXBsZXRlc1RoZW5TdG9yZVN0YXRlKCkKKyAgICAgICAgdGhyb3dzIFVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlci5naXZlblByb3BlcnR5SXNNb2RpZmllZFdoZW5Vbml0T2ZXb3JrQ29tcGxldGVzVGhlblN0b3JlU3RhdGUoKTsKKyAgICAgICAgaWYoIGNhY2hlUG9vbCAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgTWVtb3J5Q2FjaGVJbXBsPD8+IGNhY2hlID0gY2FjaGVQb29sLnNpbmdsZUNhY2hlKCk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5zaXplKCksIGlzKCAxICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmdldHMoKSwgaXMoIDIgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggY2FjaGUucHV0cygpLCBpcyggMiApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5yZW1vdmVzKCksIGlzKCAwICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmV4aXN0cygpLCBpcyggMCApICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdpdmVuTWFueUFzc29jaWF0aW9uSXNNb2RpZmllZFdoZW5Vbml0T2ZXb3JrQ29tcGxldGVzVGhlblN0b3JlU3RhdGUoKQorICAgICAgICB0aHJvd3MgVW5pdE9mV29ya0NvbXBsZXRpb25FeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN1cGVyLmdpdmVuTWFueUFzc29jaWF0aW9uSXNNb2RpZmllZFdoZW5Vbml0T2ZXb3JrQ29tcGxldGVzVGhlblN0b3JlU3RhdGUoKTsKKyAgICAgICAgaWYoIGNhY2hlUG9vbCAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgTWVtb3J5Q2FjaGVJbXBsPD8+IGNhY2hlID0gY2FjaGVQb29sLnNpbmdsZUNhY2hlKCk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5zaXplKCksIGlzKCAxICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmdldHMoKSwgaXMoIDIgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggY2FjaGUucHV0cygpLCBpcyggMiApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5yZW1vdmVzKCksIGlzKCAwICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmV4aXN0cygpLCBpcyggMCApICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdpdmVuQ29uY3VycmVudFVuaXRPZldvcmtzV2hlblVvV0NvbXBsZXRlc1RoZW5DaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb24oKQorICAgICAgICB0aHJvd3MgVW5pdE9mV29ya0NvbXBsZXRpb25FeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN1cGVyLmdpdmVuQ29uY3VycmVudFVuaXRPZldvcmtzV2hlblVvV0NvbXBsZXRlc1RoZW5DaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb24oKTsKKyAgICAgICAgaWYoIGNhY2hlUG9vbCAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgTWVtb3J5Q2FjaGVJbXBsPD8+IGNhY2hlID0gY2FjaGVQb29sLnNpbmdsZUNhY2hlKCk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5zaXplKCksIGlzKCAxICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmdldHMoKSwgaXMoIDQgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggY2FjaGUucHV0cygpLCBpcyggMiApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5yZW1vdmVzKCksIGlzKCAwICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmV4aXN0cygpLCBpcyggMCApICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdpdmVuRW50aXR5U3RvcmVkTG9hZGVkQ2hhbmdlZFdoZW5Vbml0T2ZXb3JrRGlzY2FyZHNUaGVuRG9udFN0b3JlU3RhdGUoKQorICAgICAgICB0aHJvd3MgVW5pdE9mV29ya0NvbXBsZXRpb25FeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN1cGVyLmdpdmVuRW50aXR5U3RvcmVkTG9hZGVkQ2hhbmdlZFdoZW5Vbml0T2ZXb3JrRGlzY2FyZHNUaGVuRG9udFN0b3JlU3RhdGUoKTsKKyAgICAgICAgaWYoIGNhY2hlUG9vbCAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgTWVtb3J5Q2FjaGVJbXBsPD8+IGNhY2hlID0gY2FjaGVQb29sLnNpbmdsZUNhY2hlKCk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5zaXplKCksIGlzKCAxICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmdldHMoKSwgaXMoIDIgKSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggY2FjaGUucHV0cygpLCBpcyggMSApICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBjYWNoZS5yZW1vdmVzKCksIGlzKCAwICkgKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoIGNhY2hlLmV4aXN0cygpLCBpcyggMCApICk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9jYWNoZS9NZW1vcnlDYWNoZUltcGwuamF2YSBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2NhY2hlL01lbW9yeUNhY2hlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YTk5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9jYWNoZS9NZW1vcnlDYWNoZUltcGwuamF2YQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGoudGVzdC5jYWNoZTsKKworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOworaW1wb3J0IG9yZy5xaTRqLnNwaS5jYWNoZS5DYWNoZTsKKworLyoqCisgKiBJbi1NZW1vcnkgQ2FjaGUgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gQ29uY3VycmVudEhhc2hNYXAuCisgKi8KK3B1YmxpYyBjbGFzcyBNZW1vcnlDYWNoZUltcGw8VD4KKyAgICBpbXBsZW1lbnRzIENhY2hlPFQ+Cit7CisgICAgcHJpdmF0ZSBpbnQgcmVmQ291bnQ7CisKKyAgICBwcml2YXRlIGZpbmFsIENvbmN1cnJlbnRIYXNoTWFwPFN0cmluZywgT2JqZWN0PiBiYWNraW5nQ2FjaGU7CisgICAgcHJpdmF0ZSBmaW5hbCBDbGFzczxUPiB2YWx1ZVR5cGU7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7CisKKyAgICBwcml2YXRlIGludCBnZXRzOworICAgIHByaXZhdGUgaW50IHJlbW92ZXM7CisgICAgcHJpdmF0ZSBpbnQgcHV0czsKKyAgICBwcml2YXRlIGludCBleGlzdHM7CisKKyAgICBwdWJsaWMgTWVtb3J5Q2FjaGVJbXBsKCBTdHJpbmcgY2FjaGVJZCwgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+IGNhY2hlLCBDbGFzczxUPiB2YWx1ZVR5cGUgKQorICAgIHsKKyAgICAgICAgdGhpcy5pZCA9IGNhY2hlSWQ7CisgICAgICAgIHRoaXMuYmFja2luZ0NhY2hlID0gY2FjaGU7CisgICAgICAgIHRoaXMudmFsdWVUeXBlID0gdmFsdWVUeXBlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBUIGdldCggU3RyaW5nIGtleSApCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlVHlwZS5jYXN0KCBiYWNraW5nQ2FjaGUuZ2V0KCBrZXkgKSApOworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0cysrOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFQgcmVtb3ZlKCBTdHJpbmcga2V5ICkKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVUeXBlLmNhc3QoIGJhY2tpbmdDYWNoZS5yZW1vdmUoIGtleSApICk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseQorICAgICAgICB7CisgICAgICAgICAgICByZW1vdmVzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBwdXQoIFN0cmluZyBrZXksIFQgdmFsdWUgKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGJhY2tpbmdDYWNoZS5wdXQoIGtleSwgdmFsdWUgKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5CisgICAgICAgIHsKKyAgICAgICAgICAgIHB1dHMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGV4aXN0cyggU3RyaW5nIGtleSApCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhY2tpbmdDYWNoZS5jb250YWluc0tleSgga2V5ICk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseQorICAgICAgICB7CisgICAgICAgICAgICBleGlzdHMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN5bmNocm9uaXplZCB2b2lkIGRlY1JlZkNvdW50KCkKKyAgICB7CisgICAgICAgIHJlZkNvdW50LS07CisgICAgfQorCisgICAgc3luY2hyb25pemVkIHZvaWQgaW5jUmVmQ291bnQoKQorICAgIHsKKyAgICAgICAgcmVmQ291bnQrKzsKKyAgICB9CisKKyAgICBzeW5jaHJvbml6ZWQgYm9vbGVhbiBpc05vdFVzZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZkNvdW50ID09IDA7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBjYWNoZUlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdDYWNoZS5zaXplKCk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRzOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgcmVtb3ZlcygpCisgICAgeworICAgICAgICByZXR1cm4gcmVtb3ZlczsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHB1dHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHB1dHM7CisgICAgfQorCisgICAgcHVibGljIGludCBleGlzdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGV4aXN0czsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9jYWNoZS9NZW1vcnlDYWNoZVBvb2xNaXhpbi5qYXZhIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvY2FjaGUvTWVtb3J5Q2FjaGVQb29sTWl4aW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzllMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvY2FjaGUvTWVtb3J5Q2FjaGVQb29sTWl4aW4uamF2YQpAQCAtMCwwICsxLDgyIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai50ZXN0LmNhY2hlOworCitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudEhhc2hNYXA7CitpbXBvcnQgb3JnLnFpNGouYXBpLnV0aWwuTnVsbEFyZ3VtZW50RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLnNwaS5jYWNoZS5DYWNoZTsKKworaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5zaW5nbGU7CisKKy8qKgorICogSW4tTWVtb3J5IENhY2hlUG9vbCBNaXhpbiBiYXNlZCBvbiBDb25jdXJyZW50SGFzaE1hcC4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIE1lbW9yeUNhY2hlUG9vbE1peGluCisgICAgaW1wbGVtZW50cyBNZW1vcnlDYWNoZVBvb2xTZXJ2aWNlCit7CisgICAgcHJpdmF0ZSBmaW5hbCBDb25jdXJyZW50SGFzaE1hcDxTdHJpbmcsIE1lbW9yeUNhY2hlSW1wbDw/Pj4gY2FjaGVzID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPD4oKTsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyA8VD4gQ2FjaGU8VD4gZmV0Y2hDYWNoZSggU3RyaW5nIGNhY2hlSWQsIENsYXNzPFQ+IHZhbHVlVHlwZSApCisgICAgeworICAgICAgICBOdWxsQXJndW1lbnRFeGNlcHRpb24udmFsaWRhdGVOb3RFbXB0eSggImNhY2hlSWQiLCBjYWNoZUlkICk7CisgICAgICAgIE1lbW9yeUNhY2hlSW1wbDw/PiBjYWNoZSA9IGNhY2hlcy5nZXQoIGNhY2hlSWQgKTsKKyAgICAgICAgaWYoIGNhY2hlID09IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBjYWNoZSA9IGNyZWF0ZU5ld0NhY2hlKCBjYWNoZUlkLCB2YWx1ZVR5cGUgKTsKKyAgICAgICAgICAgIGNhY2hlcy5wdXQoIGNhY2hlSWQsIGNhY2hlICk7CisgICAgICAgIH0KKyAgICAgICAgY2FjaGUuaW5jUmVmQ291bnQoKTsKKyAgICAgICAgcmV0dXJuIChDYWNoZTxUPikgY2FjaGU7CisgICAgfQorCisgICAgcHJpdmF0ZSA8VD4gTWVtb3J5Q2FjaGVJbXBsPFQ+IGNyZWF0ZU5ld0NhY2hlKCBTdHJpbmcgY2FjaGVJZCwgQ2xhc3M8VD4gdmFsdWVUeXBlICkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgTWVtb3J5Q2FjaGVJbXBsPD4oIGNhY2hlSWQsIG5ldyBDb25jdXJyZW50SGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKSwgdmFsdWVUeXBlICk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcmV0dXJuQ2FjaGUoIENhY2hlPD8+IGNhY2hlICkKKyAgICB7CisgICAgICAgIE1lbW9yeUNhY2hlSW1wbDw/PiBtZW1vcnkgPSAoTWVtb3J5Q2FjaGVJbXBsPD8+KSBjYWNoZTsKKyAgICAgICAgbWVtb3J5LmRlY1JlZkNvdW50KCk7CisgICAgICAgIGlmKCBtZW1vcnkuaXNOb3RVc2VkKCkgKQorICAgICAgICB7CisgICAgICAgICAgICBjYWNoZXMucmVtb3ZlKCBtZW1vcnkuY2FjaGVJZCgpICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhY3RpdmF0ZVNlcnZpY2UoKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBjYWNoZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBwYXNzaXZhdGVTZXJ2aWNlKCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgY2FjaGVzLmNsZWFyKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE1lbW9yeUNhY2hlSW1wbDw/PiBzaW5nbGVDYWNoZSgpCisgICAgeworICAgICAgICByZXR1cm4gc2luZ2xlKCBjYWNoZXMudmFsdWVzKCkgKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9jYWNoZS9NZW1vcnlDYWNoZVBvb2xTZXJ2aWNlLmphdmEgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9jYWNoZS9NZW1vcnlDYWNoZVBvb2xTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiNWM5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2NhY2hlL01lbW9yeUNhY2hlUG9vbFNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai50ZXN0LmNhY2hlOworCitpbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKK2ltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQWN0aXZhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5zcGkuY2FjaGUuQ2FjaGVQb29sOworCisvKioKKyAqIEluLU1lbW9yeSBDYWNoZVBvb2wgU2VydmljZS4KKyAqLworQE1peGlucyggTWVtb3J5Q2FjaGVQb29sTWl4aW4uY2xhc3MgKQorcHVibGljIGludGVyZmFjZSBNZW1vcnlDYWNoZVBvb2xTZXJ2aWNlCisgICAgZXh0ZW5kcyBDYWNoZVBvb2wsIFNlcnZpY2VBY3RpdmF0aW9uCit7CisgICAgLyoqCisgICAgICogR2V0IHRoZSBzaW5nbGUgQ2FjaGUgb2YgdGhpcyBDYWNoZVBvb2wuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBzaW5nbGUgQ2FjaGUgb2YgdGhpcyBDYWNoZVBvb2wKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBubyBvciBtb3JlIHRoYW4gb25lIENhY2hlIGlzIHByZXNlbnQgaW4gdGhlIENhY2hlUG9vbAorICAgICAqLworICAgIE1lbW9yeUNhY2hlSW1wbDw/PiBzaW5nbGVDYWNoZSgpOworfQpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvY2FjaGUvcGFja2FnZS5odG1sIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvY2FjaGUvcGFja2FnZS5odG1sCmluZGV4IDQ1NzMwYWIuLmJlODY3YTcgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2NhY2hlL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9jYWNoZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkNhY2hlIFNQSSBUZXN0IFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2VudGl0eS9BYnN0cmFjdENvbmZpZ3VyYXRpb25EZXNlcmlhbGl6YXRpb25UZXN0LmphdmEgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9lbnRpdHkvQWJzdHJhY3RDb25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmI3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9lbnRpdHkvQWJzdHJhY3RDb25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworcGFja2FnZSBvcmcucWk0ai50ZXN0LmVudGl0eTsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29uZmlndXJhdGlvbi5Db25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHk7CitpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5UaGlzOworaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7CitpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OworaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VSZWZlcmVuY2U7CitpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlU2VyaWFsaXphdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmVudGl0eXN0b3JlLm1lbW9yeS5NZW1vcnlFbnRpdHlTdG9yZVNlcnZpY2U7CitpbXBvcnQgb3JnLnFpNGouc3BpLnV1aWQuVXVpZElkZW50aXR5R2VuZXJhdG9yU2VydmljZTsKK2ltcG9ydCBvcmcucWk0ai50ZXN0LkFic3RyYWN0UWk0alRlc3Q7CitpbXBvcnQgb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLm9yZ2pzb24uT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvblNlcnZpY2U7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNFcXVhbC5lcXVhbFRvOworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jc051bGwubm90TnVsbFZhbHVlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRoYXQ7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvbmZpZ3VyYXRpb25EZXNlcmlhbGl6YXRpb25UZXN0IGV4dGVuZHMgQWJzdHJhY3RRaTRqVGVzdAoreworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICB7CisvLyAgICAgICAgTW9kdWxlQXNzZW1ibHkgc3RvcmFnZU1vZHVsZSA9IG1vZHVsZS5sYXllcigpLm1vZHVsZSggInN0b3JhZ2UiICk7CisgICAgICAgIE1vZHVsZUFzc2VtYmx5IHN0b3JhZ2VNb2R1bGUgPSBtb2R1bGU7IC8vIERpc2FibGUgdGhlIG1vcmUgY29tcGxleCBzZXQgdXAuIFRoZSBlbnRpcmUgdmFsdWUgc2VyaWFsaXphdGlvbiBoYXMgZ290dGVuIHRoZSBkZXNlcmlhbGl6YXRpb24gdHlwZSBsb29rdXAgcHJvYmxlbSB3cm9uZy4KKyAgICAgICAgbW9kdWxlLmNvbmZpZ3VyYXRpb25zKCBDb25maWdTZXJpYWxpemF0aW9uQ29uZmlnLmNsYXNzICk7CisgICAgICAgIG1vZHVsZS52YWx1ZXMoIEhvc3QuY2xhc3MgKTsKKyAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBNeVNlcnZpY2UuY2xhc3MgKS5pZGVudGlmaWVkQnkoICJjb25maWd0ZXN0IiApOworICAgICAgICBzdG9yYWdlTW9kdWxlLnNlcnZpY2VzKCBNZW1vcnlFbnRpdHlTdG9yZVNlcnZpY2UuY2xhc3MgKS52aXNpYmxlSW4oIFZpc2liaWxpdHkubGF5ZXIgKTsKKyAgICAgICAgc3RvcmFnZU1vZHVsZS5zZXJ2aWNlcyggT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvblNlcnZpY2UuY2xhc3MgKS50YWdnZWRXaXRoKCBWYWx1ZVNlcmlhbGl6YXRpb24uRm9ybWF0cy5KU09OICk7CisgICAgICAgIHN0b3JhZ2VNb2R1bGUuc2VydmljZXMoIFV1aWRJZGVudGl0eUdlbmVyYXRvclNlcnZpY2UuY2xhc3MgKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdpdmVuU2VydmljZVdoZW5Jbml0aWFsaXppbmdFeHBlY3RDb3JyZWN0RGVzZXJpYWxpemF0aW9uKCkKKyAgICB7CisgICAgICAgIFNlcnZpY2VSZWZlcmVuY2U8TXlTZXJ2aWNlPiByZWYgPSBtb2R1bGUuZmluZFNlcnZpY2UoIE15U2VydmljZS5jbGFzcyApOworICAgICAgICBhc3NlcnRUaGF0KCByZWYsIG5vdE51bGxWYWx1ZSgpICk7CisgICAgICAgIGFzc2VydFRoYXQoIHJlZi5pc0F2YWlsYWJsZSgpLCBlcXVhbFRvKCB0cnVlICkgKTsKKyAgICAgICAgTXlTZXJ2aWNlIG15U2VydmljZSA9IHJlZi5nZXQoKTsKKyAgICAgICAgYXNzZXJ0VGhhdCggbXlTZXJ2aWNlLCBub3ROdWxsVmFsdWUoKSApOworICAgICAgICBhc3NlcnRUaGF0KCBteVNlcnZpY2UubmFtZSgpLCBlcXVhbFRvKCAibWFpbiIgKSApOworICAgICAgICBhc3NlcnRUaGF0KCBteVNlcnZpY2UuaG9zdElwKCksIGVxdWFsVG8oICIxMi4yMy4zNC40NSIgKSApOworICAgICAgICBhc3NlcnRUaGF0KCBteVNlcnZpY2UuaG9zdFBvcnQoKSwgZXF1YWxUbyggMTIzNCApICk7CisgICAgfQorCisgICAgQE1peGlucyggTXlTZXJ2aWNlTWl4aW4uY2xhc3MgKQorICAgIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXJ2aWNlCisgICAgeworCisgICAgICAgIFN0cmluZyBob3N0SXAoKTsKKworICAgICAgICBJbnRlZ2VyIGhvc3RQb3J0KCk7CisKKyAgICAgICAgU3RyaW5nIG5hbWUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE15U2VydmljZU1peGluCisgICAgICAgIGltcGxlbWVudHMgTXlTZXJ2aWNlCisgICAgeworCisgICAgICAgIEBUaGlzCisgICAgICAgIHByaXZhdGUgQ29uZmlndXJhdGlvbjxDb25maWdTZXJpYWxpemF0aW9uQ29uZmlnPiBjb25maWc7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgaG9zdElwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5nZXQoKS5ob3N0KCkuZ2V0KCkuaXAoKS5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgSW50ZWdlciBob3N0UG9ydCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb25maWcuZ2V0KCkuaG9zdCgpLmdldCgpLnBvcnQoKS5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIG5hbWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29uZmlnLmdldCgpLm5hbWUoKS5nZXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBpbnRlcmZhY2UgQ29uZmlnU2VyaWFsaXphdGlvbkNvbmZpZyBleHRlbmRzIElkZW50aXR5CisgICAgeworICAgICAgICBQcm9wZXJ0eTxTdHJpbmc+IG5hbWUoKTsKKworICAgICAgICBQcm9wZXJ0eTxIb3N0PiBob3N0KCk7CisgICAgfQorCisgICAgcHVibGljIGludGVyZmFjZSBIb3N0CisgICAgeworICAgICAgICBQcm9wZXJ0eTxTdHJpbmc+IGlwKCk7CisKKyAgICAgICAgUHJvcGVydHk8SW50ZWdlcj4gcG9ydCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2VudGl0eS9BYnN0cmFjdEVudGl0eVN0b3JlVGVzdC5qYXZhIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvZW50aXR5L0Fic3RyYWN0RW50aXR5U3RvcmVUZXN0LmphdmEKaW5kZXggNDU0OTgyNi4uZjc4ZjkzMiAxMDA2NDQKLS0tIGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvZW50aXR5L0Fic3RyYWN0RW50aXR5U3RvcmVUZXN0LmphdmEKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvZW50aXR5L0Fic3RyYWN0RW50aXR5U3RvcmVUZXN0LmphdmEKQEAgLTUzLDYgKzUzLDcgQEAKIGltcG9ydCBvcmcucWk0ai50ZXN0LkFic3RyYWN0UWk0alRlc3Q7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5lcXVhbFRvOworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzLmlzOwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzLm5vdDsKIGltcG9ydCBzdGF0aWMgb3JnLmpvZGEudGltZS5EYXRlVGltZVpvbmUuVVRDOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRoYXQ7CkBAIC00NTUsNiArNDU2LDMyIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdpdmVuRW50aXR5U3RvcmVkTG9hZGVkQ2hhbmdlZFdoZW5Vbml0T2ZXb3JrRGlzY2FyZHNUaGVuRG9udFN0b3JlU3RhdGUoKQorICAgICAgICB0aHJvd3MgVW5pdE9mV29ya0NvbXBsZXRpb25FeGNlcHRpb24KKyAgICB7CisgICAgICAgIFVuaXRPZldvcmsgdW5pdE9mV29yayA9IG1vZHVsZS5uZXdVbml0T2ZXb3JrKCk7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgaWRlbnRpdHkgPSBjcmVhdGVFbnRpdHkoIHVuaXRPZldvcmsgKS5pZGVudGl0eSgpLmdldCgpOworICAgICAgICAgICAgdW5pdE9mV29yay5jb21wbGV0ZSgpOworCisgICAgICAgICAgICB1bml0T2ZXb3JrID0gbW9kdWxlLm5ld1VuaXRPZldvcmsoKTsKKyAgICAgICAgICAgIFRlc3RFbnRpdHkgZW50aXR5ID0gdW5pdE9mV29yay5nZXQoIFRlc3RFbnRpdHkuY2xhc3MsIGlkZW50aXR5ICk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KCBlbnRpdHkuaW50VmFsdWUoKS5nZXQoKSwgaXMoIDQyICkgKTsKKyAgICAgICAgICAgIGVudGl0eS5pbnRWYWx1ZSgpLnNldCggMjMgKTsKKyAgICAgICAgICAgIHVuaXRPZldvcmsuZGlzY2FyZCgpOworCisgICAgICAgICAgICB1bml0T2ZXb3JrID0gbW9kdWxlLm5ld1VuaXRPZldvcmsoKTsKKyAgICAgICAgICAgIGVudGl0eSA9IHVuaXRPZldvcmsuZ2V0KCBUZXN0RW50aXR5LmNsYXNzLCBpZGVudGl0eSApOworICAgICAgICAgICAgYXNzZXJ0VGhhdCggZW50aXR5LmludFZhbHVlKCkuZ2V0KCksIGlzKCA0MiApICk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseQorICAgICAgICB7CisgICAgICAgICAgICB1bml0T2ZXb3JrLmRpc2NhcmQoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEVudGl0eQogICAgICAgICBleHRlbmRzIEVudGl0eUNvbXBvc2l0ZQogICAgIHsKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2VudGl0eS9wYWNrYWdlLmh0bWwgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9lbnRpdHkvcGFja2FnZS5odG1sCmluZGV4IDI1NWQ3ZTUuLmFiYWQyNjkgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2VudGl0eS9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvZW50aXR5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RW50aXR5U3RvcmUgU1BJIFRlc3QgU3VwcG9ydC48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvaW5kZXhpbmcvbW9kZWwvZW50aXRpZXMvcGFja2FnZS5odG1sIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvaW5kZXhpbmcvbW9kZWwvZW50aXRpZXMvcGFja2FnZS5odG1sCmluZGV4IGRmNGIzYTguLmIxOWNjNTkgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2luZGV4aW5nL21vZGVsL2VudGl0aWVzL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9pbmRleGluZy9tb2RlbC9lbnRpdGllcy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkluZGV4L1F1ZXJ5IFNQSSBUZXN0IFN1cHBvcnQgLSBFbnRpdGllcy48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvaW5kZXhpbmcvbW9kZWwvcGFja2FnZS5odG1sIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvaW5kZXhpbmcvbW9kZWwvcGFja2FnZS5odG1sCmluZGV4IDZkYWRkOTkuLmM0YWNiMTMgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2luZGV4aW5nL21vZGVsL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9pbmRleGluZy9tb2RlbC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkluZGV4L1F1ZXJ5IFNQSSBUZXN0IFN1cHBvcnQgLSBNb2RlbC48L2gyPgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvaW5kZXhpbmcvcGFja2FnZS5odG1sIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvaW5kZXhpbmcvcGFja2FnZS5odG1sCmluZGV4IGIwZTIxZTIuLmUyNmRmOWEgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2luZGV4aW5nL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9pbmRleGluZy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkluZGV4L1F1ZXJ5IFNQSSBUZXN0IFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L21vY2svTW9ja1BsYXllckNvbmNlcm4uamF2YSBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L21vY2svTW9ja1BsYXllckNvbmNlcm4uamF2YQppbmRleCA4ZWY5OTZlLi42OGQyMTExIDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9tb2NrL01vY2tQbGF5ZXJDb25jZXJuLmphdmEKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvbW9jay9Nb2NrUGxheWVyQ29uY2Vybi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnRlc3QubW9jazsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvbW9jay9pbnRlcm5hbC9wYWNrYWdlLmh0bWwgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9tb2NrL2ludGVybmFsL3BhY2thZ2UuaHRtbAppbmRleCA5OWJiOGQ1Li4yNDkyM2IxIDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9tb2NrL2ludGVybmFsL3BhY2thZ2UuaHRtbAorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9tb2NrL2ludGVybmFsL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+VGVzdCBTdXBwb3J0IENvbXBvc2l0ZXMgTW9ja2luZyBJbnRlcm5hbC9Qcml2YXRlIHBhY2thZ2UuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L21vY2svcGFja2FnZS5odG1sIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvbW9jay9wYWNrYWdlLmh0bWwKaW5kZXggYmMwNTFkYS4uMjQzMWFmMCAxMDA2NDQKLS0tIGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvbW9jay9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvbW9jay9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlRlc3QgU3VwcG9ydCBDb21wb3NpdGVzIE1vY2tpbmcuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3BhY2thZ2UuaHRtbCBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3BhY2thZ2UuaHRtbAppbmRleCBhNTAyZTVkLi44ZTQ2M2FjIDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvcGFja2FnZS5odG1sCkBAIC0xLDUgKzEsMjEgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+Ci0gICAgICAgIDxoMj5RaTRqIFRlc3QgU3VwcG9ydC48L2gyPgorICAgICAgICA8aDI+QXBhY2hlIFplc3TihKIgVGVzdCBTdXBwb3J0LjwvaDI+CiAgICAgPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdXRpbC9Bc3N1bWUuamF2YSBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3V0aWwvQXNzdW1lLmphdmEKaW5kZXggOGQ3ZTQ5MS4uZjYwYjBkMyAxMDA2NDQKLS0tIGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdXRpbC9Bc3N1bWUuamF2YQorKysgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC91dGlsL0Fzc3VtZS5qYXZhCkBAIC00NywxMCArNDcsMTcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzdW1lRGlzcGxheVByZXNlbnQoKQogICAgIHsKLSAgICAgICAgYXNzdW1lRmFsc2UoIEdyYXBoaWNzRW52aXJvbm1lbnQuZ2V0TG9jYWxHcmFwaGljc0Vudmlyb25tZW50KCkuaXNIZWFkbGVzc0luc3RhbmNlKCkgKTsKLSAgICAgICAgU3RyaW5nIGRpc3BsYXkgPSBTeXN0ZW0uZ2V0ZW52KCAiRElTUExBWSIgKTsKLSAgICAgICAgYXNzdW1lVGhhdCggZGlzcGxheSwgaXMoIG5vdE51bGxWYWx1ZSgpICkgKTsKLSAgICAgICAgYXNzdW1lVHJ1ZSggZGlzcGxheS5sZW5ndGgoKSA+IDAgKTsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc3VtZUZhbHNlKCBHcmFwaGljc0Vudmlyb25tZW50LmdldExvY2FsR3JhcGhpY3NFbnZpcm9ubWVudCgpLmlzSGVhZGxlc3NJbnN0YW5jZSgpICk7CisgICAgICAgICAgICBTdHJpbmcgZGlzcGxheSA9IFN5c3RlbS5nZXRlbnYoICJESVNQTEFZIiApOworICAgICAgICAgICAgYXNzdW1lVGhhdCggZGlzcGxheSwgaXMoIG5vdE51bGxWYWx1ZSgpICkgKTsKKyAgICAgICAgICAgIGFzc3VtZVRydWUoIGRpc3BsYXkubGVuZ3RoKCkgPiAwICk7CisgICAgICAgIH0gY2F0Y2goIFVuc2F0aXNmaWVkTGlua0Vycm9yIGUgKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBhc3N1bWluZyB0aGF0IHRoaXMgaXMgY2F1c2VkIGR1ZSB0byBtaXNzaW5nIHZpZGVvIHN1YnN5c3RlbSwgb3Igc2ltaWxhcgorICAgICAgICAgICAgYXNzdW1lTm9FeGNlcHRpb24oICJHcmFoaWNzIHN5c3RlbSBpcyBtaXNzaW5nPyIsIGUgKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtNjYsMTEgKzczLDEyIEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIFNvY2tldEV4Y2VwdGlvbiBleCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGFzc3VtZUZhbHNlKCB0cnVlICk7CisgICAgICAgICAgICBhc3N1bWVOb0V4Y2VwdGlvbiggZXggKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgorICAgICAqIC8vIFRPRE86IHFpNGoub3JnIHdpbGwgc29vbiBnbyBkb3duLgogICAgICAqIElmIGNhbGxlZCBvbiBhIHJ1bnRpbWUgd2l0aCBubyBhY2Nlc3MgdG8gcWk0ai5vcmcgb24gcG9ydCA4MCwgdGhlIHRlc3Qgd2lsbCBoYWx0IGFuZCBiZSBpZ25vcmVkLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3N1bWVDb25uZWN0aXZpdHkoKQpAQCAtOTIsNyArMTAwLDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXRjaCggSU9FeGNlcHRpb24gZXggKQogICAgICAgICB7Ci0gICAgICAgICAgICBhc3N1bWVGYWxzZSggdHJ1ZSApOworICAgICAgICAgICAgYXNzdW1lTm9FeGNlcHRpb24oIGV4ICk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3V0aWwvcGFja2FnZS5odG1sIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdXRpbC9wYWNrYWdlLmh0bWwKaW5kZXggNzAyZjY5Mi4uZDc0ZWZiMiAxMDA2NDQKLS0tIGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdXRpbC9wYWNrYWdlLmh0bWwKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdXRpbC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlRlc3QgU3VwcG9ydCBVdGlsaXRpZXMuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3ZhbHVlL0Fic3RyYWN0Q29sbGVjdGlvblNlcmlhbGl6YXRpb25UZXN0LmphdmEgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC92YWx1ZS9BYnN0cmFjdENvbGxlY3Rpb25TZXJpYWxpemF0aW9uVGVzdC5qYXZhCmluZGV4IDVjNThjMmEuLjNhMDRlZTUgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3ZhbHVlL0Fic3RyYWN0Q29sbGVjdGlvblNlcmlhbGl6YXRpb25UZXN0LmphdmEKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdmFsdWUvQWJzdHJhY3RDb2xsZWN0aW9uU2VyaWFsaXphdGlvblRlc3QuamF2YQpAQCAtNjksNiArNjksNyBAQAogICAgIHsKICAgICAgICAgbW9kdWxlLmluamVjdFRvKCB0aGlzICk7CiAgICAgfQorCiAgICAgQFNlcnZpY2UKICAgICBAU3VwcHJlc3NXYXJuaW5ncyggIlByb3RlY3RlZEZpZWxkIiApCiAgICAgcHJvdGVjdGVkIFZhbHVlU2VyaWFsaXphdGlvbiB2YWx1ZVNlcmlhbGl6YXRpb247CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC92YWx1ZS9BYnN0cmFjdFBsYWluVmFsdWVTZXJpYWxpemF0aW9uVGVzdC5qYXZhIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdmFsdWUvQWJzdHJhY3RQbGFpblZhbHVlU2VyaWFsaXphdGlvblRlc3QuamF2YQppbmRleCBhOTliMWYyLi4yMThjY2E2IDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC92YWx1ZS9BYnN0cmFjdFBsYWluVmFsdWVTZXJpYWxpemF0aW9uVGVzdC5qYXZhCisrKyBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3ZhbHVlL0Fic3RyYWN0UGxhaW5WYWx1ZVNlcmlhbGl6YXRpb25UZXN0LmphdmEKQEAgLTE5MCw2ICsxOTAsOCBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgZ2l2ZW5EYXRlVGltZVZhbHVlV2hlblNlcmlhbGl6aW5nQW5kRGVzZXJpYWxpemluZ0V4cGVjdEVxdWFscygpCiAgICAgeworICAgICAgICAvLyBXZSBzcGVjaWZ5IHRoZSBUaW1lWm9uZSBleHBsaWNpdGVseSBoZXJlIHNvIHRoYXQgc2VyaWFsaXplZC9kZXNlcmlhbGl6ZWQgaXMgZXF1YWxzCisgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vSm9kYU9yZy9qb2RhLXRpbWUvaXNzdWVzLzEwNgogICAgICAgICBTdHJpbmcgc2VyaWFsaXplZCA9IHZhbHVlU2VyaWFsaXphdGlvbi5zZXJpYWxpemUoIG5ldyBEYXRlVGltZSggIjIwMjAtMDMtMDRUMTM6MjQ6MzUiLCBmb3JPZmZzZXRIb3VycyggMSApICkgKTsKICAgICAgICAgYXNzZXJ0VGhhdCggc2VyaWFsaXplZCwgZXF1YWxUbyggIjIwMjAtMDMtMDRUMTM6MjQ6MzUuMDAwKzAxOjAwIiApICk7CiAgICAgICAgIERhdGVUaW1lIGRlc2VyaWFsaXplZCA9IHZhbHVlU2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZSggRGF0ZVRpbWUuY2xhc3MsIHNlcmlhbGl6ZWQgKTsKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3ZhbHVlL0Fic3RyYWN0VmFsdWVDb21wb3NpdGVTZXJpYWxpemF0aW9uVGVzdC5qYXZhIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdmFsdWUvQWJzdHJhY3RWYWx1ZUNvbXBvc2l0ZVNlcmlhbGl6YXRpb25UZXN0LmphdmEKaW5kZXggOTMzNTAzYy4uODI5NDdlOSAxMDA2NDQKLS0tIGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdmFsdWUvQWJzdHJhY3RWYWx1ZUNvbXBvc2l0ZVNlcmlhbGl6YXRpb25UZXN0LmphdmEKKysrIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdmFsdWUvQWJzdHJhY3RWYWx1ZUNvbXBvc2l0ZVNlcmlhbGl6YXRpb25UZXN0LmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IG9yZy5qb2RhLnRpbWUuRGF0ZVRpbWU7CitpbXBvcnQgb3JnLmpvZGEudGltZS5EYXRlVGltZVpvbmU7CiBpbXBvcnQgb3JnLmpvZGEudGltZS5Mb2NhbERhdGU7CiBpbXBvcnQgb3JnLmpvZGEudGltZS5Mb2NhbERhdGVUaW1lOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CkBAIC0zMiw4ICszMywxMCBAQAogaW1wb3J0IG9yZy5qdW5pdC5ydWxlcy5UZXN0TmFtZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLk1hbnlBc3NvY2lhdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTmFtZWRBc3NvY2lhdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLk9wdGlvbmFsOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVXNlRGVmYXVsdHM7CitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5QnVpbGRlcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKQEAgLTQ5LDggKzUyLDYgQEAKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CiBpbXBvcnQgb3JnLnFpNGoudGVzdC5BYnN0cmFjdFFpNGpUZXN0OwogaW1wb3J0IG9yZy5xaTRqLnRlc3QuRW50aXR5VGVzdEFzc2VtYmxlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuZXF1YWxUbzsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pczsKQEAgLTU5LDE3ICs2MCwxMyBAQAogLyoqCiAgKiBBc3NlcnQgdGhhdCBWYWx1ZVNlcmlhbGl6YXRpb24gYmVoYXZpb3VyIG9uIFZhbHVlQ29tcG9zaXRlcyBpcyBjb3JyZWN0LgogICovCi0vLyBUT0RPIEFzc2VydCBBc3NvY2lhdGlvbiBhbmQgTWFueUFzc29jaWF0aW9uIHNlcmlhbGl6YXRpb24gYmVoYXZpb3VyIQogLy8gVE9ETyBBc3NlcnQgQXJyYXlzIGJlaGF2aW91ciEKIC8vIFRPRE8gQXNzZXJ0IEdlbmVyaWNzIGJlaGF2aW91ciEKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbHVlQ29tcG9zaXRlU2VyaWFsaXphdGlvblRlc3QKICAgICBleHRlbmRzIEFic3RyYWN0UWk0alRlc3QKIHsKLQogICAgIEBSdWxlCi0gICAgQFN1cHByZXNzV2FybmluZ3MoICJQdWJsaWNGaWVsZCIgKQogICAgIHB1YmxpYyBUZXN0TmFtZSB0ZXN0TmFtZSA9IG5ldyBUZXN0TmFtZSgpOwotICAgIHByaXZhdGUgTG9nZ2VyIGxvZzsKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQpAQCAtNzcsMTggKzc0LDE4IEBACiAgICAgewogICAgICAgICBtb2R1bGUudmFsdWVzKCBTb21lVmFsdWUuY2xhc3MsIEFub3RoZXJWYWx1ZS5jbGFzcywgRm9vVmFsdWUuY2xhc3MsIEN1c3RvbUZvb1ZhbHVlLmNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpY0NvbGxlY3Rpb24uY2xhc3MgLyosIFNwZWNpZmljVmFsdWUuY2xhc3MsIEdlbmVyaWNWYWx1ZS5jbGFzcyAqLyApOwotICAgICAgICBuZXcgRW50aXR5VGVzdEFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKKworICAgICAgICBuZXcgRW50aXR5VGVzdEFzc2VtYmxlcigpLnZpc2libGVJbiggVmlzaWJpbGl0eS5sYXllciApLmFzc2VtYmxlKCBtb2R1bGUubGF5ZXIoKS5tb2R1bGUoICJwZXJzaXN0ZW5jZSIgKSApOwogICAgICAgICBtb2R1bGUuZW50aXRpZXMoIEJhckVudGl0eS5jbGFzcyApOwogICAgIH0KIAogICAgIEBCZWZvcmUKICAgICBwdWJsaWMgdm9pZCBiZWZvcmUoKQogICAgIHsKLSAgICAgICAgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoIHRlc3ROYW1lLmdldE1ldGhvZE5hbWUoKSApOwogICAgICAgICBtb2R1bGUuaW5qZWN0VG8oIHRoaXMgKTsKICAgICB9CisKICAgICBAU2VydmljZQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAiUHJvdGVjdGVkRmllbGQiICkKICAgICBwcm90ZWN0ZWQgVmFsdWVTZXJpYWxpemF0aW9uIHZhbHVlU2VyaWFsaXphdGlvbjsKIAogICAgIEBUZXN0CkBAIC0xMDUsOCArMTAyLDYgQEAKICAgICAgICAgICAgIHZhbHVlU2VyaWFsaXphdGlvbi5zZXJpYWxpemUoIHNvbWUsIG91dHB1dCApOwogICAgICAgICAgICAgU3RyaW5nIHN0YXRlU3RyaW5nID0gb3V0cHV0LnRvU3RyaW5nKCAiVVRGLTgiICk7CiAKLSAgICAgICAgICAgIGxvZy5pbmZvKCAiQ29tcGxleCBWYWx1ZUNvbXBvc2l0ZSBzdGF0ZTpcblxue31cbiIsIHN0YXRlU3RyaW5nICk7Ci0KICAgICAgICAgICAgIC8vIERlc2VyaWFsaXplIHVzaW5nIE1vZHVsZSBBUEkKICAgICAgICAgICAgIFNvbWVWYWx1ZSBzb21lMiA9IG1vZHVsZS5uZXdWYWx1ZUZyb21TZXJpYWxpemVkU3RhdGUoIFNvbWVWYWx1ZS5jbGFzcywgc3RhdGVTdHJpbmcgKTsKIApAQCAtMTIyLDcgKzExNyw2IEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvZy5lcnJvciggZXguZ2V0TWVzc2FnZSgpLCBleCApOwogICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgIH0KICAgICAgICAgZmluYWxseQpAQCAtMTQ4LDI0ICsxNDIsMjAgQEAKICAgICAgICAgc3BlY2lmaWNDb2xQcm90by5nZW5lcmljTGlzdCgpLnNldCggZ2VuZXJpY0xpc3QgKTsKICAgICAgICAgcHJvdG8uc3BlY2lmaWNDb2xsZWN0aW9uKCkuc2V0KCBzcGVjaWZpY0NvbEJ1aWxkZXIubmV3SW5zdGFuY2UoKSApOwogCi0gICAgICAgIC8qCi0gICAgICAgICBWYWx1ZUJ1aWxkZXI8U3BlY2lmaWNWYWx1ZT4gc3BlY2lmaWNWYWx1ZSA9IG1vZHVsZS5uZXdWYWx1ZUJ1aWxkZXIoU3BlY2lmaWNWYWx1ZS5jbGFzcyk7Ci0gICAgICAgICBzcGVjaWZpY1ZhbHVlLnByb3RvdHlwZSgpLml0ZW0oKS5zZXQoIkZvbyIpOwotICAgICAgICAgcHJvdG8uc3BlY2lmaWNWYWx1ZSgpLnNldChzcGVjaWZpY1ZhbHVlLm5ld0luc3RhbmNlKCkpOwotICAgICAgICAgKi8KLSAgICAgICAgVmFsdWVCdWlsZGVyPEFub3RoZXJWYWx1ZT4gdmFsdWVCdWlsZGVyID0gbW9kdWxlLm5ld1ZhbHVlQnVpbGRlciggQW5vdGhlclZhbHVlLmNsYXNzICk7Ci0gICAgICAgIHZhbHVlQnVpbGRlci5wcm90b3R5cGUoKS52YWwxKCkuc2V0KCAiRm9vIiApOwotICAgICAgICB2YWx1ZUJ1aWxkZXIucHJvdG90eXBlRm9yKCBBbm90aGVyVmFsdWVJbnRlcm5hbFN0YXRlLmNsYXNzICkudmFsMigpLnNldCggIkJhciIgKTsKLSAgICAgICAgQW5vdGhlclZhbHVlIGFub3RoZXJWYWx1ZSA9IHZhbHVlQnVpbGRlci5uZXdJbnN0YW5jZSgpOworICAgICAgICBBbm90aGVyVmFsdWUgYW5vdGhlclZhbHVlMSA9IGNyZWF0ZUFub3RoZXJWYWx1ZSggIkZvbyIsICJCYXIiICk7CisgICAgICAgIEFub3RoZXJWYWx1ZSBhbm90aGVyVmFsdWUyID0gY3JlYXRlQW5vdGhlclZhbHVlKCAiSGFiYmEiLCAiWm91dFpvdXQiICk7CisgICAgICAgIEFub3RoZXJWYWx1ZSBhbm90aGVyVmFsdWUzID0gY3JlYXRlQW5vdGhlclZhbHVlKCAiTmljbGFzIiwgIkhlZGhtYW4iICk7CiAKICAgICAgICAgLy8gRklYTUUgU29tZSBDb250cm9sIENoYXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEpTT04gbm9yIGluIFhNTCwgd2hhdCBzaG91bGQgd2UgZG8gYWJvdXQgaXQ/Ci0gICAgICAgIC8vIFNob3VsZCBRaTRqIENvcmUgZW5zdXJlIHRoZSBjaGFycyB1c2VkIGluIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgd2hvbGUgc3RhY2s/CisgICAgICAgIC8vIFNob3VsZCBaZXN0IENvcmUgZW5zdXJlIHRoZSBjaGFycyB1c2VkIGluIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgd2hvbGUgc3RhY2s/CiAgICAgICAgIC8vIHByb3RvLnN0cmluZygpLnNldCggIkZvb1wiQmFyXCJcblRlc3RcZlx0XGIiICk7CiAgICAgICAgIHByb3RvLnN0cmluZygpLnNldCggIkZvb1wiQmFyXCJcblRlc3RcdCIgKTsKICAgICAgICAgcHJvdG8uc3RyaW5nMigpLnNldCggIi9Gb28vYmFyIiApOwogICAgICAgICBwcm90by5udW1iZXIoKS5zZXQoIDQyTCApOwogICAgICAgICBwcm90by5kYXRlKCkuc2V0KCBuZXcgRGF0ZSgpICk7Ci0gICAgICAgIHByb3RvLmRhdGVUaW1lKCkuc2V0KCBuZXcgRGF0ZVRpbWUoKSApOworICAgICAgICAvLyBXZSBzcGVjaWZ5IHRoZSBUaW1lWm9uZSBleHBsaWNpdGVseSBoZXJlIHNvIHRoYXQgc2VyaWFsaXplZC9kZXNlcmlhbGl6ZWQgaXMgZXF1YWxzCisgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vSm9kYU9yZy9qb2RhLXRpbWUvaXNzdWVzLzEwNgorICAgICAgICBwcm90by5kYXRlVGltZSgpLnNldCggbmV3IERhdGVUaW1lKCAiMjAyMC0wMy0wNFQxMzoyNDozNSIsIERhdGVUaW1lWm9uZS5mb3JPZmZzZXRIb3VycyggMSApICkgKTsKICAgICAgICAgcHJvdG8ubG9jYWxEYXRlKCkuc2V0KCBuZXcgTG9jYWxEYXRlKCkgKTsKICAgICAgICAgcHJvdG8ubG9jYWxEYXRlVGltZSgpLnNldCggbmV3IExvY2FsRGF0ZVRpbWUoKSApOwogICAgICAgICBwcm90by5lbnRpdHlSZWZlcmVuY2UoKS5zZXQoIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggIjEyMzQ1IiApICk7CkBAIC0xNzksOCArMTY5LDkgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gcHJvdG8uc3RyaW5nSW50TWFwKCkuZ2V0KCkucHV0KCAiYmFyIiwgNjcgKTsKIAotICAgICAgICBwcm90by5zdHJpbmdWYWx1ZU1hcCgpLmdldCgpLnB1dCggImZvbyIsIGFub3RoZXJWYWx1ZSApOwotICAgICAgICBwcm90by5hbm90aGVyKCkuc2V0KCBhbm90aGVyVmFsdWUgKTsKKyAgICAgICAgcHJvdG8uc3RyaW5nVmFsdWVNYXAoKS5nZXQoKS5wdXQoICJmb28iLCBhbm90aGVyVmFsdWUxICk7CisgICAgICAgIHByb3RvLmFub3RoZXIoKS5zZXQoIGFub3RoZXJWYWx1ZTEgKTsKKyAgICAgICAgLy8gcHJvdG8uYXJyYXlPZlZhbHVlcygpLnNldCggbmV3IEFub3RoZXJWYWx1ZVtdIHsgYW5vdGhlclZhbHVlMSwgYW5vdGhlclZhbHVlMiwgYW5vdGhlclZhbHVlMyB9ICk7CiAgICAgICAgIHByb3RvLnNlcmlhbGl6YWJsZSgpLnNldCggbmV3IFNlcmlhbGl6YWJsZU9iamVjdCgpICk7CiAgICAgICAgIHByb3RvLmZvbygpLnNldCggbW9kdWxlLm5ld1ZhbHVlKCBGb29WYWx1ZS5jbGFzcyApICk7CiAgICAgICAgIHByb3RvLmZvb1ZhbHVlKCkuc2V0KCBtb2R1bGUubmV3VmFsdWUoIEZvb1ZhbHVlLmNsYXNzICkgKTsKQEAgLTIwNSwxMCArMTk2LDIyIEBACiAgICAgICAgIHByb3RvLmJhck1hbnlBc3NvY2lhdGlvbigpLmFkZCggYnVpbGRCYXJFbnRpdHkoICJiYXphciBUV08gaW4gYmFyTWFueUFzc29jaWF0aW9uIiApICk7CiAgICAgICAgIHByb3RvLmJhckVudGl0eU1hbnlBc3NvY2lhdGlvbigpLmFkZCggYnVpbGRCYXJFbnRpdHkoICJiYXphciBPTkUgaW4gYmFyRW50aXR5TWFueUFzc29jaWF0aW9uIiApICk7CiAgICAgICAgIHByb3RvLmJhckVudGl0eU1hbnlBc3NvY2lhdGlvbigpLmFkZCggYnVpbGRCYXJFbnRpdHkoICJiYXphciBUV08gaW4gYmFyRW50aXR5TWFueUFzc29jaWF0aW9uIiApICk7CisgICAgICAgIHByb3RvLmJhck5hbWVkQXNzb2NpYXRpb24oKS5wdXQoICJiYXphciIsIGJ1aWxkQmFyRW50aXR5KCAiYmF6YXIgaW4gYmFyTmFtZWRBc3NvY2lhdGlvbiIgKSApOworICAgICAgICBwcm90by5iYXJOYW1lZEFzc29jaWF0aW9uKCkucHV0KCAiY2F0aGVkcmFsIiwgYnVpbGRCYXJFbnRpdHkoICJjYXRoZWRyYWwgaW4gYmFyTmFtZWRBc3NvY2lhdGlvbiIgKSApOworICAgICAgICBwcm90by5iYXJFbnRpdHlOYW1lZEFzc29jaWF0aW9uKCkucHV0KCAiYmF6YXIiLCBidWlsZEJhckVudGl0eSggImJhemFyIGluIGJhckVudGl0eU5hbWVkQXNzb2NpYXRpb24iICkgKTsKKyAgICAgICAgcHJvdG8uYmFyRW50aXR5TmFtZWRBc3NvY2lhdGlvbigpLnB1dCggImNhdGhlZHJhbCIsIGJ1aWxkQmFyRW50aXR5KCAiY2F0aGVkcmFsIGluIGJhckVudGl0eU5hbWVkQXNzb2NpYXRpb24iICkgKTsKIAogICAgICAgICByZXR1cm4gYnVpbGRlci5uZXdJbnN0YW5jZSgpOwogICAgIH0KIAorICAgIHByaXZhdGUgQW5vdGhlclZhbHVlIGNyZWF0ZUFub3RoZXJWYWx1ZSggU3RyaW5nIHZhbDEsIFN0cmluZyB2YWwyICkKKyAgICB7CisgICAgICAgIFZhbHVlQnVpbGRlcjxBbm90aGVyVmFsdWU+IHZhbHVlQnVpbGRlciA9IG1vZHVsZS5uZXdWYWx1ZUJ1aWxkZXIoIEFub3RoZXJWYWx1ZS5jbGFzcyApOworICAgICAgICB2YWx1ZUJ1aWxkZXIucHJvdG90eXBlKCkudmFsMSgpLnNldCggdmFsMSApOworICAgICAgICB2YWx1ZUJ1aWxkZXIucHJvdG90eXBlRm9yKCBBbm90aGVyVmFsdWVJbnRlcm5hbFN0YXRlLmNsYXNzICkudmFsMigpLnNldCggdmFsMiApOworICAgICAgICByZXR1cm4gdmFsdWVCdWlsZGVyLm5ld0luc3RhbmNlKCk7CisgICAgfQorCiAgICAgcHJpdmF0ZSBCYXJFbnRpdHkgYnVpbGRCYXJFbnRpdHkoIFN0cmluZyBjYXRoZWRyYWwgKQogICAgIHsKICAgICAgICAgRW50aXR5QnVpbGRlcjxCYXJFbnRpdHk+IGJhckJ1aWxkZXIgPSBtb2R1bGUuY3VycmVudFVuaXRPZldvcmsoKS5uZXdFbnRpdHlCdWlsZGVyKCBCYXJFbnRpdHkuY2xhc3MgKTsKQEAgLTIxOCwxNCArMjIxLDEyIEBACiAKICAgICBwdWJsaWMgZW51bSBUZXN0RW51bQogICAgIHsKLQogICAgICAgICBzb21ldmFsdWUsIGFub3RoZXJ2YWx1ZQogICAgIH0KIAogICAgIHB1YmxpYyBpbnRlcmZhY2UgU29tZVZhbHVlCiAgICAgICAgIGV4dGVuZHMgVmFsdWVDb21wb3NpdGUKICAgICB7Ci0KICAgICAgICAgUHJvcGVydHk8U3RyaW5nPiBzdHJpbmcoKTsKIAogICAgICAgICBQcm9wZXJ0eTxTdHJpbmc+IHN0cmluZzIoKTsKQEAgLTI2MCw2ICsyNjEsOCBAQAogCiAgICAgICAgIFByb3BlcnR5PEFub3RoZXJWYWx1ZT4gYW5vdGhlcigpOwogCisgICAgICAgIC8vIFByb3BlcnR5PEFub3RoZXJWYWx1ZVtdPiBhcnJheU9mVmFsdWVzKCk7CisKICAgICAgICAgQE9wdGlvbmFsCiAgICAgICAgIFByb3BlcnR5PEFub3RoZXJWYWx1ZT4gYW5vdGhlck51bGwoKTsKIApAQCAtMzEzLDYgKzMxNiwxMiBAQAogICAgICAgICBNYW55QXNzb2NpYXRpb248QmFyPiBiYXJNYW55QXNzb2NpYXRpb24oKTsKIAogICAgICAgICBNYW55QXNzb2NpYXRpb248QmFyRW50aXR5PiBiYXJFbnRpdHlNYW55QXNzb2NpYXRpb24oKTsKKworICAgICAgICBOYW1lZEFzc29jaWF0aW9uPEJhcj4gYmFyTmFtZWRBc3NvY2lhdGlvbkVtcHR5KCk7CisKKyAgICAgICAgTmFtZWRBc3NvY2lhdGlvbjxCYXI+IGJhck5hbWVkQXNzb2NpYXRpb24oKTsKKworICAgICAgICBOYW1lZEFzc29jaWF0aW9uPEJhckVudGl0eT4gYmFyRW50aXR5TmFtZWRBc3NvY2lhdGlvbigpOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnRlcmZhY2UgU3BlY2lmaWNDb2xsZWN0aW9uCkBAIC0zMjMsNyArMzMyLDYgQEAKICAgICBwdWJsaWMgaW50ZXJmYWNlIEdlbmVyaWNDb2xsZWN0aW9uPFRZUEU+CiAgICAgICAgIGV4dGVuZHMgVmFsdWVDb21wb3NpdGUKICAgICB7Ci0KICAgICAgICAgQFVzZURlZmF1bHRzCiAgICAgICAgIFByb3BlcnR5PExpc3Q8VFlQRT4+IGdlbmVyaWNMaXN0KCk7CiAgICAgfQpAQCAtMzM2LDcgKzM0NCw2IEBACiAgICAgcHVibGljIGludGVyZmFjZSBHZW5lcmljVmFsdWU8VFlQRT4KICAgICAgICAgZXh0ZW5kcyBWYWx1ZUNvbXBvc2l0ZQogICAgIHsKLQogICAgICAgICBAT3B0aW9uYWwKICAgICAgICAgUHJvcGVydHk8VFlQRT4gaXRlbSgpOwogICAgIH0KQEAgLTM0NSw3ICszNTIsNiBAQAogICAgIHB1YmxpYyBpbnRlcmZhY2UgQW5vdGhlclZhbHVlCiAgICAgICAgIGV4dGVuZHMgVmFsdWVDb21wb3NpdGUKICAgICB7Ci0KICAgICAgICAgQFVzZURlZmF1bHRzCiAgICAgICAgIFByb3BlcnR5PFN0cmluZz4gdmFsMSgpOwogCkBAIC0zNTQsNyArMzYwLDYgQEAKIAogICAgIHB1YmxpYyBpbnRlcmZhY2UgQW5vdGhlclZhbHVlSW50ZXJuYWxTdGF0ZQogICAgIHsKLQogICAgICAgICBAVXNlRGVmYXVsdHMKICAgICAgICAgUHJvcGVydHk8U3RyaW5nPiB2YWwyKCk7CiAgICAgfQpAQCAtMzYyLDcgKzM2Nyw2IEBACiAgICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBBbm90aGVyVmFsdWVNaXhpbgogICAgICAgICBpbXBsZW1lbnRzIEFub3RoZXJWYWx1ZQogICAgIHsKLQogICAgICAgICBAVGhpcwogICAgICAgICBwcml2YXRlIEFub3RoZXJWYWx1ZUludGVybmFsU3RhdGUgaW50ZXJuYWxTdGF0ZTsKIApAQCAtMzc1LDcgKzM3OSw2IEBACiAKICAgICBwdWJsaWMgaW50ZXJmYWNlIEZvbwogICAgIHsKLQogICAgICAgICBAVXNlRGVmYXVsdHMKICAgICAgICAgUHJvcGVydHk8U3RyaW5nPiBiYXIoKTsKICAgICB9CkBAIC0zODgsMTQgKzM5MSwxMiBAQAogICAgIHB1YmxpYyBpbnRlcmZhY2UgQ3VzdG9tRm9vVmFsdWUKICAgICAgICAgZXh0ZW5kcyBGb29WYWx1ZQogICAgIHsKLQogICAgICAgICBAVXNlRGVmYXVsdHMKICAgICAgICAgUHJvcGVydHk8U3RyaW5nPiBjdXN0b20oKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50ZXJmYWNlIEJhcgogICAgIHsKLQogICAgICAgICBAVXNlRGVmYXVsdHMKICAgICAgICAgUHJvcGVydHk8U3RyaW5nPiBjYXRoZWRyYWwoKTsKICAgICB9CkBAIC00MDgsMTMgKzQwOSwxMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU2VyaWFsaXphYmxlT2JqZWN0CiAgICAgICAgIGltcGxlbWVudHMgU2VyaWFsaXphYmxlCiAgICAgewotCiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwogICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBmb28gPSAiRm9vIjsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgdmFsID0gMzU7CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAiQWNjZXNzaW5nTm9uUHVibGljRmllbGRPZkFub3RoZXJPYmplY3QiICkKICAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKCBPYmplY3QgbyApCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmKCB0aGlzID09IG8gKQpAQCAtNDM3LDUgKzQzNiw0IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQotCiB9CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC92YWx1ZS9wYWNrYWdlLmh0bWwgYi9jb3JlL3Rlc3RzdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC92YWx1ZS9wYWNrYWdlLmh0bWwKaW5kZXggYjg1NzVkYy4uYTgyZTU2NCAxMDA2NDQKLS0tIGEvY29yZS90ZXN0c3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvdmFsdWUvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3ZhbHVlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+VmFsdWVTZXJpYWxpemF0aW9uIFNQSSBUZXN0IFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHN1cHBvcnQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90ZXN0L2NhY2hlL01lbW9yeUNhY2hlVGVzdC5qYXZhIGIvY29yZS90ZXN0c3VwcG9ydC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3Rlc3QvY2FjaGUvTWVtb3J5Q2FjaGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiZDZjZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHN1cHBvcnQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90ZXN0L2NhY2hlL01lbW9yeUNhY2hlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLnRlc3QuY2FjaGU7CisKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLnRlc3QuY2FjaGUuQWJzdHJhY3RDYWNoZVBvb2xUZXN0OworCitwdWJsaWMgY2xhc3MgTWVtb3J5Q2FjaGVUZXN0CisgICAgZXh0ZW5kcyBBYnN0cmFjdENhY2hlUG9vbFRlc3QKK3sKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBtb2R1bGUuc2VydmljZXMoIE1lbW9yeUNhY2hlUG9vbFNlcnZpY2UuY2xhc3MgKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9kb2FwLnJkZiBiL2RvYXAucmRmCmluZGV4IDc3ZTc0YzMuLmJiMTNmYTAgMTAwNjQ0Ci0tLSBhL2RvYXAucmRmCisrKyBiL2RvYXAucmRmCkBAIC0xLDQgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIj8+CiA8IS0tCiAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQogICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKQEAgLTE1LDggKzE2LDYgQEAKICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIC0tPgotCi08P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIj8+CiA8cmRmOlJERiB4bWw6bGFuZz0iZW4iCiAgICAgICAgICB4bWxucz0iaHR0cDovL3VzZWZ1bGluYy5jb20vbnMvZG9hcCMiIAogICAgICAgICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIiAKQEAgLTMwLDMwICsyOSwzNSBAQAogCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLT4KLSAgPFByb2plY3QgcmRmOmFib3V0PSJodHRwOi8vemVzdC5yZGYuYXBhY2hlLm9yZy8iPgorICA8UHJvamVjdCByZGY6YWJvdXQ9Imh0dHA6Ly96ZXN0LmFwYWNoZS5vcmcvIj4KICAgICA8Y3JlYXRlZD4yMDA4LTEyLTE3PC9jcmVhdGVkPgogICAgIDxsaWNlbnNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3VzZWZ1bGluYy5jb20vZG9hcC9saWNlbnNlcy9hc2wyMCIgLz4KICAgICA8bmFtZT5BcGFjaGUgWmVzdDwvbmFtZT4KLSAgICA8aG9tZXBhZ2UgcmRmOnJlc291cmNlPSJodHRwOi8vemVzdC5hcGFjaGUub3JnLyIgLz4KLSAgICA8YXNmZXh0OnBtYyByZGY6cmVzb3VyY2U9Imh0dHA6Ly96ZXN0LmFwYWNoZS5vcmcvIiAvPgotICAgIDxzaG9ydGRlc2M+QXBhY2hlIFplc3QgaXMgYW4gb3BlbiBzb3VyY2UgcGxhdGZvcm0gZm9yIGNvbXBvc2l0ZSBvcmllbnRlZCBwcm9ncmFtbWluZy48L3Nob3J0ZGVzYz4KLSAgICA8ZGVzY3JpcHRpb24+QXBhY2hlIFplc3QgaXMgYW4gb3BlbiBzb3VyY2UgcGxhdGZvcm0gZm9yIGNvbXBvc2l0ZSBvcmllbnRlZCBwcm9ncmFtbWluZy4gWmVzdCBpcyBob21lIGZvciBRaTRqLAotICAgIHRoZSBjb21wb3NpdGUgb3JpZW50ZWQgcHJvZ3JhbW1pbmcgcGxhdGZvcm0gZm9yIEphdmEsIGFuZCBRaTROZXQgYSBwb3J0IHRvIHRoZSAuTkVUIENMUi4KLSAgICBDb21wb3NpdGUgb3JpZW50ZWQgcHJvZ3JhbW1pbmcgYWxsb3dzIGRldmVsb3BlcnMgdG8gd29yayB3aXRoICdmcmFnbWVudHMnLCBzbWFsbGVyIHRoYW4gY2xhc3NlcywgYW5kICdjb21wb3NlJwotICAgIGZyYWdtZW50cyBpbnRvIGxhcmdlciAnY29tcG9zaXRlcycgd2hpY2ggYWN0cyBsaWtlIHRoZSByZWd1bGFyIG9iamVjdHMuIFplc3QgYWxzbyB0YWNrbGVzIHRoZSBlbmZvcmNlbWVudAotICAgIG9mIGFwcGxpY2F0aW9uIGNvbXBvc2l0aW9uLCBpLmUuIGNvbXBvc2l0ZXMgYXJlIGRlY2xhcmVkIGluIG1vZHVsZXMsIG1vZHVsZXMgYXJlIGNvbnRhaW5lZCBpbiBsYXllcnMgYW5kIGFjY2VzcwotICAgIGJldHdlZW4gbGF5ZXJzIGFyZSBjb250cm9sbGVkL2VuZm9yY2VkLgotICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgPGJ1Zy1kYXRhYmFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9aRVNUIiAvPgotICAgIDxtYWlsaW5nLWxpc3QgcmRmOnJlc291cmNlPSJodHRwOi8vemVzdC5hcGFjaGUub3JnL21haWxpbmctbGlzdHMuaHRtbCIgLz4KLSAgICA8ZG93bmxvYWQtcGFnZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly96ZXN0LmFwYWNoZS5vcmcvZG93bmxvYWQuaHRtbCIgLz4KLQorICAgIDxob21lcGFnZSByZGY6cmVzb3VyY2U9Imh0dHBzOi8vemVzdC5hcGFjaGUub3JnLyIgLz4KKyAgICA8YXNmZXh0OnBtYyByZGY6cmVzb3VyY2U9Imh0dHBzOi8vemVzdC5hcGFjaGUub3JnIiAvPgorICAgIDxzaG9ydGRlc2M+QXBhY2hlIFplc3QgaXMgYSBjb21tdW5pdHkgYmFzZWQgZWZmb3J0IGV4cGxvcmluZyBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgZm9yIGRvbWFpbiBjZW50cmljIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50Ljwvc2hvcnRkZXNjPgorICAgIDxkZXNjcmlwdGlvbj5BcGFjaGUgWmVzdCBpcyBhIGNvbW11bml0eSBiYXNlZCBlZmZvcnQgZXhwbG9yaW5nIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBmb3IgZG9tYWluIGNlbnRyaWMgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQuIFRoaXMgaW5jbHVkZXMgZXZvbHZlZCBjb25jZXB0cyBmcm9tIEFzcGVjdCBPcmllbnRlZCBQcm9ncmFtbWluZywgRGVwZW5kZW5jeSBJbmplY3Rpb24gYW5kIERvbWFpbiBEcml2ZW4gRGVzaWduLiBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgYWxsb3dzIGRldmVsb3BlcnMgdG8gd29yayB3aXRoICdmcmFnbWVudHMnLCBzbWFsbGVyIHRoYW4gY2xhc3NlcywgYW5kICdjb21wb3NlJyBmcmFnbWVudHMgaW50byBsYXJnZXIgJ2NvbXBvc2l0ZXMnIHdoaWNoIGFjdHMgbGlrZSB0aGUgcmVndWxhciBvYmplY3RzLiBaZXN0IGFsc28gdGFja2xlcyB0aGUgZW5mb3JjZW1lbnQgb2YgYXBwbGljYXRpb24gY29tcG9zaXRpb24sIGkuZS4gY29tcG9zaXRlcyBhcmUgZGVjbGFyZWQgaW4gbW9kdWxlcywgbW9kdWxlcyBhcmUgY29udGFpbmVkIGluIGxheWVycyBhbmQgYWNjZXNzIGJldHdlZW4gbGF5ZXJzIGFyZSBjb250cm9sbGVkL2VuZm9yY2VkLiBBcGFjaGUgWmVzdOKEoiAoSmF2YSBFZGl0aW9uKSwgZmlyc3QgQXBhY2hlIFplc3Qgc3ViLXByb2plY3QsIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZywgdXNpbmcgdGhlIHN0YW5kYXJkIEphdmEgcGxhdGZvcm0sIHdpdGhvdXQgdGhlIHVzZSBvZiBhbnkgcHJlLXByb2Nlc3NvcnMgb3IgbmV3IGxhbmd1YWdlIGVsZW1lbnRzLiBFdmVyeXRoaW5nIHlvdSBrbm93IGZyb20gSmF2YSBzdGlsbCBhcHBsaWVzIGFuZCB5b3UgY2FuIGxldmVyYWdlIGJvdGggeW91ciBleHBlcmllbmNlIGFuZCB0b29sa2l0cyB0byBiZWNvbWUgbW9yZSBwcm9kdWN0aXZlIHdpdGggQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIHRvZGF5LjwvZGVzY3JpcHRpb24+ICAgIAorICAgIDxidWctZGF0YWJhc2UgcmRmOnJlc291cmNlPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1pFU1QiIC8+CisgICAgPG1haWxpbmctbGlzdCByZGY6cmVzb3VyY2U9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9tYWlsaW5nbGlzdHMuaHRtbCIgLz4KKyAgICA8ZG93bmxvYWQtcGFnZSByZGY6cmVzb3VyY2U9Imh0dHBzOi8vemVzdC5hcGFjaGUub3JnL2Rvd25sb2FkLmh0bWwiIC8+CiAgICAgPHByb2dyYW1taW5nLWxhbmd1YWdlPkphdmE8L3Byb2dyYW1taW5nLWxhbmd1YWdlPgogICAgIDxwcm9ncmFtbWluZy1sYW5ndWFnZT5DIzwvcHJvZ3JhbW1pbmctbGFuZ3VhZ2U+Ci0gICAgPHByb2dyYW1taW5nLWxhbmd1YWdlPkphdmFTY3JpcHQ8L3Byb2dyYW1taW5nLWxhbmd1YWdlPgotICAgIDxwcm9ncmFtbWluZy1sYW5ndWFnZT5SdWJ5PC9wcm9ncmFtbWluZy1sYW5ndWFnZT4KICAgICA8cHJvZ3JhbW1pbmctbGFuZ3VhZ2U+U2NhbGE8L3Byb2dyYW1taW5nLWxhbmd1YWdlPgotICAgIDxjYXRlZ29yeSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wcm9qZWN0cy5hcGFjaGUub3JnL2NhdGVnb3J5L29zZ2kiIC8+CisgICAgPHByb2dyYW1taW5nLWxhbmd1YWdlPkdyb292eTwvcHJvZ3JhbW1pbmctbGFuZ3VhZ2U+CisgICAgPHByb2dyYW1taW5nLWxhbmd1YWdlPkphdmFTY3JpcHQ8L3Byb2dyYW1taW5nLWxhbmd1YWdlPgorICAgIDxjYXRlZ29yeSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wcm9qZWN0cy5hcGFjaGUub3JnL2NhdGVnb3J5L2xpYnJhcnkiIC8+CisgICAgPHJlcG9zaXRvcnk+CisgICAgICA8U1ZOUmVwb3NpdG9yeT4KKyAgICAgICAgPGxvY2F0aW9uIHJkZjpyZXNvdXJjZT0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi96ZXN0LyIvPgorICAgICAgICA8YnJvd3NlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXdjdnMuY2dpL3plc3QvIi8+CisgICAgICA8L1NWTlJlcG9zaXRvcnk+CisgICAgPC9yZXBvc2l0b3J5PgorICAgIDxyZXBvc2l0b3J5PgorICAgICAgPEdpdFJlcG9zaXRvcnk+CisgICAgICAgIDxsb2NhdGlvbiByZGY6cmVzb3VyY2U9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi96ZXN0LWphdmEuZ2l0Ii8+CisgICAgICAgIDxicm93c2UgcmRmOnJlc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3plc3QtamF2YSIvPgorICAgICAgPC9HaXRSZXBvc2l0b3J5PgorICAgIDwvcmVwb3NpdG9yeT4KICAgICA8bWFpbnRhaW5lcj4KICAgICAgIDxmb2FmOlBlcnNvbj4KICAgICAgICAgPGZvYWY6bmFtZT5OaWNsYXMgSGVkaG1hbjwvZm9hZjpuYW1lPgpkaWZmIC0tZ2l0IGEvZXRjL2FwYWNoZS1yYXQtb3V0cHV0LXRvLWh0bWwueHNsIGIvZXRjL2FwYWNoZS1yYXQtb3V0cHV0LXRvLWh0bWwueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjE5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvYXBhY2hlLXJhdC1vdXRwdXQtdG8taHRtbC54c2wKQEAgLTAsMCArMSwyMDQgQEAKKzx4c2w6dHJhbnNmb3JtIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB2ZXJzaW9uPSIyLjAiPgorCis8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPgorCis8IS0tIFRoaXMgc3R5bGUgc2hlZXQgY29udmVydHMgYW55IHJhdC1yZXBvcnQueG1sIGZpbGUuICAtLT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+CisKKyAgPGh0bWw+CisgICAgPGhlYWQ+CisgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ii8+CisgICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgJmx0OyEtLQorYm9keSB7bWFyZ2luLXRvcDogMHB4O2ZvbnQtc2l6ZTogMC44ZW07YmFja2dyb3VuZC1jb2xvcjogI0Y5RjdFRDt9CisKK2gxIHtjb2xvcjpyZWQ7fQoraDIge2NvbG9yOmJsdWU7fQoraDMge2NvbG9yOmdyZWVuO30KK2g0IHtjb2xvcjpvcmFuZ2U7fQorCisvKiBUYWJsZSBEZXNpZ24gKi8KKwordGFibGUsdHIsdGQge3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OmJvbGQ7Ym9yZGVyOjFweCBzb2xpZCAjMDAwO30KK2NhcHRpb24ge2NvbG9yOmJsdWU7dGV4dC1hbGlnbjpsZWZ0O30KKy5ub3RlcywgLmJpbmFyaWVzLCAuYXJjaGl2ZXMsIC5zdGFuZGFyZHMge3dpZHRoOjI1JTt9Cisubm90ZXMge2JhY2tncm91bmQ6I0Q3RURFRTt9CisuYmluYXJpZXMge2JhY2tncm91bmQ6I0QwRjJGNDt9CisuYXJjaGl2ZXMge2JhY2tncm91bmQ6I0FCRTdFOTt9Cisuc3RhbmRhcmRzIHtiYWNrZ3JvdW5kOiNBMEYwRjQ7fQorLmxpY2VuY2VkLCAuZ2VuZXJhdGVkIHt3aWR0aDo1MCU7fQorLmxpY2VuY2VkIHtiYWNrZ3JvdW5kOiNDNkVCREQ7fQorLmdlbmVyYXRlZCB7YmFja2dyb3VuZDojQUJFOUQyO30KKy5qYXZhX25vdGUge2JhY2tncm91bmQ6I0Q2RUJDNjt9CisuZ2VuZXJhdGVkX25vdGUge2JhY2tncm91bmQ6I0M5RTdBOTt9CisudW5rbm93biB7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNFOTIwMjA7fQorLnVua25vd24temVybyB7Y29sb3I6IzAwQ0MwMDt9CisuY2VudGVye3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowIGF1dG87fQorLS0mZ3Q7CisgICAgIDwvc3R5bGU+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlbmVyYXRlZCIvPgorICAgIDwvYm9keT4KKyAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJhdC1yZXBvcnQiPgorCisgIDxoMT5SYXQgUmVwb3J0PC9oMT4KKzxkaXYgY2xhc3M9ImNlbnRlciI+Cis8dGFibGUgaWQ9InJhdC1yZXBvcnRzIHN1bW1hcnkiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJBIHNuYXBzaG90IHN1bW1hcnkgb2YgdGhpcyByYXQgcmVwb3J0Ij4KKzxjYXB0aW9uPgorVGFibGUgMTogQSBzbmFwc2hvdCBzdW1tYXJ5IG9mIHRoaXMgcmF0IHJlcG9ydC4KKzwvY2FwdGlvbj4KKyAgPHRyPgorICAgIDx0ZCBjb2xzcGFuPSIxIiBjbGFzcz0ibm90ZXMiPk5vdGVzOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZGVzY2VuZGFudDo6dHlwZVthdHRyaWJ1dGU6Om5hbWU9JnF1b3Q7bm90aWNlJnF1b3Q7XSkiLz48L3RkPgorICAgIDx0ZCBjb2xzcGFuPSIxIiBjbGFzcz0iYmluYXJpZXMiPkJpbmFyaWVzOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZGVzY2VuZGFudDo6dHlwZVthdHRyaWJ1dGU6Om5hbWU9JnF1b3Q7YmluYXJ5JnF1b3Q7XSkiLz48L3RkPgorICAgIDx0ZCBjb2xzcGFuPSIxIiBjbGFzcz0iYXJjaGl2ZXMiPkFyY2hpdmVzOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZGVzY2VuZGFudDo6dHlwZVthdHRyaWJ1dGU6Om5hbWU9JnF1b3Q7YXJjaGl2ZSZxdW90O10pIi8+PC90ZD4KKyAgICA8dGQgY29sc3Bhbj0iMSIgY2xhc3M9InN0YW5kYXJkcyI+U3RhbmRhcmRzOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZGVzY2VuZGFudDo6dHlwZVthdHRyaWJ1dGU6Om5hbWU9JnF1b3Q7c3RhbmRhcmQmcXVvdDtdKSIvPjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgY29sc3Bhbj0iMiIgY2xhc3M9ImxpY2VuY2VkIj5BcGFjaGUgTGljZW5zZWQ6IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChkZXNjZW5kYW50OjpoZWFkZXItdHlwZVthdHRyaWJ1dGU6Om5hbWU9JnF1b3Q7QUwgICAmcXVvdDtdKSIvPjwvdGQ+CisgICAgPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJnZW5lcmF0ZWQiPkdlbmVyYXRlZCBEb2N1bWVudHM6IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChkZXNjZW5kYW50OjpoZWFkZXItdHlwZVthdHRyaWJ1dGU6Om5hbWU9JnF1b3Q7R0VOICAmcXVvdDtdKSIvPjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgY29sc3Bhbj0iMiIgY2xhc3M9ImphdmFfbm90ZSI+Tm90ZTogSmF2YURvY3MgYXJlIGdlbmVyYXRlZCBhbmQgc28gbGljZW5zZSBoZWFkZXIgaXMgb3B0aW9uYWw8L3RkPgorICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0iZ2VuZXJhdGVkX25vdGUiPk5vdGU6IEdlbmVyYXRlZCBmaWxlcyBkbyBub3QgcmVxdWlyZSBsaWNlbnNlIGhlYWRlcnM8L3RkPgorICA8L3RyPgorICA8dHI+Cis8eHNsOmNob29zZT4KKyAgPHhzbDp3aGVuIHRlc3Q9ImNvdW50KGRlc2NlbmRhbnQ6OmhlYWRlci10eXBlW2F0dHJpYnV0ZTo6bmFtZT0mcXVvdDs/Pz8/PyZxdW90O10pICZndDsgMCI+CisgICAgPHRkIGNvbHNwYW49IjQiIGNsYXNzPSJ1bmtub3duIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZGVzY2VuZGFudDo6aGVhZGVyLXR5cGVbYXR0cmlidXRlOjpuYW1lPSZxdW90Oz8/Pz8/JnF1b3Q7XSkiLz4gVW5rbm93biBMaWNlbnNlcyAtIG9yIGZpbGVzIHdpdGhvdXQgYSBsaWNlbnNlLjwvdGQ+CisgIDwveHNsOndoZW4+CisgIDx4c2w6b3RoZXJ3aXNlPgorICAgIDx0ZCBjb2xzcGFuPSI0IiBjbGFzcz0idW5rbm93bi16ZXJvIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZGVzY2VuZGFudDo6aGVhZGVyLXR5cGVbYXR0cmlidXRlOjpuYW1lPSZxdW90Oz8/Pz8/JnF1b3Q7XSkiLz4gVW5rbm93biBMaWNlbnNlcyAtIG9yIGZpbGVzIHdpdGhvdXQgYSBsaWNlbnNlLjwvdGQ+CisgIDwveHNsOm90aGVyd2lzZT4KKzwveHNsOmNob29zZT4KKyAgPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxoci8+CisgIDxoMz5VbmFwcHJvdmVkIExpY2Vuc2VzOjwvaDM+CisKKyAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImRlc2NlbmRhbnQ6OnJlc291cmNlW2xpY2Vuc2UtYXBwcm92YWwvQG5hbWU9JnF1b3Q7ZmFsc2UmcXVvdDtdIj4KKyAgPHhzbDp0ZXh0PiAgPC94c2w6dGV4dD4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PGJyLz4KKyAgPHhzbDp0ZXh0PgorPC94c2w6dGV4dD4KKzwveHNsOmZvci1lYWNoPgorPGhyLz4KKworPGgzPkFyY2hpdmVzOjwvaDM+CisKKzx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJkZXNjZW5kYW50OjpyZXNvdXJjZVt0eXBlL0BuYW1lPSZxdW90O2FyY2hpdmUmcXVvdDtdIj4KKyArIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorIDxici8+CisgPC94c2w6Zm9yLWVhY2g+CisgPGhyLz4KKworIDxwPgorICAgRmlsZXMgd2l0aCBBcGFjaGUgTGljZW5zZSBoZWFkZXJzIHdpbGwgYmUgbWFya2VkIEFMPGJyLz4KKyAgIEJpbmFyeSBmaWxlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgQUwgaGVhZGVycykgd2lsbCBiZSBtYXJrZWQgQjxici8+CisgIENvbXByZXNzZWQgYXJjaGl2ZXMgd2lsbCBiZSBtYXJrZWQgQTxici8+CisgIE5vdGljZXMsIGxpY2Vuc2VzIGV0YyB3aWxsIGJlIG1hcmtlZCBOPGJyLz4KKyAgPC9wPgorCisgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImRlc2NlbmRhbnQ6OnJlc291cmNlIj4KKyAgPHhzbDpjaG9vc2U+CisgICA8eHNsOndoZW4gdGVzdD0ibGljZW5zZS1hcHByb3ZhbC9AbmFtZT0mcXVvdDtmYWxzZSZxdW90OyI+ITwveHNsOndoZW4+CisgICA8eHNsOm90aGVyd2lzZT48eHNsOnRleHQ+IDwveHNsOnRleHQ+PC94c2w6b3RoZXJ3aXNlPgorIDwveHNsOmNob29zZT4KKyA8eHNsOmNob29zZT4KKyAgIDx4c2w6d2hlbiB0ZXN0PSJ0eXBlL0BuYW1lPSZxdW90O25vdGljZSZxdW90OyI+TiAgIDwveHNsOndoZW4+CisgICA8eHNsOndoZW4gdGVzdD0idHlwZS9AbmFtZT0mcXVvdDthcmNoaXZlJnF1b3Q7Ij5BICAgPC94c2w6d2hlbj4KKyAgIDx4c2w6d2hlbiB0ZXN0PSJ0eXBlL0BuYW1lPSZxdW90O2JpbmFyeSZxdW90OyI+QiAgIDwveHNsOndoZW4+CisgICA8eHNsOndoZW4gdGVzdD0idHlwZS9AbmFtZT0mcXVvdDtzdGFuZGFyZCZxdW90OyI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImhlYWRlci10eXBlL0BuYW1lIi8+PC94c2w6d2hlbj4KKyAgIDx4c2w6b3RoZXJ3aXNlPiEhISEhPC94c2w6b3RoZXJ3aXNlPgorIDwveHNsOmNob29zZT4KKyA8eHNsOnRleHQ+ICAgICAgPC94c2w6dGV4dD4KKyA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48YnIvPgorIDx4c2w6dGV4dD4KKyA8L3hzbDp0ZXh0PgorIDwveHNsOmZvci1lYWNoPgorIDxoci8+CisKKyA8aDM+UHJpbnRpbmcgaGVhZGVycyBmb3IgZmlsZXMgd2l0aG91dCBBTCBoZWFkZXIuLi48L2gzPgorCisgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImRlc2NlbmRhbnQ6OnJlc291cmNlW2hlYWRlci10eXBlL0BuYW1lPSZxdW90Oz8/Pz8/JnF1b3Q7XSI+CisKKyAgIDxoND48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2g0PgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iaGVhZGVyLXNhbXBsZSIvPgorICA8aHIvPgorPC94c2w6Zm9yLWVhY2g+Cis8YnIvPgorCisgPCEtLSA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InJlc291cmNlIi8+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJoZWFkZXItc2FtcGxlIi8+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJoZWFkZXItdHlwZSIvPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibGljZW5zZS1mYW1pbHkiLz4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImxpY2Vuc2UtYXBwcm92YWwiLz4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InR5cGUiLz4gLS0+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXNvdXJjZSI+CisgIDxkaXY+CisgICAgPGgzPlJlc291cmNlOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2gzPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorICAgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImhlYWRlci1zYW1wbGUiPgorICA8eHNsOmlmIHRlc3Q9Im5vcm1hbGl6ZS1zcGFjZSguKSAhPSAnJyI+CisgIDxoND5GaXJzdCBmZXcgbGluZXMgb2Ygbm9uLWNvbXBsaWFudCBmaWxlPC9oND4KKyAgICA8cD4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+CisgICAgPC9wPgorICAgIDwveHNsOmlmPgorICAgIDxoND5PdGhlciBJbmZvOjwvaDQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iaGVhZGVyLXR5cGUiPgorICBIZWFkZXIgVHlwZTogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgIDxici8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGljZW5zZS1mYW1pbHkiPgorICBMaWNlbnNlIEZhbWlseTogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgIDxici8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGljZW5zZS1hcHByb3ZhbCI+CisgIExpY2Vuc2UgQXBwcm92YWw6IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICA8YnIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InR5cGUiPgorICBUeXBlOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KKyAgPGJyLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImdlbmVyYXRlZCI+Cis8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnRyYW5zZm9ybT4KZGlmZiAtLWdpdCBhL2V0Yy9oZWFkZXIudHh0IGIvZXRjL2hlYWRlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0ZmYzMQotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy9oZWFkZXIudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvcWk0ai1hcGktY2hlY2tzdHlsZS54bWwgYi9ldGMvcWk0ai1hcGktY2hlY2tzdHlsZS54bWwKaW5kZXggNGEyMTIyYS4uZDljNTVjMiAxMDA2NDQKLS0tIGEvZXRjL3FpNGotYXBpLWNoZWNrc3R5bGUueG1sCisrKyBiL2V0Yy9xaTRqLWFwaS1jaGVja3N0eWxlLnhtbApAQCAtMiw2ICsyLDI3IEBACiA8IURPQ1RZUEUgbW9kdWxlIFBVQkxJQyAiLS8vUHVwcHkgQ3Jhd2wvL0RURCBDaGVjayBDb25maWd1cmF0aW9uIDEuMi8vRU4iCiAgICJodHRwOi8vd3d3LnB1cHB5Y3Jhd2wuY29tL2R0ZHMvY29uZmlndXJhdGlvbl8xXzIuZHRkIj4KIAorPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4KKwogPCEtLSBEb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZVNlcnZpY2UgYXQKICAgICAgaHR0cDovL2NoZWNrc3R5bGUuc291cmNlZm9yZ2UubmV0L2F2YWlsYWJsZWNoZWNrcy5odG1sCiAtLT4KZGlmZiAtLWdpdCBhL2V0Yy9xaTRqLXJ1bnRpbWUtY2hlY2tzdHlsZS54bWwgYi9ldGMvcWk0ai1ydW50aW1lLWNoZWNrc3R5bGUueG1sCmluZGV4IDNlMDMyOWMuLmE1MGUwZGIgMTAwNjQ0Ci0tLSBhL2V0Yy9xaTRqLXJ1bnRpbWUtY2hlY2tzdHlsZS54bWwKKysrIGIvZXRjL3FpNGotcnVudGltZS1jaGVja3N0eWxlLnhtbApAQCAtMiw2ICsyLDI3IEBACiA8IURPQ1RZUEUgbW9kdWxlIFBVQkxJQyAiLS8vUHVwcHkgQ3Jhd2wvL0RURCBDaGVjayBDb25maWd1cmF0aW9uIDEuMi8vRU4iCiAgICJodHRwOi8vd3d3LnB1cHB5Y3Jhd2wuY29tL2R0ZHMvY29uZmlndXJhdGlvbl8xXzIuZHRkIj4KIAorPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4KKwogPCEtLSBEb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZVNlcnZpY2UgYXQKICAgICAgaHR0cDovL2NoZWNrc3R5bGUuc291cmNlZm9yZ2UubmV0L2F2YWlsYWJsZWNoZWNrcy5odG1sCiAtLT4KZGlmZiAtLWdpdCBhL2V0Yy9xaTRqLXRlc3RzLWNoZWNrc3R5bGUueG1sIGIvZXRjL3FpNGotdGVzdHMtY2hlY2tzdHlsZS54bWwKaW5kZXggZWE2YzU3MC4uYmUxZmNhNiAxMDA2NDQKLS0tIGEvZXRjL3FpNGotdGVzdHMtY2hlY2tzdHlsZS54bWwKKysrIGIvZXRjL3FpNGotdGVzdHMtY2hlY2tzdHlsZS54bWwKQEAgLTIsNiArMiwyNyBAQAogPCFET0NUWVBFIG1vZHVsZSBQVUJMSUMgIi0vL1B1cHB5IENyYXdsLy9EVEQgQ2hlY2sgQ29uZmlndXJhdGlvbiAxLjIvL0VOIgogICAiaHR0cDovL3d3dy5wdXBweWNyYXdsLmNvbS9kdGRzL2NvbmZpZ3VyYXRpb25fMV8yLmR0ZCI+CiAKKzwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+CisKIDwhLS0gRG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGVTZXJ2aWNlIGF0CiAgICAgIGh0dHA6Ly9jaGVja3N0eWxlLnNvdXJjZWZvcmdlLm5ldC9hdmFpbGFibGVjaGVja3MuaHRtbAogLS0+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zLy5naXRpZ25vcmUgYi9leHRlbnNpb25zLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiM2ZmNWYuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0qLmltbAotYnVpbGQvCi1vdXQvCi1kZXJieS5sb2cKLWVudGl0eXN0b3JlLXNxbC9kZXJieS5sb2cKLWVudGl0eXN0b3JlLXNxbC90YXJnZXQKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvTElDRU5TRSBiL2V4dGVuc2lvbnMvTElDRU5TRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQzM2IxYS4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9OT1RJQ0UgYi9leHRlbnNpb25zL2NhY2hlLWVoY2FjaGUvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2ZlNTVhLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9OT1RJQ0UKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1RaTRqIEZpbGUgUGVyc2lzdGVuY2UgRXh0ZW5zaW9uCi1Db3B5cmlnaHQgMjAwNy0yMDA4LCBUaGUgUWk0aiBEZXZlbG9wbWVudCBUZWFtIG9mIGluZGl2aWR1YWxzLgotCi1TZWUgaHR0cDovL3d3dy5xaTRqLm9yZy9jb250cmlidXRvcnMuaHRtbCBmb3IgbGlzdCBvZiBvZiBpbmRpdmlkdWFscy4KLUFsc28gc2VlIGVhY2ggZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBDb3B5cmlnaHQgY2xhaW1zLgotCi1RaTRqIGlzIGEgY29tbXVuaXR5IGFnZ3JlZ2F0ZWQgd29ya3MgdW5kZXIgQ29weXJpZ2h0IGxhdy4KLUFsbCBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgd29ya3MgYXQgUWk0aiBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLUFwYWNoZSBMaWNlbnNlIHZlciAyLjAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzCi0KLUJlbG93IGZvbGxvd3MgYSBsaXN0IG9mIGJpbmFyeSBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGxpY2Vuc2VzOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIG1vZHVsZSB1c2VzIEVoY2FjaGUsIHNvZnR3YXJlIGRldmVsb3BlZCBhdCBodHRwOi8vd3d3LmVoY2FjaGUub3JnCi11bmRlciBBcGFjaGUgbGljZW5zZSAyLjAuIFNlZSBMSUNFTlNFLgotCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL2J1aWxkLmdyYWRsZSBiL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9idWlsZC5ncmFkbGUKaW5kZXggZWVkNjBmOC4uOWQ2OGQ0NSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL2J1aWxkLmdyYWRsZQorKysgYi9leHRlbnNpb25zL2NhY2hlLWVoY2FjaGUvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogRWhjYWNoZSBDYWNoZSBFeHRlbnNpb24iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBFeHRlbnNpb246IEVoQ2FjaGUifX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIEVoY2FjaGUgQ2FjaGUgRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uOiBFaENhY2hlIn19CiAKIGRlcGVuZGVuY2llcyB7CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9kZXYtc3RhdHVzLnhtbCBiL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9kZXYtc3RhdHVzLnhtbAppbmRleCAxZmIwYWI1Li5iODYzOTc2IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2NhY2hlLWVoY2FjaGUvZGV2LXN0YXR1cy54bWwKKysrIGIvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL3NyYy9kb2NzL2NhY2hlLWVoY2FjaGUudHh0IGIvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL3NyYy9kb2NzL2NhY2hlLWVoY2FjaGUudHh0CmluZGV4IDcyYmE2MTYuLjMyYzhiYzggMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9zcmMvZG9jcy9jYWNoZS1laGNhY2hlLnR4dAorKysgYi9leHRlbnNpb25zL2NhY2hlLWVoY2FjaGUvc3JjL2RvY3MvY2FjaGUtZWhjYWNoZS50eHQKQEAgLTEsMyArMSwyMSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIFtbZXh0ZW5zaW9uLWNhY2hlLWVoY2FjaGUsIEVoY2FjaGUgQ2FjaGVdXQogPSBFaGNhY2hlIENhY2hlID0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2NhY2hlL2VoY2FjaGUvRWhDYWNoZVBvb2xNaXhpbi5qYXZhIGIvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovY2FjaGUvZWhjYWNoZS9FaENhY2hlUG9vbE1peGluLmphdmEKaW5kZXggMDM4MjJkZS4uNDFhODFmNSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovY2FjaGUvZWhjYWNoZS9FaENhY2hlUG9vbE1peGluLmphdmEKKysrIGIvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovY2FjaGUvZWhjYWNoZS9FaENhY2hlUG9vbE1peGluLmphdmEKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICBTdHJpbmcgbmFtZSA9IGNvbmYuY2FjaGVNYW5hZ2VyTmFtZSgpLmdldCgpOwogICAgICAgICBpZiggbmFtZSA9PSBudWxsICkKICAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9ICJRaTRqIENhY2hlIEV4dGVuc2lvbiI7CisgICAgICAgICAgICBuYW1lID0gIlplc3QgQ2FjaGUgRXh0ZW5zaW9uIjsKICAgICAgICAgfQogICAgICAgICBjb25maWd1cmF0aW9uLnNldE5hbWUoIG5hbWUgKTsKICAgICAgICAgU3RyaW5nIGRpc2tTdG9yZVBhdGggPSBjb25mLmRpc2tTdG9yZVBhdGgoKS5nZXQoKTsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2NhY2hlL2VoY2FjaGUvYXNzZW1ibHkvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovY2FjaGUvZWhjYWNoZS9hc3NlbWJseS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhOTc5MAotLS0gL2Rldi9udWxsCisrKyBiL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2NhY2hlL2VoY2FjaGUvYXNzZW1ibHkvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGh0bWw+CisgICAgPGJvZHk+CisgICAgICAgIDxoMj5FSENhY2hlIEVudGl0eVN0b3JlIENhY2hlUG9vbCBBc3NlbWJseS48L2gyPgorICAgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2NhY2hlL2VoY2FjaGUvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9jYWNoZS1laGNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovY2FjaGUvZWhjYWNoZS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4NjE3YgotLS0gL2Rldi9udWxsCisrKyBiL2V4dGVuc2lvbnMvY2FjaGUtZWhjYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2NhY2hlL2VoY2FjaGUvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGh0bWw+CisgICAgPGJvZHk+CisgICAgICAgIDxoMj5FSENhY2hlIEVudGl0eVN0b3JlIENhY2hlUG9vbC48L2gyPgorICAgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvY2FjaGUtbWVtY2FjaGUvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9jYWNoZS1tZW1jYWNoZS9idWlsZC5ncmFkbGUKaW5kZXggMDk5Y2RlNy4uYzc4MzU2ZiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9jYWNoZS1tZW1jYWNoZS9idWlsZC5ncmFkbGUKKysrIGIvZXh0ZW5zaW9ucy9jYWNoZS1tZW1jYWNoZS9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBNZW1jYWNoZSBDYWNoZSBFeHRlbnNpb24iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBFeHRlbnNpb24gLSBDYWNoZSAtIE1lbWNhY2hlIn19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBNZW1jYWNoZSBDYWNoZSBFeHRlbnNpb24iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBFeHRlbnNpb24gLSBDYWNoZSAtIE1lbWNhY2hlIn19CiAKIGRlcGVuZGVuY2llcyB7CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvY2FjaGUtbWVtY2FjaGUvZGV2LXN0YXR1cy54bWwgYi9leHRlbnNpb25zL2NhY2hlLW1lbWNhY2hlL2Rldi1zdGF0dXMueG1sCmluZGV4IDFmYjBhYjUuLmI4NjM5NzYgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvY2FjaGUtbWVtY2FjaGUvZGV2LXN0YXR1cy54bWwKKysrIGIvZXh0ZW5zaW9ucy9jYWNoZS1tZW1jYWNoZS9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvY2FjaGUtbWVtY2FjaGUvc3JjL2RvY3MvY2FjaGUtbWVtY2FjaGUudHh0IGIvZXh0ZW5zaW9ucy9jYWNoZS1tZW1jYWNoZS9zcmMvZG9jcy9jYWNoZS1tZW1jYWNoZS50eHQKaW5kZXggNTI4NTlkNi4uNWNkNTA4MSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9jYWNoZS1tZW1jYWNoZS9zcmMvZG9jcy9jYWNoZS1tZW1jYWNoZS50eHQKKysrIGIvZXh0ZW5zaW9ucy9jYWNoZS1tZW1jYWNoZS9zcmMvZG9jcy9jYWNoZS1tZW1jYWNoZS50eHQKQEAgLTEsMyArMSwyMSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIFtbZXh0ZW5zaW9uLWNhY2hlLW1lbWNhY2hlLCBNZW1jYWNoZSBDYWNoZV1dCiA9IE1lbWNhY2hlIENhY2hlID0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvY2FjaGUtbWVtY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9jYWNoZS9tZW1jYWNoZS9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2NhY2hlLW1lbWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovY2FjaGUvbWVtY2FjaGUvcGFja2FnZS5odG1sCmluZGV4IGJmZDcyMWQuLjc1ZjIzNDMgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvY2FjaGUtbWVtY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9jYWNoZS9tZW1jYWNoZS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9jYWNoZS1tZW1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2NhY2hlL21lbWNhY2hlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+TWVtY2FjaGUgRW50aXR5U3RvcmUgQ2FjaGVQb29sLjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvTk9USUNFIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL05PVElDRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM0MDgzMC4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotUWk0aiBGaWxlIFBlcnNpc3RlbmNlIEV4dGVuc2lvbgotQ29weXJpZ2h0IDIwMDctMjAwOCwgVGhlIFFpNGogRGV2ZWxvcG1lbnQgVGVhbSBvZiBpbmRpdmlkdWFscy4KLQotU2VlIGh0dHA6Ly93d3cucWk0ai5vcmcvY29udHJpYnV0b3JzLmh0bWwgZm9yIGxpc3Qgb2Ygb2YgaW5kaXZpZHVhbHMuCi1BbHNvIHNlZSBlYWNoIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgQ29weXJpZ2h0IGNsYWltcy4KLQotUWk0aiBpcyBhIGNvbW11bml0eSBhZ2dyZWdhdGVkIHdvcmtzIHVuZGVyIENvcHlyaWdodCBsYXcuCi1BbGwgcGFydHMgb2YgdGhlIG9yaWdpbmFsIHdvcmtzIGF0IFFpNGogaXMgbGljZW5zZWQgdW5kZXIgdGhlCi1BcGFjaGUgTGljZW5zZSB2ZXIgMi4wIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcwotCi1CZWxvdyBmb2xsb3dzIGEgbGlzdCBvZiBiaW5hcnkgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBsaWNlbnNlczsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotPE5PTkU+Ci0KLUVORCBPRiBOT1RJQ0UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL2J1aWxkLmdyYWRsZQppbmRleCAzMjFhMWVjLi41Y2U2ZjYzIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvYnVpbGQuZ3JhZGxlCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZmlsZS9idWlsZC5ncmFkbGUKQEAgLTEsNCArMSwyMyBAQAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBGaWxlIHN5c3RlbSIgfX0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBFeHRlbnNpb24gLSBFbnRpdHlTdG9yZSAtIEZpbGUgc3lzdGVtIiB9fQogCiBkZXBlbmRlbmNpZXMgewogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvZGV2LXN0YXR1cy54bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvZGV2LXN0YXR1cy54bWwKaW5kZXggMzAzODJhYy4uOTRkNjMzZiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL2Rldi1zdGF0dXMueG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZmlsZS9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZmlsZS9zcmMvZG9jcy9lcy1maWxlLnR4dCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZmlsZS9zcmMvZG9jcy9lcy1maWxlLnR4dAppbmRleCA0MDQxMTE1Li4xY2YyNWNjIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL2RvY3MvZXMtZmlsZS50eHQKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL3NyYy9kb2NzL2VzLWZpbGUudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2V4dGVuc2lvbi1lcy1maWxlLEZpbGUgRW50aXR5U3RvcmVdXQogPSBGaWxlIEVudGl0eVN0b3JlID0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZmlsZS9GaWxlRW50aXR5U3RvcmVDb25maWd1cmF0aW9uLmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL0ZpbGVFbnRpdHlTdG9yZUNvbmZpZ3VyYXRpb24uamF2YQppbmRleCAzNDM5NWMwLi5jZjk3YWY4IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL0ZpbGVFbnRpdHlTdG9yZUNvbmZpZ3VyYXRpb24uamF2YQorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL0ZpbGVFbnRpdHlTdG9yZUNvbmZpZ3VyYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5maWxlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5PcHRpb25hbDsKQEAgLTE2LDggKzM0LDIyIEBACiAgICAgLyoqCiAgICAgICogVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgRmlsZSBFbnRpdHkgU3RvcmUgd2lsbCBiZSBrZWVwIGl0cyBwZXJzaXN0ZWQgc3RhdGUuCiAgICAgICogPHA+Ci0gICAgICogRGVmYXVsdDogU3lzdGVtLmdldFByb3BlcnR5KCAidXNlci5kaXIiICkgKyAiL3FpNGovZmlsZXN0b3JlIjsKKyAgICAgKiAgICAgSWYgbm8gY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZCBhdCBhbGwsIHRoZW4gdGhlIGRlZmF1bHQgbG9jYXRpb24gaXMKKyAgICAgKiAgICAge0Bjb2RlIFN5c3RlbS5nZXRQcm9wZXJ0eSggInVzZXIuZGlyIiApICsgIi9xaTRqL2ZpbGVzdG9yZSI7IH0uCisgICAgICogICAgIElmIGEgY29uZmlndXJhdGlvbiBpcyBnaXZlbiwgdGhlIGVudGl0eSBzdG9yZSB3aWxsIGJlIHBsYWNlZCBpbiB0aGUKKyAgICAgKiAgICAgREFUQSBkaXJlY3RvcnksIHdoaWNoIGlzIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMuCiAgICAgICogPC9wPgorICAgICAqIDx0YWJsZSBzdW1tYXJ5PSJEZWZhdWx0IGxvY2F0aW9ucyI+CisgICAgICogICAgIDx0cj48dGg+T1M8L3RoPjx0aD5Mb2NhdGlvbjwvdGg+PC90cj4KKyAgICAgKiAgICAgPHRyPjx0ZD5MaW51eC9Vbml4PC90ZD48dGQ+e3VzZXJ9Ly57YXBwbGljYXRpb259L2RhdGE8L3RkPjwvdHI+CisgICAgICogICAgIDx0cj48dGQ+T1NYPC90ZD48dGQ+e3VzZXJ9L0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC97YXBwbGljYXRpb259PC90ZD48L3RyPgorICAgICAqICAgICA8dHI+PHRkPldpbmRvd3M8L3RkPjx0ZD57dXNlcn0vQXBwbGljYXRpb24gRGF0YS97YXBwbGljYXRpb259L2RhdGE8L3RkPjwvdHI+CisgICAgICogPC90YWJsZT4KKyAgICAgKiA8cHJlPjxjb2RlPgorICAgICAqIHdoZXJlOworICAgICAqICAge3VzZXJ9ID0gQ3VycmVudCBVc2VyJ3MgaG9tZSBkaXJlY3RvcnkKKyAgICAgKiAgIHthcHBsaWNhdGlvbn0gPSBBcHBsaWNhdGlvbidzIG5hbWUsIGFzIHNldCBpbiBhc3NlbWJseS4KKyAgICAgKiA8L2NvZGU+PC9wcmU+CiAgICAgICogPHA+CiAgICAgICogSWdub3JlZCBpZiB0aGUgRmlsZUNvbmZpZ3VyYXRpb24gc2VydmljZSBpcyBmb3VuZC4KICAgICAgKiA8L3A+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL0ZpbGVFbnRpdHlTdG9yZU1peGluLmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL0ZpbGVFbnRpdHlTdG9yZU1peGluLmphdmEKaW5kZXggZjMzNTY2OS4uZmE3MWVhNyAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZmlsZS9GaWxlRW50aXR5U3RvcmVNaXhpbi5qYXZhCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZmlsZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2ZpbGUvRmlsZUVudGl0eVN0b3JlTWl4aW4uamF2YQpAQCAtNDQsNiArNDQsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmlvLlNlbmRlcjsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmZpbGVjb25maWcuRmlsZUNvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkJhY2t1cFJlc3RvcmU7CitpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eUFscmVhZHlFeGlzdHNFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuaGVscGVycy5NYXBFbnRpdHlTdG9yZTsKQEAgLTczLDE3ICs3NCwxNSBAQAogICAgICAgICB7CiAgICAgICAgICAgICBpZiggZmlsZUNvbmZpZ3VyYXRpb24gIT0gbnVsbCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGF0aE5hbWUgPSBuZXcgRmlsZSggZmlsZUNvbmZpZ3VyYXRpb24uZGF0YURpcmVjdG9yeSgpLCBjb25maWcuZ2V0KCkKLSAgICAgICAgICAgICAgICAgICAgLmlkZW50aXR5KCkKLSAgICAgICAgICAgICAgICAgICAgLmdldCgpICkuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN0b3JlSWQgPSBjb25maWcuZ2V0KCkuaWRlbnRpdHkoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBwYXRoTmFtZSA9IG5ldyBGaWxlKCBmaWxlQ29uZmlndXJhdGlvbi5kYXRhRGlyZWN0b3J5KCksIHN0b3JlSWQgKS5nZXRBYnNvbHV0ZVBhdGgoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBwYXRoTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSggInVzZXIuZGlyIiApICsgIi9xaTRqL2ZpbGVzdG9yZS8iOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEZpbGUgcm9vdERpcmVjdG9yeSA9IG5ldyBGaWxlKCBwYXRoTmFtZSApLmdldEFic29sdXRlRmlsZSgpOwotICAgICAgICBkYXRhRGlyZWN0b3J5ID0gbmV3IEZpbGUoIHJvb3REaXJlY3RvcnksICJkYXRhIiApOworICAgICAgICBkYXRhRGlyZWN0b3J5ID0gbmV3IEZpbGUoIHBhdGhOYW1lICkuZ2V0QWJzb2x1dGVGaWxlKCk7CiAgICAgICAgIGlmKCAhZGF0YURpcmVjdG9yeS5leGlzdHMoKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmKCAhZGF0YURpcmVjdG9yeS5ta2RpcnMoKSApCkBAIC0yMTYsNiArMjE1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gc3RhdGVBcnJheSA9IHRoaXMudG9TdHJpbmcoKS5nZXRCeXRlcyggIlVURi04IiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgZGF0YUZpbGUgPSBnZXREYXRhRmlsZSggcmVmICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGRhdGFGaWxlLmV4aXN0cygpICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlBbHJlYWR5RXhpc3RzRXhjZXB0aW9uKCByZWYgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUoIGRhdGFGaWxlLCBzdGF0ZUFycmF5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH07CkBAIC0yNDgsNiArMjUxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uKCByZWYgKTsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBSZXN1bHRPZk1ldGhvZENhbGxJZ25vcmVkCiAgICAgICAgICAgICAgICAgICAgIGRhdGFGaWxlLmRlbGV0ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gKTsKQEAgLTI1Niw3ICsyNjAsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBpZiggZSBpbnN0YW5jZW9mIEVudGl0eVN0b3JlRXhjZXB0aW9uICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyAoRW50aXR5U3RvcmVFeGNlcHRpb24pIGU7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTI3Nyw4ICsyODEsOCBAQAogICAgICAgICAgICAgICAgIG91dHB1dC5yZWNlaXZlRnJvbSggbmV3IFNlbmRlcjxTdHJpbmcsIElPRXhjZXB0aW9uPigpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIDxSZWNlaXZlclRocm93YWJsZVR5cGUgZXh0ZW5kcyBUaHJvd2FibGU+IHZvaWQgc2VuZFRvKCBSZWNlaXZlcjw/IHN1cGVyIFN0cmluZywgUmVjZWl2ZXJUaHJvd2FibGVUeXBlPiByZWNlaXZlciApCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVjZWl2ZXJUaHJvd2FibGVUeXBlLCBJT0V4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgPFRocm93YWJsZVR5cGUgZXh0ZW5kcyBUaHJvd2FibGU+IHZvaWQgc2VuZFRvKCBSZWNlaXZlcjw/IHN1cGVyIFN0cmluZywgVGhyb3dhYmxlVHlwZT4gcmVjZWl2ZXIgKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFRocm93YWJsZVR5cGUsIElPRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggRmlsZSBzbGljZURpcmVjdG9yeSA6IGRhdGFEaXJlY3RvcnkubGlzdEZpbGVzKCkgKQogICAgICAgICAgICAgICAgICAgICAgICAgewpAQCAtMzMxLDggKzMzNSw4IEBACiAgICAgICAgICAgICAgICAgb3V0cHV0LnJlY2VpdmVGcm9tKCBuZXcgU2VuZGVyPFJlYWRlciwgSU9FeGNlcHRpb24+KCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgPFJlY2VpdmVyVGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBzZW5kVG8oIFJlY2VpdmVyPD8gc3VwZXIgUmVhZGVyLCBSZWNlaXZlclRocm93YWJsZVR5cGU+IHJlY2VpdmVyICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZWNlaXZlclRocm93YWJsZVR5cGUsIElPRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyA8VGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBzZW5kVG8oIFJlY2VpdmVyPD8gc3VwZXIgUmVhZGVyLCBUaHJvd2FibGVUeXBlPiByZWNlaXZlciApCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgVGhyb3dhYmxlVHlwZSwgSU9FeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBGaWxlIHNsaWNlRGlyZWN0b3J5IDogZGF0YURpcmVjdG9yeS5saXN0RmlsZXMoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICB7CkBAIC0zNTAsMTUgKzM1NCw1NyBAQAogCiAgICAgcHJpdmF0ZSBGaWxlIGdldERhdGFGaWxlKCBTdHJpbmcgaWRlbnRpdHkgKQogICAgIHsKKyAgICAgICAgaWRlbnRpdHkgPSByZXBsYWNlSW52YWxpZENoYXJzKCBpZGVudGl0eSApOwogICAgICAgICBTdHJpbmcgc2xpY2UgPSAiIiArICggTWF0aC5hYnMoIGlkZW50aXR5Lmhhc2hDb2RlKCkgKSAlIHNsaWNlcyApOwogICAgICAgICBGaWxlIHNsaWNlRGlyZWN0b3J5ID0gbmV3IEZpbGUoIGRhdGFEaXJlY3RvcnksIHNsaWNlICk7CiAgICAgICAgIGlmKCAhc2xpY2VEaXJlY3RvcnkuZXhpc3RzKCkgKQogICAgICAgICB7CisgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBSZXN1bHRPZk1ldGhvZENhbGxJZ25vcmVkCiAgICAgICAgICAgICBzbGljZURpcmVjdG9yeS5ta2RpcnMoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbmV3IEZpbGUoIHNsaWNlRGlyZWN0b3J5LCBpZGVudGl0eSArICIuanNvbiIgKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBXZSBuZWVkIHRvIHJlcGxhY2UgYWxsIGNoYXJhY3RlcnMgdGhhdCBzb21lIGZpbGUgc3lzdGVtIGNhbid0IGhhbmRsZS4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgcmVzdWx0aW5nIGZpbGVzIHNob3VsZCBiZSBwb3J0YWJsZSBhY3Jvc3MgZmlsZXN5c3RlbXMuCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGlkZW50aXR5IFRoZSBpZGVudGl0eSB0aGF0IG5lZWRzIGEgZmlsZSB0byBiZSBzdG9yZWQgaW4uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgZmlsZXN5c3RlbS1zYWZlIG5hbWUuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgcmVwbGFjZUludmFsaWRDaGFycyggU3RyaW5nIGlkZW50aXR5ICkKKyAgICB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCBpZGVudGl0eS5sZW5ndGgoKSArIDMwICk7CisgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgaWRlbnRpdHkubGVuZ3RoKCk7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgY2ggPSBpZGVudGl0eS5jaGFyQXQoIGkgKTsKKyAgICAgICAgICAgIGlmKCAoIGNoID49ICdhJyAmJiBjaCA8PSAneicgKQorICAgICAgICAgICAgICAgIHx8ICggY2ggPj0gJ0EnICYmIGNoIDw9ICdaJyApCisgICAgICAgICAgICAgICAgfHwgKCBjaCA+PSAnMCcgJiYgY2ggPD0gJzknICkKKyAgICAgICAgICAgICAgICB8fCBjaCA9PSAnXycgfHwgY2ggPT0gJy4nIHx8IGNoID09ICctJyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYi5hcHBlbmQoIGNoICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKGludCkgY2g7CisgICAgICAgICAgICAgICAgYi5hcHBlbmQoICd+JyApOworICAgICAgICAgICAgICAgIGIuYXBwZW5kKCB0b0hleCggdmFsdWUgKSApOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyB0b0hleCggaW50IHZhbHVlICkKKyAgICB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSAiMDAwIiArIEludGVnZXIudG9IZXhTdHJpbmcoIHZhbHVlICk7CisgICAgICAgIHJldHVybiByZXN1bHQuc3Vic3RyaW5nKCByZXN1bHQubGVuZ3RoKCkgLSA0ICk7CisgICAgfQorCiAgICAgcHJpdmF0ZSBGaWxlIGdldERhdGFGaWxlKCBFbnRpdHlSZWZlcmVuY2UgcmVmICkKICAgICB7CiAgICAgICAgIHJldHVybiBnZXREYXRhRmlsZSggcmVmLmlkZW50aXR5KCkgKTsKQEAgLTM2Nyw3ICs0MTMsNyBAQAogICAgIHByaXZhdGUgYnl0ZVtdIGZldGNoKCBGaWxlIGRhdGFGaWxlICkKICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCiAgICAgewotICAgICAgICBieXRlW10gYnVmID0gbmV3IGJ5dGVbIDEwMDAgXTsKKyAgICAgICAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzEwMDBdOwogICAgICAgICBCdWZmZXJlZElucHV0U3RyZWFtIGluID0gbnVsbDsKICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG51bGw7CiAgICAgICAgIHRyeQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZmlsZS9hc3NlbWJseS9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbAppbmRleCBlZDg4NTAzLi40M2U1YzA4IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RmlsZSBFbnRpdHlTdG9yZSBBc3NlbWJseS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZmlsZS9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL3BhY2thZ2UuaHRtbAppbmRleCA0ZTZhNDNhLi5lZjk4NmM5IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RmlsZSBFbnRpdHlTdG9yZS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZmlsZS9GaWxlRW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0LmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWZpbGUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9maWxlL0ZpbGVFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQzMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1maWxlL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZmlsZS9GaWxlRW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0LmphdmEKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUuZmlsZTsKKworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmVudGl0eXN0b3JlLmZpbGUuYXNzZW1ibHkuRmlsZUVudGl0eVN0b3JlQXNzZW1ibGVyOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZmlsZWNvbmZpZy5GaWxlQ29uZmlndXJhdGlvblNlcnZpY2U7CitpbXBvcnQgb3JnLnFpNGoudGVzdC5FbnRpdHlUZXN0QXNzZW1ibGVyOworaW1wb3J0IG9yZy5xaTRqLnRlc3QuY2FjaGUuQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3Q7CitpbXBvcnQgb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLm9yZ2pzb24uT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcjsKKworcHVibGljIGNsYXNzIEZpbGVFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QKKyAgICBleHRlbmRzIEFic3RyYWN0RW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0Cit7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgc3VwZXIuYXNzZW1ibGUoIG1vZHVsZSApOworICAgICAgICBtb2R1bGUuc2VydmljZXMoIEZpbGVDb25maWd1cmF0aW9uU2VydmljZS5jbGFzcyApOworICAgICAgICBNb2R1bGVBc3NlbWJseSBjb25maWcgPSBtb2R1bGUubGF5ZXIoKS5tb2R1bGUoICJjb25maWciICk7CisgICAgICAgIG5ldyBFbnRpdHlUZXN0QXNzZW1ibGVyKCkuYXNzZW1ibGUoIGNvbmZpZyApOworICAgICAgICBuZXcgT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKKyAgICAgICAgbmV3IEZpbGVFbnRpdHlTdG9yZUFzc2VtYmxlcigpLndpdGhDb25maWcoIGNvbmZpZywgVmlzaWJpbGl0eS5sYXllciApLmFzc2VtYmxlKCBtb2R1bGUgKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9OT1RJQ0UgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOGUzMWMuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotUWk0aiBHb29nbGUgQXBwRW5naW5lIFBlcnNpc3RlbmNlIEV4dGVuc2lvbgotQ29weXJpZ2h0IDIwMDctMjAwOCwgVGhlIFFpNGogRGV2ZWxvcG1lbnQgVGVhbSBvZiBpbmRpdmlkdWFscy4KLQotU2VlIGh0dHA6Ly93d3cucWk0ai5vcmcvY29udHJpYnV0b3JzLmh0bWwgZm9yIGxpc3Qgb2Ygb2YgaW5kaXZpZHVhbHMuCi1BbHNvIHNlZSBlYWNoIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgQ29weXJpZ2h0IGNsYWltcy4KLQotUWk0aiBpcyBhIGNvbW11bml0eSBhZ2dyZWdhdGVkIHdvcmtzIHVuZGVyIENvcHlyaWdodCBsYXcuCi1BbGwgcGFydHMgb2YgdGhlIG9yaWdpbmFsIHdvcmtzIGF0IFFpNGogaXMgbGljZW5zZWQgdW5kZXIgdGhlCi1BcGFjaGUgTGljZW5zZSB2ZXIgMi4wIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcwotCi1CZWxvdyBmb2xsb3dzIGEgbGlzdCBvZiBiaW5hcnkgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBsaWNlbnNlczsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotPE5PTkU+Ci0KLUVORCBPRiBOT1RJQ0UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9idWlsZC5ncmFkbGUgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9idWlsZC5ncmFkbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMjVmNWQuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvYnVpbGQuZ3JhZGxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotCi1kZXNjcmlwdGlvbiA9ICJRaTRqIEdvb2dsZSBBcHBFbmdpbmUgRXh0ZW5zaW9uLiBVdGlsaXplcyB0aGUgR0FFIGRhdGEgc3RvcmUgYXMgRW50aXR5U3RvcmUgZm9yIGFwcGxpY2F0aW9ucyBkZXBsb3llZCBvbiBHQUUuIgotCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBFeHRlbnNpb24gLSBFbnRpdHlTdG9yZSAtIEdvb2dsZSBBcHAgRW5naW5lIiB9fQotCi1kZXBlbmRlbmNpZXMgewotCi0gIGNvbXBpbGUgcHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5zcGkiICkKLSAgY29tcGlsZSBwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIgKQotICBjb21waWxlIHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5sb2NraW5nIiApCi0gIGNvbXBpbGUgbGlicmFyaWVzLmFwcGVuZ2luZQotCi0gIHRlc3RDb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IiApCi0KLSAgdGVzdFJ1bnRpbWUgcHJvamVjdCggIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIgKQotICB0ZXN0UnVudGltZSBsaWJyYXJpZXMubG9nYmFjawotCi19CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9kZXYtc3RhdHVzLnhtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL2Rldi1zdGF0dXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjJkM2RjLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL2Rldi1zdGF0dXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCi0gICAgICAgIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZCI+Ci0gIDxzdGF0dXM+Ci0gICAgICAgIDwhLS1ub25lLGVhcmx5LGJldGEsc3RhYmxlLG1hdHVyZS0tPgotICAgICAgICA8Y29kZWJhc2U+YmV0YTwvY29kZWJhc2U+Ci0KLSAgICAgICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgICAgIDxkb2N1bWVudGF0aW9uPm5vbmU8L2RvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgPCEtLSBub25lLCBzb21lLCBnb29kLCBjb21wbGV0ZSAtLT4KLSAgICAgICAgPHVuaXR0ZXN0cz5ub25lPC91bml0dGVzdHM+Ci0gICAgPC9zdGF0dXM+Ci0gICAgPGxpY2Vuc2VzPgotICAgICAgICA8bGljZW5zZT5BTHYyPC9saWNlbnNlPgotICAgIDwvbGljZW5zZXM+Ci08L21vZHVsZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9zcmMvZG9jcy9lcy1nYWUudHh0IGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL2RvY3MvZXMtZ2FlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0Nzg1My4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9zcmMvZG9jcy9lcy1nYWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotW1tleHRlbnNpb24tZXMtZ2FlLEFwcEVuZ2luZSBFbnRpdHlTdG9yZV1dCi09IEdvb2dsZSBBcHBFbmdpbmUgRW50aXR5U3RvcmUgPQotCi1bZGV2c3RhdHVzXQotLS0tLS0tLS0tLS0tLS0KLXNvdXJjZT1leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9kZXYtc3RhdHVzLnhtbAotLS0tLS0tLS0tLS0tLS0KLQotQXBwRW5naW5lIEVudGl0eVN0b3JlCi0KLU5PVEU6IFRoaXMgRXh0ZW5zaW9uIGhhcyBubyBkb2N1bWVudGF0aW9uIHlldC4gTGVhcm4gaG93IHRvIGNvbnRyaWJ1dGUgaW4gPDxjb21tdW5pdHktZG9jcz4+LgotCi1pbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvR2FlRW50aXR5U3RhdGUuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlL0dhZUVudGl0eVN0YXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NDhhNTQuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvR2FlRW50aXR5U3RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4uCi0gKgotICogTGljZW5zZWQgIHVuZGVyIHRoZSAgQXBhY2hlIExpY2Vuc2UsICBWZXJzaW9uIDIuMCAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlICB0aGlzIGZpbGUgIGV4Y2VwdCBpbiAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUuZ2FlOwotCi1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5FbnRpdHk7Ci1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5LZXk7Ci1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5UZXh0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5RGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKLWltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS50eXBlLlZhbHVlQ29tcG9zaXRlVHlwZTsKLWltcG9ydCBvcmcucWk0ai5hcGkudHlwZS5WYWx1ZVR5cGU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlU2VyaWFsaXphdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVTZXJpYWxpemF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0dXM7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5NYW55QXNzb2NpYXRpb25TdGF0ZTsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5Lk5hbWVkQXNzb2NpYXRpb25TdGF0ZTsKLQotaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5maXJzdDsKLWltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMudG9MaXN0OwotCi1wdWJsaWMgY2xhc3MgR2FlRW50aXR5U3RhdGUKLSAgICBpbXBsZW1lbnRzIEVudGl0eVN0YXRlCi17Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWV9UWVBFID0gIiR0eXBlIjsKLQotICAgIHByaXZhdGUgZmluYWwgRW50aXR5IGVudGl0eTsKLSAgICBwcml2YXRlIEVudGl0eVN0YXR1cyBzdGF0dXM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBHYWVFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yazsKLSAgICBwcml2YXRlIGZpbmFsIFZhbHVlU2VyaWFsaXphdGlvbiB2YWx1ZVNlcmlhbGl6YXRpb247Ci0gICAgcHJpdmF0ZSBmaW5hbCBFbnRpdHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFF1YWxpZmllZE5hbWUsIFZhbHVlVHlwZT4gdmFsdWVUeXBlczsKLSAgICBwcml2YXRlIGZpbmFsIE1vZHVsZSBtb2R1bGU7Ci0KLSAgICBwdWJsaWMgR2FlRW50aXR5U3RhdGUoIEdhZUVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVTZXJpYWxpemF0aW9uIHZhbHVlU2VyaWFsaXphdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleSBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgbW9kdWxlICkKLSAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkdhZUVudGl0eVN0YXRlKCAiICsgdW5pdE9mV29yayArICIsICIgKyBrZXkgKyAiLCAiICsgZGVzY3JpcHRvciArICIgKSIgKTsKLSAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7Ci0gICAgICAgIHRoaXMudW5pdE9mV29yayA9IHVuaXRPZldvcms7Ci0gICAgICAgIHRoaXMudmFsdWVTZXJpYWxpemF0aW9uID0gdmFsdWVTZXJpYWxpemF0aW9uOwotICAgICAgICB0aGlzLmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwotICAgICAgICBlbnRpdHkgPSBuZXcgRW50aXR5KCBrZXkgKTsKLSAgICAgICAgZW50aXR5LnNldFByb3BlcnR5KCAiJHZlcnNpb24iLCB1bml0T2ZXb3JrLmlkZW50aXR5KCkgKTsKLSAgICAgICAgQ2xhc3MgdHlwZSA9IGZpcnN0KCBkZXNjcmlwdG9yLnR5cGVzKCkgKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiTmV3IEVudGl0eVxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBkZXNjcmlwdG9yOiIgKyBkZXNjcmlwdG9yICsgIlxuICAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGVudGl0eVR5cGU6IiArIG5hbWUgKyAiXG4gICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbmFtZToiICsgbmFtZSArICJcbiAgIgotICAgICAgICApOwotICAgICAgICBlbnRpdHkuc2V0VW5pbmRleGVkUHJvcGVydHkoIFBST1BFUlRZX1RZUEUsIG5hbWUgKTsKLSAgICAgICAgc3RhdHVzID0gRW50aXR5U3RhdHVzLk5FVzsKLSAgICAgICAgdmFsdWVUeXBlcyA9IGluaXRpYWxpemVWYWx1ZVR5cGVzKCBkZXNjcmlwdG9yICk7Ci0gICAgfQotCi0gICAgcHVibGljIEdhZUVudGl0eVN0YXRlKCBHYWVFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlU2VyaWFsaXphdGlvbiB2YWx1ZVNlcmlhbGl6YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHkgZW50aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlIG1vZHVsZSApCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJHYWVFbnRpdHlTdGF0ZSggIiArIHVuaXRPZldvcmsgKyAiLCAiICsgZW50aXR5ICsgIiApIiApOwotICAgICAgICBpZiggZW50aXR5ID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBpZiggdW5pdE9mV29yayA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7Ci0gICAgICAgIHRoaXMudW5pdE9mV29yayA9IHVuaXRPZldvcms7Ci0gICAgICAgIHRoaXMudmFsdWVTZXJpYWxpemF0aW9uID0gdmFsdWVTZXJpYWxpemF0aW9uOwotICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKLSAgICAgICAgU3RyaW5nIHR5cGVOYW1lID0gKFN0cmluZykgZW50aXR5LmdldFByb3BlcnR5KCBHYWVFbnRpdHlTdGF0ZS5QUk9QRVJUWV9UWVBFICk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkxPQURJTkcgWyIgKyB0eXBlTmFtZSArICJdIiApOwotICAgICAgICBkZXNjcmlwdG9yID0gbW9kdWxlLmVudGl0eURlc2NyaXB0b3IoIHR5cGVOYW1lICk7Ci0gICAgICAgIHN0YXR1cyA9IEVudGl0eVN0YXR1cy5MT0FERUQ7Ci0gICAgICAgIHZhbHVlVHlwZXMgPSBpbml0aWFsaXplVmFsdWVUeXBlcyggZGVzY3JpcHRvciApOwotICAgIH0KLQotICAgIHByaXZhdGUgSGFzaE1hcDxRdWFsaWZpZWROYW1lLCBWYWx1ZVR5cGU+IGluaXRpYWxpemVWYWx1ZVR5cGVzKCBFbnRpdHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgKQotICAgIHsKLSAgICAgICAgSGFzaE1hcDxRdWFsaWZpZWROYW1lLCBWYWx1ZVR5cGU+IHJlc3VsdCA9IG5ldyBIYXNoTWFwPFF1YWxpZmllZE5hbWUsIFZhbHVlVHlwZT4oKTsKLSAgICAgICAgZm9yKCBQcm9wZXJ0eURlc2NyaXB0b3IgcGVyc2lzdGVudCA6IGRlc2NyaXB0b3Iuc3RhdGUoKS5wcm9wZXJ0aWVzKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiggcGVyc2lzdGVudC52YWx1ZVR5cGUoKSBpbnN0YW5jZW9mIFZhbHVlQ29tcG9zaXRlVHlwZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBuYW1lID0gcGVyc2lzdGVudC5xdWFsaWZpZWROYW1lKCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnB1dCggbmFtZSwgcGVyc2lzdGVudC52YWx1ZVR5cGUoKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgRW50aXR5IGVudGl0eSgpCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJlbnRpdHkoKSAgLS0+ICAiICsgZW50aXR5ICk7Ci0gICAgICAgIHJldHVybiBlbnRpdHk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSgpCi0gICAgewotICAgICAgICBFbnRpdHlSZWZlcmVuY2UgcmVmID0gbmV3IEVudGl0eVJlZmVyZW5jZSggZW50aXR5LmdldEtleSgpLmdldE5hbWUoKSApOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJpZGVudGl0eSgpICAtLT4gICIgKyByZWYgKTsKLSAgICAgICAgcmV0dXJuIHJlZjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHZlcnNpb24oKQotICAgIHsKLSAgICAgICAgU3RyaW5nIHZlcnNpb24gPSAoU3RyaW5nKSBlbnRpdHkuZ2V0UHJvcGVydHkoICIkdmVyc2lvbiIgKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAidmVyc2lvbigpICAtLT4gICIgKyB2ZXJzaW9uICk7Ci0gICAgICAgIHJldHVybiB2ZXJzaW9uOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBsb25nIGxhc3RNb2RpZmllZCgpCi0gICAgewotICAgICAgICBMb25nIGxhc3RNb2RpZmllZCA9IChMb25nKSBlbnRpdHkuZ2V0UHJvcGVydHkoICIkbGFzdE1vZGlmaWVkIiApOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJsYXN0TW9kaWZpZWQoKSAgLS0+ICAiICsgbGFzdE1vZGlmaWVkICk7Ci0gICAgICAgIHJldHVybiBsYXN0TW9kaWZpZWQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKCkKLSAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggInJlbW92ZSgpIiApOwotICAgICAgICBzdGF0dXMgPSBFbnRpdHlTdGF0dXMuUkVNT1ZFRDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRW50aXR5U3RhdHVzIHN0YXR1cygpCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJzdGF0dXMoKSAgLS0+ICAiICsgc3RhdHVzICk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNBc3NpZ25hYmxlVG8oIENsYXNzPD8+IHR5cGUgKQotICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiaXNBc3NpZ25hYmxlVG8oICIgKyB0eXBlICsgIiApICAtLT4gIGZhbHNlIiApOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvcigpCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJlbnRpdHlEZXNjcmlwdG9yKCkgIC0tPiAgIiArIGRlc2NyaXB0b3IgKTsKLSAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBwcm9wZXJ0eVZhbHVlT2YoIFF1YWxpZmllZE5hbWUgc3RhdGVOYW1lICkKLSAgICB7Ci0gICAgICAgIFN0cmluZyB1cmkgPSBzdGF0ZU5hbWUudG9VUkkoKTsKLSAgICAgICAgT2JqZWN0IHZhbHVlID0gZW50aXR5LmdldFByb3BlcnR5KCB1cmkgKTsKLSAgICAgICAgaWYoIHZhbHVlIGluc3RhbmNlb2YgVGV4dCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbHVlID0gKCAoVGV4dCkgdmFsdWUgKS5nZXRWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIFZhbHVlVHlwZSB0eXBlID0gdmFsdWVUeXBlcy5nZXQoIHN0YXRlTmFtZSApOwotICAgICAgICBpZiggdmFsdWUgIT0gbnVsbCAmJiB0eXBlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlU2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZSggdHlwZSwgdmFsdWUudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2goIFZhbHVlU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJcbnF1YWxpZmllZE5hbWU6ICIgKyBzdGF0ZU5hbWUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuICAgIHN0YXRlTmFtZTogIiArIHN0YXRlTmFtZS5uYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuICAgICAgICAgIHVyaTogIiArIHVyaSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4gICAgICAgICB0eXBlOiAiICsgdHlwZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4gICAgICAgIHZhbHVlOiAiICsgdmFsdWUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yIGVycm9yID0gbmV3IEludGVybmFsRXJyb3IoIG1lc3NhZ2UgKTsKLSAgICAgICAgICAgICAgICBlcnJvci5pbml0Q2F1c2UoIGUgKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJnZXRQcm9wZXJ0eSggIiArIHN0YXRlTmFtZSArICIgKSAgLS0+ICAiICsgdXJpICsgIj0iICsgdmFsdWUgKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5VmFsdWUoIFF1YWxpZmllZE5hbWUgc3RhdGVOYW1lLCBPYmplY3QgbmV3VmFsdWUgKQotICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAic2V0UHJvcGVydHkoICIgKyBzdGF0ZU5hbWUgKyAiLCAiICsgbmV3VmFsdWUgKyAiICkiICk7Ci0gICAgICAgIE9iamVjdCB2YWx1ZSA9IG51bGw7Ci0gICAgICAgIGlmKCBuZXdWYWx1ZSA9PSBudWxsIHx8IFZhbHVlVHlwZS5pc1ByaW1pdGl2ZVZhbHVlKCBuZXdWYWx1ZSApICkKLSAgICAgICAgewotICAgICAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVTZXJpYWxpemF0aW9uLnNlcmlhbGl6ZSggbmV3VmFsdWUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKCBWYWx1ZVNlcmlhbGl6YXRpb25FeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiXG5xdWFsaWZpZWROYW1lOiAiICsgc3RhdGVOYW1lICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiAgICBzdGF0ZU5hbWU6ICIgKyBzdGF0ZU5hbWUubmFtZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiAgICAgICAgY2xhc3M6ICIgKyBuZXdWYWx1ZS5nZXRDbGFzcygpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiAgICAgICAgdmFsdWU6ICIgKyB2YWx1ZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IgZXJyb3IgPSBuZXcgSW50ZXJuYWxFcnJvciggbWVzc2FnZSApOwotICAgICAgICAgICAgICAgIGVycm9yLmluaXRDYXVzZSggZSApOwotICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmKCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbHVlID0gbmV3IFRleHQoIChTdHJpbmcpIHZhbHVlICk7Ci0gICAgICAgIH0KLSAgICAgICAgZW50aXR5LnNldFVuaW5kZXhlZFByb3BlcnR5KCBzdGF0ZU5hbWUudG9VUkkoKSwgdmFsdWUgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIGFzc29jaWF0aW9uVmFsdWVPZiggUXVhbGlmaWVkTmFtZSBzdGF0ZU5hbWUgKQotICAgIHsKLSAgICAgICAgU3RyaW5nIHVyaSA9IHN0YXRlTmFtZS50b1VSSSgpOwotICAgICAgICBTdHJpbmcgaWRlbnRpdHkgPSAoU3RyaW5nKSBlbnRpdHkuZ2V0UHJvcGVydHkoIHVyaSApOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJhc3NvY2lhdGlvbiggIiArIHN0YXRlTmFtZSArICIgKSAgLS0+ICAiICsgdXJpICsgIiA9ICIgKyBpZGVudGl0eSApOwotICAgICAgICBFbnRpdHlSZWZlcmVuY2UgcmVmID0gbmV3IEVudGl0eVJlZmVyZW5jZSggaWRlbnRpdHkgKTsKLSAgICAgICAgcmV0dXJuIHJlZjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRBc3NvY2lhdGlvblZhbHVlKCBRdWFsaWZpZWROYW1lIHN0YXRlTmFtZSwgRW50aXR5UmVmZXJlbmNlIG5ld0VudGl0eSApCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJzZXRBc3NvY2lhdGlvbiggIiArIHN0YXRlTmFtZSArICIsICIgKyBuZXdFbnRpdHkgKyAiICkiICk7Ci0gICAgICAgIFN0cmluZyB1cmkgPSBzdGF0ZU5hbWUudG9VUkkoKTsKLSAgICAgICAgU3RyaW5nIGlkID0gbnVsbDsKLSAgICAgICAgaWYoIG5ld0VudGl0eSAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgaWQgPSBuZXdFbnRpdHkuaWRlbnRpdHkoKTsKLSAgICAgICAgfQotICAgICAgICBlbnRpdHkuc2V0VW5pbmRleGVkUHJvcGVydHkoIHVyaSwgaWQgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFueUFzc29jaWF0aW9uU3RhdGUgbWFueUFzc29jaWF0aW9uVmFsdWVPZiggUXVhbGlmaWVkTmFtZSBzdGF0ZU5hbWUgKQotICAgIHsKLSAgICAgICAgTGlzdDxTdHJpbmc+IGFzc29jcyA9IChMaXN0PFN0cmluZz4pIGVudGl0eS5nZXRQcm9wZXJ0eSggc3RhdGVOYW1lLnRvVVJJKCkgKTsKLSAgICAgICAgTWFueUFzc29jaWF0aW9uU3RhdGUgc3RhdGUgPSBuZXcgR2FlTWFueUFzc29jaWF0aW9uU3RhdGUoIHRoaXMsIGFzc29jcyApOwotICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE5hbWVkQXNzb2NpYXRpb25TdGF0ZSBuYW1lZEFzc29jaWF0aW9uVmFsdWVPZiggUXVhbGlmaWVkTmFtZSBzdGF0ZU5hbWUgKQotICAgIHsKLSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBhc3NvY3MgPSAoTWFwPFN0cmluZywgU3RyaW5nPikgZW50aXR5LmdldFByb3BlcnR5KCBzdGF0ZU5hbWUudG9VUkkoKSApOwotICAgICAgICBOYW1lZEFzc29jaWF0aW9uU3RhdGUgc3RhdGUgPSBuZXcgR2FlTmFtZWRBc3NvY2lhdGlvblN0YXRlKCB0aGlzLCBhc3NvY3MgKTsKLSAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGhhc0JlZW5BcHBsaWVkKCkKLSAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImhhc0JlZW5BcHBsaWVkKCkiICk7Ci0gICAgICAgIHN0YXR1cyA9IEVudGl0eVN0YXR1cy5MT0FERUQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgR2FlTWFueUFzc29jaWF0aW9uU3RhdGUKLSAgICAgICAgaW1wbGVtZW50cyBNYW55QXNzb2NpYXRpb25TdGF0ZQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gYXNzb2NzOwotICAgICAgICBwcml2YXRlIGZpbmFsIEdhZUVudGl0eVN0YXRlIGVudGl0eVN0YXRlOwotCi0gICAgICAgIHB1YmxpYyBHYWVNYW55QXNzb2NpYXRpb25TdGF0ZSggR2FlRW50aXR5U3RhdGUgZW50aXR5U3RhdGUsIExpc3Q8U3RyaW5nPiBsaXN0T2ZBc3NvY2lhdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmVudGl0eVN0YXRlID0gZW50aXR5U3RhdGU7Ci0gICAgICAgICAgICBpZiggbGlzdE9mQXNzb2NpYXRpb25zID09IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhpcy5hc3NvY3MgPSBsaXN0T2ZBc3NvY2lhdGlvbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBjb3VudCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhc3NvY3Muc2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKCBFbnRpdHlSZWZlcmVuY2UgZW50aXR5UmVmZXJlbmNlICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFzc29jcy5jb250YWlucyggZW50aXR5UmVmZXJlbmNlLmlkZW50aXR5KCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBhZGQoIGludCBpbmRleCwgRW50aXR5UmVmZXJlbmNlIGVudGl0eVJlZmVyZW5jZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIk5JQ0xBUzo6IiArIGVudGl0eVJlZmVyZW5jZSApOwotICAgICAgICAgICAgU3RyaW5nIGlkZW50aXR5ID0gZW50aXR5UmVmZXJlbmNlLmlkZW50aXR5KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJOSUNMQVM6OiIgKyBpZGVudGl0eSApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiTklDTEFTOjoiICsgYXNzb2NzICk7Ci0gICAgICAgICAgICBpZiggYXNzb2NzLmNvbnRhaW5zKCBpZGVudGl0eSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NvY3MuYWRkKCBpbmRleCwgZW50aXR5UmVmZXJlbmNlLmlkZW50aXR5KCkgKTsKLSAgICAgICAgICAgIGVudGl0eVN0YXRlLm1hcmtVcGRhdGVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmUoIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWZlcmVuY2UgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXNzb2NzLnJlbW92ZSggZW50aXR5UmVmZXJlbmNlLmlkZW50aXR5KCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIGdldCggaW50IGluZGV4ICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGlkID0gYXNzb2NzLmdldCggaW5kZXggKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRW50aXR5UmVmZXJlbmNlKCBpZCApOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBJdGVyYXRvcjxFbnRpdHlSZWZlcmVuY2U+IGl0ZXJhdG9yKCkKLSAgICAgICAgewotICAgICAgICAgICAgQXJyYXlMaXN0PEVudGl0eVJlZmVyZW5jZT4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxFbnRpdHlSZWZlcmVuY2U+KCk7Ci0gICAgICAgICAgICBmb3IoIFN0cmluZyBpZCA6IGFzc29jcyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZCggbmV3IEVudGl0eVJlZmVyZW5jZSggaWQgKSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgR2FlTmFtZWRBc3NvY2lhdGlvblN0YXRlCi0gICAgICAgIGltcGxlbWVudHMgTmFtZWRBc3NvY2lhdGlvblN0YXRlCi0gICAgewotICAgICAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYXNzb2NzOwotICAgICAgICBwcml2YXRlIGZpbmFsIEdhZUVudGl0eVN0YXRlIGVudGl0eVN0YXRlOwotCi0gICAgICAgIHByaXZhdGUgR2FlTmFtZWRBc3NvY2lhdGlvblN0YXRlKCBHYWVFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSwgTWFwPFN0cmluZywgU3RyaW5nPiBhc3NvY2lhdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmVudGl0eVN0YXRlID0gZW50aXR5U3RhdGU7Ci0gICAgICAgICAgICBpZiggYXNzb2NpYXRpb25zID09IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NzID0gYXNzb2NpYXRpb25zOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgY291bnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXNzb2NzLnNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc05hbWUoIFN0cmluZyBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFzc29jcy5jb250YWluc0tleSggbmFtZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHB1dCggU3RyaW5nIG5hbWUsIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWZlcmVuY2UgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiggYXNzb2NzLmNvbnRhaW5zS2V5KCBuYW1lICkgJiYgZW50aXR5UmVmZXJlbmNlLmlkZW50aXR5KCkuZXF1YWxzKCBhc3NvY3MuZ2V0KCBuYW1lICkgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzb2NzLnB1dCggbmFtZSwgZW50aXR5UmVmZXJlbmNlLmlkZW50aXR5KCkgKTsKLSAgICAgICAgICAgIGVudGl0eVN0YXRlLm1hcmtVcGRhdGVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmUoIFN0cmluZyBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiByZW1vdmVkID0gYXNzb2NzLnJlbW92ZSggbmFtZSApICE9IG51bGw7Ci0gICAgICAgICAgICBlbnRpdHlTdGF0ZS5tYXJrVXBkYXRlZCgpOwotICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEVudGl0eVJlZmVyZW5jZSBnZXQoIFN0cmluZyBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBFbnRpdHlSZWZlcmVuY2UoIGFzc29jcy5nZXQoIG5hbWUgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgbmFtZU9mKCBFbnRpdHlSZWZlcmVuY2UgZW50aXR5UmVmZXJlbmNlICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGlkZW50aXR5ID0gZW50aXR5UmVmZXJlbmNlLmlkZW50aXR5KCk7Ci0gICAgICAgICAgICBmb3IoIE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBhc3NvY3MuZW50cnlTZXQoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoIGlkZW50aXR5LmVxdWFscyggZW50cnkuZ2V0VmFsdWUoKSApICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS5nZXRLZXkoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgSXRlcmF0b3I8U3RyaW5nPiBpdGVyYXRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0b0xpc3QoIGFzc29jcy5rZXlTZXQoKSApLml0ZXJhdG9yKCk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBtYXJrVXBkYXRlZCgpCi0gICAgewotICAgICAgICBpZiggc3RhdHVzID09IEVudGl0eVN0YXR1cy5MT0FERUQgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBFbnRpdHlTdGF0dXMuVVBEQVRFRDsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlL0dhZUVudGl0eVN0b3JlQWN0aXZhdGlvbi5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvR2FlRW50aXR5U3RvcmVBY3RpdmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZDEyMjEuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvR2FlRW50aXR5U3RvcmVBY3RpdmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBQYXVsIE1lcmxpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqLwotcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5nYWU7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkuYWN0aXZhdGlvbi5BY3RpdmF0b3JBZGFwdGVyOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRvcnM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZVJlZmVyZW5jZTsKLQotQEFjdGl2YXRvcnMoIEdhZUVudGl0eVN0b3JlQWN0aXZhdGlvbi5BY3RpdmF0b3IuY2xhc3MgKQotcHVibGljIGludGVyZmFjZSBHYWVFbnRpdHlTdG9yZUFjdGl2YXRpb24KLXsKLQotICAgIHZvaWQgYWN0aXZhdGVHYWVFbnRpdHlTdG9yZSgpCi0gICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwotCi0gICAgY2xhc3MgQWN0aXZhdG9yCi0gICAgICAgICAgICBleHRlbmRzIEFjdGl2YXRvckFkYXB0ZXI8U2VydmljZVJlZmVyZW5jZTxHYWVFbnRpdHlTdG9yZUFjdGl2YXRpb24+PgotICAgIHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgYWZ0ZXJBY3RpdmF0aW9uKCBTZXJ2aWNlUmVmZXJlbmNlPEdhZUVudGl0eVN0b3JlQWN0aXZhdGlvbj4gYWN0aXZhdGVkICkKLSAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFjdGl2YXRlZC5nZXQoKS5hY3RpdmF0ZUdhZUVudGl0eVN0b3JlKCk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvR2FlRW50aXR5U3RvcmVNaXhpbi5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvR2FlRW50aXR5U3RvcmVNaXhpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGI1OTFkLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlL0dhZUVudGl0eVN0b3JlTWl4aW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKiAgQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUuZ2FlOwotCi1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS4qOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHk7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5JZGVudGl0eUdlbmVyYXRvcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UucXVhbGlmaWVyLlRhZ2dlZDsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKLWltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6YXRpb247Ci1pbXBvcnQgb3JnLnFpNGouaW8uSW5wdXQ7Ci1pbXBvcnQgb3JnLnFpNGouaW8uT3V0cHV0OwotaW1wb3J0IG9yZy5xaTRqLmlvLlJlY2VpdmVyOwotaW1wb3J0IG9yZy5xaTRqLmlvLlNlbmRlcjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXRlOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZTsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlVW5pdE9mV29yazsKLQotLyoqCi0gKiBHQUUgaW1wbGVtZW50YXRpb24gb2YgU2VyaWFsaXphdGlvblN0b3JlCi0gKi8KLXB1YmxpYyBjbGFzcyBHYWVFbnRpdHlTdG9yZU1peGluCi0gICAgICAgIGltcGxlbWVudHMgR2FlRW50aXR5U3RvcmVBY3RpdmF0aW9uLCBFbnRpdHlTdG9yZQotewotICAgcHJpdmF0ZSBmaW5hbCBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uOwotICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdXVpZDsKLSAgIHByaXZhdGUgbG9uZyBjb3VudGVyOwotICAgcHJpdmF0ZSBEYXRhc3RvcmVTZXJ2aWNlIGRhdGFzdG9yZVNlcnZpY2U7Ci0KLSAgIHB1YmxpYyBHYWVFbnRpdHlTdG9yZU1peGluKCBAU2VydmljZSBJZGVudGl0eUdlbmVyYXRvciB1dWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBTZXJ2aWNlIEBUYWdnZWQoIFZhbHVlU2VyaWFsaXphdGlvbi5Gb3JtYXRzLkpTT04gKSBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uICkKLSAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5pdGlhbGl6aW5nIEdBRSBFbnRpdHlTdG9yZS4iKTsKLSAgICAgIHRoaXMudXVpZCA9IHV1aWQuZ2VuZXJhdGUoSWRlbnRpdHkuY2xhc3MpICsgIjoiOwotICAgICAgdGhpcy52YWx1ZVNlcmlhbGl6YXRpb24gPSB2YWx1ZVNlcmlhbGl6YXRpb247Ci0gICAgICBjb3VudGVyID0gMEw7Ci0gICB9Ci0KLSAgIEBPdmVycmlkZQotICAgcHVibGljIHZvaWQgYWN0aXZhdGVHYWVFbnRpdHlTdG9yZSgpCi0gICAgICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgIHsKLSAgICAgIGRhdGFzdG9yZVNlcnZpY2UgPSBEYXRhc3RvcmVTZXJ2aWNlRmFjdG9yeS5nZXREYXRhc3RvcmVTZXJ2aWNlKCk7Ci0gICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgIHB1YmxpYyBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlLCBNb2R1bGUgbW9kdWxlLCBsb25nIGN1cnJlbnRUaW1lICkKLSAgIHsKLSAgICAgICByZXR1cm4gbmV3IEdhZUVudGl0eVN0b3JlVW5pdE9mV29yayggZGF0YXN0b3JlU2VydmljZSwgdmFsdWVTZXJpYWxpemF0aW9uLCBnZW5lcmF0ZUlkKCksIG1vZHVsZSwgY3VycmVudFRpbWUgKTsKLSAgIH0KLQotICAgIEBPdmVycmlkZQotICAgcHVibGljIElucHV0PEVudGl0eVN0YXRlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbj4gZW50aXR5U3RhdGVzKGZpbmFsIE1vZHVsZSBtb2R1bGUpCi0gICB7Ci0gICAgICByZXR1cm4gbmV3IElucHV0PEVudGl0eVN0YXRlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbj4oKQotICAgICAgewotICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICBwdWJsaWMgPFJlY2VpdmVyVGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCB0cmFuc2ZlclRvKE91dHB1dDw/IHN1cGVyIEVudGl0eVN0YXRlLCBSZWNlaXZlclRocm93YWJsZVR5cGU+IG91dHB1dCkgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uLCBSZWNlaXZlclRocm93YWJsZVR5cGUKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIEdhZUVudGl0eVN0b3JlVW5pdE9mV29yayBldW93ID0gbmV3IEdhZUVudGl0eVN0b3JlVW5pdE9mV29yayggZGF0YXN0b3JlU2VydmljZSwgdmFsdWVTZXJpYWxpemF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUlkKCksIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKTsKLSAgICAgICAgICAgIFF1ZXJ5IHF1ZXJ5ID0gbmV3IFF1ZXJ5KCk7Ci0gICAgICAgICAgICBQcmVwYXJlZFF1ZXJ5IHEgPSBkYXRhc3RvcmVTZXJ2aWNlLnByZXBhcmUocXVlcnkpOwotICAgICAgICAgICAgZmluYWwgUXVlcnlSZXN1bHRJdGVyYWJsZTxFbnRpdHk+IGl0ZXJhYmxlID0gcS5hc1F1ZXJ5UmVzdWx0SXRlcmFibGUoKTsKLQotICAgICAgICAgICAgb3V0cHV0LnJlY2VpdmVGcm9tKG5ldyBTZW5kZXI8RW50aXR5U3RhdGUsIEVudGl0eVN0b3JlRXhjZXB0aW9uPigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgIHB1YmxpYyA8UmVjZWl2ZXJUaHJvd2FibGVUeXBlIGV4dGVuZHMgVGhyb3dhYmxlPiB2b2lkIHNlbmRUbyhSZWNlaXZlcjw/IHN1cGVyIEVudGl0eVN0YXRlLCBSZWNlaXZlclRocm93YWJsZVR5cGU+IHJlY2VpdmVyKSB0aHJvd3MgUmVjZWl2ZXJUaHJvd2FibGVUeXBlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChFbnRpdHkgZW50aXR5IDogaXRlcmFibGUpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IG5ldyBHYWVFbnRpdHlTdGF0ZSggZXVvdywgdmFsdWVTZXJpYWxpemF0aW9uLCBlbnRpdHksIG1vZHVsZSApOwotICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIucmVjZWl2ZShlbnRpdHlTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgIH0KLSAgICAgIH07Ci0gICB9Ci0KLSAgIHByaXZhdGUgU3RyaW5nIGdlbmVyYXRlSWQoKQotICAgewotICAgICAgcmV0dXJuIHV1aWQgKyBjb3VudGVyKys7Ci0gICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvR2FlRW50aXR5U3RvcmVTZXJ2aWNlLmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2dhZS9HYWVFbnRpdHlTdG9yZVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkYjhkZi4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2dhZS9HYWVFbnRpdHlTdG9yZVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qICBDb3B5cmlnaHQgMjAxMCBOaWNsYXMgSGVkaG1hbgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5nYWU7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkuY29uY2Vybi5Db25jZXJuczsKLWltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5sb2NraW5nLkxvY2tpbmdBYnN0cmFjdENvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuQ29uY3VycmVudE1vZGlmaWNhdGlvbkNoZWNrQ29uY2VybjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RhdGVWZXJzaW9uczsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RvcmU7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLlN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uQ29uY2VybjsKLQotLyoqCi0gKiBFbnRpdHlTdG9yZSBzZXJ2aWNlIGJhY2tlZCBieSBHb29nbGUgQXBwRW5naW5lJ3MgbG93LWxldmVsIHN0b3JlLgotICovCi1AQ29uY2VybnMoIHsgU3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Db25jZXJuLmNsYXNzLCBDb25jdXJyZW50TW9kaWZpY2F0aW9uQ2hlY2tDb25jZXJuLmNsYXNzIH0gKQotQE1peGlucyggeyBHYWVFbnRpdHlTdG9yZU1peGluLmNsYXNzIH0gKQotcHVibGljIGludGVyZmFjZSBHYWVFbnRpdHlTdG9yZVNlcnZpY2UKLSAgICBleHRlbmRzIEdhZUVudGl0eVN0b3JlQWN0aXZhdGlvbiwKLSAgICAgICAgICAgIEVudGl0eVN0b3JlLAotICAgICAgICAgICAgRW50aXR5U3RhdGVWZXJzaW9ucywKLSAgICAgICAgICAgIFNlcnZpY2VDb21wb3NpdGUsCi0gICAgICAgICAgICBMb2NraW5nQWJzdHJhY3RDb21wb3NpdGUKLXsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2dhZS9HYWVFbnRpdHlTdG9yZVVuaXRPZldvcmsuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlL0dhZUVudGl0eVN0b3JlVW5pdE9mV29yay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzI3ODZkLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlL0dhZUVudGl0eVN0b3JlVW5pdE9mV29yay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMCBOaWNsYXMgSGVkaG1hbi4KLSAqCi0gKiBMaWNlbnNlZCAgdW5kZXIgdGhlICBBcGFjaGUgTGljZW5zZSwgIFZlcnNpb24gMi4wICAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgIHRoaXMgZmlsZSAgZXhjZXB0IGluICBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyAgT0YgQU5ZIEtJTkQsIGVpdGhlciAgZXhwcmVzcyAgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5nYWU7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLmFwcGVuZ2luZS5hcGkuZGF0YXN0b3JlLio7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6YXRpb247Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0ZTsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXR1czsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5Tm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZVVuaXRPZldvcms7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLlN0YXRlQ29tbWl0dGVyOwotCi1wdWJsaWMgY2xhc3MgR2FlRW50aXR5U3RvcmVVbml0T2ZXb3JrCi0gICAgaW1wbGVtZW50cyBFbnRpdHlTdG9yZVVuaXRPZldvcmsKLXsKLSAgICBwcml2YXRlIGZpbmFsIERhdGFzdG9yZVNlcnZpY2UgZGF0YXN0b3JlOwotICAgIHByaXZhdGUgZmluYWwgVmFsdWVTZXJpYWxpemF0aW9uIHZhbHVlU2VyaWFsaXphdGlvbjsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBpZGVudGl0eTsKLSAgICBwcml2YXRlIGZpbmFsIE1vZHVsZSBtb2R1bGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIGN1cnJlbnRUaW1lOwotICAgIHByaXZhdGUgZmluYWwgTGlua2VkTGlzdDxHYWVFbnRpdHlTdGF0ZT4gc3RhdGVzOwotCi0gICAgcHVibGljIEdhZUVudGl0eVN0b3JlVW5pdE9mV29yayggRGF0YXN0b3JlU2VydmljZSBkYXRhc3RvcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVTZXJpYWxpemF0aW9uIHZhbHVlU2VyaWFsaXphdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaWRlbnRpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGN1cnJlbnRUaW1lICkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGF0YXN0b3JlID0gZGF0YXN0b3JlOwotICAgICAgICB0aGlzLnZhbHVlU2VyaWFsaXphdGlvbiA9IHZhbHVlU2VyaWFsaXphdGlvbjsKLSAgICAgICAgdGhpcy5pZGVudGl0eSA9IGlkZW50aXR5OwotICAgICAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKLSAgICAgICAgdGhpcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lOwotICAgICAgICBzdGF0ZXMgPSBuZXcgTGlua2VkTGlzdDxHYWVFbnRpdHlTdGF0ZT4oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGlkZW50aXR5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpZGVudGl0eTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBjdXJyZW50VGltZSgpCi0gICAgewotICAgICAgICByZXR1cm4gY3VycmVudFRpbWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlKCBFbnRpdHlSZWZlcmVuY2UgYW5JZGVudGl0eSwgRW50aXR5RGVzY3JpcHRvciBlbnRpdHlEZXNjcmlwdG9yICkKLSAgICAgICAgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uCi0gICAgewotICAgICAgICBLZXkga2V5ID0gS2V5RmFjdG9yeS5jcmVhdGVLZXkoICJxaTRqLWVudGl0eSIsIGFuSWRlbnRpdHkuaWRlbnRpdHkoKSApOwotICAgICAgICBHYWVFbnRpdHlTdGF0ZSBzdGF0ZSA9IG5ldyBHYWVFbnRpdHlTdGF0ZSggdGhpcywgdmFsdWVTZXJpYWxpemF0aW9uLCBrZXksIGVudGl0eURlc2NyaXB0b3IsIG1vZHVsZSApOwotICAgICAgICBzdGF0ZXMuYWRkKCBzdGF0ZSApOwotICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlT2YoIEVudGl0eVJlZmVyZW5jZSByZWZlcmVuY2UgKQotICAgICAgICB0aHJvd3MgRW50aXR5U3RvcmVFeGNlcHRpb24sIEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uCi0gICAgewotICAgICAgICBLZXkga2V5ID0gS2V5RmFjdG9yeS5jcmVhdGVLZXkoICJxaTRqLWVudGl0eSIsIHJlZmVyZW5jZS5pZGVudGl0eSgpICk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBFbnRpdHkgZW50aXR5ID0gZGF0YXN0b3JlLmdldCgga2V5ICk7Ci0gICAgICAgICAgICBHYWVFbnRpdHlTdGF0ZSBzdGF0ZSA9IG5ldyBHYWVFbnRpdHlTdGF0ZSggdGhpcywgdmFsdWVTZXJpYWxpemF0aW9uLCBlbnRpdHksIG1vZHVsZSApOwotICAgICAgICAgICAgc3RhdGVzLmFkZCggc3RhdGUgKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5FbnRpdHlOb3RGb3VuZEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uKCByZWZlcmVuY2UgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdGF0ZUNvbW1pdHRlciBhcHBseUNoYW5nZXMoKQotICAgICAgICB0aHJvd3MgRW50aXR5U3RvcmVFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uID0gZGF0YXN0b3JlLmJlZ2luVHJhbnNhY3Rpb24oKTsKLSAgICAgICAgZm9yKCBHYWVFbnRpdHlTdGF0ZSBzdGF0ZSA6IHN0YXRlcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVudGl0eSBlbnRpdHkgPSBzdGF0ZS5lbnRpdHkoKTsKLSAgICAgICAgICAgIGlmKCBzdGF0ZS5zdGF0dXMoKSA9PSBFbnRpdHlTdGF0dXMuTkVXIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUuc3RhdHVzKCkgPT0gRW50aXR5U3RhdHVzLlVQREFURUQgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFzdG9yZS5wdXQoIHRyYW5zYWN0aW9uLCBlbnRpdHkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKCBzdGF0ZS5zdGF0dXMoKSA9PSBFbnRpdHlTdGF0dXMuUkVNT1ZFRCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGF0YXN0b3JlLmRlbGV0ZSggdHJhbnNhY3Rpb24sIGVudGl0eS5nZXRLZXkoKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgR2FlU3RhdGVDb21taXR0ZXIoIHRyYW5zYWN0aW9uICk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzY2FyZCgpCi0gICAgewotICAgICAgICAvLyBub3RoaW5nIHRvIGRvPz8KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBHYWVTdGF0ZUNvbW1pdHRlcgotICAgICAgICBpbXBsZW1lbnRzIFN0YXRlQ29tbWl0dGVyCi0gICAgewotICAgICAgICBwcml2YXRlIFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOwotCi0gICAgICAgIHB1YmxpYyBHYWVTdGF0ZUNvbW1pdHRlciggVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24gKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgY29tbWl0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgY2FuY2VsKCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlL0dhZUlkR2VuZXJhdG9yU2VydmljZS5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvR2FlSWRHZW5lcmF0b3JTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMzcwMDEuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvR2FlSWRHZW5lcmF0b3JTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4uCi0gKgotICogTGljZW5zZWQgIHVuZGVyIHRoZSAgQXBhY2hlIExpY2Vuc2UsICBWZXJzaW9uIDIuMCAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlICB0aGlzIGZpbGUgIGV4Y2VwdCBpbiAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUuZ2FlOwotCi1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5EYXRhc3RvcmVTZXJ2aWNlOwotaW1wb3J0IGNvbS5nb29nbGUuYXBwZW5naW5lLmFwaS5kYXRhc3RvcmUuRGF0YXN0b3JlU2VydmljZUZhY3Rvcnk7Ci1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5LZXk7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHlHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQ29tcG9zaXRlOwotCi1ATWl4aW5zKCBHYWVJZEdlbmVyYXRvclNlcnZpY2UuTWl4aW4uY2xhc3MgKQotcHVibGljIGludGVyZmFjZSBHYWVJZEdlbmVyYXRvclNlcnZpY2UKLSAgICBleHRlbmRzIElkZW50aXR5R2VuZXJhdG9yLCBTZXJ2aWNlQ29tcG9zaXRlCi17Ci0gICAgcHVibGljIGNsYXNzIE1peGluCi0gICAgICAgIGltcGxlbWVudHMgSWRlbnRpdHlHZW5lcmF0b3IKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgRGF0YXN0b3JlU2VydmljZSBkYXRhc3RvcmU7Ci0gICAgICAgIHByaXZhdGUgVGhyZWFkTG9jYWw8SXRlcmF0b3I8S2V5Pj4gcmFuZ2U7Ci0KLSAgICAgICAgcHVibGljIE1peGluKCkKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YXN0b3JlID0gRGF0YXN0b3JlU2VydmljZUZhY3RvcnkuZ2V0RGF0YXN0b3JlU2VydmljZSgpOwotICAgICAgICAgICAgcmFuZ2UgPSBuZXcgVGhyZWFkTG9jYWw8SXRlcmF0b3I8S2V5Pj4oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHByb3RlY3RlZCBJdGVyYXRvcjxLZXk+IGluaXRpYWxWYWx1ZSgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXN0b3JlLmFsbG9jYXRlSWRzKCAicWk0aiIsIDEwMCApLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdlbmVyYXRlKCBDbGFzczw/PiBjb21wb3NpdGVUeXBlICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYoICFyYW5nZS5nZXQoKS5oYXNOZXh0KCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJhbmdlLnNldCggZGF0YXN0b3JlLmFsbG9jYXRlSWRzKCAicWk0aiIsIDEwMCApLml0ZXJhdG9yKCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAiIiArIHJhbmdlLmdldCgpLm5leHQoKS5nZXRJZCgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUyL0dhZUVudGl0eVN0b3JlQWN0aXZhdGlvbi5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUyL0dhZUVudGl0eVN0b3JlQWN0aXZhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGNmYWQyLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlMi9HYWVFbnRpdHlTdG9yZUFjdGl2YXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIFBhdWwgTWVybGluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKgotICovCi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLmdhZTI7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkuYWN0aXZhdGlvbi5BY3RpdmF0b3JBZGFwdGVyOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRvcnM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZVJlZmVyZW5jZTsKLQotLyoqCi0gKiBBY3RpdmF0aW9uIGZvciBHYWVFbnRpdHlTdG9yZU1peGluLgotICovCi1AQWN0aXZhdG9ycyggR2FlRW50aXR5U3RvcmVBY3RpdmF0aW9uLkFjdGl2YXRvci5jbGFzcyApCi1wdWJsaWMgaW50ZXJmYWNlIEdhZUVudGl0eVN0b3JlQWN0aXZhdGlvbgotewotCi0gICAgdm9pZCBhY3RpdmF0ZUdhZUVudGl0eVN0b3JlKCkKLSAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb247Ci0KLSAgICBjbGFzcyBBY3RpdmF0b3IKLSAgICAgICAgICAgIGV4dGVuZHMgQWN0aXZhdG9yQWRhcHRlcjxTZXJ2aWNlUmVmZXJlbmNlPEdhZUVudGl0eVN0b3JlQWN0aXZhdGlvbj4+Ci0gICAgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBhZnRlckFjdGl2YXRpb24oIFNlcnZpY2VSZWZlcmVuY2U8R2FlRW50aXR5U3RvcmVBY3RpdmF0aW9uPiBhY3RpdmF0ZWQgKQotICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgYWN0aXZhdGVkLmdldCgpLmFjdGl2YXRlR2FlRW50aXR5U3RvcmUoKTsKLSAgICAgICAgfQotCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2dhZTIvR2FlRW50aXR5U3RvcmVDb25maWd1cmF0aW9uLmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2dhZTIvR2FlRW50aXR5U3RvcmVDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NGZkYzUuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUyL0dhZUVudGl0eVN0b3JlQ29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLmdhZTI7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkuY29uZmlndXJhdGlvbi5Db25maWd1cmF0aW9uQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKLQotcHVibGljIGludGVyZmFjZSBHYWVFbnRpdHlTdG9yZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBDb25maWd1cmF0aW9uQ29tcG9zaXRlCi17Ci0KLSAgICBQcm9wZXJ0eTxTdHJpbmc+IHJlYWRQb2xpY3koKTsKLQotICAgIFByb3BlcnR5PERvdWJsZT4gZGVhZGxpbmUoKTsKLSAgICAKLSAgICBQcm9wZXJ0eTxTdHJpbmc+IGVudGl0eUtpbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlMi9HYWVFbnRpdHlTdG9yZU1peGluLmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWdhZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2dhZTIvR2FlRW50aXR5U3RvcmVNaXhpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGMxNTU2Li4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlMi9HYWVFbnRpdHlTdG9yZU1peGluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLmdhZTI7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLmFwcGVuZ2luZS5hcGkuZGF0YXN0b3JlLkRhdGFzdG9yZVNlcnZpY2U7Ci1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5EYXRhc3RvcmVTZXJ2aWNlQ29uZmlnOwotaW1wb3J0IGNvbS5nb29nbGUuYXBwZW5naW5lLmFwaS5kYXRhc3RvcmUuRGF0YXN0b3JlU2VydmljZUZhY3Rvcnk7Ci1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5FbnRpdHk7Ci1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5LZXk7Ci1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5LZXlGYWN0b3J5OwotaW1wb3J0IGNvbS5nb29nbGUuYXBwZW5naW5lLmFwaS5kYXRhc3RvcmUuUHJlcGFyZWRRdWVyeTsKLWltcG9ydCBjb20uZ29vZ2xlLmFwcGVuZ2luZS5hcGkuZGF0YXN0b3JlLlF1ZXJ5OwotaW1wb3J0IGNvbS5nb29nbGUuYXBwZW5naW5lLmFwaS5kYXRhc3RvcmUuUXVlcnlSZXN1bHRJdGVyYWJsZTsKLWltcG9ydCBjb20uZ29vZ2xlLmFwcGVuZ2luZS5hcGkuZGF0YXN0b3JlLlJlYWRQb2xpY3k7Ci1pbXBvcnQgY29tLmdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZS5UZXh0OwotaW1wb3J0IGNvbS5nb29nbGUuYXBwZW5naW5lLmFwaS5kYXRhc3RvcmUuVHJhbnNhY3Rpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWFkV3JpdGVMb2NrOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKLWltcG9ydCBvcmcucWk0ai5hcGkudXRpbC5DbGFzc2VzOwotaW1wb3J0IG9yZy5xaTRqLmlvLklucHV0OwotaW1wb3J0IG9yZy5xaTRqLmlvLk91dHB1dDsKLWltcG9ydCBvcmcucWk0ai5pby5SZWNlaXZlcjsKLWltcG9ydCBvcmcucWk0ai5pby5TZW5kZXI7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuaGVscGVycy5NYXBFbnRpdHlTdG9yZTsKLQotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmFwcGVuZ2luZS5hcGkuZGF0YXN0b3JlLkRhdGFzdG9yZVNlcnZpY2VDb25maWcuQnVpbGRlci53aXRoUmVhZFBvbGljeTsKLWltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMuZmlyc3Q7Ci0KLXB1YmxpYyBjbGFzcyBHYWVFbnRpdHlTdG9yZU1peGluCi0gICAgaW1wbGVtZW50cyBHYWVFbnRpdHlTdG9yZUFjdGl2YXRpb24sIE1hcEVudGl0eVN0b3JlCi17Ci0gICAgQFRoaXMKLSAgICBwcml2YXRlIFJlYWRXcml0ZUxvY2sgbG9jazsKLQotICAgIEBUaGlzCi0gICAgcHJpdmF0ZSBDb25maWd1cmF0aW9uPEdhZUVudGl0eVN0b3JlQ29uZmlndXJhdGlvbj4gY29uZmlnOwotCi0gICAgcHJpdmF0ZSBEYXRhc3RvcmVTZXJ2aWNlIGRhdGFzdG9yZTsKLSAgICBwcml2YXRlIFN0cmluZyBlbnRpdHlLaW5kOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWN0aXZhdGVHYWVFbnRpdHlTdG9yZSgpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIEdhZUVudGl0eVN0b3JlQ29uZmlndXJhdGlvbiBjb25mID0gY29uZmlnLmdldCgpOwotICAgICAgICAvLyBldmVudHVhbGx5IGNvbnNpc3RlbnQgcmVhZHMgd2l0aCBhIDUgc2Vjb25kIGRlYWRsaW5lCi0gICAgICAgIERhdGFzdG9yZVNlcnZpY2VDb25maWcgY29uZmlndXJhdGlvbiA9Ci0gICAgICAgICAgICB3aXRoUmVhZFBvbGljeSggbmV3IFJlYWRQb2xpY3koIFJlYWRQb2xpY3kuQ29uc2lzdGVuY3kudmFsdWVPZiggY29uZi5yZWFkUG9saWN5KCkuZ2V0KCkudG9VcHBlckNhc2UoKSApICkgKQotICAgICAgICAgICAgICAgIC5kZWFkbGluZSggY29uZi5kZWFkbGluZSgpLmdldCgpICk7Ci0gICAgICAgIGRhdGFzdG9yZSA9IERhdGFzdG9yZVNlcnZpY2VGYWN0b3J5LmdldERhdGFzdG9yZVNlcnZpY2UoIGNvbmZpZ3VyYXRpb24gKTsKLSAgICAgICAgZW50aXR5S2luZCA9IGNvbmYuZW50aXR5S2luZCgpLmdldCgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcbkFjdGl2YXRpbmcgR29vZ2xlIEFwcCBFbmdpbmUgU3RvcmUiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuICAgICAgUmVhZCBQb2xpY3k6ICIgKyBjb25mLnJlYWRQb2xpY3koKS5nZXQoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuICAgICAgICAgRGVhZGxpbmU6ICIgKyBjb25mLmRlYWRsaW5lKCkuZ2V0KCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiAgICAgIEVudGl0eSBLaW5kOiAiICsgZW50aXR5S2luZCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuICAgICAgICBEYXRhc3RvcmU6ICIgKyBkYXRhc3RvcmUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiAgICBDb25maWd1cmF0aW9uOiAiICsgY29uZmlndXJhdGlvbiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZWFkZXIgZ2V0KCBFbnRpdHlSZWZlcmVuY2UgcmVmICkKLSAgICAgICAgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uCi0gICAgewotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBLZXkga2V5ID0gS2V5RmFjdG9yeS5jcmVhdGVLZXkoIGVudGl0eUtpbmQsIHJlZi50b1VSSSgpICk7Ci0gICAgICAgICAgICBFbnRpdHkgZW50aXR5ID0gZGF0YXN0b3JlLmdldCgga2V5ICk7Ci0gICAgICAgICAgICBUZXh0IHNlcmlhbGl6ZWRTdGF0ZSA9IChUZXh0KSBlbnRpdHkuZ2V0UHJvcGVydHkoICJ2YWx1ZSIgKTsKLSAgICAgICAgICAgIGlmKCBzZXJpYWxpemVkU3RhdGUgPT0gbnVsbCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uKCByZWYgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nUmVhZGVyKCBzZXJpYWxpemVkU3RhdGUuZ2V0VmFsdWUoKSApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBjb20uZ29vZ2xlLmFwcGVuZ2luZS5hcGkuZGF0YXN0b3JlLkVudGl0eU5vdEZvdW5kRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uKCByZWYgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGFwcGx5Q2hhbmdlcyggTWFwQ2hhbmdlcyBjaGFuZ2VzICkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0KLSAgICB7Ci0gICAgICAgIGZpbmFsIFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uID0gZGF0YXN0b3JlLmJlZ2luVHJhbnNhY3Rpb24oKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYW5nZXMudmlzaXRNYXAoIG5ldyBHYWVNYXBDaGFuZ2VyKCB0cmFuc2FjdGlvbiApICk7Ci0gICAgICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggUnVudGltZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYoIHRyYW5zYWN0aW9uLmlzQWN0aXZlKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiggZSBpbnN0YW5jZW9mIEVudGl0eVN0b3JlRXhjZXB0aW9uICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyAoRW50aXR5U3RvcmVFeGNlcHRpb24pIGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCBlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSW5wdXQ8UmVhZGVyLCBJT0V4Y2VwdGlvbj4gZW50aXR5U3RhdGVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgSW5wdXQ8UmVhZGVyLCBJT0V4Y2VwdGlvbj4oKQotICAgICAgICB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyA8UmVjZWl2ZXJUaHJvd2FibGVUeXBlIGV4dGVuZHMgVGhyb3dhYmxlPiB2b2lkIHRyYW5zZmVyVG8oIE91dHB1dDw/IHN1cGVyIFJlYWRlciwgUmVjZWl2ZXJUaHJvd2FibGVUeXBlPiBvdXRwdXQgKQotICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgUmVjZWl2ZXJUaHJvd2FibGVUeXBlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUXVlcnkgcXVlcnkgPSBuZXcgUXVlcnkoKTsKLSAgICAgICAgICAgICAgICBQcmVwYXJlZFF1ZXJ5IHByZXBhcmVkUXVlcnkgPSBkYXRhc3RvcmUucHJlcGFyZSggcXVlcnkgKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBRdWVyeVJlc3VsdEl0ZXJhYmxlPEVudGl0eT4gaXRlcmFibGUgPSBwcmVwYXJlZFF1ZXJ5LmFzUXVlcnlSZXN1bHRJdGVyYWJsZSgpOwotCi0gICAgICAgICAgICAgICAgb3V0cHV0LnJlY2VpdmVGcm9tKCBuZXcgU2VuZGVyPFJlYWRlciwgSU9FeGNlcHRpb24+KCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgPFJlY2VpdmVyVGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBzZW5kVG8oIFJlY2VpdmVyPD8gc3VwZXIgUmVhZGVyLCBSZWNlaXZlclRocm93YWJsZVR5cGU+IHJlY2VpdmVyICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZWNlaXZlclRocm93YWJsZVR5cGUsIElPRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciggRW50aXR5IGVudGl0eSA6IGl0ZXJhYmxlICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0IHNlcmlhbGl6ZWRTdGF0ZSA9IChUZXh0KSBlbnRpdHkuZ2V0UHJvcGVydHkoICJ2YWx1ZSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlci5yZWNlaXZlKCBuZXcgU3RyaW5nUmVhZGVyKCBzZXJpYWxpemVkU3RhdGUuZ2V0VmFsdWUoKSApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBHYWVNYXBDaGFuZ2VyCi0gICAgICAgIGltcGxlbWVudHMgTWFwQ2hhbmdlcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKLQotICAgICAgICBwdWJsaWMgR2FlTWFwQ2hhbmdlciggVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24gKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFdyaXRlciBuZXdFbnRpdHkoIGZpbmFsIEVudGl0eVJlZmVyZW5jZSByZWYsIGZpbmFsIEVudGl0eURlc2NyaXB0b3IgZGVzY3JpcHRvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nV3JpdGVyKCAxMDAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3VwZXIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgS2V5IGtleSA9IEtleUZhY3RvcnkuY3JlYXRlS2V5KCBlbnRpdHlLaW5kLCByZWYudG9VUkkoKSApOwotICAgICAgICAgICAgICAgICAgICBFbnRpdHkgZW50aXR5ID0gbmV3IEVudGl0eSgga2V5ICk7Ci0gICAgICAgICAgICAgICAgICAgIFRleHQgdmFsdWUgPSBuZXcgVGV4dCggdG9TdHJpbmcoKSApOwotICAgICAgICAgICAgICAgICAgICBlbnRpdHkuc2V0VW5pbmRleGVkUHJvcGVydHkoICJ2YWx1ZSIsIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAgIGVudGl0eS5zZXRQcm9wZXJ0eSggInJlZiIsIHJlZi5pZGVudGl0eSgpICk7Ci0gICAgICAgICAgICAgICAgICAgIGVudGl0eS5zZXRQcm9wZXJ0eSggInR5cGUiLCBDbGFzc2VzLnRvVVJJKCBmaXJzdCggZGVzY3JpcHRvci50eXBlcygpICkgKSApOwotICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUucHV0KCB0cmFuc2FjdGlvbiwgZW50aXR5ICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgV3JpdGVyIHVwZGF0ZUVudGl0eSggZmluYWwgRW50aXR5UmVmZXJlbmNlIHJlZiwgZmluYWwgRW50aXR5RGVzY3JpcHRvciBkZXNjcmlwdG9yICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdXcml0ZXIoIDEwMDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdXBlci5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICBLZXkga2V5ID0gS2V5RmFjdG9yeS5jcmVhdGVLZXkoIGVudGl0eUtpbmQsIHJlZi50b1VSSSgpICk7Ci0gICAgICAgICAgICAgICAgICAgIEVudGl0eSBlbnRpdHkgPSBuZXcgRW50aXR5KCBrZXkgKTsKLSAgICAgICAgICAgICAgICAgICAgVGV4dCB2YWx1ZSA9IG5ldyBUZXh0KCB0b1N0cmluZygpICk7Ci0gICAgICAgICAgICAgICAgICAgIGVudGl0eS5zZXRVbmluZGV4ZWRQcm9wZXJ0eSggInZhbHVlIiwgdmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgZW50aXR5LnNldFByb3BlcnR5KCAicmVmIiwgcmVmLmlkZW50aXR5KCkgKTsKLSAgICAgICAgICAgICAgICAgICAgZW50aXR5LnNldFByb3BlcnR5KCAidHlwZSIsIENsYXNzZXMudG9VUkkoIGZpcnN0KCBkZXNjcmlwdG9yLnR5cGVzKCkgKSApICk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZS5wdXQoIHRyYW5zYWN0aW9uLCBlbnRpdHkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZUVudGl0eSggRW50aXR5UmVmZXJlbmNlIHJlZiwgRW50aXR5RGVzY3JpcHRvciBkZXNjcmlwdG9yICkKLSAgICAgICAgICAgIHRocm93cyBFbnRpdHlOb3RGb3VuZEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBLZXkga2V5ID0gS2V5RmFjdG9yeS5jcmVhdGVLZXkoIGVudGl0eUtpbmQsIHJlZi50b1VSSSgpICk7Ci0gICAgICAgICAgICBkYXRhc3RvcmUuZGVsZXRlKCB0cmFuc2FjdGlvbiwga2V5ICk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUyL0dhZUVudGl0eVN0b3JlU2VydmljZS5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUyL0dhZUVudGl0eVN0b3JlU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTVmNGYzLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlMi9HYWVFbnRpdHlTdG9yZVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qICBDb3B5cmlnaHQgMjAxMCBOaWNsYXMgSGVkaG1hbgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5nYWUyOwotCi1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbmNlcm4uQ29uY2VybnM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5sb2NraW5nLkxvY2tpbmdBYnN0cmFjdENvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuQ29uY3VycmVudE1vZGlmaWNhdGlvbkNoZWNrQ29uY2VybjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RhdGVWZXJzaW9uczsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RvcmU7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLlN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uQ29uY2VybjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuaGVscGVycy5KU09OTWFwRW50aXR5U3RvcmVBY3RpdmF0aW9uOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5oZWxwZXJzLkpTT05NYXBFbnRpdHlTdG9yZU1peGluOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5oZWxwZXJzLlN0YXRlU3RvcmU7Ci0KLS8qKgotICogRW50aXR5U3RvcmUgc2VydmljZSBiYWNrZWQgYnkgR29vZ2xlIEFwcEVuZ2luZSdzIGxvdy1sZXZlbCBzdG9yZS4KLSAqIDxwPkJhc2VkIG9uIEB7QGxpbmsgSlNPTk1hcEVudGl0eVN0b3JlTWl4aW59LjwvcD4KLSAqLwotQENvbmNlcm5zKCB7IFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uQ29uY2Vybi5jbGFzcywgQ29uY3VycmVudE1vZGlmaWNhdGlvbkNoZWNrQ29uY2Vybi5jbGFzcyB9ICkKLUBNaXhpbnMoIHsgSlNPTk1hcEVudGl0eVN0b3JlTWl4aW4uY2xhc3MsIEdhZUVudGl0eVN0b3JlTWl4aW4uY2xhc3MgfSApCi1wdWJsaWMgaW50ZXJmYWNlIEdhZUVudGl0eVN0b3JlU2VydmljZQotICAgIGV4dGVuZHMgR2FlRW50aXR5U3RvcmVBY3RpdmF0aW9uLAotICAgICAgICAgICAgSlNPTk1hcEVudGl0eVN0b3JlQWN0aXZhdGlvbiwKLSAgICAgICAgICAgIEVudGl0eVN0b3JlLAotICAgICAgICAgICAgRW50aXR5U3RhdGVWZXJzaW9ucywKLSAgICAgICAgICAgIFN0YXRlU3RvcmUsCi0gICAgICAgICAgICBTZXJ2aWNlQ29tcG9zaXRlLAotICAgICAgICAgICAgTG9ja2luZ0Fic3RyYWN0Q29tcG9zaXRlLAotICAgICAgICAgICAgQ29uZmlndXJhdGlvbgotewotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcucWk0ai5lbnRpdHlzdG9yZS5nYWUyL0dhZUVudGl0eVN0b3JlU2VydmljZS5wcm9wZXJ0aWVzIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vcmVzb3VyY2VzL29yZy5xaTRqLmVudGl0eXN0b3JlLmdhZTIvR2FlRW50aXR5U3RvcmVTZXJ2aWNlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYzg4NDIuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL21haW4vcmVzb3VyY2VzL29yZy5xaTRqLmVudGl0eXN0b3JlLmdhZTIvR2FlRW50aXR5U3RvcmVTZXJ2aWNlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLQotCi1yZWFkUG9saWN5PWV2ZW50dWFsCi1kZWFkbGluZSgpPTAuNQotZW50aXR5S2luZD1xaTRqLWpzb24KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlL3JlYWRtZS5odG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvcmVhZG1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ODdlMTAuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1nYWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUvcmVhZG1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08aHRtbD4KLTxib2R5PgotPGgxPkVudGl0eVN0b3JlIGZvciBHb29nbGUgQXBwIEVuZ2luZTwvaDE+Ci0KLTxwPkl0IGlzIG5vdCBwb3NzaWJsZSB0byB0ZXN0IHRoaXMgY29kZSBmdWxseSB3aXRob3V0IHJ1bm5pbmcgd2l0aGluIHRoZSBHb29nbGUgQXBwRW5naW5lIGl0c2VsZi4gVGhlcmVmb3IgdGhlCi10ZXN0cyBoYXMgYmVlbiBtb3ZlZCB0byB0aGVpciBvd24gbW9kdWxlIGluIHRoZSBxaTRqLXRlc3RzIEdJVCByZXBvc2l0b3J5LiBUaGUgdGVzdHMgYXJlIG5vdCBydW4gYXMgc3RhbmRhcmQgSlVuaXQKLXRlc3RzLCBidXQgYXMgYSBXZWIgYXBwbGljYXRpb24gaXRzZWxmLiBJdCB1c2VzIHRoZSBzdGFuZGFyZCBRaTRqIEVudGl0eSBTdG9yZSB0ZXN0IHN1aXRlLCBidXQgdGhlIHJ1bm5lciBpcwotc3BlY2lhbCBidWlsdCBmb3IgdGhpcyBwdXJwb3NlIGFuZCB0aGUgcmVzdWx0IGNvbWVzIG91dCBhcyBhIHNpbXBsZSB3ZWIgcGFnZS48L3A+Ci0KLTxwPllvdSB3aWxsIGFsc28gbmVlZCBhIEdvb2dsZSBBcHBFbmdpbmUgYWNjb3VudCB0byBydW4gdGhlbS48L3A+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3QvTk9USUNFIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3QvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGMzMDYyLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L05PVElDRQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVFpNGogSGF6ZWxjYXN0IFBlcnNpc3RlbmNlIEV4dGVuc2lvbgotQ29weXJpZ2h0IDIwMDctMjAwOCwgVGhlIFFpNGogRGV2ZWxvcG1lbnQgVGVhbSBvZiBpbmRpdmlkdWFscy4KLQotU2VlIGh0dHA6Ly93d3cucWk0ai5vcmcvY29udHJpYnV0b3JzLmh0bWwgZm9yIGxpc3Qgb2Ygb2YgaW5kaXZpZHVhbHMuCi1BbHNvIHNlZSBlYWNoIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgQ29weXJpZ2h0IGNsYWltcy4KLQotUWk0aiBpcyBhIGNvbW11bml0eSBhZ2dyZWdhdGVkIHdvcmtzIHVuZGVyIENvcHlyaWdodCBsYXcuCi1BbGwgcGFydHMgb2YgdGhlIG9yaWdpbmFsIHdvcmtzIGF0IFFpNGogaXMgbGljZW5zZWQgdW5kZXIgdGhlCi1BcGFjaGUgTGljZW5zZSB2ZXIgMi4wIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcwotCi1CZWxvdyBmb2xsb3dzIGEgbGlzdCBvZiBiaW5hcnkgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBsaWNlbnNlczsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBtb2R1bGUgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBIYXplbGNhc3QgUHJvamVjdAotKGh0dHA6Ly93d3cuaGF6ZWxjYXN0LmNvbSksIHVuZGVyIEFwYWNoZSBMaWNlbnNlIDIuMC4gU2VlIExJQ0VOU0UKLQotCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3QvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3QvYnVpbGQuZ3JhZGxlCmluZGV4IGQ0ZGZhNDMuLmVkY2UzOGQgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L2J1aWxkLmdyYWRsZQorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBIYXplbGNhc3QgRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBIYXplbGNhc3QiIH19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBIYXplbGNhc3QgRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBIYXplbGNhc3QiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3QvZGV2LXN0YXR1cy54bWwKaW5kZXggNTBkMjZkMy4uYWM2M2NkYSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3QvZGV2LXN0YXR1cy54bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3QvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvZG9jcy9lcy1oYXplbGNhc3QudHh0IGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3Qvc3JjL2RvY3MvZXMtaGF6ZWxjYXN0LnR4dAppbmRleCA5ZTk4YTg2Li5lOWIzZGJmIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvZG9jcy9lcy1oYXplbGNhc3QudHh0CisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L3NyYy9kb2NzL2VzLWhhemVsY2FzdC50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbZXh0ZW5zaW9uLWVzLWhhemVsY2FzdCwgSGF6ZWxjYXN0IEVudGl0eVN0b3JlXV0KID0gSGF6ZWxjYXN0IEVudGl0eVN0b3JlID0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9oYXplbGNhc3QvSGF6ZWxjYXN0RW50aXR5U3RvcmVNaXhpbi5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9oYXplbGNhc3QvSGF6ZWxjYXN0RW50aXR5U3RvcmVNaXhpbi5qYXZhCmluZGV4IDUwMWIzNGIuLmViYzU0YTAgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvaGF6ZWxjYXN0L0hhemVsY2FzdEVudGl0eVN0b3JlTWl4aW4uamF2YQorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9IYXplbGNhc3RFbnRpdHlTdG9yZU1peGluLmphdmEKQEAgLTE1Nyw4ICsxNTcsOCBAQAogICAgICAgICAgICAgICAgIG91dHB1dC5yZWNlaXZlRnJvbSggbmV3IFNlbmRlcjxSZWFkZXIsIElPRXhjZXB0aW9uPigpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIDxSZWNlaXZlclRocm93YWJsZVR5cGUgZXh0ZW5kcyBUaHJvd2FibGU+IHZvaWQgc2VuZFRvKCBSZWNlaXZlcjw/IHN1cGVyIFJlYWRlciwgUmVjZWl2ZXJUaHJvd2FibGVUeXBlPiByZWNlaXZlciApCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVjZWl2ZXJUaHJvd2FibGVUeXBlLCBJT0V4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgPFJUVCBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBzZW5kVG8oIFJlY2VpdmVyPD8gc3VwZXIgUmVhZGVyLCBSVFQ+IHJlY2VpdmVyICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSVFQsIElPRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlYWNoRW50cnkgOiBzdHJpbmdNYXAuZW50cnlTZXQoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9hc3NlbWJseS9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9hc3NlbWJseS9wYWNrYWdlLmh0bWwKaW5kZXggMGI2MTEzZC4uMjk3YTc2YiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9oYXplbGNhc3QvYXNzZW1ibHkvcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvaGF6ZWxjYXN0L2Fzc2VtYmx5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+SGF6ZWxjYXN0IEVudGl0eVN0b3JlIEFzc2VtYmx5LjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9wYWNrYWdlLmh0bWwKaW5kZXggMTcxZmQ1Mi4uOWEwNmRiMCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9oYXplbGNhc3QvcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvaGF6ZWxjYXN0L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+SGF6ZWxjYXN0IEVudGl0eVN0b3JlLjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9IYXplbGNhc3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvaGF6ZWxjYXN0L0hhemVsY2FzdEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOGYwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9IYXplbGNhc3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5oYXplbGNhc3Q7CisKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5lbnRpdHlzdG9yZS5oYXplbGNhc3QuYXNzZW1ibHkuSGF6ZWxjYXN0RW50aXR5U3RvcmVBc3NlbWJsZXI7CitpbXBvcnQgb3JnLnFpNGoudGVzdC5FbnRpdHlUZXN0QXNzZW1ibGVyOworaW1wb3J0IG9yZy5xaTRqLnRlc3QuY2FjaGUuQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3Q7CitpbXBvcnQgb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLm9yZ2pzb24uT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcjsKKworcHVibGljIGNsYXNzIEhhemVsY2FzdEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdAorICAgIGV4dGVuZHMgQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QKK3sKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlci5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIE1vZHVsZUFzc2VtYmx5IGNvbmZpZyA9IG1vZHVsZS5sYXllcigpLm1vZHVsZSggImNvbmZpZyIgKTsKKyAgICAgICAgbmV3IEVudGl0eVRlc3RBc3NlbWJsZXIoKS5hc3NlbWJsZSggY29uZmlnICk7CisgICAgICAgIG5ldyBPcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyKCkuYXNzZW1ibGUoIG1vZHVsZSApOworICAgICAgICBuZXcgSGF6ZWxjYXN0RW50aXR5U3RvcmVBc3NlbWJsZXIoKS53aXRoQ29uZmlnKCBjb25maWcsIFZpc2liaWxpdHkubGF5ZXIgKS5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9IYXplbGNhc3RFbnRpdHlTdG9yZVNlcnZpY2UucHJvcGVydGllcyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS9oYXplbGNhc3QvSGF6ZWxjYXN0RW50aXR5U3RvcmVTZXJ2aWNlLnByb3BlcnRpZXMKaW5kZXggYWNjOTJjMS4uNjljZjdlYiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9IYXplbGNhc3RFbnRpdHlTdG9yZVNlcnZpY2UucHJvcGVydGllcworKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvaGF6ZWxjYXN0L0hhemVsY2FzdEVudGl0eVN0b3JlU2VydmljZS5wcm9wZXJ0aWVzCkBAIC0xICsxLDE2IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBtYXBOYW1lPXFpNGouZGF0YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS9oYXplbGNhc3QvaGF6ZWxjYXN0LnhtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS9oYXplbGNhc3QvaGF6ZWxjYXN0LnhtbAppbmRleCBjNzY5M2RlLi4yOGIxM2ZhIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvaGF6ZWxjYXN0L2hhemVsY2FzdC54bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2VudGl0eXN0b3JlL2hhemVsY2FzdC9oYXplbGNhc3QueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aGF6ZWxjYXN0PgogICA8bWFwIG5hbWU9InFpNGouZGF0YSI+CiAgICAgPG1hcC1zdG9yZSBlbmFibGVkPSJ0cnVlIj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamNsb3Vkcy9idWlsZC5ncmFkbGUgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpjbG91ZHMvYnVpbGQuZ3JhZGxlCmluZGV4IDQxMzUwM2IuLjIzNTk2YzMgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamNsb3Vkcy9idWlsZC5ncmFkbGUKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qY2xvdWRzL2J1aWxkLmdyYWRsZQpAQCAtMSwxOSArMSwzOSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBKQ2xvdWRzIEVudGl0eVN0b3JlIEV4dGVuc2lvbiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIEVudGl0eVN0b3JlIC0gSkNsb3VkcyIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIEpDbG91ZHMgRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBKQ2xvdWRzIiB9IH0KIAogZGVwZW5kZW5jaWVzIHsKIAotICAgIGNvbXBpbGUgcHJvamVjdCggIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIiApCi0gICAgY29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LmxvY2tpbmciICkKLSAgICBjb21waWxlIGxpYnJhcmllcy5qY2xvdWRzX2NvcmUKLSAgICBjb21waWxlIGxpYnJhcmllcy5qY2xvdWRzX2Jsb2JzdG9yZQorICBjb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIgKQorICBjb21waWxlIHByb2plY3QoICI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkubG9ja2luZyIgKQorICBjb21waWxlIGxpYnJhcmllcy5zbGY0al9hcGkKKyAgY29tcGlsZSBsaWJyYXJpZXMuamNsb3Vkc19jb3JlCisgIGNvbXBpbGUgbGlicmFyaWVzLmpjbG91ZHNfYmxvYnN0b3JlCiAKLSAgICB0ZXN0Q29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIgKQotICAgIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi52YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbiIpKQorICB0ZXN0Q29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIgKQorICB0ZXN0Q29tcGlsZSggcHJvamVjdCggIjpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi52YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbiIgKSApCisgIHRlc3RDb21waWxlIGxpYnJhcmllcy5qY2xvdWRzX2ZpbGVzeXN0ZW0KIAotICAgIHRlc3RSdW50aW1lIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiICkKLSAgICB0ZXN0UnVudGltZSBsaWJyYXJpZXMubG9nYmFjawotCisgIHRlc3RSdW50aW1lIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiICkKKyAgdGVzdFJ1bnRpbWUgbGlicmFyaWVzLmxvZ2JhY2sKIH0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qY2xvdWRzL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qY2xvdWRzL2Rldi1zdGF0dXMueG1sCmluZGV4IDVjYTZiNDMuLjdiMmJiMTEgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamNsb3Vkcy9kZXYtc3RhdHVzLnhtbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpjbG91ZHMvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpjbG91ZHMvc3JjL2RvY3MvZXMtamNsb3Vkcy50eHQgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpjbG91ZHMvc3JjL2RvY3MvZXMtamNsb3Vkcy50eHQKaW5kZXggZmNmMTA3Yi4uYmFhZGRmMiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qY2xvdWRzL3NyYy9kb2NzL2VzLWpjbG91ZHMudHh0CisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamNsb3Vkcy9zcmMvZG9jcy9lcy1qY2xvdWRzLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tleHRlbnNpb24tZXMtamNsb3VkcyxKQ2xvdWRzIEVudGl0eVN0b3JlXV0KID0gSkNsb3VkcyBFbnRpdHlTdG9yZSA9CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamNsb3Vkcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2pjbG91ZHMvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qY2xvdWRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvamNsb3Vkcy9wYWNrYWdlLmh0bWwKaW5kZXggYWFkMDQ5MS4uZDQzZGUxYSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qY2xvdWRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvamNsb3Vkcy9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qY2xvdWRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvamNsb3Vkcy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkpDbG91ZHMgQmxvYlN0b3JlIEVudGl0eVN0b3JlLjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpjbG91ZHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9qY2xvdWRzL0pDbG91ZHNXaXRoQ2FjaGVUZXN0LmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpjbG91ZHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9qY2xvdWRzL0pDbG91ZHNXaXRoQ2FjaGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0NzNjNwotLS0gL2Rldi9udWxsCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamNsb3Vkcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2pjbG91ZHMvSkNsb3Vkc1dpdGhDYWNoZVRlc3QuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5qY2xvdWRzOworCitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGoudGVzdC5FbnRpdHlUZXN0QXNzZW1ibGVyOworaW1wb3J0IG9yZy5xaTRqLnRlc3QuY2FjaGUuQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3Q7CitpbXBvcnQgb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLm9yZ2pzb24uT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcjsKKworcHVibGljIGNsYXNzIEpDbG91ZHNXaXRoQ2FjaGVUZXN0CisgICAgZXh0ZW5kcyBBYnN0cmFjdEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdAoreworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN1cGVyLmFzc2VtYmxlKCBtb2R1bGUgKTsKKyAgICAgICAgTW9kdWxlQXNzZW1ibHkgY29uZmlnID0gbW9kdWxlLmxheWVyKCkubW9kdWxlKCAiY29uZmlnIiApOworICAgICAgICBuZXcgRW50aXR5VGVzdEFzc2VtYmxlcigpLmFzc2VtYmxlKCBjb25maWcgKTsKKyAgICAgICAgbmV3IE9yZ0pzb25WYWx1ZVNlcmlhbGl6YXRpb25Bc3NlbWJsZXIoKS5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIG5ldyBKQ2xvdWRzTWFwRW50aXR5U3RvcmVBc3NlbWJsZXIoKS53aXRoQ29uZmlnKCBjb25maWcsIFZpc2liaWxpdHkubGF5ZXIgKS5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qZGJtL05PVElDRSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyM2ViMzQuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qZGJtL05PVElDRQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVFpNGogSkRCTSBQZXJzaXN0ZW5jZSBFeHRlbnNpb24KLUNvcHlyaWdodCAyMDA3LTIwMDgsIFRoZSBRaTRqIERldmVsb3BtZW50IFRlYW0gb2YgaW5kaXZpZHVhbHMuCi0KLVNlZSBodHRwOi8vd3d3LnFpNGoub3JnL2NvbnRyaWJ1dG9ycy5odG1sIGZvciBsaXN0IG9mIG9mIGluZGl2aWR1YWxzLgotQWxzbyBzZWUgZWFjaCBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIENvcHlyaWdodCBjbGFpbXMuCi0KLVFpNGogaXMgYSBjb21tdW5pdHkgYWdncmVnYXRlZCB3b3JrcyB1bmRlciBDb3B5cmlnaHQgbGF3LgotQWxsIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCB3b3JrcyBhdCBRaTRqIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2UgdmVyIDIuMCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMKLQotQmVsb3cgZm9sbG93cyBhIGxpc3Qgb2YgYmluYXJ5IGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgbGljZW5zZXM7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgbW9kdWxlIHVzZXMgSkRCTSwgc29mdHdhcmUgZGV2ZWxvcGVkIGF0IGh0dHA6Ly9qZGJtLnNmLm5ldCBieQotQ2VlcyBkZSBHcm9vdCBhbmQgQWxleCBCb2lzdmVydC4gU2VlIGxpY2Vuc2VzL2pkYm0ubGljZW5zZQotCi0KLUVORCBPRiBOT1RJQ0UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpkYm0vYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qZGJtL2J1aWxkLmdyYWRsZQppbmRleCA5NDAwY2I2Li5jMzE3YzE1IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpkYm0vYnVpbGQuZ3JhZGxlCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9idWlsZC5ncmFkbGUKQEAgLTEsNyArMSwyNSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotZGVzY3JpcHRpb24gPSAiUWk0aiBKREJNIEVudGl0eVN0b3JlIEV4dGVuc2lvbiIKK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIEpEQk0gRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgogCi1qYXIgeyBtYW5pZmVzdCB7bmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIEVudGl0eVN0b3JlIC0gSkRCTSIgfX0KK2phciB7IG1hbmlmZXN0IHtuYW1lID0gIkFwYWNoZSBaZXN04oSiIEV4dGVuc2lvbiAtIEVudGl0eVN0b3JlIC0gSkRCTSIgfX0KIAogZGVwZW5kZW5jaWVzIHsKIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qZGJtL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qZGJtL2Rldi1zdGF0dXMueG1sCmluZGV4IDUwZDI2ZDMuLmFjNjNjZGEgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9kZXYtc3RhdHVzLnhtbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpkYm0vZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpkYm0vc3JjL2RvY3MvZXMtamRibS50eHQgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpkYm0vc3JjL2RvY3MvZXMtamRibS50eHQKaW5kZXggZWFlYmQ1MC4uN2E5MGRhYSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1qZGJtL3NyYy9kb2NzL2VzLWpkYm0udHh0CisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9zcmMvZG9jcy9lcy1qZGJtLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tleHRlbnNpb24tZXMtamRibSwgSkRCTSBFbnRpdHlTdG9yZV1dCiA9IEpEQk0gRW50aXR5U3RvcmUgPQogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpkYm0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9qZGJtL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vYXNzZW1ibHkvcGFja2FnZS5odG1sCmluZGV4IGNjNWZjNzUuLmViYjM3ZWUgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vYXNzZW1ibHkvcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vYXNzZW1ibHkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5KREJNIEVudGl0eVN0b3JlIEFzc2VtYmx5LjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpkYm0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9qZGJtL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vcGFja2FnZS5odG1sCmluZGV4IGFkMzJiMjcuLjhhMGVmOGYgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5KREJNIEVudGl0eVN0b3JlLjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpkYm0vc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9qZGJtL0pkYm1FbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtamRibS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vSmRibUVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZGVkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWpkYm0vc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9qZGJtL0pkYm1FbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YQpAQCAtMCwwICsxLDU0IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5qZGJtOworCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5lbnRpdHlzdG9yZS5qZGJtLmFzc2VtYmx5LkpkYm1FbnRpdHlTdG9yZUFzc2VtYmxlcjsKK2ltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmZpbGVjb25maWcuRmlsZUNvbmZpZ3VyYXRpb247CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5maWxlY29uZmlnLkZpbGVDb25maWd1cmF0aW9uRGF0YVdpcGVyOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZmlsZWNvbmZpZy5GaWxlQ29uZmlndXJhdGlvblNlcnZpY2U7CitpbXBvcnQgb3JnLnFpNGoudGVzdC5FbnRpdHlUZXN0QXNzZW1ibGVyOworaW1wb3J0IG9yZy5xaTRqLnRlc3QuY2FjaGUuQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3Q7CitpbXBvcnQgb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLm9yZ2pzb24uT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcjsKKworcHVibGljIGNsYXNzIEpkYm1FbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QKKyAgICBleHRlbmRzIEFic3RyYWN0RW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0Cit7CisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHRlc3REYXRhQ2xlYW51cCgpCisgICAgeworICAgICAgICBGaWxlQ29uZmlndXJhdGlvbiBmaWxlQ29uZmlnID0gbW9kdWxlLmZpbmRTZXJ2aWNlKCBGaWxlQ29uZmlndXJhdGlvbi5jbGFzcyApLmdldCgpOworICAgICAgICBGaWxlQ29uZmlndXJhdGlvbkRhdGFXaXBlci5yZWdpc3RlckFwcGxpY2F0aW9uUGFzc2l2YXRpb25EYXRhV2lwZXIoIGZpbGVDb25maWcsIGFwcGxpY2F0aW9uICk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgc3VwZXIuYXNzZW1ibGUoIG1vZHVsZSApOworCisgICAgICAgIE1vZHVsZUFzc2VtYmx5IGNvbmZpZyA9IG1vZHVsZS5sYXllcigpLm1vZHVsZSggImNvbmZpZyIgKTsKKyAgICAgICAgY29uZmlnLnNlcnZpY2VzKCBGaWxlQ29uZmlndXJhdGlvblNlcnZpY2UuY2xhc3MgKS52aXNpYmxlSW4oIFZpc2liaWxpdHkubGF5ZXIgKS5pbnN0YW50aWF0ZU9uU3RhcnR1cCgpOworICAgICAgICBuZXcgRW50aXR5VGVzdEFzc2VtYmxlcigpLmFzc2VtYmxlKCBjb25maWcgKTsKKworICAgICAgICBuZXcgT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKKyAgICAgICAgbmV3IEpkYm1FbnRpdHlTdG9yZUFzc2VtYmxlcigpLndpdGhDb25maWcoIGNvbmZpZywgVmlzaWJpbGl0eS5sYXllciApLmFzc2VtYmxlKCBtb2R1bGUgKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1sZXZlbGRiL2J1aWxkLmdyYWRsZQppbmRleCBjYzRmM2U5Li5kZTJhNDMxIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvYnVpbGQuZ3JhZGxlCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbGV2ZWxkYi9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBMZXZlbERCIEVudGl0eVN0b3JlIEV4dGVuc2lvbiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIEVudGl0eVN0b3JlIC0gTGV2ZWxEQiIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIExldmVsREIgRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBMZXZlbERCIiB9fQogCiBkZXBlbmRlbmNpZXMgewogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvZGV2LXN0YXR1cy54bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvZGV2LXN0YXR1cy54bWwKaW5kZXggNDEzOTdjNi4uOTFkNGE2MyAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1sZXZlbGRiL2Rldi1zdGF0dXMueG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbGV2ZWxkYi9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbGV2ZWxkYi9zcmMvZG9jcy9lcy1sZXZlbGRiLnR4dCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbGV2ZWxkYi9zcmMvZG9jcy9lcy1sZXZlbGRiLnR4dAppbmRleCAyMDgxNjRjLi5mZmJjMTZhIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvc3JjL2RvY3MvZXMtbGV2ZWxkYi50eHQKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1sZXZlbGRiL3NyYy9kb2NzL2VzLWxldmVsZGIudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2V4dGVuc2lvbi1lcy1sZXZlbGRiLExldmVsREIgRW50aXR5U3RvcmVdXQogPSBMZXZlbERCIEVudGl0eVN0b3JlID0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1sZXZlbGRiL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbGV2ZWxkYi9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9sZXZlbGRiL3BhY2thZ2UuaHRtbAppbmRleCAwNWMzODI4Li43MjBhM2ZmIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9sZXZlbGRiL3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9sZXZlbGRiL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+TGV2ZWxEQiBFbnRpdHlTdG9yZS48L2gyPgpAQCAtOCw3ICsyNCw3IEBACiAgICAgICAgIDxwPgogICAgICAgICAgICAgQnkgZGVmYXVsdCB1c2UgdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB0aHJvdWdoIEpOSSBiaW5kaW5ncyBhbmQgZmFsbGJhY2sgdG8gdGhlIHB1cmUgamF2YSBpbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgbm90IGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4gVXNlZCBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm9yY2VkIHVzaW5nIHRoZQotICAgICAgICAgICAge0BsaW5rIExldmVsREJFbnRpdHlTdG9yZUNvbmZpZ3VyYXRpb24jZmxhdm91cigpfSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIHtAbGluayBvcmcucWk0ai5lbnRpdHlzdG9yZS5sZXZlbGRiLkxldmVsREJFbnRpdHlTdG9yZUNvbmZpZ3VyYXRpb24jZmxhdm91cigpfSBwcm9wZXJ0eS4KICAgICAgICAgPC9wPgogICAgICAgICA8cD5TZWU6PC9wPgogICAgICAgICA8dWw+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9sZXZlbGRiL0xldmVsREJFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbGV2ZWxkYi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL2xldmVsZGIvTGV2ZWxEQkVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYjdiZGYKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLWxldmVsZGIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9sZXZlbGRiL0xldmVsREJFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5sZXZlbGRiOworCitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5maWxlY29uZmlnLkZpbGVDb25maWd1cmF0aW9uU2VydmljZTsKK2ltcG9ydCBvcmcucWk0ai50ZXN0LkVudGl0eVRlc3RBc3NlbWJsZXI7CitpbXBvcnQgb3JnLnFpNGoudGVzdC5jYWNoZS5BYnN0cmFjdEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdDsKK2ltcG9ydCBvcmcucWk0ai52YWx1ZXNlcmlhbGl6YXRpb24ub3JnanNvbi5PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyOworCitwdWJsaWMgY2xhc3MgTGV2ZWxEQkVudGl0eVN0b3JlV2l0aENhY2hlVGVzdAorICAgIGV4dGVuZHMgQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QKK3sKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlci5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIE1vZHVsZUFzc2VtYmx5IGNvbmZpZyA9IG1vZHVsZS5sYXllcigpLm1vZHVsZSggImNvbmZpZyIgKTsKKyAgICAgICAgbmV3IEVudGl0eVRlc3RBc3NlbWJsZXIoKS52aXNpYmxlSW4oIFZpc2liaWxpdHkubW9kdWxlICkuYXNzZW1ibGUoIGNvbmZpZyApOworICAgICAgICBuZXcgT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKKworICAgICAgICBtb2R1bGUuc2VydmljZXMoIEZpbGVDb25maWd1cmF0aW9uU2VydmljZS5jbGFzcyApOworCisgICAgICAgIG5ldyBMZXZlbERCRW50aXR5U3RvcmVBc3NlbWJsZXIoKS4KKyAgICAgICAgICAgIHdpdGhDb25maWcoIGNvbmZpZywgVmlzaWJpbGl0eS5sYXllciApLgorICAgICAgICAgICAgaWRlbnRpZmllZEJ5KCAiamF2YS1sZXZlbGRiLWVudGl0eXN0b3JlIiApLgorICAgICAgICAgICAgYXNzZW1ibGUoIG1vZHVsZSApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L2J1aWxkLmdyYWRsZSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L2J1aWxkLmdyYWRsZQppbmRleCAyM2FiZDI5Li45N2YxZjMxIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1lbW9yeS9idWlsZC5ncmFkbGUKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tZW1vcnkvYnVpbGQuZ3JhZGxlCkBAIC0xLDQgKzEsMjMgQEAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIEVudGl0eVN0b3JlIC0gTWVtb3J5IiB9fQorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIEV4dGVuc2lvbiAtIEVudGl0eVN0b3JlIC0gTWVtb3J5IiB9fQogCiBkZXBlbmRlbmNpZXMgewogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1lbW9yeS9kZXYtc3RhdHVzLnhtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L2Rldi1zdGF0dXMueG1sCmluZGV4IDlhZjliNmIuLjczZWQyYjAgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L2Rldi1zdGF0dXMueG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tZW1vcnkvc3JjL2RvY3MvZXMtbWVtb3J5LnR4dCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L3NyYy9kb2NzL2VzLW1lbW9yeS50eHQKaW5kZXggYjBlMmZjZC4uOTNkYTYyOCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tZW1vcnkvc3JjL2RvY3MvZXMtbWVtb3J5LnR4dAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1lbW9yeS9zcmMvZG9jcy9lcy1tZW1vcnkudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2V4dGVuc2lvbi1lcy1tZW1vcnksIE1lbW9yeSBFbnRpdHlTdG9yZV1dCiA9IE1lbW9yeSBFbnRpdHlTdG9yZSA9CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbWVtb3J5L3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbWVtb3J5L3BhY2thZ2UuaHRtbAppbmRleCBhYjgxMGVmLi5kOTA3YjZjIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1lbW9yeS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL21lbW9yeS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tZW1vcnkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9tZW1vcnkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5Jbi1NZW1vcnkgRW50aXR5U3RvcmUuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbWVtb3J5L01lbW9yeUVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tZW1vcnkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9tZW1vcnkvTWVtb3J5RW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExYzcyYwotLS0gL2Rldi9udWxsCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbWVtb3J5L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbWVtb3J5L01lbW9yeUVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLm1lbW9yeTsKKworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGoudGVzdC5jYWNoZS5BYnN0cmFjdEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdDsKK2ltcG9ydCBvcmcucWk0ai52YWx1ZXNlcmlhbGl6YXRpb24ub3JnanNvbi5PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyOworCitwdWJsaWMgY2xhc3MgTWVtb3J5RW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0CisgICAgZXh0ZW5kcyBBYnN0cmFjdEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdAoreworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQorICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN1cGVyLmFzc2VtYmxlKCBtb2R1bGUgKTsKKyAgICAgICAgbmV3IE9yZ0pzb25WYWx1ZVNlcmlhbGl6YXRpb25Bc3NlbWJsZXIoKS5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIG5ldyBNZW1vcnlFbnRpdHlTdG9yZUFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvLmdpdGlnbm9yZSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbW9uZ29kYi8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjUxYjc1Li4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbW9uZ29kYi8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1wb20ueG1sCi10YXJnZXQKLW5iLWNvbmZpZ3VyYXRpb24ueG1sCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tb25nb2RiL2J1aWxkLmdyYWRsZQppbmRleCAzMmU5OWM4Li45NTcwYTFmIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvYnVpbGQuZ3JhZGxlCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbW9uZ29kYi9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBNb25nb0RCIEVudGl0eVN0b3JlIEV4dGVuc2lvbiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIEVudGl0eVN0b3JlIC0gTW9uZ29EQiIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIE1vbmdvREIgRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBNb25nb0RCIiB9fQogCiBkZXBlbmRlbmNpZXMgewogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvZGV2LXN0YXR1cy54bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvZGV2LXN0YXR1cy54bWwKaW5kZXggNTBkMjZkMy4uYWM2M2NkYSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tb25nb2RiL2Rldi1zdGF0dXMueG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbW9uZ29kYi9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbW9uZ29kYi9zcmMvZG9jcy9lcy1tb25nb2RiLnR4dCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbW9uZ29kYi9zcmMvZG9jcy9lcy1tb25nb2RiLnR4dAppbmRleCBlYzIyMzFkLi5jMjQ3NDZmIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvc3JjL2RvY3MvZXMtbW9uZ29kYi50eHQKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tb25nb2RiL3NyYy9kb2NzL2VzLW1vbmdvZGIudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2V4dGVuc2lvbi1lcy1tb25nb2RiLE1vbmdvREIgRW50aXR5U3RvcmVdXQogPSBNb25nb0RCIEVudGl0eVN0b3JlID0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tb25nb2RiL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbW9uZ29kYi9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9tb25nb2RiL3BhY2thZ2UuaHRtbAppbmRleCAwNjA0ZGM3Li4wZTljYzU0IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9tb25nb2RiL3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9tb25nb2RiL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+TW9uZ29EQiBFbnRpdHlTdG9yZS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tb25nb2RiL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbW9uZ29kYi9Nb25nb01hcEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1tb25nb2RiL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbW9uZ29kYi9Nb25nb01hcEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYWVjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLW1vbmdvZGIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9tb25nb2RiL01vbmdvTWFwRW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0LmphdmEKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUubW9uZ29kYjsKKworaW1wb3J0IGNvbS5tb25nb2RiLk1vbmdvOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai50ZXN0LkVudGl0eVRlc3RBc3NlbWJsZXI7CitpbXBvcnQgb3JnLnFpNGoudGVzdC5jYWNoZS5BYnN0cmFjdEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdDsKK2ltcG9ydCBvcmcucWk0ai52YWx1ZXNlcmlhbGl6YXRpb24ub3JnanNvbi5PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyOworCitpbXBvcnQgc3RhdGljIG9yZy5xaTRqLnRlc3QudXRpbC5Bc3N1bWUuYXNzdW1lQ29ubmVjdGl2aXR5OworCisvKioKKyAqIFRlc3QgdGhlIE1vbmdvTWFwRW50aXR5U3RvcmVTZXJ2aWNlIHVzYWdlIHdpdGggYSBDYWNoZVBvb2wuCisgKiA8cD5JbnN0YWxsaW5nIG1vbmdvZGIgYW5kIHN0YXJ0aW5nIGl0IHNob3VsZCBzdWZmaWNlIGFzIHRoZSB0ZXN0IHVzZSBtb25nb2RiIGRlZmF1bHRzOiAxMjcuMC4wLjE6MjcwMTc8L3A+CisgKi8KK3B1YmxpYyBjbGFzcyBNb25nb01hcEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdAorICAgIGV4dGVuZHMgQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QKK3sKKyAgICBAQmVmb3JlQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYmVmb3JlUmVkaXNNYXBFbnRpdHlTdG9yZVRlc3RzKCkKKyAgICB7CisgICAgICAgIGFzc3VtZUNvbm5lY3Rpdml0eSggImxvY2FsaG9zdCIsIDI3MDE3ICk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgc3VwZXIuYXNzZW1ibGUoIG1vZHVsZSApOworCisgICAgICAgIE1vZHVsZUFzc2VtYmx5IGNvbmZpZyA9IG1vZHVsZS5sYXllcigpLm1vZHVsZSggImNvbmZpZyIgKTsKKyAgICAgICAgbmV3IEVudGl0eVRlc3RBc3NlbWJsZXIoKS5hc3NlbWJsZSggY29uZmlnICk7CisKKyAgICAgICAgbmV3IE9yZ0pzb25WYWx1ZVNlcmlhbGl6YXRpb25Bc3NlbWJsZXIoKS5hc3NlbWJsZSggbW9kdWxlICk7CisKKyAgICAgICAgbmV3IE1vbmdvTWFwRW50aXR5U3RvcmVBc3NlbWJsZXIoKS53aXRoQ29uZmlnKCBjb25maWcsIFZpc2liaWxpdHkubGF5ZXIgKS5hc3NlbWJsZSggbW9kdWxlICk7CisKKyAgICAgICAgTW9uZ29FbnRpdHlTdG9yZUNvbmZpZ3VyYXRpb24gbW9uZ29Db25maWcgPSBjb25maWcuZm9yTWl4aW4oIE1vbmdvRW50aXR5U3RvcmVDb25maWd1cmF0aW9uLmNsYXNzICkuZGVjbGFyZURlZmF1bHRzKCk7CisgICAgICAgIG1vbmdvQ29uZmlnLndyaXRlQ29uY2VybigpLnNldCggTW9uZ29FbnRpdHlTdG9yZUNvbmZpZ3VyYXRpb24uV3JpdGVDb25jZXJuLkZTWU5DX1NBRkUgKTsKKyAgICAgICAgbW9uZ29Db25maWcuZGF0YWJhc2UoKS5zZXQoICJxaTRqOnRlc3QiICk7CisgICAgICAgIG1vbmdvQ29uZmlnLmNvbGxlY3Rpb24oKS5zZXQoICJxaTRqOnRlc3Q6ZW50aXRpZXMiICk7CisgICAgfQorCisgICAgcHJpdmF0ZSBNb25nbyBtb25nbzsKKyAgICBwcml2YXRlIFN0cmluZyBkYk5hbWU7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN1cGVyLnNldFVwKCk7CisgICAgICAgIE1vbmdvTWFwRW50aXR5U3RvcmVTZXJ2aWNlIGVzID0gbW9kdWxlLmZpbmRTZXJ2aWNlKCBNb25nb01hcEVudGl0eVN0b3JlU2VydmljZS5jbGFzcyApLmdldCgpOworICAgICAgICBtb25nbyA9IGVzLm1vbmdvSW5zdGFuY2VVc2VkKCk7CisgICAgICAgIGRiTmFtZSA9IGVzLmRiSW5zdGFuY2VVc2VkKCkuZ2V0TmFtZSgpOworCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBtb25nby5kcm9wRGF0YWJhc2UoIGRiTmFtZSApOworICAgICAgICBzdXBlci50ZWFyRG93bigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovTk9USUNFLnR4dCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovTk9USUNFLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc4ZTk1OC4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL05PVElDRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1Db3B5cmlnaHQgMjAwOCBOZW8gVGVjaG5vbG9neSwgaHR0cDovL25lb3RlY2hub2xvZ3kuY29tLgotCi1MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLXlvdSBtYXkgbm90IHVzZSB0aGlzIGNvbXBvbmVudCBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi1pbXBsaWVkLgotCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotCi1QbGVhc2Ugbm90ZSB0aGF0IHRoaXMgY29tcG9uZW50IGRlcGVuZHMgb24gTmVvNEogKGh0dHA6Ly9uZW80ai5vcmcpCi13aGljaCBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbAotUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlcgotdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotTmVvIFRlY2hub2xvZ3kgYWxzbyBwcm92aWRlcyBhIGRpc3RyaWJ1dGlvbiBvZiBOZW80SiB1bmRlciBhCi1jb21tZXJjaWFsIGxpY2Vuc2UgYXQgaHR0cDovL25lb3RlY2hub2xvZ3kuY29tLgotCi1Bbnkgc29mdHdhcmUgdGhhdCBkZXBlbmRzIG9uIE5lbzRKIGFuZCB0aGlzIGNvbXBvbmVudCBpcyB0aGVyZWZvcmUKLXN1YmplY3RlZCB0byBhbnkgYWRkaXRpb25hbCBsaWNlbnNlIGRldGFpbHMgc3RhdGVkIGJ5IHRoZSBMaWNlbnNlCi1vZiBOZW80Si4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL2J1aWxkLmdyYWRsZSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovYnVpbGQuZ3JhZGxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmZmODc4Li4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovYnVpbGQuZ3JhZGxlCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotCi1kZXNjcmlwdGlvbiA9ICJRaTRqIE5lbzRqIEVudGl0eVN0b3JlIEV4dGVuc2lvbiIKLQotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBOZW80aiIgfX0KLQotZGVwZW5kZW5jaWVzIHsKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnNwaSIpKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5maWxlY29uZmlnIikpCi0gIGNvbXBpbGUobGlicmFyaWVzLm5lbzRqKQotCi0gIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiKSkKLSAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmV4dGVuc2lvbnM6b3JnLnFpNGouZXh0ZW5zaW9uLnZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uIikpCi0KLSAgdGVzdFJ1bnRpbWUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lIikpCi0gIHRlc3RSdW50aW1lKGxpYnJhcmllcy5sb2diYWNrKQotfQotCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9kZXYtc3RhdHVzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA3OGU3Ny4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL2Rldi1zdGF0dXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCi0gICAgICAgIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZCI+Ci0gIDxzdGF0dXM+Ci0gICAgICAgIDwhLS1ub25lLGVhcmx5LGJldGEsc3RhYmxlLG1hdHVyZS0tPgotICAgICAgICA8Y29kZWJhc2U+YmV0YTwvY29kZWJhc2U+Ci0KLSAgICAgICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgICAgIDxkb2N1bWVudGF0aW9uPmJyaWVmPC9kb2N1bWVudGF0aW9uPgotCi0gICAgICAgIDwhLS0gbm9uZSwgc29tZSwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgICAgIDx1bml0dGVzdHM+c29tZTwvdW5pdHRlc3RzPgotICAgIDwvc3RhdHVzPgotICAgIDxsaWNlbnNlcz4KLSAgICAgICAgPGxpY2Vuc2U+QUx2MjwvbGljZW5zZT4KLSAgICAgICAgPGxpY2Vuc2U+QUdQTHYzPC9saWNlbnNlPgotICAgIDwvbGljZW5zZXM+Ci08L21vZHVsZT4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovbGljZW5zZS1leHBsYWluLnR4dCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovbGljZW5zZS1leHBsYWluLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlZDBiNS4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL2xpY2Vuc2UtZXhwbGFpbi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0KLVBsZWFzZSBub3RlIHRoYXQgdGhpcyBtb2R1bGUgaGFzIGEgZGVwZW5kZW5jeSBvbiBhIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotdmVyc2lvbiAzIChBR1BMdjMpLCBub3QgdG8gYmUgbWlzdGFrZW4gZm9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMKLShHUEx2MykuIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCAiZGlzdHJpYnV0aW9uIiBpbiBHUEx2MyBpcyBleHRlbmRlZCB0byBpbmNsdWRlCi0idXNhZ2UiLCBmb3IgaW5zdGFuY2UgaWYgYW4gYXBwbGljYXRpb24gY2FuIGJlIHVzZWQgZnJvbSBhIHdlYiBzZXJ2aWNlLCB0aGUgdXNlcgotaGFzIHJvdWdobHkgdGhlIGVxdWl2YWxlbnQgcmlnaHRzIG9mICJkaXN0cmlidXRpb24iIHVuZGVyIEdQTHYzLgotCi1UbyBjbGFyaWZ5IHRoZSBpbnRlbnQgb2YgTmVvNGogbGljZW5zaW5nIGluIHRoZSBjb250ZXh0IG9mIFFpNGoncyBOZW80aiBFbnRpdHkgU3RvcmUKLXRoZSBmb2xsb3dpbmcgbWFpbCBmcm9tIHFpNGotZGV2QGxpc3RzLm9wczRqLm9yZyBjYXB0dXJlcyB0aGUgdW5kZXJzdGFuZGluZyBvZgotdGhlIGxpY2Vuc2UuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBub3QgbGVnYWwgYWR2aWNlLCBhbmQgaWYgaW4gZG91YnQsIHBsZWFzZQotY29uc3VsdCB5b3VyIGxlZ2FsIGNvdW5zZWwuCi0KLS0gbyAtIG8gLSBvIC0gbyAtIG8gLQotCi1PbiBNb24sIEp1bCAyOCwgMjAwOCBhdCA4OjM1IEFNLCBOaWNsYXMgSGVkaG1hbiA8bmljbGFzQGhlZGhtYW4ub3JnPiB3cm90ZToKLT4KLT4gRXZlcnlvbmUgKGVzcGVjaWFsbHkgRW1pbCksCi0+Ci0+IFBsZWFzZSBSRUFEIHRoZSBOT1RJQ0UudHh0IGJlZm9yZSB1c2luZyB0aGUgIkVudGl0eSBTdG9yZSAtIE5lbzRqIi4gQWx0aG91Z2gKLT4gdGhlIEVuaXR5U3RvcmUgaXRzZWxmIGlzIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2ZXIgMi4wLCBpdCBoYXMgYQotPiBkZXBlbmRlbmN5IG9uIE5lbzRqIGl0c2VsZiwgd2hpY2ggaXMgbGljZW5zZWQgdW5kZXIgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYwotPiBMaWNlbnNlIHZlcnNpb24gMyBvciBsYXRlci4KLT4KLT4gSW4gZXNzZW5jZSwgdGhpcyBtZWFucyB0aGF0IHlvdSBhcmUgYWxsb3dlZCB0byBVU0UgdGhlIGNvbWJpbmVkIHdvcmsgZm9yCi0+IHlvdXJzZWxmIHdpdGhvdXQgbGltaXRhdGlvbnMsIGFzIGxvbmcgYXMgbm9vbmUgZWxzZSB1c2VzIGl0LCBkaXJlY3RseSBvcgotPiBpbmRpcmVjdGx5LiBUaGF0IG1lYW5zLCBpZiB5b3UgY3JlYXRlIGFuIGFwcGxpY2F0aW9uIGFuZCBkaXN0cmlidXRlLCBvciBpZgotPiB5b3UgcHV0IGFuIGFwcGxpY2F0aW9uIG9uIGEgd2ViIHNlcnZlciwgd2l0aCB1c2VycyBhY2Nlc3NpbmcgaXQsIHRoZW4geW91Ci0+IE1VU1QgcHJvdmlkZSB0aGUgc291cmNlcyBvZiB0aGUgY29tYmluZWQgd29yayB0byBhbnlvbmUgYXNraW5nIGZvciBpdC4KLQotQ29ycmVjdC4KLQotPgotPiBUaGVyZSBpcyBhICJncmF5IHpvbmUiIHdoaWNoIEkgd291bGQgbGlrZSB0byBoZWFyIHRoZSBjbGFyaWZpY2F0aW9uIGJ5IEVtaWwuCi0+Ci0+IDxzY2VuYXJpbz4KLT4gUGVyc29uIEEgZGV2ZWxvcHMgc29tZSBmdW5reSBjbG9zZWQtc291cmNlIHdlYiBhcHBsaWNhdGlvbiwgYmFzZWQgb24gUWk0ai4KLT4KLT4gUGVyc29uIEIgYnV5cyB0aGF0IGFwcGxpY2F0aW9uLCBidXQgY29uZmlndXJlcyBpdCB0byB1c2UgdGhlIE5lbzRqIEVudGl0eQotPiBTdG9yZSBhbmQgdGhlIE5lbzRqIEVuZ2luZS4KLT4gPC9zY2VuYXJpbz4KLT4KLT4gUGVyc29uIEEgaXMgbm90IHZpb2xhdGluZyBhbnkgbGljZW5zZS4gUGVyc29uIEIgaXMgbm90IHZpb2xhdGluZyB0aGUgbGljZW5zZQotPiByZWNlaXZlZCBmcm9tIFBlcnNvbiBBLiBCdXQgaXMgUGVyc29uIEIgdmlvbGF0aW5nIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwKLT4gUHVibGljIExpY2Vuc2UsIGJ5IG5vdCBoYXZpbmcgdGhlIGF1dGhvcml0eSB0byBwcm92aWRlIHRoZSBzb3VyY2VzIGZvciB0aGUKLT4gd2ViIGFwcGxpY2F0aW9uIHByb2R1Y3QgaXRzZWxmPz8/Ci0KLVllcy4KLQotUGVyc29uIEIgaXMgb25seSBhbGxvd2VkIHRvIHVzZSBOZW80aiBpZiB0aGV5IGZvbGxvdyB0aGUgdGVybXMgaW4gdGhlCi1saWNlbnNlIHVuZGVyIHdoaWNoIHRoZXkgcmVjZWl2ZWQgaXQuIEluIE5lbzRqJ3MgY2FzZSwgdGhleSBoYXZlIHR3bwotY2hvaWNlczogdXNlIGl0IHVuZGVyIHRoZSBBR1BMdjMgbGljZW5zZSBvciB0aGUgY29tbWVyY2lhbCBsaWNlbnNlLiBJZgotdGhleSB1c2UgTmVvNGogdW5kZXIgQUdQTHYzLCB0aGVuIGluIG9yZGVyIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZgotdGhlIEFHUEx2MyB0aGV5IG11c3QgcHJvdmlkZSB0aGUgZnVsbCBzb3VyY2UgY29kZSB0byB0aGUgY29tYmluZWQgd29yawotKGluY2x1ZGluZyB0aGUgd2ViYXBwJ3MgY29kZSkgdG8gYW55IHVzZXJzIG9mIHNhaWQgd2ViYXBwLiBJbiB0aGF0Ci1jYXNlLCB0aGV5IGNhbid0IGNvbXBseSB3aXRoIG9uZSBvZiB0aGUgdGVybXMgKGZyZWVkb20gMSwgYWNjZXNzIHRvCi1zb3VyY2UgY29kZSkgc28gdGhleSB3b24ndCBiZSBncmFudGVkIHRoZSByaWdodHMgb2YgYW55IG9mIHRoZSBvdGhlcgotdGVybXMgaW4gdGhlIGxpY2Vuc2UgKGZvciBleGFtcGxlIGZyZWVkb20gMCwgdGhlIGZyZWVkb20gdG8gcnVuKS4KLQotSWYgdGhleSBjYW4ndCBjb21wbHkgd2l0aCB0aGF0IGZvciB3aGF0ZXZlciByZWFzb24gKGluIHRoaXMgY2FzZSwKLWJlY2F1c2UgcGVyc29uIEEgZGlkIG5vdCBncmFudCB0aGVtIHRoYXQgZnJlZWRvbSksIHRoZXkncmUgdW5hYmxlIHRvCi11c2UgTmVvNGogdW5kZXIgdGhlIEFHUEx2My4gVGhleSBjYW4gb2YgY291cnNlIHB1cmNoYXNlIE5lbzRqIHVuZGVyIGEKLWNvbW1lcmNpYWwgbGljZW5zZSAod2hpY2ggZ2l2ZXMgdGhlbSB0aGUgZmxleGliaWxpdHkgdG8gZS5nLiB1c2UgaXQKLXdpdGggcHJvcHJpZXRhcnkgY29kZSwgYWxvbmcgd2l0aCBpbmRlbW5pZmljYXRpb24gYW5kIHN1cHBvcnQgZXRjKSBvcgotc3dhcCBpbiBzb21ldGhpbmcgZWxzZS4KLQotSUFOQUwsIGJ1dCB0aGlzIGNhcHR1cmVzIG91ciBpbnRlbnQuIEkndmUgYm91bmNlZCB0aGlzIHNjZW5hcmlvIG9mZiBvZgotbGljZW5zaW5nQGZzZi5vcmcgYW5kIHRoaXMgaXMgdGhlaXIgaW50ZXJwcmV0YXRpb24gYXMgd2VsbCAoZXhjZXB0Ci1pdCdzIG5vdCBsZWdhbCBhZHZpY2UgZnJvbSB0aGVtIGVpdGhlciwgb2YgY291cnNlKS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL2xpY2Vuc2VzL25lbzRqLWNvbW1lcmNpYWwubGljZW5zZSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovbGljZW5zZXMvbmVvNGotY29tbWVyY2lhbC5saWNlbnNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTI2Mjg4Li4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovbGljZW5zZXMvbmVvNGotY29tbWVyY2lhbC5saWNlbnNlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLUNvbnRhY3QgTmVvIFRlY2hub2xvZ3kgQUIgdGhyb3VnaCBhIG1haWwgdG8gc2FsZXNAbmVvdGVjaG5vbG9neS5jb20gZm9yIGRldGFpbHMKLW9mIHRoZSBjb21tZXJjaWFsIGxpY2Vuc2VzIGF2YWlsYWJsZSBhbmQgcHJpY2UgcXVvdGVzLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovbGljZW5zZXMvbmVvNGotb3BlbnNvdXJjZS5saWNlbnNlIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9saWNlbnNlcy9uZW80ai1vcGVuc291cmNlLmxpY2Vuc2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzhjM2YuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9saWNlbnNlcy9uZW80ai1vcGVuc291cmNlLmxpY2Vuc2UKKysrIC9kZXYvbnVsbApAQCAtMSw2MTkgKzAsMCBAQAotICAgICAgICAgICAgICAgICAgICBHTlUgQUZGRVJPIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKLSAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAxOSBOb3ZlbWJlciAyMDA3Ci0KLSBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+Ci0gRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCi0gb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQotCi0gIFRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgotc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZW5zdXJlCi1jb29wZXJhdGlvbiB3aXRoIHRoZSBjb21tdW5pdHkgaW4gdGhlIGNhc2Ugb2YgbmV0d29yayBzZXJ2ZXIgc29mdHdhcmUuCi0KLSAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCi10byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCi1vdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8KLXNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQotc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuCi0KLSAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAotcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQotaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgotdGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKLXdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3Ci1mcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KLQotICBEZXZlbG9wZXJzIHRoYXQgdXNlIG91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBwcm90ZWN0IHlvdXIgcmlnaHRzCi13aXRoIHR3byBzdGVwczogKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyCi15b3UgdGhpcyBMaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUKLWFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgotCi0gIEEgc2Vjb25kYXJ5IGJlbmVmaXQgb2YgZGVmZW5kaW5nIGFsbCB1c2VycycgZnJlZWRvbSBpcyB0aGF0Ci1pbXByb3ZlbWVudHMgbWFkZSBpbiBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgdGhlIHByb2dyYW0sIGlmIHRoZXkKLXJlY2VpdmUgd2lkZXNwcmVhZCB1c2UsIGJlY29tZSBhdmFpbGFibGUgZm9yIG90aGVyIGRldmVsb3BlcnMgdG8KLWluY29ycG9yYXRlLiAgTWFueSBkZXZlbG9wZXJzIG9mIGZyZWUgc29mdHdhcmUgYXJlIGhlYXJ0ZW5lZCBhbmQKLWVuY291cmFnZWQgYnkgdGhlIHJlc3VsdGluZyBjb29wZXJhdGlvbi4gIEhvd2V2ZXIsIGluIHRoZSBjYXNlIG9mCi1zb2Z0d2FyZSB1c2VkIG9uIG5ldHdvcmsgc2VydmVycywgdGhpcyByZXN1bHQgbWF5IGZhaWwgdG8gY29tZSBhYm91dC4KLVRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1ha2luZyBhIG1vZGlmaWVkIHZlcnNpb24gYW5kCi1sZXR0aW5nIHRoZSBwdWJsaWMgYWNjZXNzIGl0IG9uIGEgc2VydmVyIHdpdGhvdXQgZXZlciByZWxlYXNpbmcgaXRzCi1zb3VyY2UgY29kZSB0byB0aGUgcHVibGljLgotCi0gIFRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvCi1lbnN1cmUgdGhhdCwgaW4gc3VjaCBjYXNlcywgdGhlIG1vZGlmaWVkIHNvdXJjZSBjb2RlIGJlY29tZXMgYXZhaWxhYmxlCi10byB0aGUgY29tbXVuaXR5LiAgSXQgcmVxdWlyZXMgdGhlIG9wZXJhdG9yIG9mIGEgbmV0d29yayBzZXJ2ZXIgdG8KLXByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uIHJ1bm5pbmcgdGhlcmUgdG8gdGhlCi11c2VycyBvZiB0aGF0IHNlcnZlci4gIFRoZXJlZm9yZSwgcHVibGljIHVzZSBvZiBhIG1vZGlmaWVkIHZlcnNpb24sIG9uCi1hIHB1YmxpY2x5IGFjY2Vzc2libGUgc2VydmVyLCBnaXZlcyB0aGUgcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlCi1jb2RlIG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uLgotCi0gIEFuIG9sZGVyIGxpY2Vuc2UsIGNhbGxlZCB0aGUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCi1wdWJsaXNoZWQgYnkgQWZmZXJvLCB3YXMgZGVzaWduZWQgdG8gYWNjb21wbGlzaCBzaW1pbGFyIGdvYWxzLiAgVGhpcyBpcwotYSBkaWZmZXJlbnQgbGljZW5zZSwgbm90IGEgdmVyc2lvbiBvZiB0aGUgQWZmZXJvIEdQTCwgYnV0IEFmZmVybyBoYXMKLXJlbGVhc2VkIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFmZmVybyBHUEwgd2hpY2ggcGVybWl0cyByZWxpY2Vuc2luZyB1bmRlcgotdGhpcyBsaWNlbnNlLgotCi0gIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCi1tb2RpZmljYXRpb24gZm9sbG93LgotCi0gICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLSAgMC4gRGVmaW5pdGlvbnMuCi0KLSAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotCi0gICJDb3B5cmlnaHQiIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mCi13b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgotCi0gICJUaGUgUHJvZ3JhbSIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcwotTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgIkxpY2Vuc2VlcyIgYW5kCi0icmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCi0KLSAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yawotaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCi1leGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZCB2ZXJzaW9uIiBvZiB0aGUKLWVhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3b3JrLgotCi0gIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkCi1vbiB0aGUgUHJvZ3JhbS4KLQotICBUbyAicHJvcGFnYXRlIiBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0Ci1wZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yCi1pbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKLWNvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsCi1kaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZQotcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgotCi0gIFRvICJjb252ZXkiIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKLXBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAotYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90IGNvbnZleWluZy4KLQotICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKLXRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUKLWZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQotdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKLWV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUKLXdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmCi10aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQotbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KLQotICAxLiBTb3VyY2UgQ29kZS4KLQotICBUaGUgInNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yawotZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQotZm9ybSBvZiBhIHdvcmsuCi0KLSAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKLXN0YW5kYXJkIGRlZmluZWQgYnkgYSByZWNvZ25pemVkIHN0YW5kYXJkcyBib2R5LCBvciwgaW4gdGhlIGNhc2Ugb2YKLWludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0Ci1pcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KLQotICBUaGUgIlN5c3RlbSBMaWJyYXJpZXMiIG9mIGFuIGV4ZWN1dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nLCBvdGhlcgotdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKLXBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IKLUNvbXBvbmVudCwgYW5kIChiKSBzZXJ2ZXMgb25seSB0byBlbmFibGUgdXNlIG9mIHRoZSB3b3JrIHdpdGggdGhhdAotTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCi1pbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiAgQQotIk1ham9yIENvbXBvbmVudCIsIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50Ci0oa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCi0oaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0bwotcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuCi0KLSAgVGhlICJDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbAotdGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZQotd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwotY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzCi1TeXN0ZW0gTGlicmFyaWVzLCBvciBnZW5lcmFsLXB1cnBvc2UgdG9vbHMgb3IgZ2VuZXJhbGx5IGF2YWlsYWJsZSBmcmVlCi1wcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKLXdoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJjZQotaW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IKLXRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQotbGlua2VkIHN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHJlcXVpcmUsCi1zdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZQotc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgotCi0gIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMKLWNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwotU291cmNlLgotCi0gIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdAotc2FtZSB3b3JrLgotCi0gIDIuIEJhc2ljIFBlcm1pc3Npb25zLgotCi0gIEFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mCi1jb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZAotY29uZGl0aW9ucyBhcmUgbWV0LiAgVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZAotcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGEKLWNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwotY29udGVudCwgY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuICBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXIKLXJpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LgotCi0gIFlvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QKLWNvbnZleSwgd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zCi1pbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCi1vZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3UKLXdpdGggZmFjaWxpdGllcyBmb3IgcnVubmluZyB0aG9zZSB3b3JrcywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGgKLXRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCi1ub3QgY29udHJvbCBjb3B5cmlnaHQuICBUaG9zZSB0aHVzIG1ha2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzCi1mb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uCi1hbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKLXlvdXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5b3UuCi0KLSAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKLXRoZSBjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4gIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMAotbWFrZXMgaXQgdW5uZWNlc3NhcnkuCi0KLSAgMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KLQotICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKLW1lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQotMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yCi1zaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCi1tZWFzdXJlcy4KLQotICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCi1jaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24KLWlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8KLXRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKLW1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzCi11c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YKLXRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCi0KLSAgNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy4KLQotICBZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UKLXJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCi1hcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7Ci1rZWVwIGludGFjdCBhbGwgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbnkKLW5vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsKLWtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCi1yZWNpcGllbnRzIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KLQotICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCi1hbmQgeW91IG1heSBvZmZlciBzdXBwb3J0IG9yIHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLgotCi0gIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCi0KLSAgWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0bwotcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKLXRlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgotCi0gICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCi0gICAgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLgotCi0gICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKLSAgICByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24KLSAgICA3LiAgVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvCi0gICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KLQotICAgIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzCi0gICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCi0gICAgTGljZW5zZSB3aWxsIHRoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcKLSAgICBhZGRpdGlvbmFsIHRlcm1zLCB0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLAotICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCi0gICAgcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdAotICAgIGludmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuCi0KLSAgICBkKSBJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheQotICAgIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZQotICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCi0gICAgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uCi0KLSAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAotd29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywKLWFuZCB3aGljaCBhcmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0sCi1pbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCi0iYWdncmVnYXRlIiBpZiB0aGUgY29tcGlsYXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QKLXVzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMKLWJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawotaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXIKLXBhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCi0KLSAgNi4gQ29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuCi0KLSAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKLW9mIHNlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZQotbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAotaW4gb25lIG9mIHRoZXNlIHdheXM6Ci0KLSAgICBhKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0Ci0gICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKLSAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtCi0gICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCi0KLSAgICBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0Ci0gICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhCi0gICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKLSAgICBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QKLSAgICBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhCi0gICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCi0gICAgcHJvZHVjdCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwKLSAgICBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vCi0gICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCi0gICAgY29udmV5aW5nIG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZQotICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCi0KLSAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZQotICAgIHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGlzCi0gICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKLSAgICBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgb2JqZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQKLSAgICB3aXRoIHN1YnNlY3Rpb24gNmIuCi0KLSAgICBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZAotICAgIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZQotICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCi0gICAgZnVydGhlciBjaGFyZ2UuICBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlCi0gICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuICBJZiB0aGUgcGxhY2UgdG8KLSAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKLSAgICBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkKLSAgICB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4KLSAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQotICAgIENvcnJlc3BvbmRpbmcgU291cmNlLiAgUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUKLSAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMKLSAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgotCi0gICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZAotICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCi0gICAgU291cmNlIG9mIHRoZSB3b3JrIGFyZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubwotICAgIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLgotCi0gIEEgc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZAotZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUKLWluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KLQotICBBICJVc2VyIFByb2R1Y3QiIGlzIGVpdGhlciAoMSkgYSAiY29uc3VtZXIgcHJvZHVjdCIsIHdoaWNoIG1lYW5zIGFueQotdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKLW9yIGhvdXNlaG9sZCBwdXJwb3Nlcywgb3IgKDIpIGFueXRoaW5nIGRlc2lnbmVkIG9yIHNvbGQgZm9yIGluY29ycG9yYXRpb24KLWludG8gYSBkd2VsbGluZy4gIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwKLWRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgotcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwgIm5vcm1hbGx5IHVzZWQiIHJlZmVycyB0byBhCi10eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMKLW9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCi1hY3R1YWxseSB1c2VzLCBvciBleHBlY3RzIG9yIGlzIGV4cGVjdGVkIHRvIHVzZSwgdGhlIHByb2R1Y3QuICBBIHByb2R1Y3QKLWlzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsCi1jb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAotdGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCi0KLSAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLAotcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsCi1hbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tCi1hIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKLXN1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0Ci1jb2RlIGlzIGluIG5vIGNhc2UgcHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aCBzb2xlbHkgYmVjYXVzZQotbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCi0KLSAgSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3IKLXNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCi1wYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUKLVVzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEKLWZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCi1Db3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZAotYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5Ci1pZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAotbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcwotYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KLQotICBUaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhCi1yZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMKLWZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCi10aGUgVXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZC4gIEFjY2VzcyB0byBhCi1uZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZAotYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCi1wcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLgotCi0gIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAotaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseQotZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4KLXNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgotdW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCi0KLSAgNy4gQWRkaXRpb25hbCBUZXJtcy4KLQotICAiQWRkaXRpb25hbCBwZXJtaXNzaW9ucyIgYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcwotTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgotQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbAotYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudAotdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKLWFwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkKLXVuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkKLXRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KLQotICBXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uCi1yZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKLWl0LiAgKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24KLXJlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSAgWW91IG1heSBwbGFjZQotYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLAotZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgotCi0gIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQotYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZgotdGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6Ci0KLSAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUKLSAgICB0ZXJtcyBvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBMaWNlbnNlOyBvcgotCi0gICAgYikgUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yCi0gICAgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbAotICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCi0KLSAgICBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yCi0gICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KLSAgICByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCi0KLSAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCi0gICAgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCi0KLSAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCi0gICAgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yCi0KLSAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0Ci0gICAgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YKLSAgICBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yCi0gICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgotICAgIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4KLQotICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgotcmVzdHJpY3Rpb25zIiB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gIElmIHRoZSBQcm9ncmFtIGFzIHlvdQotcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMKLWdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgotcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucwotYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzCi1MaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKLW9mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzCi1ub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KLQotICBJZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91Ci1tdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUKLWFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwotd2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KLQotICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQotZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsKLXRoZSBhYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KLQotICA4LiBUZXJtaW5hdGlvbi4KLQotICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKLXByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBwcm9wYWdhdGUgb3IKLW1vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlcgotdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZAotcGFyYWdyYXBoIG9mIHNlY3Rpb24gMTEpLgotCi0gIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCi1saWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkKLXByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQKLWZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKLWhvbGRlciBmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zCi1wcmlvciB0byA2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCi0KLSAgTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCi1yZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKLXZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKLXJlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAotY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoteW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCi0KLSAgVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKLWxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgotdGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQotcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZQotbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KLQotICA5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4KLQotICBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHJlY2VpdmUgb3IKLXJ1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uICBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsKLW9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCi10byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFjY2VwdGFuY2UuICBIb3dldmVyLAotbm90aGluZyBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG9yCi1tb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwotbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhCi1jb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLgotCi0gIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy4KLQotICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5Ci1yZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQKLXByb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUKLWZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgotCi0gIEFuICJlbnRpdHkgdHJhbnNhY3Rpb24iIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4KLW9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4KLW9yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiAgSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkCi13b3JrIHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdAotdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCi1saWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQKLWdpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgcGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlCi1Db3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKLXRoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy4KLQotICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKLXJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBleGFtcGxlLCB5b3UgbWF5Ci1ub3QgaW1wb3NlIGEgbGljZW5zZSBmZWUsIHJveWFsdHksIG9yIG90aGVyIGNoYXJnZSBmb3IgZXhlcmNpc2Ugb2YKLXJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KLShpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0Ci1hbnkgcGF0ZW50IGNsYWltIGlzIGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3IKLXNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KLQotICAxMS4gUGF0ZW50cy4KLQotICBBICJjb250cmlidXRvciIgaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1bmRlciB0aGlzCi1MaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gIFRoZQotd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCi0KLSAgQSBjb250cmlidXRvcidzICJlc3NlbnRpYWwgcGF0ZW50IGNsYWltcyIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zCi1vd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCi1oZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQKLWJ5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwKLWJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCi1jb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gIEZvcgotcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIGdyYW50Ci1wYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKLXRoaXMgTGljZW5zZS4KLQotICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMsIHRvCi1tYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQKLXByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCi0KLSAgSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhzLCBhICJwYXRlbnQgbGljZW5zZSIgaXMgYW55IGV4cHJlc3MKLWFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAotKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0bwotc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gIFRvICJncmFudCIgc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGEKLXBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCi1wYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuCi0KLSAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKLWFuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lCi10byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhCi1wdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAotdGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbwotYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZQotcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKLWNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5kIHRoZSBwYXRlbnQKLWxpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiAgIktub3dpbmdseSByZWx5aW5nIiBtZWFucyB5b3UgaGF2ZQotYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCi1jb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCBvciB5b3VyIHJlY2lwaWVudCdzIHVzZSBvZiB0aGUgY292ZXJlZCB3b3JrCi1pbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQKLWNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCi0KLSAgSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvcgotYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQotY292ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9mIHRoZSBwYXJ0aWVzCi1yZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkKLW9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKLXlvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkCi13b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4KLQotICBBIHBhdGVudCBsaWNlbnNlIGlzICJkaXNjcmltaW5hdG9yeSIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4KLXRoZSBzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzCi1jb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKLXNwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQKLXdvcmsgaWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzCi1pbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50Ci10byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZwotdGhlIHdvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlCi1wYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKLXBhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsKLWNvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5Ci1mb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdAotY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVudGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LAotb3IgdGhhdCBwYXRlbnQgbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KLQotICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nCi1hbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heQotb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgotCi0gIDEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLgotCi0gIElmIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKLW90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKLWV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCi1jb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKLUxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5Ci1ub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKLXRvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleQotdGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzCi1MaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCi0KLSAgMTMuIFJlbW90ZSBOZXR3b3JrIEludGVyYWN0aW9uOyBVc2Ugd2l0aCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0KLSAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBpZiB5b3UgbW9kaWZ5IHRoZQotUHJvZ3JhbSwgeW91ciBtb2RpZmllZCB2ZXJzaW9uIG11c3QgcHJvbWluZW50bHkgb2ZmZXIgYWxsIHVzZXJzCi1pbnRlcmFjdGluZyB3aXRoIGl0IHJlbW90ZWx5IHRocm91Z2ggYSBjb21wdXRlciBuZXR3b3JrIChpZiB5b3VyIHZlcnNpb24KLXN1cHBvcnRzIHN1Y2ggaW50ZXJhY3Rpb24pIGFuIG9wcG9ydHVuaXR5IHRvIHJlY2VpdmUgdGhlIENvcnJlc3BvbmRpbmcKLVNvdXJjZSBvZiB5b3VyIHZlcnNpb24gYnkgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKLWZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UsIHRocm91Z2ggc29tZSBzdGFuZGFyZCBvciBjdXN0b21hcnkKLW1lYW5zIG9mIGZhY2lsaXRhdGluZyBjb3B5aW5nIG9mIHNvZnR3YXJlLiAgVGhpcyBDb3JyZXNwb25kaW5nIFNvdXJjZQotc2hhbGwgaW5jbHVkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFueSB3b3JrIGNvdmVyZWQgYnkgdmVyc2lvbiAzCi1vZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhhdCBpcyBpbmNvcnBvcmF0ZWQgcHVyc3VhbnQgdG8gdGhlCi1mb2xsb3dpbmcgcGFyYWdyYXBoLgotCi0gIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKLXBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKLXVuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQotY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcwotTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCi1idXQgdGhlIHdvcmsgd2l0aCB3aGljaCBpdCBpcyBjb21iaW5lZCB3aWxsIHJlbWFpbiBnb3Zlcm5lZCBieSB2ZXJzaW9uCi0zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLQotICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKLXRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucwotd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KLWFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgotCi0gIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlCi1Qcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwKLVB1YmxpYyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlCi1vcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZAotdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlCi1HTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCi1ieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotCi0gIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKLXZlcnNpb25zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncwotcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQotdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCi0KLSAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKLXBlcm1pc3Npb25zLiAgSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkKLWF1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKLWxhdGVyIHZlcnNpb24uCi0KLSAgMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCi0KLSAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQotQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAotSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQotT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi1USEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi1QVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQotSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCi1BTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCi0KLSAgMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgotCi0gIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwotV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUwotVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCi1HRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKLVVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKLURBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJECi1QQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKLUVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFUy4KLQotICAxNy4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgotCi0gIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAotYWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRpbmcgdG8gdGhlaXIgdGVybXMsCi1yZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMKLWFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKLVByb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRpb24gb2YgbGlhYmlsaXR5IGFjY29tcGFuaWVzIGEKLWNvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KLQotICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy9kb2NzL2VzLW5lbzRqLnR4dCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL2RvY3MvZXMtbmVvNGoudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTM2OTJkLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL2RvY3MvZXMtbmVvNGoudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotW1tleHRlbnNpb24tZXMtbmVvNGosIE5lbzRqIEVudGl0eVN0b3JlXV0KLT0gTmVvNGogRW50aXR5U3RvcmUgPQotCi1bZGV2c3RhdHVzXQotLS0tLS0tLS0tLS0tLS0KLXNvdXJjZT1leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL2Rldi1zdGF0dXMueG1sCi0tLS0tLS0tLS0tLS0tLQotCi1FbnRpdHlTdG9yZSBzZXJ2aWNlIGJhY2tlZCBieSB0aGUgaHR0cDovL25lbzRqLm9yZy9bTmVvNGpdIEdyYXBoIERhdGFiYXNlLgotCi1JdCB1c2VzIHRoZSBlbWJlZGRhYmxlIE5lbzRqIGFuZCBub3QgY3VycmVudGx5IGFibGUgdG8gdXRpbGl6ZSB0aGUgbmV0d29ya2VkIG9uZSwgbm9yIHRoZSBDeXBoZXIgcXVlcnkgbGFuZ3VhZ2UgdGhhdCBpcyBwcmVzZW50IGluIG1vcmUgcmVjZW50IHZlcnNpb25zIG9mIE5lbzRqLgotCi1pbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQotCi09PSBBc3NlbWJseSA9PQotCi1UaGVyZSBpcyBjdXJyZW50bHkgbm8gcHJvdmlkZWQgQXNzZW1ibGVyLCBhbmQgb25lIGhhcyB0byBkZWNsYXJlIHRoZSB1c2UgZXhwbGljaXRseS4gTm90ZSB0aGF0IHdlIHJlY29tbWVuZAotW3NuaXBwZXQsamF2YV0KLS0tLS0KLXNvdXJjZT1leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovdGVzdC9TaW1wbGVOZW9TdG9yZVRlc3QuamF2YQotdGFnPWFzc2VtYmx5Ci0tLS0tCi0KLT09IENvbmZpZ3VyYXRpb24gPT0KLQotVGhlcmUgaXMgY3VycmVudGx5IG9ubHkgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBmb3IgdGhlIE5lbzRqIEVudGl0eSBTdG9yZS4KLQotW3NuaXBwZXQsamF2YV0KLS0tLS0KLXNvdXJjZT1leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovTmVvQ29uZmlndXJhdGlvbi5qYXZhCi10YWc9Y29uZmlnCi0tLS0tCi0KLStwYXRoKyB0aGUgZnVsbCBwYXRoIG9uIHRoZSBmaWxlIHN5c3RlbSB3aGVyZSB0aGUgTmVvNGogZW1iZWRkZWQgZGF0YWJhc2Ugd2lsbCBiZSB3cml0dGVuIHRvLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnYnVpbGQvbmVvZGInIGFuZCB0YWlsb3JlZCBmb3IgdGhlIGJ1aWxkIHN5c3RlbSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiBUaGUgZGVmYXVsdCB2YWx1ZSBtYXkgY2hhbmdlIHRvIGEgbW9yZSBzZW5zaWJsZSB2YWx1ZSBpbiB0aGUgZnV0dXJlLiAKLQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL05lb0NvbmZpZ3VyYXRpb24uamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9OZW9Db25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1OWZmZmUuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL05lb0NvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBOaWNsYXMgSGVkaG1hbi4KLSAqCi0gKiBMaWNlbnNlZCAgdW5kZXIgdGhlICBBcGFjaGUgTGljZW5zZSwgIFZlcnNpb24gMi4wICAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgIHRoaXMgZmlsZSAgZXhjZXB0IGluICBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyAgT0YgQU5ZIEtJTkQsIGVpdGhlciAgZXhwcmVzcyAgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5uZW80ajsKLQotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uT3B0aW9uYWw7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7Ci0KLS8vIFNUQVJUIFNOSVBQRVQ6IGNvbmZpZwotcHVibGljIGludGVyZmFjZSBOZW9Db25maWd1cmF0aW9uCi0gICAgZXh0ZW5kcyBDb25maWd1cmF0aW9uQ29tcG9zaXRlCi17Ci0gICAgLyoqIFRoZSBhYnNvbHV0ZSBsb2NhdGlvbiBvZiB0aGUgZW1iZWRkZWQgZGF0YWJhc2UuICovCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8U3RyaW5nPiBwYXRoKCk7Ci19Ci0vLyBFTkQgU05JUFBFVDogY29uZmlnCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovTmVvRW50aXR5U3RhdGUuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9OZW9FbnRpdHlTdGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDBmNTJmLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9OZW9FbnRpdHlTdGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUubmVvNGo7Ci0KLWltcG9ydCBvcmcubmVvNGouZ3JhcGhkYi5EaXJlY3Rpb247Ci1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuRHluYW1pY1JlbGF0aW9uc2hpcFR5cGU7Ci1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuTm9kZTsKLWltcG9ydCBvcmcubmVvNGouZ3JhcGhkYi5SZWxhdGlvbnNoaXA7Ci1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuUmVsYXRpb25zaGlwVHlwZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuVmFsdWVUeXBlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6YXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXRlOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdHVzOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuTWFueUFzc29jaWF0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5OYW1lZEFzc29jaWF0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZVVuaXRPZldvcms7Ci0KLXB1YmxpYyBjbGFzcyBOZW9FbnRpdHlTdGF0ZQotICAgIGltcGxlbWVudHMgRW50aXR5U3RhdGUKLXsKLQotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5USVRZX0lEID0gImVudGl0eV9pZCI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJTSU9OID0gInZlcnNpb24iOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ESUZJRUQgPSAibW9kaWZpZWQiOwotICAgIHByaXZhdGUgZmluYWwgTmVvRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVvdzsKLSAgICBwcml2YXRlIGZpbmFsIFZhbHVlU2VyaWFsaXphdGlvbiB2YWx1ZVNlcmlhbGl6YXRpb247Ci0gICAgcHJpdmF0ZSBmaW5hbCBOb2RlIHVuZGVybHlpbmdOb2RlOwotICAgIHByaXZhdGUgRW50aXR5U3RhdHVzIHN0YXR1czsKLQotICAgIE5lb0VudGl0eVN0YXRlKCBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uLCBOZW9FbnRpdHlTdG9yZVVuaXRPZldvcmsgd29yaywgTm9kZSBub2RlLAotICAgICAgICAgICAgICAgICAgICBFbnRpdHlTdGF0dXMgc3RhdHVzICkKLSAgICB7Ci0gICAgICAgIHRoaXMudmFsdWVTZXJpYWxpemF0aW9uID0gdmFsdWVTZXJpYWxpemF0aW9uOwotICAgICAgICB0aGlzLnVvdyA9IHdvcms7Ci0gICAgICAgIHRoaXMudW5kZXJseWluZ05vZGUgPSBub2RlOwotICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcGRhdGVkKCkKLSAgICB7Ci0gICAgICAgIGlmKCBzdGF0dXMgPT0gRW50aXR5U3RhdHVzLkxPQURFRCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IEVudGl0eVN0YXR1cy5VUERBVEVEOwotICAgICAgICAgICAgTG9uZyB2ZXJzaW9uID0gKExvbmcpIHVuZGVybHlpbmdOb2RlLmdldFByb3BlcnR5KCBWRVJTSU9OICk7Ci0gICAgICAgICAgICB1bmRlcmx5aW5nTm9kZS5zZXRQcm9wZXJ0eSggVkVSU0lPTiwgdmVyc2lvbiArIDEgKTsKLSAgICAgICAgICAgIHVuZGVybHlpbmdOb2RlLnNldFByb3BlcnR5KCBNT0RJRklFRCwgdW93LmN1cnJlbnRUaW1lKCkgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBSZWxhdGlvbnNoaXBUeXBlIG5hbWVkQXNzb2NpYXRpb24oIFF1YWxpZmllZE5hbWUgc3RhdGVOYW1lICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEeW5hbWljUmVsYXRpb25zaGlwVHlwZS53aXRoTmFtZSggIm5hbWVkX2Fzc29jaWF0aW9uOjoiICsgc3RhdGVOYW1lLnRvU3RyaW5nKCkgKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVsYXRpb25zaGlwVHlwZSBtYW55QXNzb2NpYXRpb24oIFF1YWxpZmllZE5hbWUgc3RhdGVOYW1lICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEeW5hbWljUmVsYXRpb25zaGlwVHlwZS53aXRoTmFtZSggIm1hbnlfYXNzb2NpYXRpb246OiIgKyBzdGF0ZU5hbWUudG9TdHJpbmcoKSApOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWxhdGlvbnNoaXBUeXBlIGFzc29jaWF0aW9uKCBRdWFsaWZpZWROYW1lIHN0YXRlTmFtZSApCi0gICAgewotICAgICAgICByZXR1cm4gRHluYW1pY1JlbGF0aW9uc2hpcFR5cGUud2l0aE5hbWUoICJhc3NvY2lhdGlvbjo6IiArIHN0YXRlTmFtZS50b1N0cmluZygpICk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE5hbWVkQXNzb2NpYXRpb25TdGF0ZSBuYW1lZEFzc29jaWF0aW9uVmFsdWVPZiggUXVhbGlmaWVkTmFtZSBzdGF0ZU5hbWUgKQotICAgIHsKLSAgICAgICAgUmVsYXRpb25zaGlwVHlwZSBuYW1lZEFzc29jaWF0aW9uID0gbmFtZWRBc3NvY2lhdGlvbiggc3RhdGVOYW1lICk7Ci0gICAgICAgIFJlbGF0aW9uc2hpcCByZWwgPSB1bmRlcmx5aW5nTm9kZS5nZXRTaW5nbGVSZWxhdGlvbnNoaXAoIG5hbWVkQXNzb2NpYXRpb24sIERpcmVjdGlvbi5PVVRHT0lORyApOwotICAgICAgICBpZiggcmVsICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IE5lb05hbWVkQXNzb2NpYXRpb25TdGF0ZSggdW93LCB0aGlzLCByZWwuZ2V0RW5kTm9kZSgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSBub2RlID0gdW93LmdldE5lbygpLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgbm9kZS5zZXRQcm9wZXJ0eSggTmVvTmFtZWRBc3NvY2lhdGlvblN0YXRlLkNPVU5ULCAwICk7Ci0gICAgICAgIHVuZGVybHlpbmdOb2RlLmNyZWF0ZVJlbGF0aW9uc2hpcFRvKCBub2RlLCBuYW1lZEFzc29jaWF0aW9uICk7Ci0gICAgICAgIHJldHVybiBuZXcgTmVvTmFtZWRBc3NvY2lhdGlvblN0YXRlKCB1b3csIHRoaXMsIG5vZGUgKTsKLSAgICB9Ci0gICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hbnlBc3NvY2lhdGlvblN0YXRlIG1hbnlBc3NvY2lhdGlvblZhbHVlT2YoIFF1YWxpZmllZE5hbWUgc3RhdGVOYW1lICkKLSAgICB7Ci0gICAgICAgIFJlbGF0aW9uc2hpcFR5cGUgbWFueUFzc29jaWF0aW9uID0gbWFueUFzc29jaWF0aW9uKCBzdGF0ZU5hbWUgKTsKLSAgICAgICAgUmVsYXRpb25zaGlwIHJlbCA9IHVuZGVybHlpbmdOb2RlLmdldFNpbmdsZVJlbGF0aW9uc2hpcCggbWFueUFzc29jaWF0aW9uLCBEaXJlY3Rpb24uT1VUR09JTkcgKTsKLSAgICAgICAgaWYoIHJlbCAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBOZW9NYW55QXNzb2NpYXRpb25TdGF0ZSggdW93LCB0aGlzLCByZWwuZ2V0RW5kTm9kZSgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSBub2RlID0gdW93LmdldE5lbygpLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgbm9kZS5zZXRQcm9wZXJ0eSggTmVvTWFueUFzc29jaWF0aW9uU3RhdGUuQ09VTlQsIDAgKTsKLSAgICAgICAgdW5kZXJseWluZ05vZGUuY3JlYXRlUmVsYXRpb25zaGlwVG8oIG5vZGUsIG1hbnlBc3NvY2lhdGlvbiApOwotICAgICAgICByZXR1cm4gbmV3IE5lb01hbnlBc3NvY2lhdGlvblN0YXRlKCB1b3csIHRoaXMsIG5vZGUgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIGFzc29jaWF0aW9uVmFsdWVPZiggUXVhbGlmaWVkTmFtZSBzdGF0ZU5hbWUgKQotICAgIHsKLSAgICAgICAgUmVsYXRpb25zaGlwIHJlbCA9IHVuZGVybHlpbmdOb2RlLmdldFNpbmdsZVJlbGF0aW9uc2hpcCggYXNzb2NpYXRpb24oIHN0YXRlTmFtZSApLCBEaXJlY3Rpb24uT1VUR09JTkcgKTsKLSAgICAgICAgaWYoIHJlbCAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGVudGl0eUlkID0gKFN0cmluZykgcmVsLmdldEVuZE5vZGUoKS5nZXRQcm9wZXJ0eSggRU5USVRZX0lEICk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEVudGl0eVJlZmVyZW5jZSggZW50aXR5SWQgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRBc3NvY2lhdGlvblZhbHVlKCBRdWFsaWZpZWROYW1lIHN0YXRlTmFtZSwgRW50aXR5UmVmZXJlbmNlIG5ld0VudGl0eSApCi0gICAgewotICAgICAgICBSZWxhdGlvbnNoaXBUeXBlIGFzc29jaWF0aW9uID0gYXNzb2NpYXRpb24oIHN0YXRlTmFtZSApOwotICAgICAgICBSZWxhdGlvbnNoaXAgcmVsID0gdW5kZXJseWluZ05vZGUuZ2V0U2luZ2xlUmVsYXRpb25zaGlwKCBhc3NvY2lhdGlvbiwgRGlyZWN0aW9uLk9VVEdPSU5HICk7Ci0gICAgICAgIGlmKCByZWwgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgb3RoZXJOb2RlID0gcmVsLmdldEVuZE5vZGUoKTsKLSAgICAgICAgICAgIGlmKCBvdGhlck5vZGUuZ2V0UHJvcGVydHkoIEVOVElUWV9JRCApLmVxdWFscyggaWRlbnRpdHkoKS5pZGVudGl0eSgpICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG90aGVyTm9kZS5kZWxldGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlbC5kZWxldGUoKTsKLSAgICAgICAgfQotICAgICAgICBpZiggbmV3RW50aXR5ICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIG90aGVyTm9kZSA9IHVvdy5nZXRFbnRpdHlTdGF0ZU5vZGUoIG5ld0VudGl0eSApOwotICAgICAgICAgICAgaWYoIG90aGVyTm9kZS5lcXVhbHMoIHVuZGVybHlpbmdOb2RlICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGJsYW5rIG5vZGUgZm9yIHNlbGYgcmVmZXJlbmNlCi0gICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gdW93LmdldE5lbygpLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgICAgICBvdGhlck5vZGUuc2V0UHJvcGVydHkoIEVOVElUWV9JRCwgaWRlbnRpdHkoKS5pZGVudGl0eSgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1bmRlcmx5aW5nTm9kZS5jcmVhdGVSZWxhdGlvbnNoaXBUbyggb3RoZXJOb2RlLCBhc3NvY2lhdGlvbiApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBwcm9wZXJ0eVZhbHVlT2YoIFF1YWxpZmllZE5hbWUgc3RhdGVOYW1lICkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgcGVyc2lzdGVudFByb3BlcnR5ID0gZW50aXR5RGVzY3JpcHRvcigpLnN0YXRlKCkuZmluZFByb3BlcnR5TW9kZWxCeVF1YWxpZmllZE5hbWUoIHN0YXRlTmFtZSApOwotICAgICAgICAgICAgT2JqZWN0IHByb3AgPSB1bmRlcmx5aW5nTm9kZS5nZXRQcm9wZXJ0eSggInByb3A6OiIgKyBzdGF0ZU5hbWUudG9TdHJpbmcoKSwgbnVsbCApOwotICAgICAgICAgICAgaWYoIHByb3AgPT0gbnVsbCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKCBWYWx1ZVR5cGUuaXNQcmltaXRpdmVWYWx1ZVR5cGUoIHBlcnNpc3RlbnRQcm9wZXJ0eS52YWx1ZVR5cGUoKSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVTZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKCBwZXJzaXN0ZW50UHJvcGVydHkudmFsdWVUeXBlKCksIHByb3AudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBWYWx1ZVNlcmlhbGl6YXRpb25FeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlTdG9yZUV4Y2VwdGlvbiggZSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlWYWx1ZSggUXVhbGlmaWVkTmFtZSBzdGF0ZU5hbWUsIE9iamVjdCBwcm9wICkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiggcHJvcCAhPSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgcGVyc2lzdGVudFByb3BlcnR5ID0gZW50aXR5RGVzY3JpcHRvcigpLnN0YXRlKCkuZmluZFByb3BlcnR5TW9kZWxCeVF1YWxpZmllZE5hbWUoIHN0YXRlTmFtZSApOwotICAgICAgICAgICAgICAgIGlmKCBWYWx1ZVR5cGUuaXNQcmltaXRpdmVWYWx1ZVR5cGUoIHBlcnNpc3RlbnRQcm9wZXJ0eS52YWx1ZVR5cGUoKSApICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuZGVybHlpbmdOb2RlLnNldFByb3BlcnR5KCAicHJvcDo6IiArIHN0YXRlTmFtZS50b1N0cmluZygpLCBwcm9wICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBqc29uU3RyaW5nID0gdmFsdWVTZXJpYWxpemF0aW9uLnNlcmlhbGl6ZSggcHJvcCApOwotICAgICAgICAgICAgICAgICAgICB1bmRlcmx5aW5nTm9kZS5zZXRQcm9wZXJ0eSggInByb3A6OiIgKyBzdGF0ZU5hbWUudG9TdHJpbmcoKSwganNvblN0cmluZyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bmRlcmx5aW5nTm9kZS5yZW1vdmVQcm9wZXJ0eSggc3RhdGVOYW1lLnRvU3RyaW5nKCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldFVwZGF0ZWQoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggVmFsdWVTZXJpYWxpemF0aW9uRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5U3RvcmVFeGNlcHRpb24oIGUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpCi0gICAgewotICAgICAgICAvLyBBcHBhcmVudGx5IHJlbW92ZSBzaG91bGQganVzdCBmb3JjZSByZW1vdmUgYXNzb2NpYXRpb25zIGluc3RlYWQKLSAgICAgICAgLy8gb2YgdGhyb3dpbmcgZXhjZXB0aW9uIGlmIHRoZSBlbnRpdHkgaGFzIGluY29tbWluZyBhc3NvY2lhdGlvbnMKLS8vICAgICAgICAgICAgaWYgKCB1bmRlcmx5aW5nTm9kZS5oYXNSZWxhdGlvbnNoaXAoIERpcmVjdGlvbi5JTkNPTUlORyApICkKLS8vICAgICAgICAgICAgewotLy8gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLS8vICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHJlbW92ZSBlbnRpdHkgd2l0aCByZWZlcmVuY2U6ICIgKyBpZGVudGl0eSgpCi0vLyAgICAgICAgICAgICAgICAgICAgKyAiLiBJdCBoYXMgaW5jb21pbmcgYXNzb2NpdGFpb25zLiIpOwotLy8gICAgICAgICAgICB9Ci0gICAgICAgIC8vIHJlbW92ZSBvZiBhbGwgaW5jb21taW5nIGFzc29jaWF0aW9ucwotICAgICAgICBmb3IoIFJlbGF0aW9uc2hpcCByZWwgOiB1bmRlcmx5aW5nTm9kZS5nZXRSZWxhdGlvbnNoaXBzKCBEaXJlY3Rpb24uSU5DT01JTkcgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlbC5kZWxldGUoKTsKLSAgICAgICAgfQotICAgICAgICB1b3cuZ2V0SW5kZXhTZXJ2aWNlKCkucmVtb3ZlSW5kZXgoIHVuZGVybHlpbmdOb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lb0VudGl0eVN0b3JlVW5pdE9mV29yay5FTlRJVFlfU1RBVEVfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJseWluZ05vZGUuZ2V0UHJvcGVydHkoIEVOVElUWV9JRCApICk7Ci0KLSAgICAgICAgZm9yKCBSZWxhdGlvbnNoaXAgcmVsIDogdW5kZXJseWluZ05vZGUuZ2V0UmVsYXRpb25zaGlwcyggRGlyZWN0aW9uLk9VVEdPSU5HICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIGVuZE5vZGUgPSByZWwuZ2V0RW5kTm9kZSgpOwotICAgICAgICAgICAgYm9vbGVhbiBtYW55QXNzb2NOb2RlID0gZmFsc2UsIG5hbWVkQXNzb2NOb2RlID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IoIFJlbGF0aW9uc2hpcCBtYW55UmVsIDogZW5kTm9kZS5nZXRSZWxhdGlvbnNoaXBzKCBSZWxUeXBlcy5NQU5ZX0FTU09DSUFUSU9OLCBEaXJlY3Rpb24uT1VUR09JTkcgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWFueVJlbC5kZWxldGUoKTsKLSAgICAgICAgICAgICAgICBtYW55QXNzb2NOb2RlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciggUmVsYXRpb25zaGlwIG5hbWVkUmVsIDogZW5kTm9kZS5nZXRSZWxhdGlvbnNoaXBzKCBSZWxUeXBlcy5OQU1FRF9BU1NPQ0lBVElPTiwgRGlyZWN0aW9uLk9VVEdPSU5HICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5hbWVkUmVsLmRlbGV0ZSgpOwotICAgICAgICAgICAgICAgIG5hbWVkQXNzb2NOb2RlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKCBtYW55QXNzb2NOb2RlIHx8IG5hbWVkQXNzb2NOb2RlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbmROb2RlLmRlbGV0ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVsLmRlbGV0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHVuZGVybHlpbmdOb2RlLmRlbGV0ZSgpOwotICAgICAgICBzdGF0dXMgPSBFbnRpdHlTdGF0dXMuUkVNT1ZFRDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRW50aXR5RGVzY3JpcHRvciBlbnRpdHlEZXNjcmlwdG9yKCkKLSAgICB7Ci0gICAgICAgIE5vZGUgdHlwZU5vZGUgPSB1bmRlcmx5aW5nTm9kZS5nZXRTaW5nbGVSZWxhdGlvbnNoaXAoIFJlbFR5cGVzLklTX09GX1RZUEUsIERpcmVjdGlvbi5PVVRHT0lORyApLmdldEVuZE5vZGUoKTsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSAoU3RyaW5nKSB0eXBlTm9kZS5nZXRQcm9wZXJ0eSggTmVvRW50aXR5U3RvcmVVbml0T2ZXb3JrLkVOVElUWV9UWVBFICk7Ci0gICAgICAgIHJldHVybiB1b3cuZ2V0RW50aXR5RGVzY3JpcHRvciggdHlwZSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGhhc0JlZW5BcHBsaWVkKCkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIGlkZW50aXR5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRW50aXR5UmVmZXJlbmNlKCAoU3RyaW5nKSB1bmRlcmx5aW5nTm9kZS5nZXRQcm9wZXJ0eSggRU5USVRZX0lEICkgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0Fzc2lnbmFibGVUbyggQ2xhc3M8Pz4gdHlwZSApCi0gICAgewotICAgICAgICBOb2RlIHR5cGVOb2RlID0gdW5kZXJseWluZ05vZGUuZ2V0U2luZ2xlUmVsYXRpb25zaGlwKCBSZWxUeXBlcy5JU19PRl9UWVBFLCBEaXJlY3Rpb24uT1VUR09JTkcgKS5nZXRFbmROb2RlKCk7Ci0gICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IChTdHJpbmcpIHR5cGVOb2RlLmdldFByb3BlcnR5KCBOZW9FbnRpdHlTdG9yZVVuaXRPZldvcmsuRU5USVRZX1RZUEUgKTsKLSAgICAgICAgcmV0dXJuIHR5cGVOYW1lLmVxdWFscyggdHlwZS5nZXROYW1lKCkgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBsYXN0TW9kaWZpZWQoKQotICAgIHsKLSAgICAgICAgbG9uZyBtb2RpZmllZCA9IChMb25nKSB1bmRlcmx5aW5nTm9kZS5nZXRQcm9wZXJ0eSggTU9ESUZJRUQgKTsKLSAgICAgICAgcmV0dXJuIG1vZGlmaWVkOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBFbnRpdHlTdGF0dXMgc3RhdHVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB2ZXJzaW9uKCkKLSAgICB7Ci0gICAgICAgIGxvbmcgdmVyc2lvbiA9IChMb25nKSB1bmRlcmx5aW5nTm9kZS5nZXRQcm9wZXJ0eSggVkVSU0lPTiApOwotICAgICAgICBpZiggc3RhdHVzID09IEVudGl0eVN0YXR1cy5VUERBVEVEICkKLSAgICAgICAgewotICAgICAgICAgICAgdmVyc2lvbi0tOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAiIiArIHZlcnNpb247Ci0gICAgfQotCi0gICAgcHVibGljIEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB1b3c7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL05lb0VudGl0eVN0b3JlTWl4aW4uamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9OZW9FbnRpdHlTdG9yZU1peGluLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMDRmM2EuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL05lb0VudGl0eVN0b3JlTWl4aW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLm5lbzRqOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwotaW1wb3J0IG9yZy5uZW80ai5ncmFwaGRiLkRpcmVjdGlvbjsKLWltcG9ydCBvcmcubmVvNGouZ3JhcGhkYi5Ob2RlOwotaW1wb3J0IG9yZy5uZW80ai5ncmFwaGRiLlJlbGF0aW9uc2hpcDsKLWltcG9ydCBvcmcubmVvNGouaW5kZXguSW5kZXhTZXJ2aWNlOwotaW1wb3J0IG9yZy5uZW80ai5pbmRleC5sdWNlbmUuTHVjZW5lSW5kZXhTZXJ2aWNlOwotaW1wb3J0IG9yZy5uZW80ai5rZXJuZWwuRW1iZWRkZWRHcmFwaERhdGFiYXNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uT3B0aW9uYWw7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TZXJ2aWNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQWN0aXZhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5xdWFsaWZpZXIuVGFnZ2VkOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2U7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlU2VyaWFsaXphdGlvbjsKLWltcG9ydCBvcmcucWk0ai5pby5JbnB1dDsKLWltcG9ydCBvcmcucWk0ai5pby5PdXRwdXQ7Ci1pbXBvcnQgb3JnLnFpNGouaW8uUmVjZWl2ZXI7Ci1pbXBvcnQgb3JnLnFpNGouaW8uU2VuZGVyOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZmlsZWNvbmZpZy5GaWxlQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXRlOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdHVzOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS4qOwotCi1wdWJsaWMgY2xhc3MgTmVvRW50aXR5U3RvcmVNaXhpbgotICAgICAgICBpbXBsZW1lbnRzIFNlcnZpY2VBY3RpdmF0aW9uLCBFbnRpdHlTdG9yZSwgRW50aXR5U3RvcmVTUEkKLXsKLSAgIEBPcHRpb25hbAotICAgQFNlcnZpY2UKLSAgIEZpbGVDb25maWd1cmF0aW9uIGZpbGVDb25maWd1cmF0aW9uOwotICAgQFNlcnZpY2UKLSAgIEBUYWdnZWQoIFZhbHVlU2VyaWFsaXphdGlvbi5Gb3JtYXRzLkpTT04gKQotICAgcHJpdmF0ZSBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uOwotCi0gICBAVGhpcwotICAgcHJpdmF0ZSBDb25maWd1cmF0aW9uPE5lb0NvbmZpZ3VyYXRpb24+IGNvbmZpZzsKLQotICAgcHJpdmF0ZSBFbWJlZGRlZEdyYXBoRGF0YWJhc2UgbmVvOwotICAgcHJpdmF0ZSBJbmRleFNlcnZpY2UgaW5kZXhTZXJ2aWNlOwotCi0gICBwcml2YXRlIEF0b21pY0ludGVnZXIgY291bnQgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgIHByaXZhdGUgU3RyaW5nIHV1aWQ7Ci0KLSAgIEBPdmVycmlkZQotICAgcHVibGljIHZvaWQgYWN0aXZhdGVTZXJ2aWNlKCkKLSAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgewotICAgICAgU3RyaW5nIHBhdGggPSBjb25maWcuZ2V0KCkucGF0aCgpLmdldCgpOwotICAgICAgaWYgKHBhdGggPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgIGlmIChmaWxlQ29uZmlndXJhdGlvbiAhPSBudWxsKQotICAgICAgICAgICAgcGF0aCA9IG5ldyBGaWxlKGZpbGVDb25maWd1cmF0aW9uLmRhdGFEaXJlY3RvcnkoKSwgY29uZmlnLmdldCgpLmlkZW50aXR5KCkuZ2V0KCkpLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGF0aCA9ICJidWlsZC9uZW9kYiI7Ci0gICAgICB9Ci0gICAgICBuZW8gPSBuZXcgRW1iZWRkZWRHcmFwaERhdGFiYXNlKHBhdGgpOwotICAgICAgaW5kZXhTZXJ2aWNlID0gbmV3IEx1Y2VuZUluZGV4U2VydmljZShuZW8pOwotICAgICAgdXVpZCA9IFVVSUQucmFuZG9tVVVJRCgpLnRvU3RyaW5nKCkgKyAiLSI7Ci0gICB9Ci0KLSAgIEBPdmVycmlkZQotICAgcHVibGljIHZvaWQgcGFzc2l2YXRlU2VydmljZSgpCi0gICAgICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgIHsKLSAgICAgIGluZGV4U2VydmljZS5zaHV0ZG93bigpOwotICAgICAgbmVvLnNodXRkb3duKCk7Ci0gICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgIHB1YmxpYyBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlLCBNb2R1bGUgbW9kdWxlLCBsb25nIGN1cnJlbnRUaW1lICkKLSAgIHsKLSAgICAgIHJldHVybiBuZXcgTmVvRW50aXR5U3RvcmVVbml0T2ZXb3JrKG5lbywgaW5kZXhTZXJ2aWNlLCB2YWx1ZVNlcmlhbGl6YXRpb24sIG5ld1VuaXRPZldvcmtJZCgpLCBtb2R1bGUsIGN1cnJlbnRUaW1lKTsKLSAgIH0KLQotICAgIEBPdmVycmlkZQotICAgcHVibGljIElucHV0PEVudGl0eVN0YXRlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbj4gZW50aXR5U3RhdGVzKGZpbmFsIE1vZHVsZSBtb2R1bGUpCi0gICB7Ci0gICAgICByZXR1cm4gbmV3IElucHV0PEVudGl0eVN0YXRlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbj4oKQotICAgICAgewotICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICBwdWJsaWMgPFJlY2VpdmVyVGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCB0cmFuc2ZlclRvKE91dHB1dDw/IHN1cGVyIEVudGl0eVN0YXRlLCBSZWNlaXZlclRocm93YWJsZVR5cGU+IG91dHB1dCkgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uLCBSZWNlaXZlclRocm93YWJsZVR5cGUKLSAgICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dC5yZWNlaXZlRnJvbShuZXcgU2VuZGVyPEVudGl0eVN0YXRlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbj4oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICBwdWJsaWMgPFJlY2VpdmVyVGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBzZW5kVG8oUmVjZWl2ZXI8PyBzdXBlciBFbnRpdHlTdGF0ZSwgUmVjZWl2ZXJUaHJvd2FibGVUeXBlPiByZWNlaXZlcikgdGhyb3dzIFJlY2VpdmVyVGhyb3dhYmxlVHlwZSwgRW50aXR5U3RvcmVFeGNlcHRpb24KLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIE5lb0VudGl0eVN0b3JlVW5pdE9mV29yayB1b3cgPSBuZXcgTmVvRW50aXR5U3RvcmVVbml0T2ZXb3JrKG5lbywgaW5kZXhTZXJ2aWNlLCB2YWx1ZVNlcmlhbGl6YXRpb24sIG5ld1VuaXRPZldvcmtJZCgpLCBtb2R1bGUsIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKLQotICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBJdGVyYWJsZTxSZWxhdGlvbnNoaXA+IHJlbGF0aW9uc2hpcHMgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZW8uZ2V0UmVmZXJlbmNlTm9kZSgpLmdldFJlbGF0aW9uc2hpcHMoUmVsVHlwZXMuRU5USVRZX1RZUEVfUkVGLCBEaXJlY3Rpb24uT1VUR09JTkcpOwotCi0gICAgICAgICAgICAgICAgICAgICBmb3IgKFJlbGF0aW9uc2hpcCBlbnRpdHlUeXBlUmVsIDogcmVsYXRpb25zaGlwcykKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgZW50aXR5VHlwZSA9IGVudGl0eVR5cGVSZWwuZ2V0RW5kTm9kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWxhdGlvbnNoaXAgZW50aXR5UmVsIDogZW50aXR5VHlwZS5nZXRSZWxhdGlvbnNoaXBzKFJlbFR5cGVzLklTX09GX1RZUEUsIERpcmVjdGlvbi5JTkNPTUlORykpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlIGVudGl0eU5vZGUgPSBlbnRpdHlSZWwuZ2V0U3RhcnROb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBOZW9FbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IG5ldyBOZW9FbnRpdHlTdGF0ZSggdmFsdWVTZXJpYWxpemF0aW9uLCB1b3csIGVudGl0eU5vZGUsIEVudGl0eVN0YXR1cy5MT0FERUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIucmVjZWl2ZShlbnRpdHlTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9IGZpbmFsbHkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHVvdy5kaXNjYXJkKCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgIH0KLSAgICAgIH07Ci0gICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgIHB1YmxpYyBTdGF0ZUNvbW1pdHRlciBhcHBseUNoYW5nZXMoIEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0b2Z3b3JrLCBJdGVyYWJsZTxFbnRpdHlTdGF0ZT4gc3RhdGUgKQotICAgewotICAgICAgZm9yIChFbnRpdHlTdGF0ZSBmaXJzdFN0YXRlIDogc3RhdGUpCi0gICAgICB7Ci0gICAgICAgICBpZiAoZmlyc3RTdGF0ZSBpbnN0YW5jZW9mIE5lb0VudGl0eVN0YXRlKQotICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICgoTmVvRW50aXR5U3RhdGUpIGZpcnN0U3RhdGUpLnVuaXRPZldvcmsoKS5hcHBseUNoYW5nZXMoKTsKLSAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICBwdWJsaWMgRW50aXR5U3RhdGUgZW50aXR5U3RhdGVPZiggRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmssIEVudGl0eVJlZmVyZW5jZSBpZGVudGl0eSApCi0gICB7Ci0gICAgICByZXR1cm4gdW5pdE9mV29yay5lbnRpdHlTdGF0ZU9mKCBpZGVudGl0eSApOwotICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICBwdWJsaWMgRW50aXR5U3RhdGUgbmV3RW50aXR5U3RhdGUoIEVudGl0eVN0b3JlVW5pdE9mV29yayB1b3csIEVudGl0eVJlZmVyZW5jZSByZWYsIEVudGl0eURlc2NyaXB0b3IgZGVzY3JpcHRvciApCi0gICB7Ci0gICAgICByZXR1cm4gdW93Lm5ld0VudGl0eVN0YXRlKHJlZiwgZGVzY3JpcHRvcik7Ci0gICB9Ci0KLSAgIHByaXZhdGUgU3RyaW5nIG5ld1VuaXRPZldvcmtJZCgpCi0gICB7Ci0gICAgICByZXR1cm4gdXVpZCArIEludGVnZXIudG9IZXhTdHJpbmcoY291bnQuaW5jcmVtZW50QW5kR2V0KCkpOwotICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9OZW9FbnRpdHlTdG9yZVNlcnZpY2UuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9OZW9FbnRpdHlTdG9yZVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkyZGRlYy4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovTmVvRW50aXR5U3RvcmVTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLm5lbzRqOwotCi1pbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQWN0aXZhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdGF0ZVZlcnNpb25zOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZTsKLQotQE1peGlucyggTmVvRW50aXR5U3RvcmVNaXhpbi5jbGFzcyApCi1wdWJsaWMgaW50ZXJmYWNlIE5lb0VudGl0eVN0b3JlU2VydmljZQotICAgIGV4dGVuZHMgRW50aXR5U3RvcmUsIFNlcnZpY2VDb21wb3NpdGUsIEVudGl0eVN0YXRlVmVyc2lvbnMsIFNlcnZpY2VBY3RpdmF0aW9uCi17Ci19CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovTmVvRW50aXR5U3RvcmVVbml0T2ZXb3JrLmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovTmVvRW50aXR5U3RvcmVVbml0T2ZXb3JrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNzIzNTUuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL05lb0VudGl0eVN0b3JlVW5pdE9mV29yay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUubmVvNGo7Ci0KLWltcG9ydCBqYXZheC50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbjsKLWltcG9ydCBqYXZheC50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuTm9kZTsKLWltcG9ydCBvcmcubmVvNGouaW5kZXguSW5kZXhTZXJ2aWNlOwotaW1wb3J0IG9yZy5uZW80ai5rZXJuZWwuRW1iZWRkZWRHcmFwaERhdGFiYXNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5RGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eVJlZmVyZW5jZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKLWltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVTZXJpYWxpemF0aW9uOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0dXM7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLio7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMuZmlyc3Q7Ci0KLXB1YmxpYyBjbGFzcyBOZW9FbnRpdHlTdG9yZVVuaXRPZldvcmsKLSAgICBpbXBsZW1lbnRzIEVudGl0eVN0b3JlVW5pdE9mV29yaywKLSAgICAgICAgICAgICAgIFN0YXRlQ29tbWl0dGVyCi17Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBFTlRJVFlfU1RBVEVfSUQgPSAiZW50aXR5X3N0YXRlX2lkIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEVOVElUWV9UWVBFID0gImVudGl0eV90eXBlIjsKLQotICAgIHByaXZhdGUgZmluYWwgRW1iZWRkZWRHcmFwaERhdGFiYXNlIG5lbzsKLSAgICBwcml2YXRlIGZpbmFsIEluZGV4U2VydmljZSBpbmRleFNlcnZpY2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uOwotICAgIHByaXZhdGUgbG9uZyBjdXJyZW50VGltZTsKLSAgICBwcml2YXRlIGZpbmFsIFRyYW5zYWN0aW9uTWFuYWdlciB0bTsKLQotICAgIHByaXZhdGUgZmluYWwgVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWRlbnRpdHk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNb2R1bGUgbW9kdWxlOwotCi0gICAgTmVvRW50aXR5U3RvcmVVbml0T2ZXb3JrKCBFbWJlZGRlZEdyYXBoRGF0YWJhc2UgbmVvLCBJbmRleFNlcnZpY2UgaW5kZXhTZXJ2aWNlLCBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGlkZW50aXR5LCBNb2R1bGUgbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjdXJyZW50VGltZSApCi0gICAgewotICAgICAgICB0aGlzLm5lbyA9IG5lbzsKLSAgICAgICAgdGhpcy5pbmRleFNlcnZpY2UgPSBpbmRleFNlcnZpY2U7Ci0gICAgICAgIHRoaXMudmFsdWVTZXJpYWxpemF0aW9uID0gdmFsdWVTZXJpYWxpemF0aW9uOwotICAgICAgICB0aGlzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7Ci0gICAgICAgIHRoaXMudG0gPSB0aGlzLm5lby5nZXRDb25maWcoKS5nZXRUeE1vZHVsZSgpLmdldFR4TWFuYWdlcigpOwotICAgICAgICB0aGlzLnRyYW5zYWN0aW9uID0gYmVnaW5UcmFuc2FjdGlvbigpOwotICAgICAgICB0aGlzLmlkZW50aXR5ID0gaWRlbnRpdHk7Ci0gICAgICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdGF0ZUNvbW1pdHRlciBhcHBseUNoYW5nZXMoKQotICAgICAgICB0aHJvd3MgRW50aXR5U3RvcmVFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBsb25nIGN1cnJlbnRUaW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50VGltZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkaXNjYXJkKCkKLSAgICB7Ci0gICAgICAgIGNhbmNlbCgpOwotICAgIH0KLQotICAgIE5vZGUgZ2V0RW50aXR5U3RhdGVOb2RlKCBFbnRpdHlSZWZlcmVuY2UgYW5JZGVudGl0eSApCi0gICAgewotICAgICAgICBOb2RlIG5vZGUgPSBpbmRleFNlcnZpY2UuZ2V0U2luZ2xlTm9kZSggRU5USVRZX1NUQVRFX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5JZGVudGl0eS5pZGVudGl0eSgpICk7Ci0gICAgICAgIGlmKCBub2RlID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5Tm90Rm91bmRFeGNlcHRpb24oIGFuSWRlbnRpdHkgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRW50aXR5U3RhdGUgZW50aXR5U3RhdGVPZiggRW50aXR5UmVmZXJlbmNlIGFuSWRlbnRpdHkgKQotICAgICAgICB0aHJvd3MgRW50aXR5U3RvcmVFeGNlcHRpb24sIEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IE5lb0VudGl0eVN0YXRlKCB2YWx1ZVNlcmlhbGl6YXRpb24sIHRoaXMsIGdldEVudGl0eVN0YXRlTm9kZSggYW5JZGVudGl0eSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlTdGF0dXMuTE9BREVEICk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlKCBFbnRpdHlSZWZlcmVuY2UgYW5JZGVudGl0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvcgotICAgICkKLSAgICAgICAgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmcgdHlwZSA9IGZpcnN0KGVudGl0eURlc2NyaXB0b3IudHlwZXMoKSkuZ2V0TmFtZSgpOwotICAgICAgICBOb2RlIHR5cGVOb2RlID0gaW5kZXhTZXJ2aWNlLmdldFNpbmdsZU5vZGUoIEVOVElUWV9UWVBFLCB0eXBlICk7Ci0gICAgICAgIGlmKCB0eXBlTm9kZSA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgdHlwZU5vZGUgPSBjcmVhdGVFbnRpdHlUeXBlKCB0eXBlICk7Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSBub2RlID0gaW5kZXhTZXJ2aWNlLmdldFNpbmdsZU5vZGUoIEVOVElUWV9TVEFURV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuSWRlbnRpdHkuaWRlbnRpdHkoKSApOwotICAgICAgICBpZiggbm9kZSAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eUFscmVhZHlFeGlzdHNFeGNlcHRpb24oIGFuSWRlbnRpdHkgKTsKLSAgICAgICAgfQotICAgICAgICBub2RlID0gbmVvLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgbm9kZS5zZXRQcm9wZXJ0eSggTmVvRW50aXR5U3RhdGUuVkVSU0lPTiwgMGwgKTsKLSAgICAgICAgbm9kZS5zZXRQcm9wZXJ0eSggTmVvRW50aXR5U3RhdGUuTU9ESUZJRUQsIGN1cnJlbnRUaW1lICk7Ci0gICAgICAgIG5vZGUuY3JlYXRlUmVsYXRpb25zaGlwVG8oIHR5cGVOb2RlLCBSZWxUeXBlcy5JU19PRl9UWVBFICk7Ci0gICAgICAgIG5vZGUuc2V0UHJvcGVydHkoIE5lb0VudGl0eVN0YXRlLkVOVElUWV9JRCwgYW5JZGVudGl0eS5pZGVudGl0eSgpICk7Ci0gICAgICAgIGluZGV4U2VydmljZS5pbmRleCggbm9kZSwgRU5USVRZX1NUQVRFX0lELCBhbklkZW50aXR5LmlkZW50aXR5KCkgKTsKLSAgICAgICAgcmV0dXJuIG5ldyBOZW9FbnRpdHlTdGF0ZSggdmFsdWVTZXJpYWxpemF0aW9uLCB0aGlzLCBub2RlLCBFbnRpdHlTdGF0dXMuTkVXICk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2FuY2VsKCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICB0bS5yb2xsYmFjaygpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlTdG9yZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJvbGxiYWNrIHRyYW5zYWN0aW9uLiIsIGUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgdG0uY29tbWl0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVN0b3JlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY29tbWl0IHRyYW5zYWN0aW9uLiIsIGUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgVHJhbnNhY3Rpb24gYmVnaW5UcmFuc2FjdGlvbigpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgdG0uYmVnaW4oKTsKLSAgICAgICAgICAgIHJldHVybiB0bS5nZXRUcmFuc2FjdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlTdG9yZUV4Y2VwdGlvbiggIkZhaWxlZCB0byBiZWdpbiB0cmFuc2FjdGlvbi4iLCBlICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHN1c3BlbmQoKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRyYW5zYWN0aW9uIHR4UnVubmluZyA9IHRtLmdldFRyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiggdHhSdW5uaW5nICE9IG51bGwgJiYgdHhSdW5uaW5nID09IHRyYW5zYWN0aW9uICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0bS5zdXNwZW5kKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVN0b3JlRXhjZXB0aW9uKCAiRmFpbGVkIHRvIHN1c3BlbmQgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLCBlICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHJlc3VtZSgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgdG0ucmVzdW1lKCB0cmFuc2FjdGlvbiApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlTdG9yZUV4Y2VwdGlvbiggIkZhaWxlZCB0byByZXN1bWUgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLCBlICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBFbWJlZGRlZEdyYXBoRGF0YWJhc2UgZ2V0TmVvKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZW87Ci0gICAgfQotCi0gICAgSW5kZXhTZXJ2aWNlIGdldEluZGV4U2VydmljZSgpCi0gICAgewotICAgICAgICByZXR1cm4gaW5kZXhTZXJ2aWNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgaWRlbnRpdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlkZW50aXR5OwotICAgIH0KLQotICAgIHByaXZhdGUgTm9kZSBjcmVhdGVFbnRpdHlUeXBlKCBTdHJpbmcgdHlwZSApCi0gICAgewotICAgICAgICBOb2RlIHR5cGVOb2RlID0gbmVvLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgbmVvLmdldFJlZmVyZW5jZU5vZGUoKS5jcmVhdGVSZWxhdGlvbnNoaXBUbyggdHlwZU5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbFR5cGVzLkVOVElUWV9UWVBFX1JFRiApOwotICAgICAgICB0eXBlTm9kZS5zZXRQcm9wZXJ0eSggRU5USVRZX1RZUEUsIHR5cGUgKTsKLSAgICAgICAgaW5kZXhTZXJ2aWNlLmluZGV4KCB0eXBlTm9kZSwgRU5USVRZX1RZUEUsIHR5cGUgKTsKLSAgICAgICAgcmV0dXJuIHR5cGVOb2RlOwotICAgIH0KLQotICAgIEVudGl0eURlc2NyaXB0b3IgZ2V0RW50aXR5RGVzY3JpcHRvciggU3RyaW5nIHR5cGUgKQotICAgIHsKLSAgICAgICAgcmV0dXJuICggKE1vZHVsZSkgbW9kdWxlICkuZW50aXR5RGVzY3JpcHRvciggdHlwZSApOwotICAgIH0KLQotICAgIE1vZHVsZSBnZXRNb2R1bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL05lb01hbnlBc3NvY2lhdGlvblN0YXRlLmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovTmVvTWFueUFzc29jaWF0aW9uU3RhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ1N2FjYS4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovTmVvTWFueUFzc29jaWF0aW9uU3RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLm5lbzRqOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuRGlyZWN0aW9uOwotaW1wb3J0IG9yZy5uZW80ai5ncmFwaGRiLk5vZGU7Ci1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuUmVsYXRpb25zaGlwOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuTWFueUFzc29jaWF0aW9uU3RhdGU7Ci0KLXB1YmxpYyBjbGFzcyBOZW9NYW55QXNzb2NpYXRpb25TdGF0ZQotICAgIGltcGxlbWVudHMgTWFueUFzc29jaWF0aW9uU3RhdGUKLXsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERVggPSAiaW5kZXgiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09VTlQgPSAiY291bnQiOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBOb2RlIHVuZGVybHlpbmdOb2RlOwotICAgIHByaXZhdGUgZmluYWwgTmVvRW50aXR5U3RhdGUgZW50aXR5OwotICAgIHByaXZhdGUgZmluYWwgTmVvRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVvdzsKLQotICAgIE5lb01hbnlBc3NvY2lhdGlvblN0YXRlKCBOZW9FbnRpdHlTdG9yZVVuaXRPZldvcmsgdW93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZW9FbnRpdHlTdGF0ZSBlbnRpdHksIE5vZGUgbm9kZQotICAgICkKLSAgICB7Ci0gICAgICAgIHRoaXMudW93ID0gdW93OwotICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKLSAgICAgICAgdGhpcy51bmRlcmx5aW5nTm9kZSA9IG5vZGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gYWRkKCBpbnQgaW5kZXgsIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWZlcmVuY2UgKQotICAgIHsKLSAgICAgICAgaWYoIGluZGV4IDwgMCB8fCBpbmRleCA+IGNvdW50KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiSWxsZWdhbCBpbmRleDogIiArIGluZGV4ICk7Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSBlbnRpdHlOb2RlID0gdW93LmdldEVudGl0eVN0YXRlTm9kZSggZW50aXR5UmVmZXJlbmNlICk7Ci0gICAgICAgIGZvciggUmVsYXRpb25zaGlwIHJlbCA6IHVuZGVybHlpbmdOb2RlLmdldFJlbGF0aW9uc2hpcHMoCi0gICAgICAgICAgICBSZWxUeXBlcy5NQU5ZX0FTU09DSUFUSU9OLCBEaXJlY3Rpb24uT1VUR09JTkcgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByZWxJbmRleCA9IGdldFJlbGF0aW9uc2hpcEluZGV4KCByZWwgKTsKLSAgICAgICAgICAgIGlmKCByZWxJbmRleCA+PSBpbmRleCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwSW5kZXgoIHJlbCwgcmVsSW5kZXggKyAxICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiggcmVsLmdldEVuZE5vZGUoKS5lcXVhbHMoIGVudGl0eU5vZGUgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJlbGF0aW9uc2hpcCByZWwgPSB1bmRlcmx5aW5nTm9kZS5jcmVhdGVSZWxhdGlvbnNoaXBUbyggZW50aXR5Tm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxUeXBlcy5NQU5ZX0FTU09DSUFUSU9OICk7Ci0gICAgICAgIHNldFJlbGF0aW9uc2hpcEluZGV4KCByZWwsIGluZGV4ICk7Ci0gICAgICAgIGluY3JlbWVudENvdW50KCk7Ci0gICAgICAgIGVudGl0eS5zZXRVcGRhdGVkKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGdldFJlbGF0aW9uc2hpcEluZGV4KCBSZWxhdGlvbnNoaXAgcmVsICkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoSW50ZWdlcikgcmVsLmdldFByb3BlcnR5KCBJTkRFWCApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRSZWxhdGlvbnNoaXBJbmRleCggUmVsYXRpb25zaGlwIHJlbCwgaW50IG5ld0luZGV4ICkKLSAgICB7Ci0gICAgICAgIHJlbC5zZXRQcm9wZXJ0eSggSU5ERVgsIG5ld0luZGV4ICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluY3JlbWVudENvdW50KCkKLSAgICB7Ci0gICAgICAgIGludCBjb3VudCA9IChJbnRlZ2VyKSB1bmRlcmx5aW5nTm9kZS5nZXRQcm9wZXJ0eSggImNvdW50IiApOwotICAgICAgICB1bmRlcmx5aW5nTm9kZS5zZXRQcm9wZXJ0eSggQ09VTlQsIGNvdW50ICsgMSApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkZWNyZW1lbnRDb3VudCgpCi0gICAgewotICAgICAgICBpbnQgY291bnQgPSAoSW50ZWdlcikgdW5kZXJseWluZ05vZGUuZ2V0UHJvcGVydHkoICJjb3VudCIgKTsKLSAgICAgICAgdW5kZXJseWluZ05vZGUuc2V0UHJvcGVydHkoIENPVU5ULCAtLWNvdW50ICk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWZlcmVuY2UgKQotICAgIHsKLSAgICAgICAgTm9kZSBlbnRpdHlOb2RlID0gdW93LmdldEVudGl0eVN0YXRlTm9kZSggZW50aXR5UmVmZXJlbmNlICk7Ci0gICAgICAgIGZvciggUmVsYXRpb25zaGlwIHJlbCA6IHVuZGVybHlpbmdOb2RlLmdldFJlbGF0aW9uc2hpcHMoCi0gICAgICAgICAgICBSZWxUeXBlcy5NQU5ZX0FTU09DSUFUSU9OLCBEaXJlY3Rpb24uT1VUR09JTkcgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKCByZWwuZ2V0RW5kTm9kZSgpLmVxdWFscyggZW50aXR5Tm9kZSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBjb3VudCgpCi0gICAgewotICAgICAgICByZXR1cm4gKEludGVnZXIpIHVuZGVybHlpbmdOb2RlLmdldFByb3BlcnR5KCBDT1VOVCApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBFbnRpdHlSZWZlcmVuY2UgZ2V0KCBpbnQgaW5kZXggKQotICAgIHsKLSAgICAgICAgaWYoIGluZGV4IDwgMCB8fCBpbmRleCA+IGNvdW50KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiSWxsZWdhbCBpbmRleDogIiArIGluZGV4ICk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yKCBSZWxhdGlvbnNoaXAgcmVsIDogdW5kZXJseWluZ05vZGUuZ2V0UmVsYXRpb25zaGlwcygKLSAgICAgICAgICAgIFJlbFR5cGVzLk1BTllfQVNTT0NJQVRJT04sIERpcmVjdGlvbi5PVVRHT0lORyApICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHJlbEluZGV4ID0gZ2V0UmVsYXRpb25zaGlwSW5kZXgoIHJlbCApOwotICAgICAgICAgICAgaWYoIHJlbEluZGV4ID09IGluZGV4ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSByZWwuZ2V0RW5kTm9kZSgpLmdldFByb3BlcnR5KAotICAgICAgICAgICAgICAgICAgICBOZW9FbnRpdHlTdGF0ZS5FTlRJVFlfSUQgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVudGl0eVJlZmVyZW5jZSggaWQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmUoIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWZlcmVuY2UgKQotICAgIHsKLSAgICAgICAgTm9kZSBlbnRpdHlOb2RlID0gdW93LmdldEVudGl0eVN0YXRlTm9kZSggZW50aXR5UmVmZXJlbmNlICk7Ci0gICAgICAgIGludCBpbmRleERlbGV0ZWQgPSAtMTsKLSAgICAgICAgZm9yKCBSZWxhdGlvbnNoaXAgcmVsIDogZW50aXR5Tm9kZS5nZXRSZWxhdGlvbnNoaXBzKAotICAgICAgICAgICAgUmVsVHlwZXMuTUFOWV9BU1NPQ0lBVElPTiwgRGlyZWN0aW9uLklOQ09NSU5HICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiggcmVsLmdldFN0YXJ0Tm9kZSgpLmVxdWFscyggdW5kZXJseWluZ05vZGUgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5kZXhEZWxldGVkID0gZ2V0UmVsYXRpb25zaGlwSW5kZXgoIHJlbCApOwotICAgICAgICAgICAgICAgIHJlbC5kZWxldGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiggaW5kZXhEZWxldGVkID09IC0xICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZvciggUmVsYXRpb25zaGlwIHJlbCA6IHVuZGVybHlpbmdOb2RlLmdldFJlbGF0aW9uc2hpcHMoCi0gICAgICAgICAgICBSZWxUeXBlcy5NQU5ZX0FTU09DSUFUSU9OLCBEaXJlY3Rpb24uT1VUR09JTkcgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByZWxJbmRleCA9IGdldFJlbGF0aW9uc2hpcEluZGV4KCByZWwgKTsKLSAgICAgICAgICAgIGlmKCByZWxJbmRleCA+IGluZGV4RGVsZXRlZCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwSW5kZXgoIHJlbCwgcmVsSW5kZXggLSAxICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVjcmVtZW50Q291bnQoKTsKLSAgICAgICAgZW50aXR5LnNldFVwZGF0ZWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEl0ZXJhdG9yPEVudGl0eVJlZmVyZW5jZT4gaXRlcmF0b3IoKQotICAgIHsKLSAgICAgICAgTGlzdDxFbnRpdHlSZWZlcmVuY2U+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PEVudGl0eVJlZmVyZW5jZT4oIGNvdW50KCkgKTsKLSAgICAgICAgZm9yKCBSZWxhdGlvbnNoaXAgcmVsIDogdW5kZXJseWluZ05vZGUuZ2V0UmVsYXRpb25zaGlwcygKLSAgICAgICAgICAgIFJlbFR5cGVzLk1BTllfQVNTT0NJQVRJT04sIERpcmVjdGlvbi5PVVRHT0lORyApICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGlkID0gKFN0cmluZykgcmVsLmdldEVuZE5vZGUoKS5nZXRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICBOZW9FbnRpdHlTdGF0ZS5FTlRJVFlfSUQgKTsKLSAgICAgICAgICAgIGxpc3QuYWRkKCBuZXcgRW50aXR5UmVmZXJlbmNlKCBpZCApICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3QuaXRlcmF0b3IoKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL05lb05hbWVkQXNzb2NpYXRpb25TdGF0ZS5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL05lb05hbWVkQXNzb2NpYXRpb25TdGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzc0Y2M3Li4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9OZW9OYW1lZEFzc29jaWF0aW9uU3RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLm5lbzRqOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuRGlyZWN0aW9uOwotaW1wb3J0IG9yZy5uZW80ai5ncmFwaGRiLk5vZGU7Ci1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuUmVsYXRpb25zaGlwOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuTmFtZWRBc3NvY2lhdGlvblN0YXRlOwotCi1wdWJsaWMgY2xhc3MgTmVvTmFtZWRBc3NvY2lhdGlvblN0YXRlCi0gICAgaW1wbGVtZW50cyBOYW1lZEFzc29jaWF0aW9uU3RhdGUKLXsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPVU5UID0gImNvdW50IjsKLQotICAgIHByaXZhdGUgZmluYWwgTm9kZSB1bmRlcmx5aW5nTm9kZTsKLSAgICBwcml2YXRlIGZpbmFsIE5lb0VudGl0eVN0YXRlIGVudGl0eTsKLSAgICBwcml2YXRlIGZpbmFsIE5lb0VudGl0eVN0b3JlVW5pdE9mV29yayB1b3c7Ci0KLSAgICBOZW9OYW1lZEFzc29jaWF0aW9uU3RhdGUoIE5lb0VudGl0eVN0b3JlVW5pdE9mV29yayB1b3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZW9FbnRpdHlTdGF0ZSBlbnRpdHksIE5vZGUgbm9kZQotICAgICkKLSAgICB7Ci0gICAgICAgIHRoaXMudW93ID0gdW93OwotICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKLSAgICAgICAgdGhpcy51bmRlcmx5aW5nTm9kZSA9IG5vZGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gcHV0KCBTdHJpbmcgbmFtZSwgRW50aXR5UmVmZXJlbmNlIGVudGl0eVJlZmVyZW5jZSApCi0gICAgewotICAgICAgICBOb2RlIGVudGl0eU5vZGUgPSB1b3cuZ2V0RW50aXR5U3RhdGVOb2RlKCBlbnRpdHlSZWZlcmVuY2UgKTsKLSAgICAgICAgZm9yKCBSZWxhdGlvbnNoaXAgcmVsIDogdW5kZXJseWluZ05vZGUuZ2V0UmVsYXRpb25zaGlwcyggUmVsVHlwZXMuTkFNRURfQVNTT0NJQVRJT04sIERpcmVjdGlvbi5PVVRHT0lORyApICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHJlbE5hbWUgPSBnZXRSZWxhdGlvbnNoaXBOYW1lKCByZWwgKTsKLSAgICAgICAgICAgIGlmKCByZWxOYW1lLmVxdWFscyggbmFtZSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiggcmVsLmdldEVuZE5vZGUoKS5lcXVhbHMoIGVudGl0eU5vZGUgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlbC5kZWxldGUoKTsKLSAgICAgICAgICAgICAgICBkZWNyZW1lbnRDb3VudCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJlbGF0aW9uc2hpcCByZWwgPSB1bmRlcmx5aW5nTm9kZS5jcmVhdGVSZWxhdGlvbnNoaXBUbyggZW50aXR5Tm9kZSwgUmVsVHlwZXMuTkFNRURfQVNTT0NJQVRJT04gKTsKLSAgICAgICAgc2V0UmVsYXRpb25zaGlwTmFtZSggcmVsLCBuYW1lICk7Ci0gICAgICAgIGluY3JlbWVudENvdW50KCk7Ci0gICAgICAgIGVudGl0eS5zZXRVcGRhdGVkKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGdldFJlbGF0aW9uc2hpcE5hbWUoIFJlbGF0aW9uc2hpcCByZWwgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTdHJpbmcpIHJlbC5nZXRQcm9wZXJ0eSggTkFNRSApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRSZWxhdGlvbnNoaXBOYW1lKCBSZWxhdGlvbnNoaXAgcmVsLCBTdHJpbmcgbmV3TmFtZSApCi0gICAgewotICAgICAgICByZWwuc2V0UHJvcGVydHkoIE5BTUUsIG5ld05hbWUgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5jcmVtZW50Q291bnQoKQotICAgIHsKLSAgICAgICAgaW50IGNvdW50ID0gKEludGVnZXIpIHVuZGVybHlpbmdOb2RlLmdldFByb3BlcnR5KCAiY291bnQiICk7Ci0gICAgICAgIHVuZGVybHlpbmdOb2RlLnNldFByb3BlcnR5KCBDT1VOVCwgY291bnQgKyAxICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRlY3JlbWVudENvdW50KCkKLSAgICB7Ci0gICAgICAgIGludCBjb3VudCA9IChJbnRlZ2VyKSB1bmRlcmx5aW5nTm9kZS5nZXRQcm9wZXJ0eSggImNvdW50IiApOwotICAgICAgICB1bmRlcmx5aW5nTm9kZS5zZXRQcm9wZXJ0eSggQ09VTlQsIC0tY291bnQgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc05hbWUoIFN0cmluZyBuYW1lICkKLSAgICB7Ci0gICAgICAgIGZvciggUmVsYXRpb25zaGlwIHJlbCA6IHVuZGVybHlpbmdOb2RlLmdldFJlbGF0aW9uc2hpcHMoIFJlbFR5cGVzLk5BTUVEX0FTU09DSUFUSU9OLCBEaXJlY3Rpb24uT1VUR09JTkcgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKCBnZXRSZWxhdGlvbnNoaXBOYW1lKCByZWwgKS5lcXVhbHMoIG5hbWUgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY291bnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChJbnRlZ2VyKSB1bmRlcmx5aW5nTm9kZS5nZXRQcm9wZXJ0eSggQ09VTlQgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIGdldCggU3RyaW5nIG5hbWUgKQotICAgIHsKLSAgICAgICAgZm9yKCBSZWxhdGlvbnNoaXAgcmVsIDogdW5kZXJseWluZ05vZGUuZ2V0UmVsYXRpb25zaGlwcyggUmVsVHlwZXMuTkFNRURfQVNTT0NJQVRJT04sIERpcmVjdGlvbi5PVVRHT0lORyApICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYoIGdldFJlbGF0aW9uc2hpcE5hbWUoIHJlbCApLmVxdWFscyggbmFtZSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSByZWwuZ2V0RW5kTm9kZSgpLmdldFByb3BlcnR5KCBOZW9FbnRpdHlTdGF0ZS5FTlRJVFlfSUQgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVudGl0eVJlZmVyZW5jZSggaWQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmUoIFN0cmluZyBuYW1lICkKLSAgICB7Ci0gICAgICAgIGZvciggUmVsYXRpb25zaGlwIHJlbCA6IHVuZGVybHlpbmdOb2RlLmdldFJlbGF0aW9uc2hpcHMoIFJlbFR5cGVzLk5BTUVEX0FTU09DSUFUSU9OLCBEaXJlY3Rpb24uT1VUR09JTkcgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKCBnZXRSZWxhdGlvbnNoaXBOYW1lKCByZWwgKS5lcXVhbHMoIG5hbWUgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVsLmRlbGV0ZSgpOwotICAgICAgICAgICAgICAgIGRlY3JlbWVudENvdW50KCk7Ci0gICAgICAgICAgICAgICAgZW50aXR5LnNldFVwZGF0ZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3IoKQotICAgIHsKLSAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZm9yKCBSZWxhdGlvbnNoaXAgcmVsIDogdW5kZXJseWluZ05vZGUuZ2V0UmVsYXRpb25zaGlwcyggUmVsVHlwZXMuTkFNRURfQVNTT0NJQVRJT04sIERpcmVjdGlvbi5PVVRHT0lORyApICkKLSAgICAgICAgewotICAgICAgICAgICAgbGlzdC5hZGQoIGdldFJlbGF0aW9uc2hpcE5hbWUoIHJlbCApICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3QuaXRlcmF0b3IoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIG5hbWVPZiggRW50aXR5UmVmZXJlbmNlIGVudGl0eVJlZmVyZW5jZSApCi0gICAgewotICAgICAgICBOb2RlIGVudGl0eU5vZGUgPSB1b3cuZ2V0RW50aXR5U3RhdGVOb2RlKCBlbnRpdHlSZWZlcmVuY2UgKTsKLSAgICAgICAgZm9yKCBSZWxhdGlvbnNoaXAgcmVsIDogdW5kZXJseWluZ05vZGUuZ2V0UmVsYXRpb25zaGlwcyggUmVsVHlwZXMuTkFNRURfQVNTT0NJQVRJT04sIERpcmVjdGlvbi5PVVRHT0lORyApICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYoIHJlbC5nZXRFbmROb2RlKCkuZXF1YWxzKCBlbnRpdHlOb2RlICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnZXRSZWxhdGlvbnNoaXBOYW1lKCByZWwgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9SZWxUeXBlcy5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL1JlbFR5cGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkM2FhZTcuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL25lbzRqL1JlbFR5cGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLm5lbzRqOwotCi1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuUmVsYXRpb25zaGlwVHlwZTsKLQotZW51bSBSZWxUeXBlcwotICAgIGltcGxlbWVudHMgUmVsYXRpb25zaGlwVHlwZQotewotICAgIEVOVElUWV9UWVBFX1JFRiwKLSAgICBJU19PRl9UWVBFLAotICAgIE1BTllfQVNTT0NJQVRJT04sCi0gICAgTkFNRURfQVNTT0NJQVRJT04KLX0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovcGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjhlYzI1Li4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai9wYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPgotICAgIDxib2R5PgotICAgICAgICA8aDI+TmVvNGogRW50aXR5U3RvcmUuPC9oMj4KLSAgICA8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLW5lbzRqL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvbmVvNGovdGVzdC9TaW1wbGVOZW9TdG9yZVRlc3QuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai90ZXN0L1NpbXBsZU5lb1N0b3JlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjBlOWY1Li4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9uZW80ai90ZXN0L1NpbXBsZU5lb1N0b3JlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5uZW80ai50ZXN0OwotCi1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7Ci1pbXBvcnQgb3JnLnFpNGouZW50aXR5c3RvcmUubmVvNGouTmVvQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5lbnRpdHlzdG9yZS5uZW80ai5OZW9FbnRpdHlTdG9yZVNlcnZpY2U7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5maWxlY29uZmlnLkZpbGVDb25maWd1cmF0aW9uU2VydmljZTsKLWltcG9ydCBvcmcucWk0ai50ZXN0LkVudGl0eVRlc3RBc3NlbWJsZXI7Ci1pbXBvcnQgb3JnLnFpNGoudGVzdC5lbnRpdHkuQWJzdHJhY3RFbnRpdHlTdG9yZVRlc3Q7Ci1pbXBvcnQgb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLm9yZ2pzb24uT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcjsKLQotcHVibGljIGNsYXNzIFNpbXBsZU5lb1N0b3JlVGVzdAotICAgIGV4dGVuZHMgQWJzdHJhY3RFbnRpdHlTdG9yZVRlc3QKLXsKLS8vIFNUQVJUIFNOSVBQRVQ6IGFzc2VtYmx5Ci0gICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCi0gICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgotICAgIHsKLS8vIEVORCBTTklQUEVUOiBhc3NlbWJseQotICAgICAgICBtb2R1bGUubGF5ZXIoKS5hcHBsaWNhdGlvbigpLnNldE5hbWUoICJTaW1wbGVOZW9UZXN0IiApOwotCi0gICAgICAgIHN1cGVyLmFzc2VtYmxlKCBtb2R1bGUgKTsKLS8vIFNUQVJUIFNOSVBQRVQ6IGFzc2VtYmx5Ci0gICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggRmlsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmNsYXNzICk7Ci0KLSAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBOZW9FbnRpdHlTdG9yZVNlcnZpY2UuY2xhc3MgKTsKLQotICAgICAgICBNb2R1bGVBc3NlbWJseSBjb25maWdNb2R1bGUgPSBtb2R1bGUubGF5ZXIoKS5tb2R1bGUoICJjb25maWciICk7Ci0gICAgICAgIGNvbmZpZ01vZHVsZS5lbnRpdGllcyggTmVvQ29uZmlndXJhdGlvbi5jbGFzcyApLnZpc2libGVJbiggVmlzaWJpbGl0eS5sYXllciApOwotICAgICAgICBuZXcgT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKLS8vIEVORCBTTklQUEVUOiBhc3NlbWJseQotICAgICAgICBuZXcgRW50aXR5VGVzdEFzc2VtYmxlcigpLmFzc2VtYmxlKCBjb25maWdNb2R1bGUgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBnaXZlbkNvbmN1cnJlbnRVbml0T2ZXb3Jrc1doZW5Vb1dDb21wbGV0ZXNUaGVuQ2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uKCkKLSAgICB7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1wcmVmZXJlbmNlcy9OT1RJQ0UgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL05PVElDRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFlNWY5MS4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL05PVElDRQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVFpNGogSmF2YSBQcmVmZXJlbmNlcyBQZXJzaXN0ZW5jZSBFeHRlbnNpb24KLUNvcHlyaWdodCAyMDA3LTIwMDgsIFRoZSBRaTRqIERldmVsb3BtZW50IFRlYW0gb2YgaW5kaXZpZHVhbHMuCi0KLVNlZSBodHRwOi8vd3d3LnFpNGoub3JnL2NvbnRyaWJ1dG9ycy5odG1sIGZvciBsaXN0IG9mIG9mIGluZGl2aWR1YWxzLgotQWxzbyBzZWUgZWFjaCBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIENvcHlyaWdodCBjbGFpbXMuCi0KLVFpNGogaXMgYSBjb21tdW5pdHkgYWdncmVnYXRlZCB3b3JrcyB1bmRlciBDb3B5cmlnaHQgbGF3LgotQWxsIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCB3b3JrcyBhdCBRaTRqIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2UgdmVyIDIuMCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMKLQotQmVsb3cgZm9sbG93cyBhIGxpc3Qgb2YgYmluYXJ5IGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgbGljZW5zZXM7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTxOT05FPgotCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1wcmVmZXJlbmNlcy9idWlsZC5ncmFkbGUgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL2J1aWxkLmdyYWRsZQppbmRleCA0OTkyYzg0Li41ZDUyMDk1IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL2J1aWxkLmdyYWRsZQorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL2J1aWxkLmdyYWRsZQpAQCAtMSwxNyArMSwzNSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotZGVzY3JpcHRpb24gPSAiUWk0aiBQcmVmZXJlbmNlcyBFbnRpdHlTdG9yZSBFeHRlbnNpb24iCitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBQcmVmZXJlbmNlcyBFbnRpdHlTdG9yZSBFeHRlbnNpb24iCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIEVudGl0eVN0b3JlIC0gUHJlZmVyZW5jZXMiIH19CitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBQcmVmZXJlbmNlcyIgfSB9CiAKIGRlcGVuZGVuY2llcyB7Ci0gICAgCi0gICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQogCi0gICAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQotICAgIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi52YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbiIpKQorICBjb21waWxlKCBwcm9qZWN0KCAiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiICkgKQorICBjb21waWxlIGxpYnJhcmllcy5zbGY0al9hcGkKIAotICAgIHRlc3RSdW50aW1lKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpKQotICAgIHRlc3RSdW50aW1lKGxpYnJhcmllcy5sb2diYWNrKQorICB0ZXN0Q29tcGlsZSggcHJvamVjdCggIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiICkgKQorICB0ZXN0Q29tcGlsZSggcHJvamVjdCggIjpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi52YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbiIgKSApCiAKKyAgdGVzdFJ1bnRpbWUoIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiICkgKQorICB0ZXN0UnVudGltZSggbGlicmFyaWVzLmxvZ2JhY2sgKQogfQogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1wcmVmZXJlbmNlcy9kZXYtc3RhdHVzLnhtbAppbmRleCA1MGQyNmQzLi5hYzYzY2RhIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL2Rldi1zdGF0dXMueG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL3NyYy9kb2NzL2VzLXByZWZlcmVuY2VzLnR4dCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvc3JjL2RvY3MvZXMtcHJlZmVyZW5jZXMudHh0CmluZGV4IGU4MjE0YWYuLjU3MjdiNWYgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvc3JjL2RvY3MvZXMtcHJlZmVyZW5jZXMudHh0CisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvc3JjL2RvY3MvZXMtcHJlZmVyZW5jZXMudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2V4dGVuc2lvbi1lcy1wcmVmZXJlbmNlcyxQcmVmZXJlbmNlcyBFbnRpdHlTdG9yZV1dCiA9IFByZWZlcmVuY2VzIEVudGl0eVN0b3JlID0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1wcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3ByZWZzL1ByZWZlcmVuY2VzRW50aXR5U3RvcmVNaXhpbi5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1wcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3ByZWZzL1ByZWZlcmVuY2VzRW50aXR5U3RvcmVNaXhpbi5qYXZhCmluZGV4IGVkNDg4NzEuLmI0N2IzNzYgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9wcmVmcy9QcmVmZXJlbmNlc0VudGl0eVN0b3JlTWl4aW4uamF2YQorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcHJlZnMvUHJlZmVyZW5jZXNFbnRpdHlTdG9yZU1peGluLmphdmEKQEAgLTQzLDcgKzQzLDYgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlRGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5xdWFsaWZpZXIuVGFnZ2VkOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuQ29sbGVjdGlvblR5cGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuRW51bVR5cGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuTWFwVHlwZTsKQEAgLTU5LDYgKzU4LDcgQEAKIGltcG9ydCBvcmcucWk0ai5pby5PdXRwdXQ7CiBpbXBvcnQgb3JnLnFpNGouaW8uUmVjZWl2ZXI7CiBpbXBvcnQgb3JnLnFpNGouaW8uU2VuZGVyOworaW1wb3J0IG9yZy5xaTRqLnNwaS5RaTRqU1BJOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0dXM7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkRlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcms7CkBAIC02NiwxMiArNjYsMTYgQEAKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RvcmVFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlU1BJOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZVVuaXRPZldvcms7CitpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLk1vZHVsZUVudGl0eVN0b3JlVW5pdE9mV29yazsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuU3RhdGVDb21taXR0ZXI7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLmhlbHBlcnMuRGVmYXVsdEVudGl0eVN0YXRlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kZWxNb2R1bGU7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKIAogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5maXJzdDsKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMubWFwOwogCiAvKioKICAqIEltcGxlbWVudGF0aW9uIG9mIEVudGl0eVN0b3JlIHRoYXQgaXMgYmFja2VkIGJ5IHRoZSBQcmVmZXJlbmNlcyBBUEkuCkBAIC04Nyw2ICs5MSw5IEBACiBwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZXNFbnRpdHlTdG9yZU1peGluCiAgICAgaW1wbGVtZW50cyBTZXJ2aWNlQWN0aXZhdGlvbiwgRW50aXR5U3RvcmUsIEVudGl0eVN0b3JlU1BJCiB7CisgICAgQFN0cnVjdHVyZQorICAgIHByaXZhdGUgUWk0alNQSSBzcGk7CisKICAgICBAVGhpcwogICAgIHByaXZhdGUgRW50aXR5U3RvcmVTUEkgZW50aXR5U3RvcmVTcGk7CiAKQEAgLTE2NywxMyArMTc0LDE1IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVN0b3JlVW5pdE9mV29yayBuZXdVbml0T2ZXb3JrKCBVc2VjYXNlIHVzZWNhc2UsIE1vZHVsZSBtb2R1bGUsIGxvbmcgY3VycmVudFRpbWUgKQorICAgIHB1YmxpYyBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlLCBNb2R1bGVTcGkgbW9kdWxlLCBsb25nIGN1cnJlbnRUaW1lICkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yayggZW50aXR5U3RvcmVTcGksIG5ld1VuaXRPZldvcmtJZCgpLCBtb2R1bGUsIHVzZWNhc2UsIGN1cnJlbnRUaW1lICk7CisgICAgICAgIEVudGl0eVN0b3JlVW5pdE9mV29yayBzdG9yZVVuaXRPZldvcmsgPSBuZXcgRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yayggZW50aXR5U3RvcmVTcGksIG5ld1VuaXRPZldvcmtJZCgpLCB1c2VjYXNlLCBjdXJyZW50VGltZSApOworICAgICAgICBzdG9yZVVuaXRPZldvcmsgPSBuZXcgTW9kdWxlRW50aXR5U3RvcmVVbml0T2ZXb3JrKCBtb2R1bGUsIHN0b3JlVW5pdE9mV29yayApOworICAgICAgICByZXR1cm4gc3RvcmVVbml0T2ZXb3JrOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnB1dDxFbnRpdHlTdGF0ZSwgRW50aXR5U3RvcmVFeGNlcHRpb24+IGVudGl0eVN0YXRlcyggZmluYWwgTW9kdWxlIG1vZHVsZSApCisgICAgcHVibGljIElucHV0PEVudGl0eVN0YXRlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbj4gZW50aXR5U3RhdGVzKCBmaW5hbCBNb2R1bGVTcGkgbW9kdWxlICkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgSW5wdXQ8RW50aXR5U3RhdGUsIEVudGl0eVN0b3JlRXhjZXB0aW9uPigpCiAgICAgICAgIHsKQEAgLTE4OSwxOCArMTk4LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWNhc2VCdWlsZGVyIGJ1aWxkZXIgPSBVc2VjYXNlQnVpbGRlci5idWlsZFVzZWNhc2UoICJxaTRqLmVudGl0eXN0b3JlLnByZWZlcmVuY2VzLnZpc2l0IiApOwogICAgICAgICAgICAgICAgICAgICAgICAgVXNlY2FzZSB2aXNpdFVzZWNhc2UgPSBidWlsZGVyLndpdGhNZXRhSW5mbyggQ2FjaGVPcHRpb25zLk5FVkVSICkubmV3VXNlY2FzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yayB1b3cgPSBuZXcgRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlTdG9yZVNwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdVbml0T2ZXb3JrSWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRVc2VjYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW93ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdVbml0T2ZXb3JrKCB2aXNpdFVzZWNhc2UsIG1vZHVsZSwgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gaWRlbnRpdGllcyA9IHJvb3QuY2hpbGRyZW5OYW1lcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggU3RyaW5nIGlkZW50aXR5IDogaWRlbnRpdGllcyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IHVvdy5lbnRpdHlTdGF0ZU9mKCBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmZXJlbmNlIHJlZmVyZW5jZSA9IEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggaWRlbnRpdHkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSB1b3cuZW50aXR5U3RhdGVPZiggbW9kdWxlLCByZWZlcmVuY2UgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIucmVjZWl2ZSggZW50aXR5U3RhdGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMTYsMjUgKzIyMywyMiBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZVNwaSBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlEZXNjcmlwdG9yIGVudGl0eURlc2NyaXB0b3IKICAgICApCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IERlZmF1bHRFbnRpdHlTdGF0ZSggKERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmspIHVuaXRPZldvcmssIGlkZW50aXR5LCBlbnRpdHlEZXNjcmlwdG9yICk7CisgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEVudGl0eVN0YXRlKCB1bml0T2ZXb3JrLmN1cnJlbnRUaW1lKCksIGlkZW50aXR5LCBlbnRpdHlEZXNjcmlwdG9yICk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlT2YoIEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrLCBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHkgKQorICAgIHB1YmxpYyBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZU9mKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywgTW9kdWxlU3BpIG1vZHVsZSwgRW50aXR5UmVmZXJlbmNlIGlkZW50aXR5ICkKICAgICB7CiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrIGRlc3V3ID0gKERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmspIHVuaXRPZldvcms7Ci0KLSAgICAgICAgICAgIE1vZHVsZSBtb2R1bGUgPSBkZXN1dy5tb2R1bGUoKTsKLQogICAgICAgICAgICAgaWYoICFyb290Lm5vZGVFeGlzdHMoIGlkZW50aXR5LmlkZW50aXR5KCkgKSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbiggaWRlbnRpdHksIFVua25vd25UeXBlLmNsYXNzICk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbiggaWRlbnRpdHksIFVua25vd25UeXBlLmNsYXNzLCB1bml0T2ZXb3JrLnVzZWNhc2UoKSApOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBQcmVmZXJlbmNlcyBlbnRpdHlQcmVmcyA9IHJvb3Qubm9kZSggaWRlbnRpdHkuaWRlbnRpdHkoKSApOwpAQCAtMjQ1LDcgKzI0OSwxMSBAQAogICAgICAgICAgICAgRW50aXR5RGVzY3JpcHRvciBlbnRpdHlEZXNjcmlwdG9yID0gbW9kdWxlLmVudGl0eURlc2NyaXB0b3IoIHR5cGUgKTsKICAgICAgICAgICAgIGlmKCBlbnRpdHlEZXNjcmlwdG9yID09IG51bGwgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlUeXBlTm90Rm91bmRFeGNlcHRpb24oIHR5cGUgKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uKCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCBNb2RlbE1vZHVsZS50b1N0cmluZ0Z1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmZpbmRWaXNpYmxlRW50aXR5VHlwZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTWFwPFF1YWxpZmllZE5hbWUsIE9iamVjdD4gcHJvcGVydGllcyA9IG5ldyBIYXNoTWFwPD4oKTsKQEAgLTQyNCwxNiArNDMyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZm9yKCBpbnQgaWR4ID0gMDsgaWR4IDwgbmFtZWRSZWZzLmxlbmd0aDsgaWR4ICs9IDIgKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IG5hbWVkUmVmc1tpZHhdOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlZiA9IG5hbWVkUmVmc1tpZHggKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbmFtZWRSZWZzWyBpZHggXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWYgPSBuYW1lZFJlZnNbIGlkeCArIDEgXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMucHV0KCBuYW1lLCBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIHJlZiApICk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbmFtZWRBc3NvY2lhdGlvbnMucHV0KCBuYW1lZEFzc29jaWF0aW9uVHlwZS5xdWFsaWZpZWROYW1lKCksIHJlZmVyZW5jZXMgKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEVudGl0eVN0YXRlKCBkZXN1dywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlQcmVmcy5nZXQoICJ2ZXJzaW9uIiwgIiIgKSwKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEVudGl0eVN0YXRlKCBlbnRpdHlQcmVmcy5nZXQoICJ2ZXJzaW9uIiwgIiIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlQcmVmcy5nZXRMb25nKCAibW9kaWZpZWQiLCB1bml0T2ZXb3JrLmN1cnJlbnRUaW1lKCkgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsCkBAIC00NTUsNiArNDYyLDcgQEAKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgU3RhdGVDb21taXR0ZXIoKQogICAgICAgICB7CisgICAgICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncyggIlN5bmNocm9uaXplT25Ob25GaW5hbEZpZWxkIiApCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpCiAgICAgICAgICAgICB7CkBAIC01OTUsNyArNjAzLDggQEAKICAgICAgICAgICAgIGlmKCAhc3RhdGUubWFueUFzc29jaWF0aW9ucygpLmlzRW1wdHkoKSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgUHJlZmVyZW5jZXMgbWFueUFzc29jc1ByZWZzID0gZW50aXR5UHJlZnMubm9kZSggIm1hbnlhc3NvY2lhdGlvbnMiICk7Ci0gICAgICAgICAgICAgICAgZm9yKCBNYXAuRW50cnk8UXVhbGlmaWVkTmFtZSwgTGlzdDxFbnRpdHlSZWZlcmVuY2U+PiBtYW55QXNzb2NpYXRpb24gOiBzdGF0ZS5tYW55QXNzb2NpYXRpb25zKCkuZW50cnlTZXQoKSApCisgICAgICAgICAgICAgICAgZm9yKCBNYXAuRW50cnk8UXVhbGlmaWVkTmFtZSwgTGlzdDxFbnRpdHlSZWZlcmVuY2U+PiBtYW55QXNzb2NpYXRpb24gOiBzdGF0ZS5tYW55QXNzb2NpYXRpb25zKCkKKyAgICAgICAgICAgICAgICAgICAgLmVudHJ5U2V0KCkgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBtYW55QXNzb2NzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZm9yKCBFbnRpdHlSZWZlcmVuY2UgZW50aXR5UmVmZXJlbmNlIDogbWFueUFzc29jaWF0aW9uLmdldFZhbHVlKCkgKQpAQCAtNjE3LDcgKzYyNiw4IEBACiAgICAgICAgICAgICBpZiggIXN0YXRlLm5hbWVkQXNzb2NpYXRpb25zKCkuaXNFbXB0eSgpICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlcyBuYW1lZEFzc29jc1ByZWZzID0gZW50aXR5UHJlZnMubm9kZSggIm5hbWVkYXNzb2NpYXRpb25zIiApOwotICAgICAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFF1YWxpZmllZE5hbWUsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+IG5hbWVkQXNzb2NpYXRpb24gOiBzdGF0ZS5uYW1lZEFzc29jaWF0aW9ucygpLmVudHJ5U2V0KCkgKQorICAgICAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFF1YWxpZmllZE5hbWUsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+IG5hbWVkQXNzb2NpYXRpb24gOiBzdGF0ZS5uYW1lZEFzc29jaWF0aW9ucygpCisgICAgICAgICAgICAgICAgICAgIC5lbnRyeVNldCgpICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgbmFtZWRBc3NvY3MgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICAgICAgICAgICAgICBmb3IoIE1hcC5FbnRyeTxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4gbmFtZWRSZWYgOiBuYW1lZEFzc29jaWF0aW9uLmdldFZhbHVlKCkuZW50cnlTZXQoKSApCkBAIC03MDIsNSArNzEyLDQgQEAKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBVbmtub3duVHlwZQogICAgIHsKICAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9wcmVmcy9hc3NlbWJseS9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcHJlZnMvYXNzZW1ibHkvcGFja2FnZS5odG1sCmluZGV4IGRmMzNkODUuLjgxZmEzMmMgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9wcmVmcy9hc3NlbWJseS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1wcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3ByZWZzL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+UHJlZmVyZW5jZXMgRW50aXR5U3RvcmUgQXNzZW1ibHkuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9wcmVmcy9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXByZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcHJlZnMvcGFja2FnZS5odG1sCmluZGV4IGY3ZjM2Y2YuLjA3OTAyNmQgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9wcmVmcy9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1wcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3ByZWZzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+UHJlZmVyZW5jZXMgRW50aXR5U3RvcmUuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmVkaXMvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yZWRpcy9idWlsZC5ncmFkbGUKaW5kZXggNjQxNmUyOC4uNTBlNmMzNiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yZWRpcy9idWlsZC5ncmFkbGUKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yZWRpcy9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBSZWRpcyBFbnRpdHlTdG9yZSBFeHRlbnNpb24iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBFeHRlbnNpb24gLSBFbnRpdHlTdG9yZSAtIFJlZGlzIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgUmVkaXMgRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBSZWRpcyIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgICAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmVkaXMvZGV2LXN0YXR1cy54bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJlZGlzL2Rldi1zdGF0dXMueG1sCmluZGV4IDhhOTdmMjYuLjE2OTA2OGYgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmVkaXMvZGV2LXN0YXR1cy54bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yZWRpcy9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmVkaXMvc3JjL2RvY3MvZXMtcmVkaXMudHh0IGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yZWRpcy9zcmMvZG9jcy9lcy1yZWRpcy50eHQKaW5kZXggMDJiYTdhMS4uZGFlMzY0NCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yZWRpcy9zcmMvZG9jcy9lcy1yZWRpcy50eHQKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yZWRpcy9zcmMvZG9jcy9lcy1yZWRpcy50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbZXh0ZW5zaW9uLWVzLXJlZGlzLFJlZGlzIEVudGl0eVN0b3JlXV0KID0gUmVkaXMgRW50aXR5U3RvcmUgPQogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJlZGlzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmVkaXMvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yZWRpcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3JlZGlzL3BhY2thZ2UuaHRtbAppbmRleCA0OTllZWZmLi4yZjg5OTU5IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJlZGlzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmVkaXMvcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmVkaXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9yZWRpcy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJlZGlzIEVudGl0eVN0b3JlLjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJlZGlzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmVkaXMvUmVkaXNNYXBFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmVkaXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9yZWRpcy9SZWRpc01hcEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMTU3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJlZGlzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmVkaXMvUmVkaXNNYXBFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QuamF2YQpAQCAtMCwwICsxLDc4IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5yZWRpczsKKworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai50ZXN0LkVudGl0eVRlc3RBc3NlbWJsZXI7CitpbXBvcnQgb3JnLnFpNGoudGVzdC5jYWNoZS5BYnN0cmFjdEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdDsKK2ltcG9ydCBvcmcucWk0ai52YWx1ZXNlcmlhbGl6YXRpb24ub3JnanNvbi5PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyOworaW1wb3J0IHJlZGlzLmNsaWVudHMuamVkaXMuSmVkaXM7CitpbXBvcnQgcmVkaXMuY2xpZW50cy5qZWRpcy5KZWRpc1Bvb2w7CisKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGoudGVzdC51dGlsLkFzc3VtZS5hc3N1bWVDb25uZWN0aXZpdHk7CisKK3B1YmxpYyBjbGFzcyBSZWRpc01hcEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdAorICAgIGV4dGVuZHMgQWJzdHJhY3RFbnRpdHlTdG9yZVdpdGhDYWNoZVRlc3QKK3sKKyAgICBAQmVmb3JlQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYmVmb3JlUmVkaXNNYXBFbnRpdHlTdG9yZVRlc3RzKCkKKyAgICB7CisgICAgICAgIGFzc3VtZUNvbm5lY3Rpdml0eSggImxvY2FsaG9zdCIsIDYzNzkgKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlci5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIE1vZHVsZUFzc2VtYmx5IGNvbmZpZyA9IG1vZHVsZS5sYXllcigpLm1vZHVsZSggImNvbmZpZyIgKTsKKyAgICAgICAgbmV3IEVudGl0eVRlc3RBc3NlbWJsZXIoKS5hc3NlbWJsZSggY29uZmlnICk7CisgICAgICAgIG5ldyBPcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyKCkuYXNzZW1ibGUoIG1vZHVsZSApOworICAgICAgICBuZXcgUmVkaXNNYXBFbnRpdHlTdG9yZUFzc2VtYmxlcigpLndpdGhDb25maWcoIGNvbmZpZywgVmlzaWJpbGl0eS5sYXllciApLmFzc2VtYmxlKCBtb2R1bGUgKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEplZGlzUG9vbCBqZWRpc1Bvb2w7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN1cGVyLnNldFVwKCk7CisgICAgICAgIFJlZGlzTWFwRW50aXR5U3RvcmVTZXJ2aWNlIGVzID0gbW9kdWxlLmZpbmRTZXJ2aWNlKCBSZWRpc01hcEVudGl0eVN0b3JlU2VydmljZS5jbGFzcyApLmdldCgpOworICAgICAgICBqZWRpc1Bvb2wgPSBlcy5qZWRpc1Bvb2woKTsKKworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgSmVkaXMgamVkaXMgPSBqZWRpc1Bvb2wuZ2V0UmVzb3VyY2UoKTsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGplZGlzLmZsdXNoREIoKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5CisgICAgICAgIHsKKyAgICAgICAgICAgIGplZGlzUG9vbC5yZXR1cm5SZXNvdXJjZSggamVkaXMgKTsKKyAgICAgICAgfQorICAgICAgICBzdXBlci50ZWFyRG93bigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9idWlsZC5ncmFkbGUgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJpYWsvYnVpbGQuZ3JhZGxlCmluZGV4IDEwNjZiYWIuLmViZGVmNTkgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9idWlsZC5ncmFkbGUKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL2J1aWxkLmdyYWRsZQpAQCAtMSwxOCArMSwzNyBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBSaWFrIEVudGl0eVN0b3JlIEV4dGVuc2lvbiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIEVudGl0eVN0b3JlIC0gUmlhayIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIFJpYWsgRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBSaWFrIiB9IH0KIAogZGVwZW5kZW5jaWVzIHsKLSAgICAKLSAgICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCi0gICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkubG9ja2luZyIpKQotICAgIGNvbXBpbGUobGlicmFyaWVzLnJpYWspCiAKLSAgICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikpCi0gICAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmV4dGVuc2lvbnM6b3JnLnFpNGouZXh0ZW5zaW9uLnZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uIikpCisgIGNvbXBpbGUoIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIgKSApCisgIGNvbXBpbGUoIHByb2plY3QoICI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkubG9ja2luZyIgKSApCisgIGNvbXBpbGUgbGlicmFyaWVzLnNsZjRqX2FwaQorICBjb21waWxlKCBsaWJyYXJpZXMucmlhayApCiAKLSAgICB0ZXN0UnVudGltZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiKSkKLSAgICB0ZXN0UnVudGltZShsaWJyYXJpZXMubG9nYmFjaykKKyAgdGVzdENvbXBpbGUoIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IiApICkKKyAgdGVzdENvbXBpbGUoIHByb2plY3QoICI6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24udmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24iICkgKQogCisgIHRlc3RSdW50aW1lKCBwcm9qZWN0KCAiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lIiApICkKKyAgdGVzdFJ1bnRpbWUoIGxpYnJhcmllcy5sb2diYWNrICkKIH0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL2Rldi1zdGF0dXMueG1sCmluZGV4IDhhOTdmMjYuLjE2OTA2OGYgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9kZXYtc3RhdHVzLnhtbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJpYWsvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJpYWsvc3JjL2RvY3MvZXMtcmlhay50eHQgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJpYWsvc3JjL2RvY3MvZXMtcmlhay50eHQKaW5kZXggMDNhMmU1ZS4uNjJlM2NjYSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL3NyYy9kb2NzL2VzLXJpYWsudHh0CisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9zcmMvZG9jcy9lcy1yaWFrLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tleHRlbnNpb24tZXMtcmlhayxSaWFrIEVudGl0eVN0b3JlXV0KID0gUmlhayBFbnRpdHlTdG9yZSA9CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3JpYWsvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmlhay9wYWNrYWdlLmh0bWwKaW5kZXggNTYzNmNkMS4uOWUzZWYyNCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmlhay9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmlhay9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJpYWsgRW50aXR5U3RvcmUuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3JpYWsvUmlha0h0dHBNYXBFbnRpdHlTdG9yZVRlc3QuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3JpYWsvUmlha0h0dHBNYXBFbnRpdHlTdG9yZVRlc3QuamF2YQppbmRleCA0MDdlMjA0Li4zYWI2YmQ1IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJpYWsvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9yaWFrL1JpYWtIdHRwTWFwRW50aXR5U3RvcmVUZXN0LmphdmEKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmlhay9SaWFrSHR0cE1hcEVudGl0eVN0b3JlVGVzdC5qYXZhCkBAIC02OSw3ICs2OSw3IEBACiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgICAvLyBSaWFrIGRvbid0IGV4cG9zZSBidWNrZXQgZGVsZXRpb24gaW4gaXRzIEFQSSBzbyB3ZSBlbXB0eSB0aGUgUWk0aiBFbnRpdGllcyBidWNrZXQuCisgICAgICAgIC8vIFJpYWsgZG9uJ3QgZXhwb3NlIGJ1Y2tldCBkZWxldGlvbiBpbiBpdHMgQVBJIHNvIHdlIGVtcHR5IHRoZSBaZXN0IEVudGl0aWVzIGJ1Y2tldC4KICAgICAgICAgQnVja2V0IGJ1Y2tldCA9IHJpYWtDbGllbnQuZmV0Y2hCdWNrZXQoIGJ1Y2tldEtleSApLmV4ZWN1dGUoKTsKICAgICAgICAgZm9yKCBTdHJpbmcga2V5IDogYnVja2V0LmtleXMoKSApCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3JpYWsvUmlha01hcEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmlhay9SaWFrTWFwRW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwZTZiMwotLS0gL2Rldi9udWxsCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3JpYWsvUmlha01hcEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLnJpYWs7CisKK2ltcG9ydCBjb20uYmFzaG8ucmlhay5jbGllbnQuSVJpYWtDbGllbnQ7CitpbXBvcnQgY29tLmJhc2hvLnJpYWsuY2xpZW50LmJ1Y2tldC5CdWNrZXQ7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLnRlc3QuRW50aXR5VGVzdEFzc2VtYmxlcjsKK2ltcG9ydCBvcmcucWk0ai50ZXN0LmNhY2hlLkFic3RyYWN0RW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0OworaW1wb3J0IG9yZy5xaTRqLnZhbHVlc2VyaWFsaXphdGlvbi5vcmdqc29uLk9yZ0pzb25WYWx1ZVNlcmlhbGl6YXRpb25Bc3NlbWJsZXI7CisKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGoudGVzdC51dGlsLkFzc3VtZS5hc3N1bWVDb25uZWN0aXZpdHk7CisKK3B1YmxpYyBjbGFzcyBSaWFrTWFwRW50aXR5U3RvcmVXaXRoQ2FjaGVUZXN0CisgICAgZXh0ZW5kcyBBYnN0cmFjdEVudGl0eVN0b3JlV2l0aENhY2hlVGVzdAoreworICAgIEBCZWZvcmVDbGFzcworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBiZWZvcmVSaWFrUHJvdG9idWZNYXBFbnRpdHlTdG9yZVRlc3RzKCkKKyAgICB7CisgICAgICAgIGFzc3VtZUNvbm5lY3Rpdml0eSggImxvY2FsaG9zdCIsIDgwODcgKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlci5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIE1vZHVsZUFzc2VtYmx5IGNvbmZpZyA9IG1vZHVsZS5sYXllcigpLm1vZHVsZSggImNvbmZpZyIgKTsKKyAgICAgICAgbmV3IEVudGl0eVRlc3RBc3NlbWJsZXIoKS5hc3NlbWJsZSggY29uZmlnICk7CisgICAgICAgIG5ldyBPcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyKCkuYXNzZW1ibGUoIG1vZHVsZSApOworICAgICAgICBuZXcgUmlha1Byb3RvYnVmTWFwRW50aXR5U3RvcmVBc3NlbWJsZXIoKS53aXRoQ29uZmlnKCBjb25maWcsIFZpc2liaWxpdHkubGF5ZXIgKS5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgfQorCisgICAgcHJpdmF0ZSBJUmlha0NsaWVudCByaWFrQ2xpZW50OworICAgIHByaXZhdGUgU3RyaW5nIGJ1Y2tldEtleTsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKyAgICAgICAgUmlha01hcEVudGl0eVN0b3JlU2VydmljZSBlcyA9IG1vZHVsZS5maW5kU2VydmljZSggUmlha01hcEVudGl0eVN0b3JlU2VydmljZS5jbGFzcyApLmdldCgpOworICAgICAgICByaWFrQ2xpZW50ID0gZXMucmlha0NsaWVudCgpOworICAgICAgICBidWNrZXRLZXkgPSBlcy5idWNrZXQoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIC8vIFJpYWsgZG9uJ3QgZXhwb3NlIGJ1Y2tldCBkZWxldGlvbiBpbiBpdHMgQVBJIHNvIHdlIGVtcHR5IHRoZSBaZXN0IEVudGl0aWVzIGJ1Y2tldC4KKyAgICAgICAgQnVja2V0IGJ1Y2tldCA9IHJpYWtDbGllbnQuZmV0Y2hCdWNrZXQoIGJ1Y2tldEtleSApLmV4ZWN1dGUoKTsKKyAgICAgICAgZm9yKCBTdHJpbmcga2V5IDogYnVja2V0LmtleXMoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJ1Y2tldC5kZWxldGUoIGtleSApLmV4ZWN1dGUoKTsKKyAgICAgICAgfQorICAgICAgICBzdXBlci50ZWFyRG93bigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3JpYWsvUmlha1Byb3RvYnVmTWFwRW50aXR5U3RvcmVUZXN0LmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXJpYWsvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9yaWFrL1JpYWtQcm90b2J1Zk1hcEVudGl0eVN0b3JlVGVzdC5qYXZhCmluZGV4IDgxNDdiZGUuLmVmOTQwMTEgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcmlhay9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3JpYWsvUmlha1Byb3RvYnVmTWFwRW50aXR5U3RvcmVUZXN0LmphdmEKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1yaWFrL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvcmlhay9SaWFrUHJvdG9idWZNYXBFbnRpdHlTdG9yZVRlc3QuamF2YQpAQCAtNjksNyArNjksNyBAQAogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgLy8gUmlhayBkb24ndCBleHBvc2UgYnVja2V0IGRlbGV0aW9uIGluIGl0cyBBUEkgc28gd2UgZW1wdHkgdGhlIFFpNGogRW50aXRpZXMgYnVja2V0LgorICAgICAgICAvLyBSaWFrIGRvbid0IGV4cG9zZSBidWNrZXQgZGVsZXRpb24gaW4gaXRzIEFQSSBzbyB3ZSBlbXB0eSB0aGUgWmVzdCBFbnRpdGllcyBidWNrZXQuCiAgICAgICAgIEJ1Y2tldCBidWNrZXQgPSByaWFrQ2xpZW50LmZldGNoQnVja2V0KCBidWNrZXRLZXkgKS5leGVjdXRlKCk7CiAgICAgICAgIGZvciggU3RyaW5nIGtleSA6IGJ1Y2tldC5rZXlzKCkgKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9OT1RJQ0UgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZmFkMDEuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotUWk0aiBSRVNUIFBlcnNpc3RlbmNlIEV4dGVuc2lvbgotQ29weXJpZ2h0IDIwMDctMjAwOCwgVGhlIFFpNGogRGV2ZWxvcG1lbnQgVGVhbSBvZiBpbmRpdmlkdWFscy4KLQotU2VlIGh0dHA6Ly93d3cucWk0ai5vcmcvY29udHJpYnV0b3JzLmh0bWwgZm9yIGxpc3Qgb2Ygb2YgaW5kaXZpZHVhbHMuCi1BbHNvIHNlZSBlYWNoIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgQ29weXJpZ2h0IGNsYWltcy4KLQotUWk0aiBpcyBhIGNvbW11bml0eSBhZ2dyZWdhdGVkIHdvcmtzIHVuZGVyIENvcHlyaWdodCBsYXcuCi1BbGwgcGFydHMgb2YgdGhlIG9yaWdpbmFsIHdvcmtzIGF0IFFpNGogaXMgbGljZW5zZWQgdW5kZXIgdGhlCi1BcGFjaGUgTGljZW5zZSB2ZXIgMi4wIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcwotCi1CZWxvdyBmb2xsb3dzIGEgbGlzdCBvZiBiaW5hcnkgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBsaWNlbnNlczsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi1UaGlzIG1vZHVsZSB1c2VzIHNvZnR3YXJlIGRldmVsb3BlZCBhdCBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgotKGh0dHA6Ly93d3cuYXBhY2hlLm9yZykgdW5kZXIgQXBhY2hlIExpY2Vuc2UgMi4wLCBzZWUgTElDRU5TRQotCi1UaGlzIG1vZHVsZSB1c2VzIFNMRjRKLCBkZXZlbG9wZWQgYXQgc2xmNGoub3JnIHVuZGVyIE1JVCBMaWNlbnNlLgotU2VlIGxpY2Vuc2VzL3NsZjRqLmxpY2Vuc2UKLQotCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvYnVpbGQuZ3JhZGxlCmluZGV4IDBhZjgyMDQuLmY4YTA4NDkgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL2J1aWxkLmdyYWRsZQorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBTUUwgRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBTUUwiIH19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBTUUwgRW50aXR5U3RvcmUgRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBTUUwiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvZGV2LXN0YXR1cy54bWwKaW5kZXggMzAzODJhYy4uOTRkNjMzZiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvZGV2LXN0YXR1cy54bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvZG9jcy9lcy1zcWwudHh0IGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL2RvY3MvZXMtc3FsLnR4dAppbmRleCAwM2YxMzgyLi5jYWEyNjU5IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvZG9jcy9lcy1zcWwudHh0CisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy9kb2NzL2VzLXNxbC50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbZXh0ZW5zaW9uLWVzLXNxbCwgU1FMIEVudGl0eVN0b3JlXV0KID0gU1FMIEVudGl0eVN0b3JlID0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvU1FMRW50aXR5U3RvcmVNaXhpbi5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvU1FMRW50aXR5U3RvcmVNaXhpbi5qYXZhCmluZGV4IDhiYTJhYWMuLmI1N2RjZjAgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL1NRTEVudGl0eVN0b3JlTWl4aW4uamF2YQorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3NxbC9TUUxFbnRpdHlTdG9yZU1peGluLmphdmEKQEAgLTQ4LDcgKzQ4LDYgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQWN0aXZhdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5xdWFsaWZpZXIuVGFnZ2VkOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuVmFsdWVUeXBlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLkVudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOwpAQCAtNjQsNiArNjMsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmlvLlJlY2VpdmVyOwogaW1wb3J0IG9yZy5xaTRqLmlvLlNlbmRlcjsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNxbC5jb21tb24uU1FMVXRpbDsKK2ltcG9ydCBvcmcucWk0ai5zcGkuUWk0alNQSTsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5LkVudGl0eVN0YXRlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdHVzOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5EZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrOwpAQCAtNzIsMTUgKzcyLDE5IEBACiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZVNQSTsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RvcmVVbml0T2ZXb3JrOworaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5Nb2R1bGVFbnRpdHlTdG9yZVVuaXRPZldvcms7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLlN0YXRlQ29tbWl0dGVyOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5oZWxwZXJzLkRlZmF1bHRFbnRpdHlTdGF0ZTsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuaGVscGVycy5KU09OS2V5czsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuaGVscGVycy5NaWdyYXRpb247CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLmhlbHBlcnMuU3RhdGVTdG9yZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkubW9kdWxlLk1vZGVsTW9kdWxlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMuZmlyc3Q7CitpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLm1hcDsKIAogLyoqCiAgKiBTUUwgRW50aXR5U3RvcmUgY29yZSBNaXhpbi4KQEAgLTEwMyw2ICsxMDcsOSBAQAogICAgIHByaXZhdGUgRW50aXR5U3RvcmVTUEkgZW50aXR5U3RvcmVTUEk7CiAKICAgICBAU3RydWN0dXJlCisgICAgcHJpdmF0ZSBRaTRqU1BJIHNwaTsKKworICAgIEBTdHJ1Y3R1cmUKICAgICBwcml2YXRlIEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uOwogCiAgICAgQFNlcnZpY2UKQEAgLTIzMCwzMSArMjM3LDM0IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlT2YoIEVudGl0eVN0b3JlVW5pdE9mV29yayB1bml0T2ZXb3JrLCBFbnRpdHlSZWZlcmVuY2UgZW50aXR5UmVmICkKKyAgICBwdWJsaWMgRW50aXR5U3RhdGUgZW50aXR5U3RhdGVPZiggRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmssIE1vZHVsZVNwaSBtb2R1bGUsIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWYgKQogICAgIHsKICAgICAgICAgRW50aXR5VmFsdWVSZXN1bHQgdmFsdWVSZXN1bHQgPSBnZXRWYWx1ZSggZW50aXR5UmVmICk7Ci0gICAgICAgIHJldHVybiBuZXcgRGVmYXVsdFNRTEVudGl0eVN0YXRlKCByZWFkRW50aXR5U3RhdGUoIChEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrKSB1bml0T2ZXb3JrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlc3VsdC5nZXRSZWFkZXIoKSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZXN1bHQuZ2V0RW50aXR5UEsoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVzdWx0LmdldEVudGl0eU9wdGltaXN0aWNMb2NrKCkgKTsKKyAgICAgICAgRGVmYXVsdEVudGl0eVN0YXRlIHN0YXRlID0gcmVhZEVudGl0eVN0YXRlKCBtb2R1bGUsIHZhbHVlUmVzdWx0LmdldFJlYWRlcigpICk7CisgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdFNRTEVudGl0eVN0YXRlKCBzdGF0ZSwgdmFsdWVSZXN1bHQuZ2V0RW50aXR5UEsoKSwgdmFsdWVSZXN1bHQuZ2V0RW50aXR5T3B0aW1pc3RpY0xvY2soKSApOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBFbnRpdHlTdGF0ZSBuZXdFbnRpdHlTdGF0ZSggRW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmssIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWYsIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvciApCisgICAgcHVibGljIEVudGl0eVN0YXRlIG5ld0VudGl0eVN0YXRlKCBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZVNwaSBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgZW50aXR5UmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5RGVzY3JpcHRvciBlbnRpdHlEZXNjcmlwdG9yCisgICAgKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0U1FMRW50aXR5U3RhdGUoIG5ldyBEZWZhdWx0RW50aXR5U3RhdGUoIChEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrKSB1bml0T2ZXb3JrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5UmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5RGVzY3JpcHRvciApICk7CisgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdFNRTEVudGl0eVN0YXRlKCBuZXcgRGVmYXVsdEVudGl0eVN0YXRlKCB1bml0T2ZXb3JrLmN1cnJlbnRUaW1lKCksIGVudGl0eVJlZiwgZW50aXR5RGVzY3JpcHRvciApICk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVudGl0eVN0b3JlVW5pdE9mV29yayBuZXdVbml0T2ZXb3JrKCBVc2VjYXNlIHVzZWNhc2UsIE1vZHVsZSBtb2R1bGUsIGxvbmcgY3VycmVudFRpbWUgKQorICAgIHB1YmxpYyBFbnRpdHlTdG9yZVVuaXRPZldvcmsgbmV3VW5pdE9mV29yayggVXNlY2FzZSB1c2VjYXNlLCBNb2R1bGVTcGkgbW9kdWxlLCBsb25nIGN1cnJlbnRUaW1lICkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEVudGl0eVN0b3JlVW5pdE9mV29yayggZW50aXR5U3RvcmVTUEksIG5ld1VuaXRPZldvcmtJZCgpLCBtb2R1bGUsIHVzZWNhc2UsIGN1cnJlbnRUaW1lICk7CisgICAgICAgIEVudGl0eVN0b3JlVW5pdE9mV29yayBzdG9yZVVuaXRPZldvcmsgPQorICAgICAgICAgICAgbmV3IERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsoIGVudGl0eVN0b3JlU1BJLCBuZXdVbml0T2ZXb3JrSWQoKSwgdXNlY2FzZSwgY3VycmVudFRpbWUgKTsKKyAgICAgICAgc3RvcmVVbml0T2ZXb3JrID0gbmV3IE1vZHVsZUVudGl0eVN0b3JlVW5pdE9mV29yayggbW9kdWxlLCBzdG9yZVVuaXRPZldvcmsgKTsKKyAgICAgICAgcmV0dXJuIHN0b3JlVW5pdE9mV29yazsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSW5wdXQ8RW50aXR5U3RhdGUsIEVudGl0eVN0b3JlRXhjZXB0aW9uPiBlbnRpdHlTdGF0ZXMoIGZpbmFsIE1vZHVsZSBtb2R1bGUgKQorICAgIHB1YmxpYyBJbnB1dDxFbnRpdHlTdGF0ZSwgRW50aXR5U3RvcmVFeGNlcHRpb24+IGVudGl0eVN0YXRlcyggZmluYWwgTW9kdWxlU3BpIG1vZHVsZSApCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IElucHV0PEVudGl0eVN0YXRlLCBFbnRpdHlTdG9yZUV4Y2VwdGlvbj4oKQogICAgICAgICB7CkBAIC0yOTEsMTYgKzMwMSwxNSBAQAogICAgICAgICB9OwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBxdWVyeUFsbEVudGl0aWVzKCBNb2R1bGUgbW9kdWxlLCBFbnRpdHlTdGF0ZXNWaXNpdG9yIGVudGl0eVN0YXRlc1Zpc2l0b3IgKQorICAgIHByaXZhdGUgdm9pZCBxdWVyeUFsbEVudGl0aWVzKCBNb2R1bGVTcGkgbW9kdWxlLCBFbnRpdHlTdGF0ZXNWaXNpdG9yIGVudGl0eVN0YXRlc1Zpc2l0b3IgKQogICAgIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwogICAgICAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwogICAgICAgICBVc2VjYXNlQnVpbGRlciBidWlsZGVyID0gVXNlY2FzZUJ1aWxkZXIuYnVpbGRVc2VjYXNlKCAicWk0ai5lbnRpdHlzdG9yZS5zcWwudmlzaXQiICk7CiAgICAgICAgIFVzZWNhc2UgdXNlY2FzZSA9IGJ1aWxkZXIud2l0aE1ldGFJbmZvKCBDYWNoZU9wdGlvbnMuTkVWRVIgKS5uZXdVc2VjYXNlKCk7Ci0gICAgICAgIGZpbmFsIERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW93ID0gbmV3IERlZmF1bHRFbnRpdHlTdG9yZVVuaXRPZldvcmsoIGVudGl0eVN0b3JlU1BJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdVbml0T2ZXb3JrSWQoKSwgbW9kdWxlLCB1c2VjYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSApOworICAgICAgICBmaW5hbCBNb2R1bGVFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW93ID0KKyAgICAgICAgICAgIChNb2R1bGVFbnRpdHlTdG9yZVVuaXRPZldvcmspIG5ld1VuaXRPZldvcmsoIHVzZWNhc2UsIG1vZHVsZSwgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKTsKICAgICAgICAgdHJ5CiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBkYXRhYmFzZS5nZXRDb25uZWN0aW9uKCk7CkBAIC0zMDksNyArMzE4LDcgQEAKICAgICAgICAgICAgIHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CiAgICAgICAgICAgICB3aGlsZSggcnMubmV4dCgpICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEZWZhdWx0RW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSByZWFkRW50aXR5U3RhdGUoIHVvdywgZGF0YWJhc2UuZ2V0RW50aXR5VmFsdWUoIHJzICkuZ2V0UmVhZGVyKCkgKTsKKyAgICAgICAgICAgICAgICBEZWZhdWx0RW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSByZWFkRW50aXR5U3RhdGUoIG1vZHVsZSwgZGF0YWJhc2UuZ2V0RW50aXR5VmFsdWUoIHJzICkuZ2V0UmVhZGVyKCkgKTsKICAgICAgICAgICAgICAgICBpZiggIWVudGl0eVN0YXRlc1Zpc2l0b3IudmlzaXQoIGVudGl0eVN0YXRlICkgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDEyICszNDcsMTEgQEAKICAgICAgICAgcmV0dXJuIHV1aWQgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKCBjb3VudC5pbmNyZW1lbnRBbmRHZXQoKSApOwogICAgIH0KIAotICAgIHByb3RlY3RlZCBEZWZhdWx0RW50aXR5U3RhdGUgcmVhZEVudGl0eVN0YXRlKCBEZWZhdWx0RW50aXR5U3RvcmVVbml0T2ZXb3JrIHVuaXRPZldvcmssIFJlYWRlciBlbnRpdHlTdGF0ZSApCisgICAgcHJvdGVjdGVkIERlZmF1bHRFbnRpdHlTdGF0ZSByZWFkRW50aXR5U3RhdGUoIE1vZHVsZVNwaSBtb2R1bGUsIFJlYWRlciBlbnRpdHlTdGF0ZSApCiAgICAgICAgIHRocm93cyBFbnRpdHlTdG9yZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgdHJ5CiAgICAgICAgIHsKLSAgICAgICAgICAgIE1vZHVsZSBtb2R1bGUgPSB1bml0T2ZXb3JrLm1vZHVsZSgpOwogICAgICAgICAgICAgSlNPTk9iamVjdCBqc29uT2JqZWN0ID0gbmV3IEpTT05PYmplY3QoIG5ldyBKU09OVG9rZW5lciggZW50aXR5U3RhdGUgKSApOwogICAgICAgICAgICAgRW50aXR5U3RhdHVzIHN0YXR1cyA9IEVudGl0eVN0YXR1cy5MT0FERUQ7CiAKQEAgLTM3Nyw3ICszODUsMTEgQEAKICAgICAgICAgICAgIEVudGl0eURlc2NyaXB0b3IgZW50aXR5RGVzY3JpcHRvciA9IG1vZHVsZS5lbnRpdHlEZXNjcmlwdG9yKCB0eXBlICk7CiAgICAgICAgICAgICBpZiggZW50aXR5RGVzY3JpcHRvciA9PSBudWxsICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uKCB0eXBlICk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVR5cGVOb3RGb3VuZEV4Y2VwdGlvbiggdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUubmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCggTW9kZWxNb2R1bGUudG9TdHJpbmdGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5maW5kVmlzaWJsZUVudGl0eVR5cGVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE1hcDxRdWFsaWZpZWROYW1lLCBPYmplY3Q+IHByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDw+KCk7CkBAIC00ODAsNyArNDkyLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEVudGl0eVN0YXRlKCB1bml0T2ZXb3JrLCB2ZXJzaW9uLCBtb2RpZmllZCwKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEVudGl0eVN0YXRlKCB2ZXJzaW9uLCBtb2RpZmllZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICksIHN0YXR1cywgZW50aXR5RGVzY3JpcHRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLCBhc3NvY2lhdGlvbnMsIG1hbnlBc3NvY2lhdGlvbnMsIG5hbWVkQXNzb2NpYXRpb25zICk7CiAgICAgICAgIH0KQEAgLTQ5NSw3ICs1MDcsNyBAQAogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAgICB7CiAgICAgICAgIEpTT05PYmplY3QganNvbk9iamVjdDsKLSAgICAgICAgdHJ5KCBSZWFkZXIgcmVhZGVyID0gZ2V0VmFsdWUoIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggaWQgKSApLmdldFJlYWRlcigpICkKKyAgICAgICAgdHJ5IChSZWFkZXIgcmVhZGVyID0gZ2V0VmFsdWUoIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggaWQgKSApLmdldFJlYWRlcigpKQogICAgICAgICB7CiAgICAgICAgICAgICBqc29uT2JqZWN0ID0gbmV3IEpTT05PYmplY3QoIG5ldyBKU09OVG9rZW5lciggcmVhZGVyICkgKTsKICAgICAgICAgfQpAQCAtNTIxLDEwICs1MzMsNyBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlOb3RGb3VuZEV4Y2VwdGlvbiggcmVmICk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEVudGl0eVZhbHVlUmVzdWx0IHJlc3VsdCA9IGRhdGFiYXNlLmdldEVudGl0eVZhbHVlKCBycyApOwotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLmdldEVudGl0eVZhbHVlKCBycyApOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoKCBTUUxFeGNlcHRpb24gc3FsZSApCiAgICAgICAgIHsKQEAgLTU3OSw3ICs1ODgsOCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBKU09OV3JpdGVyIGFzc29jaWF0aW9ucyA9IHByb3BlcnRpZXMuZW5kT2JqZWN0KCkua2V5KCBKU09OS2V5cy5BU1NPQ0lBVElPTlMgKS5vYmplY3QoKTsKLSAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFF1YWxpZmllZE5hbWUsIEVudGl0eVJlZmVyZW5jZT4gc3RhdGVOYW1lRW50aXR5UmVmZXJlbmNlRW50cnkgOiBzdGF0ZS5hc3NvY2lhdGlvbnMoKS5lbnRyeVNldCgpICkKKyAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFF1YWxpZmllZE5hbWUsIEVudGl0eVJlZmVyZW5jZT4gc3RhdGVOYW1lRW50aXR5UmVmZXJlbmNlRW50cnkgOiBzdGF0ZS5hc3NvY2lhdGlvbnMoKQorICAgICAgICAgICAgICAgIC5lbnRyeVNldCgpICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgdmFsdWUgPSBzdGF0ZU5hbWVFbnRpdHlSZWZlcmVuY2VFbnRyeS5nZXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgIGFzc29jaWF0aW9ucy5rZXkoIHN0YXRlTmFtZUVudGl0eVJlZmVyZW5jZUVudHJ5LmdldEtleSgpLm5hbWUoKSApLgpAQCAtNTg3LDcgKzU5Nyw4IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEpTT05Xcml0ZXIgbWFueUFzc29jaWF0aW9ucyA9IGFzc29jaWF0aW9ucy5lbmRPYmplY3QoKS5rZXkoIEpTT05LZXlzLk1BTllfQVNTT0NJQVRJT05TICkub2JqZWN0KCk7Ci0gICAgICAgICAgICBmb3IoIE1hcC5FbnRyeTxRdWFsaWZpZWROYW1lLCBMaXN0PEVudGl0eVJlZmVyZW5jZT4+IHN0YXRlTmFtZUxpc3RFbnRyeSA6IHN0YXRlLm1hbnlBc3NvY2lhdGlvbnMoKS5lbnRyeVNldCgpICkKKyAgICAgICAgICAgIGZvciggTWFwLkVudHJ5PFF1YWxpZmllZE5hbWUsIExpc3Q8RW50aXR5UmVmZXJlbmNlPj4gc3RhdGVOYW1lTGlzdEVudHJ5IDogc3RhdGUubWFueUFzc29jaWF0aW9ucygpCisgICAgICAgICAgICAgICAgLmVudHJ5U2V0KCkgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEpTT05Xcml0ZXIgYXNzb2NzID0gbWFueUFzc29jaWF0aW9ucy5rZXkoIHN0YXRlTmFtZUxpc3RFbnRyeS5nZXRLZXkoKS5uYW1lKCkgKS5hcnJheSgpOwogICAgICAgICAgICAgICAgIGZvciggRW50aXR5UmVmZXJlbmNlIGVudGl0eVJlZmVyZW5jZSA6IHN0YXRlTmFtZUxpc3RFbnRyeS5nZXRWYWx1ZSgpICkKQEAgLTU5OCw3ICs2MDksOCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBKU09OV3JpdGVyIG5hbWVkQXNzb2NpYXRpb25zID0gbWFueUFzc29jaWF0aW9ucy5lbmRPYmplY3QoKS5rZXkoIEpTT05LZXlzLk5BTUVEX0FTU09DSUFUSU9OUyApLm9iamVjdCgpOwotICAgICAgICAgICAgZm9yKCBNYXAuRW50cnk8UXVhbGlmaWVkTmFtZSwgTWFwPFN0cmluZywgRW50aXR5UmVmZXJlbmNlPj4gc3RhdGVOYW1lTWFwRW50cnkgOiBzdGF0ZS5uYW1lZEFzc29jaWF0aW9ucygpLmVudHJ5U2V0KCkgKQorICAgICAgICAgICAgZm9yKCBNYXAuRW50cnk8UXVhbGlmaWVkTmFtZSwgTWFwPFN0cmluZywgRW50aXR5UmVmZXJlbmNlPj4gc3RhdGVOYW1lTWFwRW50cnkgOiBzdGF0ZS5uYW1lZEFzc29jaWF0aW9ucygpCisgICAgICAgICAgICAgICAgLmVudHJ5U2V0KCkgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEpTT05Xcml0ZXIgYXNzb2NzID0gbmFtZWRBc3NvY2lhdGlvbnMua2V5KCBzdGF0ZU5hbWVNYXBFbnRyeS5nZXRLZXkoKS5uYW1lKCkgKS5vYmplY3QoKTsKICAgICAgICAgICAgICAgICBmb3IoIE1hcC5FbnRyeTxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4gZW50cnkgOiBzdGF0ZU5hbWVNYXBFbnRyeS5nZXRWYWx1ZSgpLmVudHJ5U2V0KCkgKQpAQCAtNjE0LDUgKzYyNiw0IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5U3RvcmVFeGNlcHRpb24oICJDb3VsZCBub3Qgc3RvcmUgRW50aXR5U3RhdGUiLCBlICk7CiAgICAgICAgIH0KICAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbAppbmRleCBlYTExY2IzLi4wOTU3OWFkIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3NxbC9hc3NlbWJseS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvYXNzZW1ibHkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TUUwgRW50aXR5U3RvcmUgQXNzZW1ibHkuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL2ludGVybmFsL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL2ludGVybmFsL3BhY2thZ2UuaHRtbAppbmRleCA1ZGU2MjE4Li5jOGNjYjE2IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3NxbC9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvaW50ZXJuYWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TUUwgRW50aXR5U3RvcmUgSW50ZXJuYWwgUGFja2FnZS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvcGFja2FnZS5odG1sCmluZGV4IGQ1MjY3NTIuLmM3ZTU2ODggMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3NxbC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNRTCBFbnRpdHlTdG9yZS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvRGVyYnlTUUxFbnRpdHlTdG9yZVRlc3QuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL0RlcmJ5U1FMRW50aXR5U3RvcmVUZXN0LmphdmEKaW5kZXggN2QxNWQ0Ni4uMzFkYTQyYyAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvRGVyYnlTUUxFbnRpdHlTdG9yZVRlc3QuamF2YQorKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3NxbC9EZXJieVNRTEVudGl0eVN0b3JlVGVzdC5qYXZhCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUuc3FsOwogCitpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CiBpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OwogaW1wb3J0IGphdmF4LnNxbC5EYXRhU291cmNlOwpAQCAtOTIsNyArOTMsNyBAQAogICAgICAgICAgICAgICAgIHN0bXQuZXhlY3V0ZSggU3RyaW5nLmZvcm1hdCggIkRFTEVURSBGUk9NICVzLiIgKyBTUUxzLlRBQkxFX05BTUUsIHNjaGVtYU5hbWUgKSApOwogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY29tbWl0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBGaWxlVXRpbC5yZW1vdmVEaXJlY3RvcnkoICJ0YXJnZXQvcWk0ai1kYXRhIiApOworICAgICAgICAgICAgRmlsZVV0aWwucmVtb3ZlRGlyZWN0b3J5KCBuZXcgRmlsZSggInRhcmdldC9xaTRqLWRhdGEiICkgKTsKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL0gyU1FMRW50aXR5U3RvcmVUZXN0LmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3NxbC9IMlNRTEVudGl0eVN0b3JlVGVzdC5qYXZhCmluZGV4IDliODlkYzEuLmRjM2U4YjIgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL0gyU1FMRW50aXR5U3RvcmVUZXN0LmphdmEKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvSDJTUUxFbnRpdHlTdG9yZVRlc3QuamF2YQpAQCAtMTMsNiArMTMsNyBAQAogICovCiBwYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLnNxbDsKIAoraW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBvcmcuYXBhY2hlLmRlcmJ5LmlhcGkuc2VydmljZXMuaW8uRmlsZVV0aWw7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OwogaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKQEAgLTY4LDcgKzY5LDcgQEAKICAgICB7CiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBGaWxlVXRpbC5yZW1vdmVEaXJlY3RvcnkoICJ0YXJnZXQvcWk0ai1kYXRhIiApOworICAgICAgICAgICAgRmlsZVV0aWwucmVtb3ZlRGlyZWN0b3J5KCBuZXcgRmlsZSggInRhcmdldC9xaTRqLWRhdGEiICkgKTsKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvc3FsL1NRTGl0ZUVudGl0eVN0b3JlVGVzdC5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvU1FMaXRlRW50aXR5U3RvcmVUZXN0LmphdmEKaW5kZXggNjA0MGFlNS4uNWU0ZDVkMSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvU1FMaXRlRW50aXR5U3RvcmVUZXN0LmphdmEKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS9zcWwvU1FMaXRlRW50aXR5U3RvcmVUZXN0LmphdmEKQEAgLTEzLDYgKzEzLDcgQEAKICAqLwogcGFja2FnZSBvcmcucWk0ai5lbnRpdHlzdG9yZS5zcWw7CiAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5kZXJieS5pYXBpLnNlcnZpY2VzLmlvLkZpbGVVdGlsOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHk7CkBAIC03Nyw3ICs3OCw3IEBACiAgICAgewogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgRmlsZVV0aWwucmVtb3ZlRGlyZWN0b3J5KCAidGFyZ2V0L3FpNGotZGF0YSIgKTsKKyAgICAgICAgICAgIEZpbGVVdGlsLnJlbW92ZURpcmVjdG9yeSggbmV3IEZpbGUoICJ0YXJnZXQvcWk0ai1kYXRhIiApICk7CiAgICAgICAgIH0KICAgICAgICAgZmluYWxseQogICAgICAgICB7CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvZGVyYnktZGF0YXNvdXJjZS5wcm9wZXJ0aWVzIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL2RlcmJ5LWRhdGFzb3VyY2UucHJvcGVydGllcwppbmRleCAwM2JmMTMyLi44ZmM5MjI5IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvZGVyYnktZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9kZXJieS1kYXRhc291cmNlLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogZW5hYmxlZD10cnVlCiB1cmw9amRiYzpkZXJieTptZW1vcnk6dGVzdGRiO2NyZWF0ZT10cnVlCiBkcml2ZXI9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvaDItZGF0YXNvdXJjZS5wcm9wZXJ0aWVzIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL2gyLWRhdGFzb3VyY2UucHJvcGVydGllcwppbmRleCAwMTczM2M1Li5iOTI4Y2Q5IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvaDItZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9oMi1kYXRhc291cmNlLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogZW5hYmxlZD10cnVlCiB1cmw9amRiYzpoMjptZW06dGVzdAogZHJpdmVyPW9yZy5oMi5Ecml2ZXIKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLnhtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLnhtbAppbmRleCBkMDU3OTIyLi41MmJmMWM1IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay54bWwKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2sueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Y29uZmlndXJhdGlvbj4KIAogICAgIDxhcHBlbmRlciBuYW1lPSJzdGRvdXQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLkNvbnNvbGVBcHBlbmRlciI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvbXlzcWwtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL215c3FsLWRhdGFzb3VyY2UucHJvcGVydGllcwppbmRleCA4MjgwYjExLi40Y2I3ZGJhIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvbXlzcWwtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCisrKyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9teXNxbC1kYXRhc291cmNlLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogZW5hYmxlZD10cnVlCiB1cmw9amRiYzpteXNxbDovL2xvY2FsaG9zdDozMzA2L2pkYmNfdGVzdF9kYj9wcm9maWxlU1FMPXRydWUKIGRyaXZlcj1jb20ubXlzcWwuamRiYy5Ecml2ZXIKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9wb3N0Z3Jlc3FsLWRhdGFzb3VyY2UucHJvcGVydGllcyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9wb3N0Z3Jlc3FsLWRhdGFzb3VyY2UucHJvcGVydGllcwppbmRleCBhOTA2ZDg0Li5mN2Q3YWQ1IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvcG9zdGdyZXNxbC1kYXRhc291cmNlLnByb3BlcnRpZXMKKysrIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL3Bvc3RncmVzcWwtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGVuYWJsZWQ9dHJ1ZQogdXJsPWpkYmM6cG9zdGdyZXNxbDovL2xvY2FsaG9zdDo1NDMyL2pkYmNfdGVzdF9kYgogZHJpdmVyPW9yZy5wb3N0Z3Jlc3FsLkRyaXZlcgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL3NxbGl0ZS1kYXRhc291cmNlLnByb3BlcnRpZXMgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvc3FsaXRlLWRhdGFzb3VyY2UucHJvcGVydGllcwppbmRleCA5NDJkYWViLi4zNmFjMTU1IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvc3FsaXRlLWRhdGFzb3VyY2UucHJvcGVydGllcworKysgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvc3FsaXRlLWRhdGFzb3VyY2UucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBlbmFibGVkPXRydWUKIHVybD1qZGJjOnNxbGl0ZTo6bWVtb3J5OgogZHJpdmVyPW9yZy5zcWxpdGUuSkRCQwpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvTk9USUNFIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjZiNGFmLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L05PVElDRQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi1RaTRqIFZvbGRlbW9ydCBFbnRpdHkgU3RvcmUgRXh0ZW5zaW9uCi1Db3B5cmlnaHQgMjAwNy0yMDEwLCBUaGUgUWk0aiBEZXZlbG9wbWVudCBUZWFtIG9mIGluZGl2aWR1YWxzLgotCi1TZWUgaHR0cDovL3d3dy5xaTRqLm9yZy9jb250cmlidXRvcnMuaHRtbCBmb3IgbGlzdCBvZiBvZiBpbmRpdmlkdWFscy4KLUFsc28gc2VlIGVhY2ggZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBDb3B5cmlnaHQgY2xhaW1zLgotCi1RaTRqIGlzIGEgY29tbXVuaXR5IGFnZ3JlZ2F0ZWQgd29ya3MgdW5kZXIgQ29weXJpZ2h0IGxhdy4KLUFsbCBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgd29ya3MgYXQgUWk0aiBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLUFwYWNoZSBMaWNlbnNlIHZlciAyLjAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzCi0KLUJlbG93IGZvbGxvd3MgUHJvamVjdCBWb2xkZW1vcnRzIE5PVElDRSBjb250ZW50LCBvbiB3aGljaCB0aGlzIG1vZHVsZSBkZXBlbmRzLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIG1vZHVsZSB1c2VzIFByb2plY3QgVm9sZGVtb3J0LCBkZXZlbG9wZWQgYXQgaHR0cDovL3d3dy5wcm9qZWN0LXZvbGRlbW9ydC5vcmcKLXVuZGVyIEFwYWNoZSBMaWNlbnNlIDIuMC4gSG93ZXZlciwgUHJvamVjdCBWb2xkZW1vcnQgaW4gdHVybiBkZXBlbmRzIG9uIG90aGVyCi1zb2Z0d2FyZSwgd2l0aCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gYmUgcmVzcGVjdGVkLgotCi0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICA9PSAgTk9USUNFIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgc2VjdGlvbiA0ZCBvZiAgICAgICAgICAgICAgICAgICAgID09Ci0gICA9PSAgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09Ci0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoaXMgcHJvZHVjdCBpbmNsdWRlcyB0aGUgbGlicmFyaWVzCi0gIEF2cm8KLSAgY29tbW9ucy1jb2RlYwotICBjb21tb25zLWNvbGxlY3Rpb25zCi0gIGNvbW1vbnMtZGJjcAotICBjb21tb25zLWh0dHBjbGllbnQKLSAgY29tbW9ucy1pbwotICBjb21tb25zLWxhbmcKLSAgY29tbW9ucy1sb2dnaW5nCi0gIGNvbW1vbnMtcG9vbAotICBjYXRhbGluYS1hbnQKLSAgc2VydmxldC1hcGkKLSAgdmVsb2NpdHkKLSAgeGVyY2VzCi0gIGxpYnRocmlmdAotICBhbGwgb2Ygd2hpY2ggYXJlIHNvZnR3YXJlIGRldmVsb3BlZCBieSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pCi0KLVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBnb29nbGUtY29sbGVjdGlvbnMgYW5kIHByb3RvY29sIGJ1ZmZlcnMsIHR3byBsaWJyYXJpZXMgZGV2ZWxvcGVkIGJ5IEdvb2dsZSAoaHR0cDovL3d3dy5nb29nbGUuY29tLCBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWNvbGxlY3Rpb25zLyBhbmQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hcGlzL3Byb3RvY29sYnVmZmVycy8pLgotCi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgamRvbSwgYSBsaWJyYXJ5IGRldmVsb3BlZCBieSBqZG9tLm9yZy4KLQotVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGpvcHQtc2ltcGxlLCBhIGxpYnJhcnkgZm9yIHBhcnNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMgKGh0dHA6Ly9qb3B0LXNpbXBsZS5zb3VyY2Vmb3JnZS5uZXQvKS4KLQotVGhpcyBwcm9kdWN0IGluY2x1ZGVzIEphY2tzb24sIGEgSlNPTiBwcm9jZXNzb3IgKGh0dHA6Ly9qYWNrc29uLmNvZGVoYXVzLm9yZy8pLgotCi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgUGFyYU5hbWVyLCBhIGxpYnJhcnkgdGhhdCBhbGxvd3MgdGhlIHBhcmFtZXRlciBuYW1lcyBvZiBub24tcHJpdmF0ZSBtZXRob2RzIGFuZCBjb25zdHJ1Y3RvcnMgdG8gYmUgYWNjZXNzZWQgYXQgcnVudGltZSAoaHR0cDovL3BhcmFuYW1lci5jb2RlaGF1cy5vcmcvKS4KLQotVGhpcyBwcm9kdWN0IGluY2x1ZGVzIEJEQiwgSmF2YSBlZGl0aW9uLCBBIGxpYnJhcnkgZGV2ZWxvcGVkIGJ5IE9yYWNsZSAoaHR0cDovL3d3dy5vcmFjbGUuY29tL2RhdGFiYXNlL2JlcmtlbGV5LWRiL2plL2luZGV4Lmh0bWwpLCB3aGljaCBpbmNsdWRlcwotdGhlIGZvbGxvd2luZyBsaWNlbnNlIGluZm9ybWF0aW9uOgotCi09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ci1UaGUgZm9sbG93aW5nIGlzIHRoZSBsaWNlbnNlIHRoYXQgYXBwbGllcyB0byB0aGlzIGNvcHkgb2YgdGhlIEJlcmtlbGV5Ci1EQiBKYXZhIEVkaXRpb24gc29mdHdhcmUuICBGb3IgYSBsaWNlbnNlIHRvIHVzZSB0aGUgQmVya2VsZXkgREIgSmF2YQotRWRpdGlvbiBzb2Z0d2FyZSB1bmRlciBjb25kaXRpb25zIG90aGVyIHRoYW4gdGhvc2UgZGVzY3JpYmVkIGhlcmUsIG9yCi10byBwdXJjaGFzZSBzdXBwb3J0IGZvciB0aGlzIHNvZnR3YXJlLCBwbGVhc2UgY29udGFjdCBPcmFjbGUgYXQKLWJlcmtlbGV5ZGItaW5mb191c0BvcmFjbGUuY29tLgotCi09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDggT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIFJlZGlzdHJpYnV0aW9ucyBpbiBhbnkgZm9ybSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IGluZm9ybWF0aW9uIG9uCi0gKiAgICBob3cgdG8gb2J0YWluIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGZvciB0aGUgREIgc29mdHdhcmUgYW5kIGFueQotICogICAgYWNjb21wYW55aW5nIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgREIgc29mdHdhcmUuICBUaGUgc291cmNlIGNvZGUKLSAqICAgIG11c3QgZWl0aGVyIGJlIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGZvciBubwotICogICAgbW9yZSB0aGFuIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiBwbHVzIGEgbm9taW5hbCBmZWUsIGFuZCBtdXN0IGJlCi0gKiAgICBmcmVlbHkgcmVkaXN0cmlidXRhYmxlIHVuZGVyIHJlYXNvbmFibGUgY29uZGl0aW9ucy4gIEZvciBhbgotICogICAgZXhlY3V0YWJsZSBmaWxlLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyB0aGUgc291cmNlIGNvZGUgZm9yIGFsbAotICogICAgbW9kdWxlcyBpdCBjb250YWlucy4gIEl0IGRvZXMgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgb3IKLSAqICAgIGZpbGVzIHRoYXQgdHlwaWNhbGx5IGFjY29tcGFueSB0aGUgbWFqb3IgY29tcG9uZW50cyBvZiB0aGUgb3BlcmF0aW5nCi0gKiAgICBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgZmlsZSBydW5zLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgT1JBQ0xFIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi0gKiBOT04tSU5GUklOR0VNRU5ULCBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE9SQUNMRSBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgotICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCi0gKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQotICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgotICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0KLS8qKioKLSAqIEFTTTogYSB2ZXJ5IHNtYWxsIGFuZCBmYXN0IEphdmEgYnl0ZWNvZGUgbWFuaXB1bGF0aW9uIGZyYW1ld29yawotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgSU5SSUEsIEZyYW5jZSBUZWxlY29tCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGpldHR5LCBkZXZlbG9wZWQgYnkgbW9ydGJheS5vcmcuCi0KLVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBqdW5pdCwgZGV2ZWxvcGVkIGJ5IGp1bml0Lm9yZwotCi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgdGhlIENPTFQgbGlicmFyeSBmb3IgbnVtZXJpY2FsIGNvbXB1dGF0aW9uIGRldmVsb3BlZCBieSBDRVJOOgotCi0gICAgUGFja2FnZXMgY2Vybi5jb2x0KiAsIGNlcm4uamV0KiwgY2Vybi5jbGhlcAotCi0gICAgICAgIENvcHlyaWdodCAoYykgMTk5OSBDRVJOIC0gRXVyb3BlYW4gT3JnYW5pemF0aW9uIGZvciBOdWNsZWFyIFJlc2VhcmNoLgotCi0gICAgICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAotICAgICAgICAgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLSAgICAgICAgIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gQ0VSTiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCi0gICAgICAgICB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkIHdhcnJhbnR5LgotCi1DT0xUIGluIHR1cm4gaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBwYWNrYWdlczoKLQotICAgIFBhY2thZ2VzIGhlcC5haWRhLioKLQotICAgICAgICBXcml0dGVuIGJ5IFBhdmVsIEJpbmtvLCBEaW5vIEZlcnJlcm8gTWVybGlubywgV29sZmdhbmcgSG9zY2hlaywgVG9ueSBKb2huc29uLCBBbmRyZWFzIFBmZWlmZmVyLCBhbmQgb3RoZXJzLiBDaGVjayB0aGUgRnJlZUhFUCBob21lIHBhZ2UKLSAgICAgICAgZm9yIG1vcmUgaW5mby4gUGVybWlzc2lvbiB0byB1c2UgYW5kL29yIHJlZGlzdHJpYnV0ZSB0aGlzIHdvcmsgaXMgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExHUEwgTGljZW5zZSwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQKLSAgICAgICAgYW55IHVzYWdlIHJlbGF0ZWQgdG8gbWlsaXRhcnkgYXBwbGljYXRpb25zIGlzIGV4cHJlc3NseSBmb3JiaWRkZW4uIFRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcwotICAgICAgICBsaWNlbnNlIGFyZSBwcm92aWRlZCB3aXRoIG5vIHdhcnJhbnR5LgotCi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgYSBjb3B5IG9mIHNsZjRqIG1hZGUgYnkgc2xmNGoub3JnLCB3aGljaCBjb250YWlucyB0aGUgZm9sbG93aW5nIHN0YXRlbWVudDoKLSAgICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBRT1MuY2ggQWxsIHJpZ2h0cyByZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsCi0gICAgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICAgIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwKLSAgICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgotICAgIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQKLSAgICBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQQotICAgIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKLSAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0gICAgV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0KLVRoaXMgcHJvamVjdCBpbmNsdWRlcyB0aGUgdGhlIFhKRE0gZHJpdmVyIGZvciBNb25nb0RCIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vZ2l0aHViLmNvbS9nZWlyL21vbmdvLWphdmEtZHJpdmVyL3RyZWUvbWFzdGVyCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvYnVpbGQuZ3JhZGxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTg0OTExLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L2J1aWxkLmdyYWRsZQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogVm9sZGVtb3J0IEVudGl0eVN0b3JlIEV4dGVuc2lvbiIKLQotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogRXh0ZW5zaW9uIC0gRW50aXR5U3RvcmUgLSBWb2xkZW1vcnQiIH19Ci0KLXJlcG9zaXRvcmllcyB7Ci0gICAgbWF2ZW4geyBuYW1lICdjbG9qYXJzLXJlcG8nOyB1cmwgJ2h0dHA6Ly9jbG9qYXJzLm9yZy9yZXBvJyB9Ci0gICAgbWF2ZW4geyBuYW1lICdvcmFjbGUtcmVwbyc7IHVybCAnaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vbWF2ZW4nIH0KLX0KLQotZGVwZW5kZW5jaWVzIHsKLQotICAgIGNvbXBpbGUgcHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKQotICAgIGNvbXBpbGUgcHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LmxvY2tpbmciKQotICAgIGNvbXBpbGUgbGlicmFyaWVzLnZvbGRlbW9ydAotICAgIGNvbXBpbGUgbGlicmFyaWVzLmd1YXZhCi0KLSAgICB0ZXN0Q29tcGlsZSBwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikKLSAgICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24udmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24iKSkKLQotICAgIHRlc3RSdW50aW1lIHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpCi0gICAgdGVzdFJ1bnRpbWUgbGlicmFyaWVzLmxvZ2JhY2sKLSAgICB0ZXN0UnVudGltZSBsaWJyYXJpZXMuc2xlZXB5Y2F0Ci0gICAgdGVzdFJ1bnRpbWUgbGlicmFyaWVzLmxvZzRqCi0gICAgdGVzdFJ1bnRpbWUgbGlicmFyaWVzLmpkb20KLSAgICB0ZXN0UnVudGltZSBsaWJyYXJpZXMudmVsb2NpdHkKLSAgICB0ZXN0UnVudGltZSBsaWJyYXJpZXMuY29tbW9uc19jb2RlYwotICAgIHRlc3RSdW50aW1lIGxpYnJhcmllcy5jb21tb25zX2RiY3AKLSAgICB0ZXN0UnVudGltZSBsaWJyYXJpZXMuY29tbW9uc19pbwotICAgIHRlc3RSdW50aW1lIGxpYnJhcmllcy5jb21tb25zX2xhbmcKLQotfQotCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9kZXYtc3RhdHVzLnhtbCBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L2Rldi1zdGF0dXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTIyMTc1Li4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L2Rldi1zdGF0dXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCi0gICAgICAgIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZCI+Ci0gIDxzdGF0dXM+Ci0gICAgICAgIDwhLS1ub25lLGVhcmx5LGJldGEsc3RhYmxlLG1hdHVyZS0tPgotICAgICAgICA8Y29kZWJhc2U+YmV0YTwvY29kZWJhc2U+Ci0KLSAgICAgICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgICAgIDxkb2N1bWVudGF0aW9uPm5vbmU8L2RvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgPCEtLSBub25lLCBzb21lLCBnb29kLCBjb21wbGV0ZSAtLT4KLSAgICAgICAgPHVuaXR0ZXN0cz5zb21lPC91bml0dGVzdHM+Ci0gICAgPC9zdGF0dXM+Ci0gICAgPGxpY2Vuc2VzPgotICAgICAgICA8bGljZW5zZT5BTHYyPC9saWNlbnNlPgotICAgIDwvbGljZW5zZXM+Ci08L21vZHVsZT4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L3NyYy9kb2NzL2VzLXZvbGRlbW9ydC50eHQgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvZG9jcy9lcy12b2xkZW1vcnQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZThiZjQyLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L3NyYy9kb2NzL2VzLXZvbGRlbW9ydC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1bW2V4dGVuc2lvbi1lcy12b2xkZW1vcnQsIFZvbGRlbW9ydCBFbnRpdHlTdG9yZV1dCi09IFZvbGRlbW9ydCBFbnRpdHlTdG9yZSA9Ci0KLVtkZXZzdGF0dXNdCi0tLS0tLS0tLS0tLS0tLQotc291cmNlPWV4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L2Rldi1zdGF0dXMueG1sCi0tLS0tLS0tLS0tLS0tLQotCi1Wb2xkZW1vcnQgRW50aXR5U3RvcmUKLQotTk9URTogVGhpcyBFeHRlbnNpb24gaGFzIG5vIGRvY3VtZW50YXRpb24geWV0LiBMZWFybiBob3cgdG8gY29udHJpYnV0ZSBpbiA8PGNvbW11bml0eS1kb2NzPj4uCi0KLWluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3ZvbGRlbW9ydC9Wb2xkZW1vcnRDb25maWd1cmF0aW9uLmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3ZvbGRlbW9ydC9Wb2xkZW1vcnRDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZTVlYTUuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS92b2xkZW1vcnQvVm9sZGVtb3J0Q29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgTmljbGFzIEhlZGhtYW4gPG5pY2xhc0BoZWRobWFuLm9yZz4uCi0gKgotICogTGljZW5zZWQgIHVuZGVyIHRoZSAgQXBhY2hlIExpY2Vuc2UsICBWZXJzaW9uIDIuMCAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlICB0aGlzIGZpbGUgIGV4Y2VwdCBpbiAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUudm9sZGVtb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5PcHRpb25hbDsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29uZmlndXJhdGlvbi5Db25maWd1cmF0aW9uQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKLQotcHVibGljIGludGVyZmFjZSBWb2xkZW1vcnRDb25maWd1cmF0aW9uIGV4dGVuZHMgQ29uZmlndXJhdGlvbkNvbXBvc2l0ZQotewotICAgIEBPcHRpb25hbAotICAgIFByb3BlcnR5PFN0cmluZz4gc3RvcmVOYW1lKCk7Ci0KLS8vICAgIEBPcHRpb25hbAotLy8gICAgUHJvcGVydHk8SW50ZWdlcj4gY2xpZW50Wm9uZUlkKCk7Ci0vLwotICAgIEBPcHRpb25hbAotICAgIFByb3BlcnR5PEludGVnZXI+IGNvbm5lY3Rpb25UaW1lb3V0KCk7Ci0KLSAgICBAT3B0aW9uYWwKLSAgICBQcm9wZXJ0eTxMaXN0PFN0cmluZz4+IGJvb3RzdHJhcFVybCgpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8Qm9vbGVhbj4gZW5hYmxlSm14KCk7Ci0KLS8vICAgIEBPcHRpb25hbAotLy8gICAgUHJvcGVydHk8Qm9vbGVhbj4gZW5hYmxlUGlwZWxpbmVSb3V0ZWRTdG9yZSgpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8TG9uZz4gZmFpbHVyZURldGVjdG9yQXN5bmNSZWNvdmVyeUludGVydmFsKCk7Ci0KLSAgICBAT3B0aW9uYWwKLSAgICBQcm9wZXJ0eTxMb25nPiBmYWlsdXJlRGV0ZWN0b3JCYW5uYWdlUGVyaW9kKCk7Ci0KLSAgICBAT3B0aW9uYWwKLSAgICBQcm9wZXJ0eTxMaXN0PFN0cmluZz4+IGZhaWx1cmVEZXRlY3RvckNhdGFzdHJvcGhpY0Vycm9yVHlwZSgpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8U3RyaW5nPiBmYWlsdXJlRGV0ZWN0b3JJbXBsZW1lbnRhdGlvbigpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8TG9uZz4gZmFpbHVyZURldGVjdG9yZVJlcXVlc3RMZW5ndGhUaHJlc2hvbGQoKTsKLQotICAgIEBPcHRpb25hbAotICAgIFByb3BlcnR5PEludGVnZXI+IGZhaWx1cmVEZXRlY3RvclRocmVzaG9sZCgpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8SW50ZWdlcj4gZmFpbHVyZURldGVjdG9yVGhyZXNob2xkQ291bnRNaW5pbXVtKCk7Ci0KLSAgICBAT3B0aW9uYWwKLSAgICBQcm9wZXJ0eTxMb25nPiBmYWlsdXJlRGV0ZWN0b3JUaHJlYXNob2xkSW50ZXJ2YWwoKTsKLQotICAgIEBPcHRpb25hbAotICAgIFByb3BlcnR5PEludGVnZXI+IG1heEJvb3RzdHJhcFJldHJpZXMoKTsKLQotICAgIEBPcHRpb25hbAotICAgIFByb3BlcnR5PEludGVnZXI+IHNldE1heENvbm5lY3Rpb25zUGVyTm9kZSgpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8SW50ZWdlcj4gbWF4UXVldWVSZXF1ZXN0cygpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8SW50ZWdlcj4gbWF4VGhyZWFkcygpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8SW50ZWdlcj4gbWF4VG90YWxDb25uZWN0aW9ucygpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8U3RyaW5nPiByZXF1ZXN0Rm9ybWF0VHlwZSgpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8U3RyaW5nPiByb3V0aW5nVGllcigpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8SW50ZWdlcj4gcm91dGluZ1RpbWVvdXQoKTsKLQotLy8gICAgQE9wdGlvbmFsCi0vLyAgICBQcm9wZXJ0eTxJbnRlZ2VyPiBzZWxlY3RvcnMoKTsKLQotICAgIEBPcHRpb25hbAotICAgIFByb3BlcnR5PEludGVnZXI+IHNvY2tldEJ1ZmZlclNpemUoKTsKLQotICAgIEBPcHRpb25hbAotICAgIFByb3BlcnR5PEJvb2xlYW4+IHNvY2tldEtlZXBBbGl2ZSgpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8SW50ZWdlcj4gc29ja2V0VGltZW91dCgpOwotCi0gICAgQE9wdGlvbmFsCi0gICAgUHJvcGVydHk8SW50ZWdlcj4gdGhyZWFkSWRsZVRpbWUoKTsKLQotfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS92b2xkZW1vcnQvVm9sZGVtb3J0RW50aXR5U3RvcmVNaXhpbi5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS92b2xkZW1vcnQvVm9sZGVtb3J0RW50aXR5U3RvcmVNaXhpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTFkMTYxLi4wMDAwMDAwCi0tLSBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L1ZvbGRlbW9ydEVudGl0eVN0b3JlTWl4aW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0vKiAgQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4uCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLnZvbGRlbW9ydDsKLQotaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWFkV3JpdGVMb2NrOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQWN0aXZhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5pby5JbnB1dDsKLWltcG9ydCBvcmcucWk0ai5pby5PdXRwdXQ7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuaGVscGVycy5NYXBFbnRpdHlTdG9yZTsKLWltcG9ydCB2b2xkZW1vcnQuY2xpZW50Lio7Ci1pbXBvcnQgdm9sZGVtb3J0LmNsaWVudC5wcm90b2NvbC5SZXF1ZXN0Rm9ybWF0VHlwZTsKLWltcG9ydCB2b2xkZW1vcnQudmVyc2lvbmluZy5PYnNvbGV0ZVZlcnNpb25FeGNlcHRpb247Ci1pbXBvcnQgdm9sZGVtb3J0LnZlcnNpb25pbmcuVmVyc2lvbmVkOwotCi0vKioKLSAqIEpEQk0gaW1wbGVtZW50YXRpb24gb2YgU2VyaWFsaXphdGlvblN0b3JlCi0gKi8KLXB1YmxpYyBjbGFzcyBWb2xkZW1vcnRFbnRpdHlTdG9yZU1peGluCi0gICAgICAgIGltcGxlbWVudHMgU2VydmljZUFjdGl2YXRpb24sIE1hcEVudGl0eVN0b3JlCi17Ci0gICBAVGhpcwotICAgcHJpdmF0ZSBSZWFkV3JpdGVMb2NrIGxvY2s7Ci0KLSAgIEBUaGlzCi0gICBwcml2YXRlIENvbmZpZ3VyYXRpb248Vm9sZGVtb3J0Q29uZmlndXJhdGlvbj4gY29uZmlnOwotCi0gICBwcml2YXRlIFN0b3JlQ2xpZW50PFN0cmluZywgYnl0ZVtdPiBjbGllbnQ7Ci0gICBwcml2YXRlIFN0b3JlQ2xpZW50RmFjdG9yeSBmYWN0b3J5OwotCi0gICBAT3ZlcnJpZGUKLSAgIHB1YmxpYyB2b2lkIGFjdGl2YXRlU2VydmljZSgpCi0gICAgICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgIHsKLSAgICAgIFZvbGRlbW9ydENvbmZpZ3VyYXRpb24gY29uZiA9IGNvbmZpZy5nZXQoKTsKLSAgICAgIENsaWVudENvbmZpZyBjb25maWcgPSBuZXcgQ2xpZW50Q29uZmlnKCk7Ci0gICAgICB7Ci0gICAgICAgICBMaXN0PFN0cmluZz4gdmFsdWUgPSBjb25mLmJvb3RzdHJhcFVybCgpLmdldCgpOwotICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBjb25maWcuc2V0Qm9vdHN0cmFwVXJscyh2YWx1ZSk7Ci0gICAgICAgICB9IGVsc2UKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbmZpZy5zZXRCb290c3RyYXBVcmxzKCJ0Y3A6Ly9sb2NhbGhvc3Q6ODU4MSIpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgSW50ZWdlciBjb25uZWN0aW9uVGltZW91dCA9IGNvbmYuY29ubmVjdGlvblRpbWVvdXQoKS5nZXQoKTsKLSAgICAgICAgIGlmIChjb25uZWN0aW9uVGltZW91dCAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldENvbm5lY3Rpb25UaW1lb3V0KGNvbm5lY3Rpb25UaW1lb3V0LCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgQm9vbGVhbiBlbmFibGUgPSBjb25mLmVuYWJsZUpteCgpLmdldCgpOwotICAgICAgICAgaWYgKGVuYWJsZSAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldEVuYWJsZUpteChlbmFibGUpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgTG9uZyByZWNvdmVyeUludGVydmFsID0gY29uZi5mYWlsdXJlRGV0ZWN0b3JBc3luY1JlY292ZXJ5SW50ZXJ2YWwoKS5nZXQoKTsKLSAgICAgICAgIGlmIChyZWNvdmVyeUludGVydmFsICE9IG51bGwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBjb25maWcuc2V0RmFpbHVyZURldGVjdG9yQXN5bmNSZWNvdmVyeUludGVydmFsKHJlY292ZXJ5SW50ZXJ2YWwpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgTG9uZyBiYW5uYWdlUGVyaW9kID0gY29uZi5mYWlsdXJlRGV0ZWN0b3JCYW5uYWdlUGVyaW9kKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAoYmFubmFnZVBlcmlvZCAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldEZhaWx1cmVEZXRlY3RvckJhbm5hZ2VQZXJpb2QoYmFubmFnZVBlcmlvZCk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgICBMaXN0PFN0cmluZz4gZmFpbHVyZURldGVjdG9yQ2F0YXN0cm9waGljRXJyb3JUeXBlcyA9IGNvbmYuZmFpbHVyZURldGVjdG9yQ2F0YXN0cm9waGljRXJyb3JUeXBlKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAoZmFpbHVyZURldGVjdG9yQ2F0YXN0cm9waGljRXJyb3JUeXBlcyAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldEZhaWx1cmVEZXRlY3RvckNhdGFzdHJvcGhpY0Vycm9yVHlwZXMoZmFpbHVyZURldGVjdG9yQ2F0YXN0cm9waGljRXJyb3JUeXBlcyk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgICBTdHJpbmcgZmFpbHVyZURldGVjdG9ySW1wbGVtZW50YXRpb24gPSBjb25mLmZhaWx1cmVEZXRlY3RvckltcGxlbWVudGF0aW9uKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAoZmFpbHVyZURldGVjdG9ySW1wbGVtZW50YXRpb24gIT0gbnVsbCkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbmZpZy5zZXRGYWlsdXJlRGV0ZWN0b3JJbXBsZW1lbnRhdGlvbihmYWlsdXJlRGV0ZWN0b3JJbXBsZW1lbnRhdGlvbik7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgICBMb25nIGZhaWx1cmVEZXRlY3RvclJlcXVlc3RMZW5ndGhUaHJlc2hvbGQgPSBjb25mLmZhaWx1cmVEZXRlY3RvcmVSZXF1ZXN0TGVuZ3RoVGhyZXNob2xkKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAoZmFpbHVyZURldGVjdG9yUmVxdWVzdExlbmd0aFRocmVzaG9sZCAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldEZhaWx1cmVEZXRlY3RvclJlcXVlc3RMZW5ndGhUaHJlc2hvbGQoZmFpbHVyZURldGVjdG9yUmVxdWVzdExlbmd0aFRocmVzaG9sZCk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgICBJbnRlZ2VyIGZhaWx1cmVEZXRlY3RvclRocmVzaG9sZCA9IGNvbmYuZmFpbHVyZURldGVjdG9yVGhyZXNob2xkKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAoZmFpbHVyZURldGVjdG9yVGhyZXNob2xkICE9IG51bGwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBjb25maWcuc2V0RmFpbHVyZURldGVjdG9yVGhyZXNob2xkKGZhaWx1cmVEZXRlY3RvclRocmVzaG9sZCk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgICBJbnRlZ2VyIGRldGVjdG9yVGhyZXNob2xkQ291bnRNaW5pbXVtID0gY29uZi5mYWlsdXJlRGV0ZWN0b3JUaHJlc2hvbGRDb3VudE1pbmltdW0oKS5nZXQoKTsKLSAgICAgICAgIGlmIChkZXRlY3RvclRocmVzaG9sZENvdW50TWluaW11bSAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldEZhaWx1cmVEZXRlY3RvclRocmVzaG9sZENvdW50TWluaW11bShkZXRlY3RvclRocmVzaG9sZENvdW50TWluaW11bSk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgICBMb25nIGZhaWx1cmVEZXRlY3RvclRocmVzaG9sZEludGVydmFsID0gY29uZi5mYWlsdXJlRGV0ZWN0b3JUaHJlYXNob2xkSW50ZXJ2YWwoKS5nZXQoKTsKLSAgICAgICAgIGlmIChmYWlsdXJlRGV0ZWN0b3JUaHJlc2hvbGRJbnRlcnZhbCAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldEZhaWx1cmVEZXRlY3RvclRocmVzaG9sZEludGVydmFsKGZhaWx1cmVEZXRlY3RvclRocmVzaG9sZEludGVydmFsKTsKLSAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHsKLSAgICAgICAgIEludGVnZXIgbWF4Qm9vdHN0cmFwUmV0cmllcyA9IGNvbmYubWF4Qm9vdHN0cmFwUmV0cmllcygpLmdldCgpOwotICAgICAgICAgaWYgKG1heEJvb3RzdHJhcFJldHJpZXMgIT0gbnVsbCkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbmZpZy5zZXRNYXhCb290c3RyYXBSZXRyaWVzKG1heEJvb3RzdHJhcFJldHJpZXMpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgSW50ZWdlciBtYXhDb25uZWN0aW9uc1Blck5vZGUgPSBjb25mLnNldE1heENvbm5lY3Rpb25zUGVyTm9kZSgpLmdldCgpOwotICAgICAgICAgaWYgKG1heENvbm5lY3Rpb25zUGVyTm9kZSAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldE1heENvbm5lY3Rpb25zUGVyTm9kZShtYXhDb25uZWN0aW9uc1Blck5vZGUpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgSW50ZWdlciBtYXhRdWV1ZVJlcXVlc3RzID0gY29uZi5tYXhRdWV1ZVJlcXVlc3RzKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAobWF4UXVldWVSZXF1ZXN0cyAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldE1heFF1ZXVlZFJlcXVlc3RzKG1heFF1ZXVlUmVxdWVzdHMpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgSW50ZWdlciBtYXhUaHJlYWRzID0gY29uZi5tYXhUaHJlYWRzKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAobWF4VGhyZWFkcyAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldE1heFRocmVhZHMobWF4VGhyZWFkcyk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgICBJbnRlZ2VyIG1heFRvdGFsQ29ubmVjdGlvbnMgPSBjb25mLm1heFRvdGFsQ29ubmVjdGlvbnMoKS5nZXQoKTsKLSAgICAgICAgIGlmIChtYXhUb3RhbENvbm5lY3Rpb25zICE9IG51bGwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBjb25maWcuc2V0TWF4VG90YWxDb25uZWN0aW9ucyhtYXhUb3RhbENvbm5lY3Rpb25zKTsKLSAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHsKLSAgICAgICAgIFN0cmluZyBmb3JtYXRUeXBlQ29kZSA9IGNvbmYucmVxdWVzdEZvcm1hdFR5cGUoKS5nZXQoKTsKLSAgICAgICAgIGlmIChmb3JtYXRUeXBlQ29kZSAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgUmVxdWVzdEZvcm1hdFR5cGUgZm9ybWF0VHlwZSA9IFJlcXVlc3RGb3JtYXRUeXBlLmZyb21Db2RlKGZvcm1hdFR5cGVDb2RlKTsKLSAgICAgICAgICAgIGNvbmZpZy5zZXRSZXF1ZXN0Rm9ybWF0VHlwZShmb3JtYXRUeXBlKTsKLSAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHsKLSAgICAgICAgIFN0cmluZyByb3V0aW5nVGllclN0cmluZyA9IGNvbmYucm91dGluZ1RpZXIoKS5nZXQoKTsKLSAgICAgICAgIGlmIChyb3V0aW5nVGllclN0cmluZyAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgUm91dGluZ1RpZXIgcm91dGluZ1RpZXIgPSBSb3V0aW5nVGllci5mcm9tRGlzcGxheShyb3V0aW5nVGllclN0cmluZyk7Ci0gICAgICAgICAgICBjb25maWcuc2V0Um91dGluZ1RpZXIocm91dGluZ1RpZXIpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgSW50ZWdlciByb3V0aW5nVGltZW91dCA9IGNvbmYucm91dGluZ1RpbWVvdXQoKS5nZXQoKTsKLSAgICAgICAgIGlmIChyb3V0aW5nVGltZW91dCAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldFJvdXRpbmdUaW1lb3V0KHJvdXRpbmdUaW1lb3V0LCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgSW50ZWdlciBidWZmZXJTaXplID0gY29uZi5zb2NrZXRCdWZmZXJTaXplKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldFNvY2tldEJ1ZmZlclNpemUoYnVmZmVyU2l6ZSk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgICBCb29sZWFuIHNvY2tldEtlZXBBbGl2ZSA9IGNvbmYuc29ja2V0S2VlcEFsaXZlKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAoc29ja2V0S2VlcEFsaXZlICE9IG51bGwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBjb25maWcuc2V0U29ja2V0S2VlcEFsaXZlKHNvY2tldEtlZXBBbGl2ZSk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgICBJbnRlZ2VyIHNvY2tldFRpbWVvdXQgPSBjb25mLnNvY2tldFRpbWVvdXQoKS5nZXQoKTsKLSAgICAgICAgIGlmIChzb2NrZXRUaW1lb3V0ICE9IG51bGwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBjb25maWcuc2V0U29ja2V0VGltZW91dChzb2NrZXRUaW1lb3V0LCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAgSW50ZWdlciBpZGxlVGltZSA9IGNvbmYudGhyZWFkSWRsZVRpbWUoKS5nZXQoKTsKLSAgICAgICAgIGlmIChpZGxlVGltZSAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgY29uZmlnLnNldFRocmVhZElkbGVUaW1lKGlkbGVUaW1lLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgZmFjdG9yeSA9IG5ldyBTb2NrZXRTdG9yZUNsaWVudEZhY3RvcnkoY29uZmlnKTsKLSAgICAgIC8vIGNyZWF0ZSBhIGNsaWVudCB0aGF0IGV4ZWN1dGVzIG9wZXJhdGlvbnMgb24gYSBzaW5nbGUgc3RvcmUKLSAgICAgIFN0cmluZyBzdG9yZU5hbWUgPSBjb25mLnN0b3JlTmFtZSgpLmdldCgpOwotICAgICAgaWYgKHN0b3JlTmFtZSA9PSBudWxsKQotICAgICAgICAgc3RvcmVOYW1lID0gInFpNGotZW50aXRpZXMiOwotICAgICAgY2xpZW50ID0gZmFjdG9yeS5nZXRTdG9yZUNsaWVudChzdG9yZU5hbWUpOwotCi0gICB9Ci0KLSAgIEBPdmVycmlkZQotICAgcHVibGljIHZvaWQgcGFzc2l2YXRlU2VydmljZSgpCi0gICAgICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgIHsKLSAgICAgIGZhY3RvcnkuY2xvc2UoKTsKLSAgIH0KLQotICAgIEBPdmVycmlkZQotICAgcHVibGljIFJlYWRlciBnZXQoRW50aXR5UmVmZXJlbmNlIGVudGl0eVJlZmVyZW5jZSkKLSAgICAgICAgICAgdGhyb3dzIEVudGl0eVN0b3JlRXhjZXB0aW9uCi0gICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgIFZlcnNpb25lZDxieXRlW10+IHZlcnNpb25lZCA9IGNsaWVudC5nZXQoZW50aXR5UmVmZXJlbmNlLmlkZW50aXR5KCkpOwotICAgICAgICAgaWYgKHZlcnNpb25lZCA9PSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eU5vdEZvdW5kRXhjZXB0aW9uKGVudGl0eVJlZmVyZW5jZSk7Ci0gICAgICAgICB9Ci0gICAgICAgICBieXRlW10gc2VyaWFsaXplZFN0YXRlID0gdmVyc2lvbmVkLmdldFZhbHVlKCk7Ci0gICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1JlYWRlcihuZXcgU3RyaW5nKHNlcmlhbGl6ZWRTdGF0ZSwgIlVURi04IikpOwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgIHRocm93IG5ldyBFbnRpdHlTdG9yZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgIH0KLQotICAgIEBPdmVycmlkZQotICAgcHVibGljIHZvaWQgYXBwbHlDaGFuZ2VzKE1hcENoYW5nZXMgY2hhbmdlcykKLSAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgIGNoYW5nZXMudmlzaXRNYXAobmV3IE1hcENoYW5nZXIoKQotICAgICAgICAgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgV3JpdGVyIG5ld0VudGl0eShmaW5hbCBFbnRpdHlSZWZlcmVuY2UgcmVmLCBFbnRpdHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nV3JpdGVyKDEwMDApCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBzdXBlci5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIHN0YXRlQXJyYXkgPSB0b1N0cmluZygpLmdldEJ5dGVzKCJVVEYtOCIpOwotICAgICAgICAgICAgICAgICAgICAgY2xpZW50LnB1dChyZWYuaWRlbnRpdHkoKSwgc3RhdGVBcnJheSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBXcml0ZXIgdXBkYXRlRW50aXR5KGZpbmFsIEVudGl0eVJlZmVyZW5jZSByZWYsIEVudGl0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1dyaXRlcigxMDAwKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgc3VwZXIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBzdGF0ZUFycmF5ID0gdG9TdHJpbmcoKS5nZXRCeXRlcygiVVRGLTgiKTsKLSAgICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LnB1dChyZWYuaWRlbnRpdHkoKSwgc3RhdGVBcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPYnNvbGV0ZVZlcnNpb25FeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29uY3VycmVudCBtb2RpZmljYXRpb24gYXR0ZW1wdGVkIGZvciAiICsgcmVmLmlkZW50aXR5KCkpOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmVFbnRpdHkoRW50aXR5UmVmZXJlbmNlIHJlZiwgRW50aXR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRW50aXR5Tm90Rm91bmRFeGNlcHRpb24KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGNsaWVudC5kZWxldGUocmVmLmlkZW50aXR5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgfSk7Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgSU9FeGNlcHRpb24pCi0gICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyAoSU9FeGNlcHRpb24pIGU7Ci0gICAgICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBFbnRpdHlTdG9yZUV4Y2VwdGlvbikKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IChFbnRpdHlTdG9yZUV4Y2VwdGlvbikgZTsKLSAgICAgICAgIH0gZWxzZQotICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCBlICk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgIHB1YmxpYyBJbnB1dDxSZWFkZXIsIElPRXhjZXB0aW9uPiBlbnRpdHlTdGF0ZXMoKQotICAgewotICAgICAgcmV0dXJuIG5ldyBJbnB1dDxSZWFkZXIsIElPRXhjZXB0aW9uPigpCi0gICAgICB7Ci0gICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgIHB1YmxpYyA8UmVjZWl2ZXJUaHJvd2FibGVUeXBlIGV4dGVuZHMgVGhyb3dhYmxlPiB2b2lkIHRyYW5zZmVyVG8oT3V0cHV0PD8gc3VwZXIgUmVhZGVyLCBSZWNlaXZlclRocm93YWJsZVR5cGU+IHJlY2VpdmVyVGhyb3dhYmxlVHlwZU91dHB1dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBSZWNlaXZlclRocm93YWJsZVR5cGUKLSAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE86IENhbid0IGdldCBob2xkIG9mIGFsbCBlbnRpdGllcywgdW5sZXNzIHN0b3JpbmcgYWxsIHRoZSBrZXlzIHNlcGFyYXRlbHksIHdoaWNoIGlzIGVub3Jtb3VzbHkgZXhwZW5zaXZlCi0gICAgICAgICB9Ci0gICAgICB9OwotICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L1ZvbGRlbW9ydEVudGl0eVN0b3JlU2VydmljZS5qYXZhIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS92b2xkZW1vcnQvVm9sZGVtb3J0RW50aXR5U3RvcmVTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYWZmNDEuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS92b2xkZW1vcnQvVm9sZGVtb3J0RW50aXR5U3RvcmVTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKiAgQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4uCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLnZvbGRlbW9ydDsKLQotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25jZXJuLkNvbmNlcm5zOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQWN0aXZhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkubG9ja2luZy5Mb2NraW5nQWJzdHJhY3RDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkNvbmN1cnJlbnRNb2RpZmljYXRpb25DaGVja0NvbmNlcm47Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0YXRlVmVyc2lvbnM7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlOwotaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkNvbmNlcm47Ci1pbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLmhlbHBlcnMuSlNPTk1hcEVudGl0eVN0b3JlQWN0aXZhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuaGVscGVycy5KU09OTWFwRW50aXR5U3RvcmVNaXhpbjsKLWltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuaGVscGVycy5TdGF0ZVN0b3JlOwotCi0vKioKLSAqIEVudGl0eVN0b3JlIHNlcnZpY2UgYmFja2VkIGJ5IFZvbGRlbW9ydC4KLSAqLwotCi1AQ29uY2VybnMoIHsgU3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Db25jZXJuLmNsYXNzLCBDb25jdXJyZW50TW9kaWZpY2F0aW9uQ2hlY2tDb25jZXJuLmNsYXNzIH0gKQotQE1peGlucyggeyBKU09OTWFwRW50aXR5U3RvcmVNaXhpbi5jbGFzcywgVm9sZGVtb3J0RW50aXR5U3RvcmVNaXhpbi5jbGFzcyB9ICkKLXB1YmxpYyBpbnRlcmZhY2UgVm9sZGVtb3J0RW50aXR5U3RvcmVTZXJ2aWNlCi0gICAgZXh0ZW5kcyBFbnRpdHlTdG9yZSwKLSAgICAgICAgICAgIEVudGl0eVN0YXRlVmVyc2lvbnMsCi0gICAgICAgICAgICBTdGF0ZVN0b3JlLAotICAgICAgICAgICAgU2VydmljZUNvbXBvc2l0ZSwKLSAgICAgICAgICAgIFNlcnZpY2VBY3RpdmF0aW9uLAotICAgICAgICAgICAgSlNPTk1hcEVudGl0eVN0b3JlQWN0aXZhdGlvbiwKLSAgICAgICAgICAgIExvY2tpbmdBYnN0cmFjdENvbXBvc2l0ZSwKLSAgICAgICAgICAgIENvbmZpZ3VyYXRpb24KLQotewotfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnRpdHlzdG9yZS92b2xkZW1vcnQvYXNzZW1ibHkvVm9sZGVtb3J0QXNzZW1ibGVyLmphdmEgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3ZvbGRlbW9ydC9hc3NlbWJseS9Wb2xkZW1vcnRBc3NlbWJsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmZmYxMS4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3ZvbGRlbW9ydC9hc3NlbWJseS9Wb2xkZW1vcnRBc3NlbWJsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgTmljbGFzIEhlZGhtYW4gPG5pY2xhc0BoZWRobWFuLm9yZz4uCi0gKgotICogTGljZW5zZWQgIHVuZGVyIHRoZSAgQXBhY2hlIExpY2Vuc2UsICBWZXJzaW9uIDIuMCAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlICB0aGlzIGZpbGUgIGV4Y2VwdCBpbiAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5xaTRqLmVudGl0eXN0b3JlLnZvbGRlbW9ydC5hc3NlbWJseTsKLQotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJsZXJzOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLlNlcnZpY2VEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5lbnRpdHlzdG9yZS52b2xkZW1vcnQuVm9sZGVtb3J0Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5lbnRpdHlzdG9yZS52b2xkZW1vcnQuVm9sZGVtb3J0RW50aXR5U3RvcmVTZXJ2aWNlOwotaW1wb3J0IG9yZy5xaTRqLnNwaS51dWlkLlV1aWRJZGVudGl0eUdlbmVyYXRvclNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBWb2xkZW1vcnRBc3NlbWJsZXIKLSAgICBleHRlbmRzIEFzc2VtYmxlcnMuVmlzaWJpbGl0eUlkZW50aXR5Q29uZmlnPFZvbGRlbW9ydEFzc2VtYmxlcj4KLXsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKLSAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCi0gICAgewotICAgICAgICBtb2R1bGUuc2VydmljZXMoIFV1aWRJZGVudGl0eUdlbmVyYXRvclNlcnZpY2UuY2xhc3MgKS52aXNpYmxlSW4oIHZpc2liaWxpdHkoKSApOwotICAgICAgICBTZXJ2aWNlRGVjbGFyYXRpb24gc2VydmljZSA9IG1vZHVsZS5zZXJ2aWNlcyggVm9sZGVtb3J0RW50aXR5U3RvcmVTZXJ2aWNlLmNsYXNzICkuCi0gICAgICAgICAgICB2aXNpYmxlSW4oIHZpc2liaWxpdHkoKSApLgotICAgICAgICAgICAgaW5zdGFudGlhdGVPblN0YXJ0dXAoKTsKLSAgICAgICAgaWYoIGhhc0lkZW50aXR5KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXJ2aWNlLmlkZW50aWZpZWRCeSggaWRlbnRpdHkoKSApOwotICAgICAgICB9Ci0gICAgICAgIGlmKCBoYXNDb25maWcoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbmZpZ01vZHVsZSgpLmVudGl0aWVzKCBWb2xkZW1vcnRDb25maWd1cmF0aW9uLmNsYXNzICkudmlzaWJsZUluKCBjb25maWdWaXNpYmlsaXR5KCkgKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L1ZvbGRlbW9ydFRlc3QuamF2YSBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L1ZvbGRlbW9ydFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVhNTlhNi4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2VudGl0eXN0b3JlL3ZvbGRlbW9ydC9Wb2xkZW1vcnRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBOaWNsYXMgSGVkaG1hbiA8bmljbGFzQGhlZGhtYW4ub3JnPi4KLSAqCi0gKiBMaWNlbnNlZCAgdW5kZXIgdGhlICBBcGFjaGUgTGljZW5zZSwgIFZlcnNpb24gMi4wICAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgIHRoaXMgZmlsZSAgZXhjZXB0IGluICBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyAgT0YgQU5ZIEtJTkQsIGVpdGhlciAgZXhwcmVzcyAgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLnFpNGouZW50aXR5c3RvcmUudm9sZGVtb3J0OwotCi1pbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHk7Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKLWltcG9ydCBvcmcucWk0ai5lbnRpdHlzdG9yZS52b2xkZW1vcnQuYXNzZW1ibHkuVm9sZGVtb3J0QXNzZW1ibGVyOwotaW1wb3J0IG9yZy5xaTRqLnRlc3QuZW50aXR5LkFic3RyYWN0RW50aXR5U3RvcmVUZXN0OwotaW1wb3J0IHZvbGRlbW9ydC5zZXJ2ZXIuVm9sZGVtb3J0Q29uZmlnOwotaW1wb3J0IHZvbGRlbW9ydC5zZXJ2ZXIuVm9sZGVtb3J0U2VydmVyOwotCi1pbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLWltcG9ydCBvcmcucWk0ai50ZXN0LkVudGl0eVRlc3RBc3NlbWJsZXI7Ci1pbXBvcnQgb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLm9yZ2pzb24uT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcjsKLQotQElnbm9yZSggIlRoaXMgdmVyc2lvbiBvZiBWb2xkZW1vcnQgaXMgc3RpbGwgdXNpbmcgSmV0dHkgNi4gSWYgd2UgY2FuIG5vdCB1cGdyYWRlLCB3ZSBzaG91bGQgZHJvcCBzdXBwb3J0IGZvciB0aGlzIEVTLiIgKQotcHVibGljIGNsYXNzIFZvbGRlbW9ydFRlc3QKLSAgICBleHRlbmRzIEFic3RyYWN0RW50aXR5U3RvcmVUZXN0Ci17Ci0KLSAgICBwcml2YXRlIExpc3Q8Vm9sZGVtb3J0U2VydmVyPiBzZXJ2ZXJzID0gbmV3IEFycmF5TGlzdDxWb2xkZW1vcnRTZXJ2ZXI+KCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFRocmVhZC5zbGVlcCggMjAwICk7Ci0gICAgICAgIEZpbGUgdm9sZGVtb3J0SG9tZTEgPSBzZXR1cFZvbGRlbW9ydEhvbWUoKTsKLSAgICAgICAgc3RhcnRTZXJ2ZXIoIHZvbGRlbW9ydEhvbWUxLCAibm9kZTAucHJvcGVydGllcyIgKTsKLSAgICAgICAgRmlsZSB2b2xkZW1vcnRIb21lMiA9IHNldHVwVm9sZGVtb3J0SG9tZSgpOwotICAgICAgICBzdGFydFNlcnZlciggdm9sZGVtb3J0SG9tZTIsICJub2RlMS5wcm9wZXJ0aWVzIiApOwotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3VwZXIudGVhckRvd24oKTsKLSAgICAgICAgZm9yKCBWb2xkZW1vcnRTZXJ2ZXIgc2VydmVyIDogc2VydmVycyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNlcnZlci5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKLSAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci5hc3NlbWJsZSggbW9kdWxlICk7Ci0gICAgICAgIE1vZHVsZUFzc2VtYmx5IGNvbmZpZyA9IG1vZHVsZS5sYXllcigpLm1vZHVsZSggImNvbmZpZyIgKTsKLSAgICAgICAgbmV3IEVudGl0eVRlc3RBc3NlbWJsZXIoKS5hc3NlbWJsZSggY29uZmlnICk7Ci0gICAgICAgIG5ldyBPcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyKCkuYXNzZW1ibGUoIG1vZHVsZSApOwotCi0gICAgICAgIG5ldyBWb2xkZW1vcnRBc3NlbWJsZXIoKS4KLSAgICAgICAgICAgIHZpc2libGVJbiggVmlzaWJpbGl0eS5sYXllciApLgotICAgICAgICAgICAgd2l0aENvbmZpZyggY29uZmlnLCBWaXNpYmlsaXR5LmxheWVyICkuCi0gICAgICAgICAgICBhc3NlbWJsZSggbW9kdWxlICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBGaWxlIHNldHVwVm9sZGVtb3J0SG9tZSgpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgRmlsZSB0bXAgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCAicWk0aiIsICIiICk7Ci0gICAgICAgIEZpbGUgZGlyID0gdG1wLmdldFBhcmVudEZpbGUoKTsKLSAgICAgICAgRmlsZSB2b2xkZW1vcnRIb21lID0gbmV3IEZpbGUoIGRpciwgInFpNGotdm9sZGVtb3J0IiArIG5ldyBSYW5kb20oKS5uZXh0SW50KCAxMDAwMCApICk7Ci0gICAgICAgIGJvb2xlYW4gY3JlYXRlZCA9IHZvbGRlbW9ydEhvbWUubWtkaXIoKTsKLSAgICAgICAgRmlsZSBjb25maWdEaXIgPSBuZXcgRmlsZSggdm9sZGVtb3J0SG9tZSwgImNvbmZpZyIgKTsKLSAgICAgICAgY3JlYXRlZCA9IGNvbmZpZ0Rpci5ta2RpcigpOwotICAgICAgICBjb3B5RmlsZSggImNsdXN0ZXIueG1sIiwgY29uZmlnRGlyICk7Ci0gICAgICAgIGNvcHlGaWxlKCAic3RvcmVzLnhtbCIsIGNvbmZpZ0RpciApOwotICAgICAgICByZXR1cm4gdm9sZGVtb3J0SG9tZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RhcnRTZXJ2ZXIoIEZpbGUgdm9sZGVtb3J0SG9tZSwgU3RyaW5nIHNlcnZlclByb3BzICkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgSW5wdXRTdHJlYW0gaW4gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oIHNlcnZlclByb3BzICk7Ci0gICAgICAgIHByb3BzLmxvYWQoIGluICk7Ci0gICAgICAgIHByb3BzLnNldFByb3BlcnR5KCAidm9sZGVtb3J0LmhvbWUiLCB2b2xkZW1vcnRIb21lLmdldENhbm9uaWNhbFBhdGgoKSApOwotICAgICAgICBWb2xkZW1vcnRDb25maWcgY29uZmlnID0gbmV3IFZvbGRlbW9ydENvbmZpZyggcHJvcHMgKTsKLSAgICAgICAgY29uZmlnLnNldEVuYWJsZUpteCggZmFsc2UgKTsKLSAgICAgICAgVm9sZGVtb3J0U2VydmVyIHNlcnZlciA9IG5ldyBWb2xkZW1vcnRTZXJ2ZXIoIGNvbmZpZyApOwotICAgICAgICBzZXJ2ZXIuc3RhcnQoKTsKLSAgICAgICAgdGhpcy5zZXJ2ZXJzLmFkZCggc2VydmVyICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNvcHlGaWxlKCBTdHJpbmcgc291cmNlLCBGaWxlIHZvbGRlbW9ydEhvbWUgKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIElucHV0U3RyZWFtIGluID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCBzb3VyY2UgKTsKLSAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSggbmV3IEZpbGUoIHZvbGRlbW9ydEhvbWUsIHNvdXJjZSApICk7Ci0gICAgICAgIEJ1ZmZlcmVkT3V0cHV0U3RyZWFtIHN0cmVhbSA9IG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbSggb3V0ICk7Ci0gICAgICAgIGludCBkYXRhID0gaW4ucmVhZCgpOwotICAgICAgICB3aGlsZSggZGF0YSAhPSAtMSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmVhbS53cml0ZSggZGF0YSApOwotICAgICAgICAgICAgZGF0YSA9IGluLnJlYWQoKTsKLSAgICAgICAgfQotICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICBzdHJlYW0uY2xvc2UoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L2NsdXN0ZXIueG1sIGIvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2VudGl0eXN0b3JlL3ZvbGRlbW9ydC9jbHVzdGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FmYzg4Ni4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L2NsdXN0ZXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCEtLQotICB+IENvcHlyaWdodCAoYykgMjAxMCBOaWNsYXMgSGVkaG1hbiA8bmljbGFzQGhlZGhtYW4ub3JnPi4KLSAgfgotICB+IExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAgfiB5b3UgbWF5IG5vdCB1c2UgIHRoaXMgZmlsZSAgZXhjZXB0IGluICBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIH4KLSAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICB+Ci0gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICB+IGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgfiBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0gIH4gaW1wbGllZC4KLSAgfgotICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAgLS0+Ci0KLTxjbHVzdGVyPgotICAgIDwhLS0gVGhlIG5hbWUgaXMganVzdCB0byBoZWxwIHVzZXJzIGlkZW50aWZ5IHRoaXMgY2x1c3RlciBmcm9tIHRoZSBndWkgLS0+Ci0gICAgPG5hbWU+cWk0ai10ZXN0LWNsdXN0ZXI8L25hbWU+Ci0gICAgPHNlcnZlcj4KLSAgICAgICAgPCEtLSBUaGUgbm9kZSBpZCBpcyBhIHVuaXF1ZSwgc2VxdWVudGlhbCBpZCBiZWdpbm5pbmcgd2l0aCAwIHRoYXQgaWRlbnRpZmllcyBlYWNoIHNlcnZlciBpbiB0aGUgY2x1c3Rlci0tPgotICAgICAgICA8aWQ+MDwvaWQ+Ci0gICAgICAgIDxob3N0PmxvY2FsaG9zdDwvaG9zdD4KLSAgICAgICAgPGh0dHAtcG9ydD44NDgxPC9odHRwLXBvcnQ+Ci0gICAgICAgIDxzb2NrZXQtcG9ydD44NTgxPC9zb2NrZXQtcG9ydD4KLSAgICAgICAgPCEtLSBBIGxpc3Qgb2YgZGF0YSBwYXJ0aXRpb25zIGFzc2lnbmVkIHRvIHRoaXMgc2VydmVyIC0tPgotICAgICAgICA8cGFydGl0aW9ucz4wLDEsMiwzPC9wYXJ0aXRpb25zPgotICAgIDwvc2VydmVyPgotICAgIDxzZXJ2ZXI+Ci0gICAgICAgIDxpZD4xPC9pZD4KLSAgICAgICAgPGhvc3Q+bG9jYWxob3N0PC9ob3N0PgotICAgICAgICA8aHR0cC1wb3J0Pjg2ODE8L2h0dHAtcG9ydD4KLSAgICAgICAgPHNvY2tldC1wb3J0Pjg3ODE8L3NvY2tldC1wb3J0PgotICAgICAgICA8cGFydGl0aW9ucz40LDUsNiw3PC9wYXJ0aXRpb25zPgotICAgIDwvc2VydmVyPgotPC9jbHVzdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS92b2xkZW1vcnQvbm9kZTAucHJvcGVydGllcyBiL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS92b2xkZW1vcnQvbm9kZTAucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJiM2EzYi4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L25vZGUwLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTAgTmljbGFzIEhlZGhtYW4gPG5pY2xhc0BoZWRobWFuLm9yZz4uCi0jCi0jIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlICB0aGlzIGZpbGUgIGV4Y2VwdCBpbiAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyAgT0YgQU5ZIEtJTkQsIGVpdGhlciAgZXhwcmVzcyAgb3IKLSMgaW1wbGllZC4KLSMKLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotIyAgVGhlIHVuaXF1ZSwgc2VxdWVudGlhbCBpZGVudGlmaWVyIGZvciB0aGlzIHNlcnZlciBpbiB0aGUgY2x1c3RlciAoc3RhcnRzIHdpdGggMCkKLSMgIGRlZmF1bHQ6IG5vbmUsIG11c3QgYmUgc3BlY2ZpZmllZAotbm9kZS5pZD0wCi0KLSMgVGhlIGJhc2UgZGlyZWN0b3J5IGZvciB2b2xkZW1vcnQuIENhbiBhbHNvIGJlIHNwZWNpZmllZCB2aWEgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFZPTERFTU9SVF9IT01FIG9yCi0jIHZpYSBhIGNvbW1hbmQgbGluZSBvcHRpb24uCi0jIGRlZmF1bHQ6IG5vbmUJCi0jIHZvbGRlbW9ydC5ob21lPQotCi0jIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdm9sZGVtb3J0IGRhdGEgaXMgc3RvcmVkCi0jIGRlZmF1bHQ6ICR7dm9sZGVtb3J0LmhvbWV9L2RhdGEKLSMgZGF0YS5kaXJlY3Rvcnk9Ci0KLQotIyBUaGUgZGlyZWN0b3J5IHdoZXJlIHZvbGRlbW9ydCBjb25maWd1cmF0aW9uIGlzIHN0b3JlZAotIyBkZWZhdWx0OiAke3ZvbGRlbW9ydC5ob21lfS9jb25maWcKLSMgbWV0YWRhdGEuZGlyZWN0b3J5PQotCi0jIFNob3VsZCB0aGUgQkRCIGVuZ2luZSBiZSBlbmFibGVkPwotIyBkZWZhdWx0OiB0cnVlCi0jIGVuYWJsZS5iZGIuZW5naW5lPQotCi0KLSMgVGhlIEJEQiBjYWNoZSB0aGF0IGlzIHNoYXJlZCBieSBhbGwgQkRCIHRhYmxlcy4gQmlnZ2VyIGlzIGJldHRlci4KLSMgZGVmYXVsdDogMjAwTUIgKG1ha2UgaXQgYmlnZ2VyISEhKQotYmRiLmNhY2hlLnNpemU9NTAwMDAwMDAKLQotCi0jIFNob3VsZCB0cmFuc2FjdGlvbnMgYmUgaW1tZWRpYXRlbHkgd3JpdHRlbiB0byBkaXNrPwotIyBkZWZhdWx0OiBmYWxzZQotIyBiZGIud3JpdGUudHJhbnNhY3Rpb25zPQotCi0jIFdoZW4gdGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gdG8gZGlzayBzaG91bGQgd2UgZm9yY2UgdGhlIGRpc2sgdG8gZmx1c2ggdGhlIE9TIGNhY2hlLiBUaGlzIGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBvcGVyYXRpb24uCi0jIGRlZmF1bHQ6IGZhbHNlCi0jIGJkYi5mbHVzaC50cmFuc2FjdGlvbnM9Ci0KLQotIyBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBCREIgZW52aXJvbm1lbnQgaXMgbG9jYXRlZAotIyBkZWZhdWx0OiAke2RhdGEuZGlyZWN0b3J5fS9iZGIKLSMgYmRiLmRhdGEuZGlyZWN0b3J5PQotCi0KLSMgVGhlIHNpemUgb2YgYW4gaW5kaXZpZHVhbCBsb2cgZmlsZQotIyBkZWZhdWx0OiAxR0IKLSMgYmRiLm1heC5sb2dmaWxlLnNpemU9Ci0KLQotIyBUaGUgZmFub3V0IHNpemUgZm9yIHRoZSBidHJlZS4gQmlnZ2VyIGZhbm91dCBtb3JlIGVmZmllbmNpZW50bHkgc3VwcG9ydHMgbGFyZ2VyIGJ0cmVlcy4KLSMgZGVmYXVsdDogNTEyCi0jIGJkYi5idHJlZS5mYW5vdXQ9Ci0KLQotIyBIb3cgb2Z0ZW4gKGluIGJ5dGVzKSBzaG91bGQgd2UgY2hlY2twb2ludCB0aGUgdHJhbnNhY3Rpb24gbG9nPyBDaGVja3BvaW50cyBtYWtlIHN0YXJ0dXAgYW5kIHNodXRkb3duIGZhc3Rlci4KLSMgZGVmYXVsdDogMjAgKiAxMDI0ICogMTAyNAotIyBiZGIuY2hlY2twb2ludC5pbnRlcnZhbC5ieXRlcz0KLQotCi0jIEhvdyBvZnRlbiBpbiBtcyBzaG91bGQgd2UgY2hlY2twb2ludCB0aGUgdHJhbnNhY3Rpb24gbG9nCi0jIGRlZmF1bHQ6IDMwMDAwCi0jIGJkYi5jaGVja3BvaW50LmludGVydmFsLm1zPQotCi0KLSMgU2hvdWxkIHdlIGVuYWJsZWQgdGhlIG15c3FsIHN0b3JhZ2UgZW5naW5lPyBEb2luZyBzbyB3aWxsIGNyZWF0ZSBhIGNvbm5lY3Rpb24gcG9vbCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIG15c3FsIGluc3RhbmNlCi0jIGRlZmF1bHQ6IGZhbHNlCi0jIGVuYWJsZS5teXNxbC5lbmdpbmU9Ci0KLQotIyBUaGUgbXlzcWwgdXNlcm5hbWUgdG8gdXNlcgotIyBkZWZhdWx0OiByb290Ci0jIG15c3FsLnVzZXI9Ci0KLQotIyBUaGUgbXlzcWwgcGFzc3dvcmQgdG8gdXNlcgotIyBteXNxbC5wYXNzd29yZD0KLQotCi0jIFRoZSBob3N0IG9mIHRoZSBteXNxbCBpbnN0YW5jZQotIyBkZWZhdWx0OiBsb2NhbGhvc3QKLSMgbXlzcWwuaG9zdD0KLQotCi0jIFRoZSBwb3J0IG9mIHRoZSBteXNxbCBpbnN0YW5jZQotIyBkZWZhdWx0OiAzMzA2Ci0jIG15c3FsLnBvcnQ9Ci0KLQotIyBUaGUgbmFtZSBvZiB0aGUgbXlzcWwgZGF0YWJhc2UKLSMgZGVmYXVsdDogdm9sZGVtb3J0Ci0jIG15c3FsLmRhdGFiYXNlPQotCi0KLSNTaG91bGQgd2UgZW5hYmxlIHRoZSBtZW1vcnkgc3RvcmFnZSBlbmdpbmU/IE1pZ2h0IGFzIHdlbGwgdGhpcyB0YWtlcyBubyByZXNvdXJjZXMgYW5kIGlzIGp1c3QgaGVyZSBmb3IgY29uc2lzdGVuY3kuCi0jIGRlZmF1bHQ6IHRydWUKLSMgZW5hYmxlLm1lbW9yeS5lbmdpbmU9Ci0KLQotIyBTaG91bGQgd2UgZW5hYmxlIHRoZSBjYWNoZSBzdG9yYWdlIGVuZ2luZT8gTWlnaHQgYXMgd2VsbCB0aGlzIHRha2VzIG5vIHJlc291cmNlcyBhbmQgaXMganVzdCBoZXJlIGZvciBjb25zaXN0ZW5jeS4KLSMgZGVmYXVsdDogdHJ1ZQotIyBlbmFibGUuY2FjaGUuZW5naW5lPQotCi0KLSMgU2hvdWxkIHdlIGVuYWJsZSB0aGUgcmVhZG9ubHkgc3RvcmFnZSBlbmdpbmU/Ci0jIGRlZmF1bHQ6IGZhbHNlCi0jIGVuYWJsZS5yZWFkb25seS5lbmdpbmU9Ci0KLQotIyBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgdG8gYWNxdWlyZSBhIGZpbGVoYW5kbGUgdG8gcGVyZm9ybSByZWFkcy4KLSMgZGVmYXVsdDogNDAwMAotIyByZWFkb25seS5maWxlLndhaXQudGltZW91dC5tcz0KLQotCi0jIFRoZSBudW1iZXIgb2YgYmFja3VwIGNvcGllcyBvZiB0aGUgZGF0YSB0byBrZWVwIGFyb3VuZCBmb3Igcm9sbGJhY2suCi0jIGRlZmF1bHQ6IDEKLSMgcmVhZG9ubHkuYmFja3Vwcz0KLQotCi0jIFRoZSBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycyB0byBwb29sIHBlciBzdG9yZS4KLSMgZGVmYXVsdDogNQotIyByZWFkb25seS5maWxlLmhhbmRsZXM9Ci0KLQotIyBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRvIHN0b3JlIHJlYWRvbmx5IGRhdGEgZmlsZXMuCi0jIGRlZmF1bHQ6ICR7ZGF0YS5kaXJlY3Rvcnl9L3JlYWQtb25seQotIyByZWFkb25seS5kYXRhLmRpcmVjdG9yeT0KLQotCi0jIFdoYXQgc3RvcmFnZSBlbmdpbmUgc2hvdWxkIHdlIHVzZSBmb3Igc3RvcmluZyBtaXNkZWxpdmVyZWQgbWVzc2FnZXMgdGhhdCBuZWVkIHRvIGJlIHJlcm91dGVkPwotIyBkZWZhdWx0OiBiZGIKLSMgc2xvcC5zdG9yZS5lbmdpbmU9Ci0KLQotIyBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyB0aGUgc2VydmVyIGNhbiB1c2UuCi0jIGRlZmF1bHQ6IDEwMAotIyBtYXgudGhyZWFkcz0KLQotCi0jIFRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBrZWVwIGFsaXZlIGV2ZW4gd2hlbiBpZGxlLgotIyBkZWZhdWx0OiBtYXgoMSwgJHttYXgudGhyZWFkc30gLyAyKQotIyBjb3JlLnRocmVhZHM9Ci0KLQotIyBUaGUgc29ja2V0IFNPX1RJTUVPVVQuIEVzc2VudGlhbGx5IHRoZSBhbW91bnQgb2YgdGltZSB0byBibG9jayBvbiBhIGxvdy1sZXZlbCBuZXR3b3JrIG9wZXJhdGlvbiBiZWZvcmUgdGhyb3dpbmcgYW4gZXJyb3IuCi0jIGRlZmF1bHQ6IDQwMDAKLSMgc29ja2V0LnRpbWVvdXQubXM9Ci0KLQotIyBUaGUgdG90YWwgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgYWRlcXVhdGUgcmVzcG9uc2VzIGZyb20gYWxsIG5vZGVzIGJlZm9yZSB0aHJvd2luZyBhbiBlcnJvci4KLSMgZGVmYXVsdDogNTAwMAotIyByb3V0aW5nLnRpbWVvdXQubXM9Ci0KLQotIyBFbmFibGUgdGhlIEhUVFAgZGF0YSBzZXJ2ZXI/Ci0jIGRlZmF1bHQ6IHRydWUKLSMgaHR0cC5lbmFibGU9Ci0KLQotIyBFbmFibGUgdGhlIHNvY2tldCBkYXRhIHNlcnZlcj8KLSMgZGVmYXVsdDogdHJ1ZQotIyBzb2NrZXQuZW5hYmxlPQotCi0KLSMgRW5hYmxlIEpNWCBtb25pdG9yaW5nPwotIyBkZWZhdWx0OiB0cnVlCi0jIGpteC5lbmFibGU9Ci0KLQotIyBFbmFibGUgZGV0ZWN0aW9uIG9mIG1pc2RlbGl2ZXJlZCBtZXNzYWdlcyBmb3IgcGVyc2lzdGVuY2UgYW5kIHJlZGVsaXZlcnkuCi0jIGRlZmF1bHQ6IGZhbHNlCi0jIHNsb3AuZGV0ZWN0aW9uLmVuYWJsZT0KLQotCi0jIExvZyBldmVyeSBvcGVyYXRpb24gb24gYWxsIHN0b3Jlcy4KLSMgZGVmYXVsdDogdHJ1ZQotIyBlbmFibGUudmVyYm9zZS5sb2dnaW5nPQotCi0KLSMgVHJhY2sgbG9hZCBzdGF0aXN0aWNzIG9uIHRoZSBzdG9yZXMuCi0jIGRlZmF1bHQ6IHRydWUKLSMgZW5hYmxlLnN0YXQudHJhY2tpbmc9Ci0KLQotIyBIb3cgb2Z0ZW4gc2hvdWxkIG1pc2RlbGl2ZXJlZCAic2xvcCIgZGF0YSBiZSBwdXNoZWQgb3V0IHRvIG5vZGVzPwotIyBkZWZhdWx0OiAyICogNjAgKiAxMDAwCi0jIHB1c2hlci5wb2xsLm1zPQotCi0KLSMgVGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBmb3Igc2NoZWR1bGluZyBwZXJpb2RpYyBqb2JzCi0jIGRlZmF1bHQ6IDMKLSMgc2NoZWR1bGVyLnRocmVhZHM9CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L25vZGUxLnByb3BlcnRpZXMgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L25vZGUxLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMDgxZGQuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2VudGl0eXN0b3JlL3ZvbGRlbW9ydC9ub2RlMS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDEwIE5pY2xhcyBIZWRobWFuIDxuaWNsYXNAaGVkaG1hbi5vcmc+LgotIwotIyBMaWNlbnNlZCAgdW5kZXIgdGhlICBBcGFjaGUgTGljZW5zZSwgIFZlcnNpb24gMi4wICAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0jIGltcGxpZWQuCi0jCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLSMgIFRoZSB1bmlxdWUsIHNlcXVlbnRpYWwgaWRlbnRpZmllciBmb3IgdGhpcyBzZXJ2ZXIgaW4gdGhlIGNsdXN0ZXIgKHN0YXJ0cyB3aXRoIDApCi0jICBkZWZhdWx0OiBub25lLCBtdXN0IGJlIHNwZWNmaWZpZWQKLW5vZGUuaWQ9MQotCi0jIFRoZSBiYXNlIGRpcmVjdG9yeSBmb3Igdm9sZGVtb3J0LiBDYW4gYWxzbyBiZSBzcGVjaWZpZWQgdmlhIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBWT0xERU1PUlRfSE9NRSBvcgotIyB2aWEgYSBjb21tYW5kIGxpbmUgb3B0aW9uLgotIyBkZWZhdWx0OiBub25lCi0jIHZvbGRlbW9ydC5ob21lPQotCi0jIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdm9sZGVtb3J0IGRhdGEgaXMgc3RvcmVkCi0jIGRlZmF1bHQ6ICR7dm9sZGVtb3J0LmhvbWV9L2RhdGEKLSMgZGF0YS5kaXJlY3Rvcnk9Ci0KLQotIyBUaGUgZGlyZWN0b3J5IHdoZXJlIHZvbGRlbW9ydCBjb25maWd1cmF0aW9uIGlzIHN0b3JlZAotIyBkZWZhdWx0OiAke3ZvbGRlbW9ydC5ob21lfS9jb25maWcKLSMgbWV0YWRhdGEuZGlyZWN0b3J5PQotCi0jIFNob3VsZCB0aGUgQkRCIGVuZ2luZSBiZSBlbmFibGVkPwotIyBkZWZhdWx0OiB0cnVlCi0jIGVuYWJsZS5iZGIuZW5naW5lPQotCi0KLSMgVGhlIEJEQiBjYWNoZSB0aGF0IGlzIHNoYXJlZCBieSBhbGwgQkRCIHRhYmxlcy4gQmlnZ2VyIGlzIGJldHRlci4KLSMgZGVmYXVsdDogMjAwTUIgKG1ha2UgaXQgYmlnZ2VyISEhKQotYmRiLmNhY2hlLnNpemU9NTAwMDAwMDAKLQotCi0jIFNob3VsZCB0cmFuc2FjdGlvbnMgYmUgaW1tZWRpYXRlbHkgd3JpdHRlbiB0byBkaXNrPwotIyBkZWZhdWx0OiBmYWxzZQotIyBiZGIud3JpdGUudHJhbnNhY3Rpb25zPQotCi0jIFdoZW4gdGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gdG8gZGlzayBzaG91bGQgd2UgZm9yY2UgdGhlIGRpc2sgdG8gZmx1c2ggdGhlIE9TIGNhY2hlLiBUaGlzIGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBvcGVyYXRpb24uCi0jIGRlZmF1bHQ6IGZhbHNlCi0jIGJkYi5mbHVzaC50cmFuc2FjdGlvbnM9Ci0KLQotIyBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBCREIgZW52aXJvbm1lbnQgaXMgbG9jYXRlZAotIyBkZWZhdWx0OiAke2RhdGEuZGlyZWN0b3J5fS9iZGIKLSMgYmRiLmRhdGEuZGlyZWN0b3J5PQotCi0KLSMgVGhlIHNpemUgb2YgYW4gaW5kaXZpZHVhbCBsb2cgZmlsZQotIyBkZWZhdWx0OiAxR0IKLSMgYmRiLm1heC5sb2dmaWxlLnNpemU9Ci0KLQotIyBUaGUgZmFub3V0IHNpemUgZm9yIHRoZSBidHJlZS4gQmlnZ2VyIGZhbm91dCBtb3JlIGVmZmllbmNpZW50bHkgc3VwcG9ydHMgbGFyZ2VyIGJ0cmVlcy4KLSMgZGVmYXVsdDogNTEyCi0jIGJkYi5idHJlZS5mYW5vdXQ9Ci0KLQotIyBIb3cgb2Z0ZW4gKGluIGJ5dGVzKSBzaG91bGQgd2UgY2hlY2twb2ludCB0aGUgdHJhbnNhY3Rpb24gbG9nPyBDaGVja3BvaW50cyBtYWtlIHN0YXJ0dXAgYW5kIHNodXRkb3duIGZhc3Rlci4KLSMgZGVmYXVsdDogMjAgKiAxMDI0ICogMTAyNAotIyBiZGIuY2hlY2twb2ludC5pbnRlcnZhbC5ieXRlcz0KLQotCi0jIEhvdyBvZnRlbiBpbiBtcyBzaG91bGQgd2UgY2hlY2twb2ludCB0aGUgdHJhbnNhY3Rpb24gbG9nCi0jIGRlZmF1bHQ6IDMwMDAwCi0jIGJkYi5jaGVja3BvaW50LmludGVydmFsLm1zPQotCi0KLSMgU2hvdWxkIHdlIGVuYWJsZWQgdGhlIG15c3FsIHN0b3JhZ2UgZW5naW5lPyBEb2luZyBzbyB3aWxsIGNyZWF0ZSBhIGNvbm5lY3Rpb24gcG9vbCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIG15c3FsIGluc3RhbmNlCi0jIGRlZmF1bHQ6IGZhbHNlCi0jIGVuYWJsZS5teXNxbC5lbmdpbmU9Ci0KLQotIyBUaGUgbXlzcWwgdXNlcm5hbWUgdG8gdXNlcgotIyBkZWZhdWx0OiByb290Ci0jIG15c3FsLnVzZXI9Ci0KLQotIyBUaGUgbXlzcWwgcGFzc3dvcmQgdG8gdXNlcgotIyBteXNxbC5wYXNzd29yZD0KLQotCi0jIFRoZSBob3N0IG9mIHRoZSBteXNxbCBpbnN0YW5jZQotIyBkZWZhdWx0OiBsb2NhbGhvc3QKLSMgbXlzcWwuaG9zdD0KLQotCi0jIFRoZSBwb3J0IG9mIHRoZSBteXNxbCBpbnN0YW5jZQotIyBkZWZhdWx0OiAzMzA2Ci0jIG15c3FsLnBvcnQ9Ci0KLQotIyBUaGUgbmFtZSBvZiB0aGUgbXlzcWwgZGF0YWJhc2UKLSMgZGVmYXVsdDogdm9sZGVtb3J0Ci0jIG15c3FsLmRhdGFiYXNlPQotCi0KLSNTaG91bGQgd2UgZW5hYmxlIHRoZSBtZW1vcnkgc3RvcmFnZSBlbmdpbmU/IE1pZ2h0IGFzIHdlbGwgdGhpcyB0YWtlcyBubyByZXNvdXJjZXMgYW5kIGlzIGp1c3QgaGVyZSBmb3IgY29uc2lzdGVuY3kuCi0jIGRlZmF1bHQ6IHRydWUKLSMgZW5hYmxlLm1lbW9yeS5lbmdpbmU9Ci0KLQotIyBTaG91bGQgd2UgZW5hYmxlIHRoZSBjYWNoZSBzdG9yYWdlIGVuZ2luZT8gTWlnaHQgYXMgd2VsbCB0aGlzIHRha2VzIG5vIHJlc291cmNlcyBhbmQgaXMganVzdCBoZXJlIGZvciBjb25zaXN0ZW5jeS4KLSMgZGVmYXVsdDogdHJ1ZQotIyBlbmFibGUuY2FjaGUuZW5naW5lPQotCi0KLSMgU2hvdWxkIHdlIGVuYWJsZSB0aGUgcmVhZG9ubHkgc3RvcmFnZSBlbmdpbmU/Ci0jIGRlZmF1bHQ6IGZhbHNlCi0jIGVuYWJsZS5yZWFkb25seS5lbmdpbmU9Ci0KLQotIyBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgdG8gYWNxdWlyZSBhIGZpbGVoYW5kbGUgdG8gcGVyZm9ybSByZWFkcy4KLSMgZGVmYXVsdDogNDAwMAotIyByZWFkb25seS5maWxlLndhaXQudGltZW91dC5tcz0KLQotCi0jIFRoZSBudW1iZXIgb2YgYmFja3VwIGNvcGllcyBvZiB0aGUgZGF0YSB0byBrZWVwIGFyb3VuZCBmb3Igcm9sbGJhY2suCi0jIGRlZmF1bHQ6IDEKLSMgcmVhZG9ubHkuYmFja3Vwcz0KLQotCi0jIFRoZSBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycyB0byBwb29sIHBlciBzdG9yZS4KLSMgZGVmYXVsdDogNQotIyByZWFkb25seS5maWxlLmhhbmRsZXM9Ci0KLQotIyBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRvIHN0b3JlIHJlYWRvbmx5IGRhdGEgZmlsZXMuCi0jIGRlZmF1bHQ6ICR7ZGF0YS5kaXJlY3Rvcnl9L3JlYWQtb25seQotIyByZWFkb25seS5kYXRhLmRpcmVjdG9yeT0KLQotCi0jIFdoYXQgc3RvcmFnZSBlbmdpbmUgc2hvdWxkIHdlIHVzZSBmb3Igc3RvcmluZyBtaXNkZWxpdmVyZWQgbWVzc2FnZXMgdGhhdCBuZWVkIHRvIGJlIHJlcm91dGVkPwotIyBkZWZhdWx0OiBiZGIKLSMgc2xvcC5zdG9yZS5lbmdpbmU9Ci0KLQotIyBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyB0aGUgc2VydmVyIGNhbiB1c2UuCi0jIGRlZmF1bHQ6IDEwMAotIyBtYXgudGhyZWFkcz0KLQotCi0jIFRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBrZWVwIGFsaXZlIGV2ZW4gd2hlbiBpZGxlLgotIyBkZWZhdWx0OiBtYXgoMSwgJHttYXgudGhyZWFkc30gLyAyKQotIyBjb3JlLnRocmVhZHM9Ci0KLQotIyBUaGUgc29ja2V0IFNPX1RJTUVPVVQuIEVzc2VudGlhbGx5IHRoZSBhbW91bnQgb2YgdGltZSB0byBibG9jayBvbiBhIGxvdy1sZXZlbCBuZXR3b3JrIG9wZXJhdGlvbiBiZWZvcmUgdGhyb3dpbmcgYW4gZXJyb3IuCi0jIGRlZmF1bHQ6IDQwMDAKLSMgc29ja2V0LnRpbWVvdXQubXM9Ci0KLQotIyBUaGUgdG90YWwgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgYWRlcXVhdGUgcmVzcG9uc2VzIGZyb20gYWxsIG5vZGVzIGJlZm9yZSB0aHJvd2luZyBhbiBlcnJvci4KLSMgZGVmYXVsdDogNTAwMAotIyByb3V0aW5nLnRpbWVvdXQubXM9Ci0KLQotIyBFbmFibGUgdGhlIEhUVFAgZGF0YSBzZXJ2ZXI/Ci0jIGRlZmF1bHQ6IHRydWUKLSMgaHR0cC5lbmFibGU9Ci0KLQotIyBFbmFibGUgdGhlIHNvY2tldCBkYXRhIHNlcnZlcj8KLSMgZGVmYXVsdDogdHJ1ZQotIyBzb2NrZXQuZW5hYmxlPQotCi0KLSMgRW5hYmxlIEpNWCBtb25pdG9yaW5nPwotIyBkZWZhdWx0OiB0cnVlCi0jIGpteC5lbmFibGU9Ci0KLQotIyBFbmFibGUgZGV0ZWN0aW9uIG9mIG1pc2RlbGl2ZXJlZCBtZXNzYWdlcyBmb3IgcGVyc2lzdGVuY2UgYW5kIHJlZGVsaXZlcnkuCi0jIGRlZmF1bHQ6IGZhbHNlCi0jIHNsb3AuZGV0ZWN0aW9uLmVuYWJsZT0KLQotCi0jIExvZyBldmVyeSBvcGVyYXRpb24gb24gYWxsIHN0b3Jlcy4KLSMgZGVmYXVsdDogdHJ1ZQotIyBlbmFibGUudmVyYm9zZS5sb2dnaW5nPQotCi0KLSMgVHJhY2sgbG9hZCBzdGF0aXN0aWNzIG9uIHRoZSBzdG9yZXMuCi0jIGRlZmF1bHQ6IHRydWUKLSMgZW5hYmxlLnN0YXQudHJhY2tpbmc9Ci0KLQotIyBIb3cgb2Z0ZW4gc2hvdWxkIG1pc2RlbGl2ZXJlZCAic2xvcCIgZGF0YSBiZSBwdXNoZWQgb3V0IHRvIG5vZGVzPwotIyBkZWZhdWx0OiAyICogNjAgKiAxMDAwCi0jIHB1c2hlci5wb2xsLm1zPQotCi0KLSMgVGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBmb3Igc2NoZWR1bGluZyBwZXJpb2RpYyBqb2JzCi0jIGRlZmF1bHQ6IDMKLSMgc2NoZWR1bGVyLnRocmVhZHM9CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L3N0b3Jlcy54bWwgYi9leHRlbnNpb25zL2VudGl0eXN0b3JlLXZvbGRlbW9ydC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvdm9sZGVtb3J0L3N0b3Jlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MDE3MzMuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS12b2xkZW1vcnQvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2VudGl0eXN0b3JlL3ZvbGRlbW9ydC9zdG9yZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCEtLQotICB+IENvcHlyaWdodCAoYykgMjAxMCBOaWNsYXMgSGVkaG1hbiA8bmljbGFzQGhlZGhtYW4ub3JnPi4KLSAgfgotICB+IExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAgfiB5b3UgbWF5IG5vdCB1c2UgIHRoaXMgZmlsZSAgZXhjZXB0IGluICBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIH4KLSAgfiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICB+Ci0gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICB+IGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgfiBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0gIH4gaW1wbGllZC4KLSAgfgotICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAgLS0+Ci0KLTxzdG9yZXM+Ci0gICAgPHN0b3JlPgotICAgICAgICA8bmFtZT5xaTRqLWVudGl0aWVzPC9uYW1lPgotICAgICAgICA8cmVwbGljYXRpb24tZmFjdG9yPjE8L3JlcGxpY2F0aW9uLWZhY3Rvcj4KLSAgICAgICAgPHByZWZlcnJlZC1yZWFkcz4xPC9wcmVmZXJyZWQtcmVhZHM+Ci0gICAgICAgIDxyZXF1aXJlZC1yZWFkcz4xPC9yZXF1aXJlZC1yZWFkcz4KLSAgICAgICAgPHByZWZlcnJlZC13cml0ZXM+MTwvcHJlZmVycmVkLXdyaXRlcz4KLSAgICAgICAgPHJlcXVpcmVkLXdyaXRlcz4xPC9yZXF1aXJlZC13cml0ZXM+Ci0gICAgICAgIDxwZXJzaXN0ZW5jZT5iZGI8L3BlcnNpc3RlbmNlPgotICAgICAgICA8cm91dGluZz5jbGllbnQ8L3JvdXRpbmc+Ci0gICAgICAgIDxrZXktc2VyaWFsaXplcj4KLSAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4KLSAgICAgICAgICAgIDxzY2hlbWEtaW5mbz51dGY4PC9zY2hlbWEtaW5mbz4KLSAgICAgICAgPC9rZXktc2VyaWFsaXplcj4KLSAgICAgICAgPHZhbHVlLXNlcmlhbGl6ZXI+Ci0gICAgICAgICAgICA8dHlwZT5pZGVudGl0eTwvdHlwZT4KLSAgICAgICAgPC92YWx1ZS1zZXJpYWxpemVyPgotICAgIDwvc3RvcmU+Ci08L3N0b3Jlcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL2J1aWxkLmdyYWRsZQppbmRleCBhMWEyYzRjLi5mNDEzYWZkIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvYnVpbGQuZ3JhZGxlCisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9idWlsZC5ncmFkbGUKQEAgLTEsMTEgKzEsMzEgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogRWxhc3RpY1NlYXJjaCBJbmRleC9RdWVyeSBFeHRlbnNpb24iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBFeHRlbnNpb24gLSBJbmRleC9RdWVyeSAtIEVsYXN0aWNTZWFyY2giIH0gfQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgRWxhc3RpY1NlYXJjaCBJbmRleC9RdWVyeSBFeHRlbnNpb24iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBFeHRlbnNpb24gLSBJbmRleC9RdWVyeSAtIEVsYXN0aWNTZWFyY2giIH0gfQogCiBkZXBlbmRlbmNpZXMgewogCiAgIGNvbXBpbGUgcHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKQogICBjb21waWxlIHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5maWxlY29uZmlnIikKKyAgY29tcGlsZSBsaWJyYXJpZXMuc2xmNGpfYXBpCiAgIGNvbXBpbGUgbGlicmFyaWVzLmVsYXN0aWNzZWFyY2gKIAogICB0ZXN0Q29tcGlsZSBwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9kZXYtc3RhdHVzLnhtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9kZXYtc3RhdHVzLnhtbAppbmRleCA0MTRhZWYwLi5lNmRkYzU1IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvZGV2LXN0YXR1cy54bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9kb2NzL2luZGV4LWVsYXN0aWNzZWFyY2gudHh0IGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9kb2NzL2luZGV4LWVsYXN0aWNzZWFyY2gudHh0CmluZGV4IDIxYTFiODYuLmJjZWQwODQgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvZG9jcy9pbmRleC1lbGFzdGljc2VhcmNoLnR4dAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvc3JjL2RvY3MvaW5kZXgtZWxhc3RpY3NlYXJjaC50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbZXh0ZW5zaW9uLWluZGV4LWVsYXN0aWNzZWFyY2gsRWxhc3RpY1NlYXJjaCBJbmRleC9RdWVyeV1dCiA9IEVsYXN0aWNTZWFyY2ggSW5kZXgvUXVlcnkgPQogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9lbGFzdGljc2VhcmNoL0VsYXN0aWNTZWFyY2hJbmRleEV4cG9ydGVyLmphdmEgYi9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9lbGFzdGljc2VhcmNoL0VsYXN0aWNTZWFyY2hJbmRleEV4cG9ydGVyLmphdmEKaW5kZXggYmFmNjQyNy4uYTczOWExNSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9FbGFzdGljU2VhcmNoSW5kZXhFeHBvcnRlci5qYXZhCisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvRWxhc3RpY1NlYXJjaEluZGV4RXhwb3J0ZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5pbmRleC5lbGFzdGljc2VhcmNoOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvRWxhc3RpY1NlYXJjaEluZGV4ZXIuamF2YSBiL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvRWxhc3RpY1NlYXJjaEluZGV4ZXIuamF2YQppbmRleCA1ODE3MmQ1Li4zMjljOGU1IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9lbGFzdGljc2VhcmNoL0VsYXN0aWNTZWFyY2hJbmRleGVyLmphdmEKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9FbGFzdGljU2VhcmNoSW5kZXhlci5qYXZhCkBAIC0zNCw3ICszNCw2IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKIGltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHlEZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLnF1YWxpZmllci5UYWdnZWQ7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnR5cGUuVmFsdWVUeXBlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2VCdWlsZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51dGlsLkNsYXNzZXM7CkBAIC00OSw2ICs0OCw3IEBACiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZVVuaXRPZldvcms7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLlN0YXRlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKIApAQCAtNjcsMTMgKzY3LDE3IEBACiAgICAgewogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0dHRVIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlciggRWxhc3RpY1NlYXJjaEluZGV4ZXIuY2xhc3MgKTsKKwogICAgICAgICBAU3RydWN0dXJlCi0gICAgICAgIHByaXZhdGUgTW9kdWxlIG1vZHVsZTsKKyAgICAgICAgcHJpdmF0ZSBNb2R1bGVTcGkgbW9kdWxlOworCiAgICAgICAgIEBTZXJ2aWNlCiAgICAgICAgIHByaXZhdGUgRW50aXR5U3RvcmUgZW50aXR5U3RvcmU7CisKICAgICAgICAgQFNlcnZpY2UKICAgICAgICAgQFRhZ2dlZCggVmFsdWVTZXJpYWxpemF0aW9uLkZvcm1hdHMuSlNPTiApCiAgICAgICAgIHByaXZhdGUgVmFsdWVTZXJpYWxpemVyIHZhbHVlU2VyaWFsaXplcjsKKwogICAgICAgICBAVGhpcwogICAgICAgICBwcml2YXRlIEVsYXN0aWNTZWFyY2hTdXBwb3J0IHN1cHBvcnQ7CiAKQEAgLTExMSwyNyArMTE1LDI3IEBACiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBzd2l0Y2goIGNoYW5nZWRTdGF0ZS5zdGF0dXMoKSApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUkVNT1ZFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dHRVIudHJhY2UoICJSZW1vdmluZyBFbnRpdHkgU3RhdGUgZnJvbSBJbmRleDoge30iLCBjaGFuZ2VkU3RhdGUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoIGJ1bGtCdWlsZGVyLCBjaGFuZ2VkU3RhdGUuaWRlbnRpdHkoKS5pZGVudGl0eSgpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFVQREFURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HR0VSLnRyYWNlKCAiVXBkYXRpbmcgRW50aXR5IFN0YXRlIGluIEluZGV4OiB7fSIsIGNoYW5nZWRTdGF0ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSggYnVsa0J1aWxkZXIsIGNoYW5nZWRTdGF0ZS5pZGVudGl0eSgpLmlkZW50aXR5KCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXBkYXRlZEpzb24gPSB0b0pTT04oIGNoYW5nZWRTdGF0ZSwgbmV3U3RhdGVzLCB1b3cgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dHRVIudHJhY2UoICJXaWxsIGluZGV4OiB7fSIsIHVwZGF0ZWRKc29uICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgoIGJ1bGtCdWlsZGVyLCBjaGFuZ2VkU3RhdGUuaWRlbnRpdHkoKS5pZGVudGl0eSgpLCB1cGRhdGVkSnNvbiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HR0VSLnRyYWNlKCAiQ3JlYXRpbmcgRW50aXR5IFN0YXRlIGluIEluZGV4OiB7fSIsIGNoYW5nZWRTdGF0ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXdKc29uID0gdG9KU09OKCBjaGFuZ2VkU3RhdGUsIG5ld1N0YXRlcywgdW93ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HR0VSLnRyYWNlKCAiV2lsbCBpbmRleDoge30iLCBuZXdKc29uICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgoIGJ1bGtCdWlsZGVyLCBjaGFuZ2VkU3RhdGUuaWRlbnRpdHkoKS5pZGVudGl0eSgpLCBuZXdKc29uICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIExPQURFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFJFTU9WRUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dHRVIudHJhY2UoICJSZW1vdmluZyBFbnRpdHkgU3RhdGUgZnJvbSBJbmRleDoge30iLCBjaGFuZ2VkU3RhdGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSggYnVsa0J1aWxkZXIsIGNoYW5nZWRTdGF0ZS5pZGVudGl0eSgpLmlkZW50aXR5KCkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVQREFURUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dHRVIudHJhY2UoICJVcGRhdGluZyBFbnRpdHkgU3RhdGUgaW4gSW5kZXg6IHt9IiwgY2hhbmdlZFN0YXRlICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoIGJ1bGtCdWlsZGVyLCBjaGFuZ2VkU3RhdGUuaWRlbnRpdHkoKS5pZGVudGl0eSgpICk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXBkYXRlZEpzb24gPSB0b0pTT04oIGNoYW5nZWRTdGF0ZSwgbmV3U3RhdGVzLCB1b3cgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExPR0dFUi50cmFjZSggIldpbGwgaW5kZXg6IHt9IiwgdXBkYXRlZEpzb24gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KCBidWxrQnVpbGRlciwgY2hhbmdlZFN0YXRlLmlkZW50aXR5KCkuaWRlbnRpdHkoKSwgdXBkYXRlZEpzb24gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIE5FVzoKKyAgICAgICAgICAgICAgICAgICAgICAgIExPR0dFUi50cmFjZSggIkNyZWF0aW5nIEVudGl0eSBTdGF0ZSBpbiBJbmRleDoge30iLCBjaGFuZ2VkU3RhdGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXdKc29uID0gdG9KU09OKCBjaGFuZ2VkU3RhdGUsIG5ld1N0YXRlcywgdW93ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dHRVIudHJhY2UoICJXaWxsIGluZGV4OiB7fSIsIG5ld0pzb24gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KCBidWxrQnVpbGRlciwgY2hhbmdlZFN0YXRlLmlkZW50aXR5KCkuaWRlbnRpdHkoKSwgbmV3SnNvbiApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTE9BREVEOgorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNTQsNyArMTU4LDYgQEAKIAogICAgICAgICAgICAgICAgIC8vIFJlZnJlc2ggaW5kZXgKICAgICAgICAgICAgICAgICBzdXBwb3J0LmNsaWVudCgpLmFkbWluKCkuaW5kaWNlcygpLnByZXBhcmVSZWZyZXNoKCBzdXBwb3J0LmluZGV4KCkgKS5leGVjdXRlKCkuYWN0aW9uR2V0KCk7Ci0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xOTAsNyArMTkzLDggQEAKICAgICAgICAgICAgICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwogCiAgICAgICAgICAgICAgICAganNvbi5wdXQoICJfaWRlbnRpdHkiLCBzdGF0ZS5pZGVudGl0eSgpLmlkZW50aXR5KCkgKTsKLSAgICAgICAgICAgICAgICBqc29uLnB1dCggIl90eXBlcyIsIEl0ZXJhYmxlcy50b0xpc3QoIEl0ZXJhYmxlcy5tYXAoIENsYXNzZXMudG9DbGFzc05hbWUoKSwgc3RhdGUuZW50aXR5RGVzY3JpcHRvcigpLm1peGluVHlwZXMoKSApICkgKTsKKyAgICAgICAgICAgICAgICBqc29uLnB1dCggIl90eXBlcyIsIEl0ZXJhYmxlcy50b0xpc3QoIEl0ZXJhYmxlcy5tYXAoIENsYXNzZXMudG9DbGFzc05hbWUoKSwgc3RhdGUuZW50aXR5RGVzY3JpcHRvcigpCisgICAgICAgICAgICAgICAgICAgIC5taXhpblR5cGVzKCkgKSApICk7CiAKICAgICAgICAgICAgICAgICBFbnRpdHlEZXNjcmlwdG9yIGVudGl0eVR5cGUgPSBzdGF0ZS5lbnRpdHlEZXNjcmlwdG9yKCk7CiAKQEAgLTI0Nyw3ICsyNTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5U3RhdGUgYXNzb2NTdGF0ZSA9IHVvdy5lbnRpdHlTdGF0ZU9mKCBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGFzc29jaWF0ZWQuaWRlbnRpdHkoKSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgcmVmZXJlbmNlID0gRW50aXR5UmVmZXJlbmNlLnBhcnNlRW50aXR5UmVmZXJlbmNlKCBhc3NvY2lhdGVkLmlkZW50aXR5KCkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVN0YXRlIGFzc29jU3RhdGUgPSB1b3cuZW50aXR5U3RhdGVPZiggbW9kdWxlLCByZWZlcmVuY2UgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IEpTT05PYmplY3QoIHRvSlNPTiggYXNzb2NTdGF0ZSwgbmV3U3RhdGVzLCB1b3cgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjc4LDcgKzI4Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlTdGF0ZSBhc3NvY1N0YXRlID0gdW93LmVudGl0eVN0YXRlT2YoIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggYXNzb2NpYXRlZC5pZGVudGl0eSgpICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZSByZWZlcmVuY2UgPSBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGFzc29jaWF0ZWQuaWRlbnRpdHkoKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5U3RhdGUgYXNzb2NTdGF0ZSA9IHVvdy5lbnRpdHlTdGF0ZU9mKCBtb2R1bGUsIHJlZmVyZW5jZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHV0KCBuZXcgSlNPTk9iamVjdCggdG9KU09OKCBhc3NvY1N0YXRlLCBuZXdTdGF0ZXMsIHVvdyApICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMxMiw3ICszMTgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5U3RhdGUgYXNzb2NTdGF0ZSA9IHVvdy5lbnRpdHlTdGF0ZU9mKCBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZSByZWZlcmVuY2UgPSBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlTdGF0ZSBhc3NvY1N0YXRlID0gdW93LmVudGl0eVN0YXRlT2YoIG1vZHVsZSwgcmVmZXJlbmNlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OT2JqZWN0IG9iaiA9IG5ldyBKU09OT2JqZWN0KCB0b0pTT04oIGFzc29jU3RhdGUsIG5ld1N0YXRlcywgdW93ICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5wdXQoICJfbmFtZWQiLCBuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXQoIG9iaiApOwpAQCAtMzM4LDUgKzM0NSw0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvYXNzZW1ibHkvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9hc3NlbWJseS9wYWNrYWdlLmh0bWwKaW5kZXggMDg0ODdmYi4uZjNlZGY4ZiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9hc3NlbWJseS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9hc3NlbWJseS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkVsYXN0aWNTZWFyY2ggSW5kZXgvUXVlcnkgQXNzZW1ibHkuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvY2x1c3Rlci9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9lbGFzdGljc2VhcmNoL2NsdXN0ZXIvcGFja2FnZS5odG1sCmluZGV4IGQ3NDdiNGQuLjMxMTBkYTggMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvY2x1c3Rlci9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9jbHVzdGVyL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RWxhc3RpY1NlYXJjaCBJbmRleC9RdWVyeSBDbHVzdGVyIFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvZmlsZXN5c3RlbS9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9lbGFzdGljc2VhcmNoL2ZpbGVzeXN0ZW0vcGFja2FnZS5odG1sCmluZGV4IDdhMGYyNjAuLmM1Y2EwOWUgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvZmlsZXN5c3RlbS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9maWxlc3lzdGVtL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RWxhc3RpY1NlYXJjaCBJbmRleC9RdWVyeSBGaWxlc3lzdGVtIFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvaW50ZXJuYWwvQWJzdHJhY3RFbGFzdGljU2VhcmNoU3VwcG9ydC5qYXZhIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9pbnRlcm5hbC9BYnN0cmFjdEVsYXN0aWNTZWFyY2hTdXBwb3J0LmphdmEKaW5kZXggOWQwODMzYy4uN2ZjMmE0ZCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9pbnRlcm5hbC9BYnN0cmFjdEVsYXN0aWNTZWFyY2hTdXBwb3J0LmphdmEKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9pbnRlcm5hbC9BYnN0cmFjdEVsYXN0aWNTZWFyY2hTdXBwb3J0LmphdmEKQEAgLTQ4LDYgKzQ4LDkgQEAKICAgICB7CiAgICAgICAgIGFjdGl2YXRlRWxhc3RpY1NlYXJjaCgpOwogCisgICAgICAgIC8vIFdhaXQgZm9yIHllbGxvdyBzdGF0dXM6IHRoZSBwcmltYXJ5IHNoYXJkIGlzIGFsbG9jYXRlZCBidXQgcmVwbGljYXMgbWF5IG5vdCBiZSB5ZXQKKyAgICAgICAgY2xpZW50LmFkbWluKCkuY2x1c3RlcigpLnByZXBhcmVIZWFsdGgoKS5zZXRXYWl0Rm9yWWVsbG93U3RhdHVzKCkuZXhlY3V0ZSgpLmFjdGlvbkdldCgpOworCiAgICAgICAgIGlmICggIWNsaWVudC5hZG1pbigpLmluZGljZXMoKS5wcmVwYXJlRXhpc3RzKCBpbmRleCApLnNldEluZGljZXMoIGluZGV4ICkuZXhlY3V0ZSgpLmFjdGlvbkdldCgpLmlzRXhpc3RzKCkgKSB7CiAgICAgICAgICAgICAvLyBDcmVhdGUgZW1wdHkgaW5kZXgKICAgICAgICAgICAgIExPR0dFUi5pbmZvKCAiV2lsbCBjcmVhdGUgJ3t9JyBpbmRleCBhcyBpdCBkb2VzIG5vdCBleGlzdHMuIiwgaW5kZXggKTsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvaW50ZXJuYWwvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKaW5kZXggMTRhNTllMi4uYmIzMjM3OSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkVsYXN0aWNTZWFyY2ggSW5kZXgvUXVlcnkgSW50ZXJuYWwgUGFja2FnZS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9tZW1vcnkvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9tZW1vcnkvcGFja2FnZS5odG1sCmluZGV4IDhmNGUxNTMuLjllY2I2YjYgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvbWVtb3J5L3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9lbGFzdGljc2VhcmNoL21lbW9yeS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkVsYXN0aWNTZWFyY2ggSW5kZXgvUXVlcnkgSW4tTWVtb3J5IFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L2VsYXN0aWNzZWFyY2gvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9wYWNrYWdlLmh0bWwKaW5kZXggZWY4MmIyNy4uMGVhZjRjZCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvZWxhc3RpY3NlYXJjaC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkVsYXN0aWNTZWFyY2ggSW5kZXgvUXVlcnkuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctZWxhc3RpY3NlYXJjaC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbAppbmRleCBiYmZlMzBjLi4wMGFkNGQ4IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLWVsYXN0aWNzZWFyY2gvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stdGVzdC54bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Y29uZmlndXJhdGlvbj4KIAogICAgIDxhcHBlbmRlciBuYW1lPSJzdGRvdXQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLkNvbnNvbGVBcHBlbmRlciI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9OT1RJQ0UgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNTcxNDIuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotUWk0aiBSREYgSW5kZXhpbmcgRXh0ZW5zaW9uCi1Db3B5cmlnaHQgMjAwNy0yMDA4LCBUaGUgUWk0aiBEZXZlbG9wbWVudCBUZWFtIG9mIGluZGl2aWR1YWxzLgotCi1TZWUgaHR0cDovL3d3dy5xaTRqLm9yZy9jb250cmlidXRvcnMuaHRtbCBmb3IgbGlzdCBvZiBvZiBpbmRpdmlkdWFscy4KLUFsc28gc2VlIGVhY2ggZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBDb3B5cmlnaHQgY2xhaW1zLgotCi1RaTRqIGlzIGEgY29tbXVuaXR5IGFnZ3JlZ2F0ZWQgd29ya3MgdW5kZXIgQ29weXJpZ2h0IGxhdy4KLUFsbCBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgd29ya3MgYXQgUWk0aiBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLUFwYWNoZSBMaWNlbnNlIHZlciAyLjAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzCi0KLUJlbG93IGZvbGxvd3MgYSBsaXN0IG9mIGJpbmFyeSBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGxpY2Vuc2VzOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIG1vZHVsZSB1c2VzIGNnbGliIChDb2RlIEdlbmVyYXRpb24gTGlicmFyeSksIGRldmVsb3BlZCBhdAotaHR0cDovL2NnbGliLnNvdXJjZWZvcmdlLm5ldC8gbGljZW5zZWQgdW5kZXIKLXRoZSBBcGFjaGUgTGljZW5zZSB2ZXIgMi4wLiBTZWUgTElDRU5TRQotCi1UaGlzIG1vZHVsZSB1c2VzIEFTTSwgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgSU5SSUEsIEZyYW5jZSBUZWxlY29tLAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gU2VlIGxpY2Vuc2VzL2FzbS5saWNlbnNlCi0KLVRoaXMgbW9kdWxlIHVzZXMgT3BlblJERiwgQ29weXJpZ2h0IEFkdW5hIChodHRwOi8vd3d3LmFkdW5hLXNvZnR3YXJlLmNvbS8pLAotwqkgMjAwMS0yMDA3LCBBbGwgcmlnaHRzIHJlc2VydmVkLiBTZWUgbGljZW5zZXMvb3BlbnJkZi5saWNlbnNlCi0KLVRoaXMgbW9kdWxlIHVzZXMgaW5mby5hZHVuYSwgQ29weXJpZ2h0IEFkdW5hIChodHRwOi8vd3d3LmFkdW5hLXNvZnR3YXJlLmNvbS8pLAotwqkgMjAwMS0yMDA3LCBBbGwgcmlnaHRzIHJlc2VydmVkLiBTZWUgbGljZW5zZXMvYWR1bmEubGljZW5zZQotCi1UaGlzIG1vZHVsZSB1c2VzIHNvZnR3YXJlIGZyb20gUU9TLmNoIChodHRwOi8vc2xmNGoub3JnKSBsaWNlbnNlZCB1bmRlcgotdGhlIFgxMSBsaWNlbnNlLCBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNyBRT1MuY2guIFNlZSBsaWNlbnNlcy9zbGY0ai5saWNlbnNlCi0KLVRoaXMgbW9kdWxlIHVzZXMgQXBhY2hlIExvZzRKLCBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQgVGhlIEFwYWNoZSBTb2Z0d2FyZQotRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIFNlZSBMSUNFTlNFCi0KLVRoaXMgbW9kdWxlIHVzZXMgQXBhY2hlIENvbW1vbnMgSHR0cENsaWVudCwgc29mdHdhcmUgZGV2ZWxvcGVkIGF0IFRoZSBBcGFjaGUKLVNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiBTZWUgTElDRU5TRQotCi1UaGlzIG1vZHVsZSB1c2VzIEFwYWNoZSBDb21tb25zIENvZGVjLCBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQgVGhlIEFwYWNoZQotU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIFNlZSBMSUNFTlNFCi0KLVRoaXMgbW9kdWxlIHVzZXMgQXBhY2hlIENvbW1vbnMgTG9nZ2luZywgc29mdHdhcmUgZGV2ZWxvcGVkIGF0IFRoZSBBcGFjaGUKLVNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiBTZWUgTElDRU5TRQotCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvYnVpbGQuZ3JhZGxlCmluZGV4IGIxNWVjNjcuLmE2MTI5NzQgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL2J1aWxkLmdyYWRsZQorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBSREYgSW5kZXgvUXVlcnkgRXh0ZW5zaW9uIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogRXh0ZW5zaW9uIC0gSW5kZXgvUXVlcnkgLSBSREYiIH0gfQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgUkRGIEluZGV4L1F1ZXJ5IEV4dGVuc2lvbiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIEV4dGVuc2lvbiAtIEluZGV4L1F1ZXJ5IC0gUkRGIiB9IH0KIAogZGVwZW5kZW5jaWVzIHsKIApAQCAtOCw2ICsyNyw3IEBACiAgICAgY29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LnJkZiIgKQogICAgIGNvbXBpbGUgbGlicmFyaWVzLnNlc2FtZQogICAgIGNvbXBpbGUgbGlicmFyaWVzLmNvbW1vbnNfbGFuZworICAgIGNvbXBpbGUgbGlicmFyaWVzLnNsZjRqX2FwaQogCiAgICAgdGVzdENvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi52YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbicgKQogICAgIHRlc3RDb21waWxlIHByb2plY3QoICc6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24uZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMnICkKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvZGV2LXN0YXR1cy54bWwKaW5kZXggNTBkMjZkMy4uYWM2M2NkYSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvZGV2LXN0YXR1cy54bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvZG9jcy9pbmRleC1yZGYudHh0IGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL2RvY3MvaW5kZXgtcmRmLnR4dAppbmRleCAyNjc2NGJkLi42MjBhMDcxIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvZG9jcy9pbmRleC1yZGYudHh0CisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9kb2NzL2luZGV4LXJkZi50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbZXh0ZW5zaW9uLWluZGV4LXJkZixSREYgSW5kZXgvUXVlcnldXQogPSBPcGVuUkRGIEluZGV4L1F1ZXJ5ID0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvYXNzZW1ibHkvUmRmTmF0aXZlU2VzYW1lU3RvcmVBc3NlbWJsZXIuamF2YSBiL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL2Fzc2VtYmx5L1JkZk5hdGl2ZVNlc2FtZVN0b3JlQXNzZW1ibGVyLmphdmEKaW5kZXggOTE5ODI0ZC4uMTU3ODJhNiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvYXNzZW1ibHkvUmRmTmF0aXZlU2VzYW1lU3RvcmVBc3NlbWJsZXIuamF2YQorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9hc3NlbWJseS9SZGZOYXRpdmVTZXNhbWVTdG9yZUFzc2VtYmxlci5qYXZhCkBAIC0yMiw2ICsyMiw3IEBACiBpbXBvcnQgb3JnLnFpNGouaW5kZXgucmRmLnF1ZXJ5LlJkZlF1ZXJ5UGFyc2VyRmFjdG9yeTsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnJkZi5lbnRpdHkuRW50aXR5U3RhdGVTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkucmRmLmVudGl0eS5FbnRpdHlUeXBlU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnJkZi5yZXBvc2l0b3J5Lk5hdGl2ZUNvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5yZGYucmVwb3NpdG9yeS5OYXRpdmVSZXBvc2l0b3J5U2VydmljZTsKIGltcG9ydCBvcmcucWk0ai52YWx1ZXNlcmlhbGl6YXRpb24ub3JnanNvbi5PcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uU2VydmljZTsKIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvYXNzZW1ibHkvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvYXNzZW1ibHkvcGFja2FnZS5odG1sCmluZGV4IDM3Y2E5NzMuLjY3MzkwMjEgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9hc3NlbWJseS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJERiBJbmRleC9RdWVyeSBBc3NlbWJseS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvaW5kZXhpbmcvUmRmSW5kZXhpbmdTZXJ2aWNlLmphdmEgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9pbmRleGluZy9SZGZJbmRleGluZ1NlcnZpY2UuamF2YQppbmRleCBmMmEwM2ZmLi40NDRhYTE3IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9pbmRleGluZy9SZGZJbmRleGluZ1NlcnZpY2UuamF2YQorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9pbmRleGluZy9SZGZJbmRleGluZ1NlcnZpY2UuamF2YQpAQCAtODYsNyArODYsNyBAQAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ZWRFbnRpdHlUeXBlcyA9IG5ldyBIYXNoU2V0PEVudGl0eURlc2NyaXB0b3I+KCk7CisgICAgICAgICAgICBpbmRleGVkRW50aXR5VHlwZXMgPSBuZXcgSGFzaFNldDw+KCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL2luZGV4aW5nL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL2luZGV4aW5nL3BhY2thZ2UuaHRtbAppbmRleCBkM2E0ZmIzLi43ZmI5NzdlIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9pbmRleGluZy9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvaW5kZXhpbmcvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SREYgSW5kZXguPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL3BhY2thZ2UuaHRtbAppbmRleCBmNDlmYzVkLi44ZDRlYWMwIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SREYgSW5kZXgvUXVlcnkuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL3F1ZXJ5L1Nlc2FtZUV4cHJlc3Npb25zLmphdmEgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9xdWVyeS9TZXNhbWVFeHByZXNzaW9ucy5qYXZhCmluZGV4IDE4Mjg2ODAuLjdiZDQ0MDQgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL3F1ZXJ5L1Nlc2FtZUV4cHJlc3Npb25zLmphdmEKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvcXVlcnkvU2VzYW1lRXhwcmVzc2lvbnMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5pbmRleC5yZGYucXVlcnk7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkucXVlcnkuZ3JhbW1hci5RdWVyeVNwZWNpZmljYXRpb247CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9xdWVyeS9pbnRlcm5hbC9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9xdWVyeS9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKaW5kZXggMjUzY2RiZS4uYzE3NzJhNCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvcXVlcnkvaW50ZXJuYWwvcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL3F1ZXJ5L2ludGVybmFsL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+UkRGIFF1ZXJ5IEludGVybmFsIFBhY2thZ2UuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL3F1ZXJ5L3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL3F1ZXJ5L3BhY2thZ2UuaHRtbAppbmRleCBlYmMxNjQyLi5kMGUzOGU4IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9xdWVyeS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvcXVlcnkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SREYgUXVlcnkuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL0NvbnRhaW5zQWxsVGVzdC5qYXZhIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvQ29udGFpbnNBbGxUZXN0LmphdmEKaW5kZXggNTlhYWU4NS4uMzEyYWEzNiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvQ29udGFpbnNBbGxUZXN0LmphdmEKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvQ29udGFpbnNBbGxUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouaW5kZXgucmRmOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvQ29udGFpbnNUZXN0LmphdmEgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9Db250YWluc1Rlc3QuamF2YQppbmRleCA5MTY3ZDgyLi5iYWZlYmRkIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9Db250YWluc1Rlc3QuamF2YQorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9Db250YWluc1Rlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5pbmRleC5yZGY7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9xaTY0L3dpdGhQcm9wYWdhdGlvblJlcXVpcmVzTmV3L0FjY291bnRTZXJ2aWNlQ29tcG9zaXRlLmphdmEgYi9leHRlbnNpb25zL2luZGV4aW5nLXJkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2luZGV4L3JkZi9xaTY0L3dpdGhQcm9wYWdhdGlvblJlcXVpcmVzTmV3L0FjY291bnRTZXJ2aWNlQ29tcG9zaXRlLmphdmEKaW5kZXggMGNlNjJiYS4uMjA0MGNkYiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9pbmRleC9yZGYvcWk2NC93aXRoUHJvcGFnYXRpb25SZXF1aXJlc05ldy9BY2NvdW50U2VydmljZUNvbXBvc2l0ZS5qYXZhCisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctcmRmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovaW5kZXgvcmRmL3FpNjQvd2l0aFByb3BhZ2F0aW9uUmVxdWlyZXNOZXcvQWNjb3VudFNlcnZpY2VDb21wb3NpdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5pbmRleC5yZGYucWk2NC53aXRoUHJvcGFnYXRpb25SZXF1aXJlc05ldzsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25jZXJuLkNvbmNlcm5zOwpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL2J1aWxkLmdyYWRsZSBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9idWlsZC5ncmFkbGUKaW5kZXggYjgwOGZmMS4uOTQ0ZDg1MSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL2J1aWxkLmdyYWRsZQorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvYnVpbGQuZ3JhZGxlCkBAIC0xLDEyICsxLDMyIEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIFNvbHIgSW5kZXhpbmcgRXh0ZW5zaW9uIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3Qge25hbWUgPSAiUWk0aiBFeHRlbnNpb24gLSBJbmRleGluZyAtIFNvbHIiIH19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBTb2xyIEluZGV4aW5nIEV4dGVuc2lvbiIKKworamFyIHsgbWFuaWZlc3Qge25hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gSW5kZXhpbmcgLSBTb2xyIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LmZpbGVjb25maWciKSkKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkucmRmIikpCiAgIGNvbXBpbGUobGlicmFyaWVzLnNvbHIpCisgIGNvbXBpbGUgbGlicmFyaWVzLnNsZjRqX2FwaQogCiAgIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiKSkKIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL2Rldi1zdGF0dXMueG1sCmluZGV4IDMzMGY0OTUuLjkwNTIzMjUgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9kZXYtc3RhdHVzLnhtbAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL2RvY3MvaW5kZXgtc29sci50eHQgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL2RvY3MvaW5kZXgtc29sci50eHQKaW5kZXggZWYwYjZiNi4uZTk2NDgzMSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy9kb2NzL2luZGV4LXNvbHIudHh0CisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvZG9jcy9pbmRleC1zb2xyLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tleHRlbnNpb24taW5kZXgtc29scixTb2xyIEluZGV4L1F1ZXJ5XV0KID0gQXBhY2hlIFNvbHIgSW5kZXgvUXVlcnkgPQogCkBAIC04LDcgKzI3LDcgQEAKIAogSW5kZXgvUXVlcnkgc2VydmljZXMgYmFja2VkIGJ5IGFuIGVtYmVkZGVkIGh0dHA6Ly9sdWNlbmUuYXBhY2hlLm9yZy9zb2xyL1tBcGFjaGUgU29sciBTZWFyY2hdLgogCi1XQVJOSU5HOiBTb2xyIEluZGV4L1F1ZXJ5IHNlcnZpY2UgZG8gbm90IHN1cHBvcnQgdGhlIFFpNGogUXVlcnkgQVBJIGJ1dCBvbmx5IG5hdGl2ZSBTb2xyIHF1ZXJpZXMuCitXQVJOSU5HOiBTb2xyIEluZGV4L1F1ZXJ5IHNlcnZpY2UgZG8gbm90IHN1cHBvcnQgdGhlIFplc3TihKIgUXVlcnkgQVBJIGJ1dCBvbmx5IG5hdGl2ZSBTb2xyIHF1ZXJpZXMuCiAKIGluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NvbHIvU29sckV4cHJlc3Npb25zLmphdmEgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zb2xyL1NvbHJFeHByZXNzaW9ucy5qYXZhCmluZGV4IGM0MmJhYjcuLmVlOTQxZDEgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NvbHIvU29sckV4cHJlc3Npb25zLmphdmEKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc29sci9Tb2xyRXhwcmVzc2lvbnMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5pbmRleC5zb2xyOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnF1ZXJ5LmdyYW1tYXIuUXVlcnlTcGVjaWZpY2F0aW9uOwpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc29sci9pbnRlcm5hbC9TaW5nbGVUb2tlblRva2VuaXplci5qYXZhIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc29sci9pbnRlcm5hbC9TaW5nbGVUb2tlblRva2VuaXplci5qYXZhCmluZGV4IDE1NWQyNTQuLmY4Yzc3NzAgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NvbHIvaW50ZXJuYWwvU2luZ2xlVG9rZW5Ub2tlbml6ZXIuamF2YQorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zb2xyL2ludGVybmFsL1NpbmdsZVRva2VuVG9rZW5pemVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouaW5kZXguc29sci5pbnRlcm5hbDsKIAogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmFuYWx5c2lzLldoaXRlc3BhY2VUb2tlbml6ZXI7CkBAIC0xOCwxMSArMzYsNiBAQAogICAgICAgc3VwZXIoIHNvdXJjZSwgaW4gKTsKICAgIH0KIAotICAgcHVibGljIFNpbmdsZVRva2VuVG9rZW5pemVyKCBBdHRyaWJ1dGVGYWN0b3J5IGZhY3RvcnksIFJlYWRlciBpbiApCi0gICB7Ci0gICAgICBzdXBlciggZmFjdG9yeSwgaW4gKTsKLSAgIH0KLQogICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1Rva2VuQ2hhciggY2hhciBjICkKICAgIHsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NvbHIvaW50ZXJuYWwvU2luZ2xlVG9rZW5Ub2tlbml6ZXJGYWN0b3J5LmphdmEgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zb2xyL2ludGVybmFsL1NpbmdsZVRva2VuVG9rZW5pemVyRmFjdG9yeS5qYXZhCmluZGV4IDQ4ZjJiMWMuLjQ4NzY5YTggMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NvbHIvaW50ZXJuYWwvU2luZ2xlVG9rZW5Ub2tlbml6ZXJGYWN0b3J5LmphdmEKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc29sci9pbnRlcm5hbC9TaW5nbGVUb2tlblRva2VuaXplckZhY3RvcnkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5pbmRleC5zb2xyLmludGVybmFsOwogCiBpbXBvcnQgamF2YS5pby5SZWFkZXI7CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zb2xyL2ludGVybmFsL1NvbHJFbnRpdHlJbmRleGVyTWl4aW4uamF2YSBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NvbHIvaW50ZXJuYWwvU29sckVudGl0eUluZGV4ZXJNaXhpbi5qYXZhCmluZGV4IGUwMzhhNGUuLjgyNDM1NGIgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NvbHIvaW50ZXJuYWwvU29sckVudGl0eUluZGV4ZXJNaXhpbi5qYXZhCisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NvbHIvaW50ZXJuYWwvU29sckVudGl0eUluZGV4ZXJNaXhpbi5qYXZhCkBAIC0xODEsNyArMTgxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWRkRmllbGQoIG5hbWUsIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKCBzdGF0ZW1lbnQuZ2V0T2JqZWN0KCkgaW5zdGFuY2VvZiBCTm9kZSApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcjxTdGF0ZW1lbnQ+IHNlcSA9IGdyYXBoLm1hdGNoKCAoUmVzb3VyY2UpIHN0YXRlbWVudC5nZXRPYmplY3QoKSwgbmV3IFVSSUltcGwoICJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjbGkiICksIG51bGwsIChSZXNvdXJjZSkgbnVsbCApOworICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSkgc3RhdGVtZW50LmdldE9iamVjdCgpOworICAgICAgICAgICAgICAgICAgICBVUklJbXBsIHVyaSA9IG5ldyBVUklJbXBsKCAiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI2xpIiApOworICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcjxTdGF0ZW1lbnQ+IHNlcSA9IGdyYXBoLm1hdGNoKCByZXNvdXJjZSwgdXJpLCBudWxsLCAoUmVzb3VyY2UpIG51bGwgKTsKICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIHNlcS5oYXNOZXh0KCkgKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc2VxU3RhdGVtZW50ID0gc2VxLm5leHQoKTsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NvbHIvaW50ZXJuYWwvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc29sci9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKaW5kZXggYmJlNDI2Ny4uOWZjYjBhOCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc29sci9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc29sci9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNvbHIgSW5kZXgvUXVlcnkgSW50ZXJuYWwgUGFja2FnZS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc29sci9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zb2xyL3BhY2thZ2UuaHRtbAppbmRleCBhNzhiZjFhLi4wYTQzYzY4IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zb2xyL3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zb2xyL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U29sciBJbmRleC9RdWVyeS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy90ZXN0L3Jlc291cmNlcy9zY2hlbWEueG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy90ZXN0L3Jlc291cmNlcy9zY2hlbWEueG1sCmluZGV4IDg2MzJhMGMuLmQ5ZTVhZTEgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvdGVzdC9yZXNvdXJjZXMvc2NoZW1hLnhtbAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL3Rlc3QvcmVzb3VyY2VzL3NjaGVtYS54bWwKQEAgLTEsNSArMSwyMSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CiA8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tCiAgVGhpcyBpcyB0aGUgU29sciBzY2hlbWEgZmlsZS4gVGhpcyBmaWxlIHNob3VsZCBiZSBuYW1lZCAic2NoZW1hLnhtbCIgYW5kCiAgc2hvdWxkIGJlIGluIHRoZSBjb25mIGRpcmVjdG9yeSB1bmRlciB0aGUgc29sciBob21lCiAgKGkuZS4gLi9zb2xyL2NvbmYvc2NoZW1hLnhtbCBieSBkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy90ZXN0L3Jlc291cmNlcy9zb2xyY29uZmlnLnhtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc29sci9zcmMvdGVzdC9yZXNvdXJjZXMvc29scmNvbmZpZy54bWwKaW5kZXggMzQ0OTIyNC4uZjNjZmQxNiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zb2xyL3NyYy90ZXN0L3Jlc291cmNlcy9zb2xyY29uZmlnLnhtbAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNvbHIvc3JjL3Rlc3QvcmVzb3VyY2VzL3NvbHJjb25maWcueG1sCkBAIC0xLDUgKzEsMjEgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgogPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPCEtLQogICAgICBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IGNvbmZpZ3VyYXRpb25zIG9wdGlvbnMgdGhhdCBtYXkgYXBwZWFyIGluIHRoaXMKICAgICAgZmlsZSwgc2VlIGh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvc29sci9Tb2xyQ29uZmlnWG1sLgogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9OT1RJQ0UgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMjdmMzUuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotUWk0aiBTUUwgSW5kZXhpbmcgRXh0ZW5zaW9uCi1Db3B5cmlnaHQgMjAwNy0yMDA4LCBUaGUgUWk0aiBEZXZlbG9wbWVudCBUZWFtIG9mIGluZGl2aWR1YWxzLgotCi1TZWUgaHR0cDovL3d3dy5xaTRqLm9yZy9jb250cmlidXRvcnMuaHRtbCBmb3IgbGlzdCBvZiBvZiBpbmRpdmlkdWFscy4KLUFsc28gc2VlIGVhY2ggZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBDb3B5cmlnaHQgY2xhaW1zLgotCi1RaTRqIGlzIGEgY29tbXVuaXR5IGFnZ3JlZ2F0ZWQgd29ya3MgdW5kZXIgQ29weXJpZ2h0IGxhdy4KLUFsbCBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgd29ya3MgYXQgUWk0aiBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLUFwYWNoZSBMaWNlbnNlIHZlciAyLjAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzCi0KLUJlbG93IGZvbGxvd3MgYSBsaXN0IG9mIGJpbmFyeSBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGxpY2Vuc2VzOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi08Tk9ORT4KLQotCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvYnVpbGQuZ3JhZGxlCmluZGV4IGEzNWUzYzEuLjkzMzAyMTAgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL2J1aWxkLmdyYWRsZQorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBTUUwgSW5kZXhpbmcgRXh0ZW5zaW9uIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHttYW5pZmVzdCB7bmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIEluZGV4aW5nIC0gU1FMIn19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBTUUwgSW5kZXhpbmcgRXh0ZW5zaW9uIgorCitqYXIge21hbmlmZXN0IHtuYW1lID0gIkFwYWNoZSBaZXN04oSiIEV4dGVuc2lvbiAtIEluZGV4aW5nIC0gU1FMIn19CiAKIGRlcGVuZGVuY2llcyB7CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvZGV2LXN0YXR1cy54bWwKaW5kZXggNTBkMjZkMy4uYWM2M2NkYSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvZGV2LXN0YXR1cy54bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9pbnN0cnVjdGlvbnMudHh0IGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvaW5zdHJ1Y3Rpb25zLnR4dAppbmRleCBkYTk0MThkLi4zYjM4YmNhIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9pbnN0cnVjdGlvbnMudHh0CisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL2luc3RydWN0aW9ucy50eHQKQEAgLTEsMTUgKzEsMzQgQEAKLVRoZXNlIGluc3RydWN0aW9ucyBhcmUgZm9yIHByZXBhcmluZyB5b3VyIG91dC1vZi1ib3ggUG9zdGdyZVNRTCBpbnN0YWxsYXRpb24gc28gaXQgd291bGQgYmUgdXNhYmxlIHdpdGggUG9zdGdyZVNRTCBpbmRleGluZyBvZiBRaTRqLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1RoZXNlIGluc3RydWN0aW9ucyBhcmUgZm9yIHByZXBhcmluZyB5b3VyIG91dC1vZi1ib3ggUG9zdGdyZVNRTCBpbnN0YWxsYXRpb24gc28gaXQgd291bGQgYmUgdXNhYmxlIHdpdGggUG9zdGdyZVNRTCBpbmRleGluZyBvZiBaZXN0LgogCiAxLiBDcmVhdGluZyBsb2dpbiByb2xlIGFuZCBkYXRhYmFzZQotMS4xLiBVc2luZyBwZ0FkbWluLCBjb25uZWN0IHRvIFBvc3RncmVTUUwgZGF0YWJhc2UsIGFuZCBjcmVhdGUgZGF0YWJhc2UgeW91IGludGVuZCB0byB1c2UgdG8gc3RvcmUgUWk0aiBlbnRpdHkgZGF0YSwgYW5kIGxvZ2luIHJvbGUgZm9yIFFpNGogYXBwbGljYXRpb24gdG8gdXNlIHdoZW4gaXQgY29ubmVjdHMgdG8gZGF0YWJhc2UuCisxLjEuIFVzaW5nIHBnQWRtaW4sIGNvbm5lY3QgdG8gUG9zdGdyZVNRTCBkYXRhYmFzZSwgYW5kIGNyZWF0ZSBkYXRhYmFzZSB5b3UgaW50ZW5kIHRvIHVzZSB0byBzdG9yZSBaZXN04oSiIGVudGl0eSBkYXRhLCBhbmQgbG9naW4gcm9sZSBmb3IgWmVzdOKEoiBhcHBsaWNhdGlvbiB0byB1c2Ugd2hlbiBpdCBjb25uZWN0cyB0byBkYXRhYmFzZS4KIDEuMS4gVXBkYXRlIHRoZXNlIHZhbHVlcyBpbnRvIHlvdXIgLnByb3BlcnRpZXMgZmlsZSwgaWYgbmVjZXNzYXJ5LgogCiAyLiBBZGRpbmcgbHRyZWUgYXMgdHlwZQotMi4xLiBVc2luZyBwZ0FkbWluLCBjb25uZWN0IHRvIFBvc3RncmVTUUwgZGF0YWJhc2UsIGFuZCBuYXZpZ2F0ZSB0byBkYXRhYmFzZSB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBRaTRqLiAoQ2xpY2sgb24gaXQpCisyLjEuIFVzaW5nIHBnQWRtaW4sIGNvbm5lY3QgdG8gUG9zdGdyZVNRTCBkYXRhYmFzZSwgYW5kIG5hdmlnYXRlIHRvIGRhdGFiYXNlIHdoaWNoIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIFplc3QuIChDbGljayBvbiBpdCkKIDIuMi4gRXhlY3V0aW5nIGFyYml0YXJ5IFNRTCBxdWVyaWVzIHNob3VsZCBiZSBwb3NzaWJsZSwgY2xpY2sgdGhhdCBidXR0b24gKGJ1dHRvbiB3aXRoIFNRTCB0ZXh0IG9uIGl0LCBuZXh0IHRvIHRyYXNoIGJpbikuCiAyLjMuIFRoaXMgd2lsbCBvcGVuIG5ldyB3aW5kb3csIGVyYXNlIGFueSB0ZXh0IHdoaWNoIHBnQWRtaW4gZ2VuZXJhdGVzIHRoZXJlIGZvciB5b3UuCiAyLjQuIFRoZW4gbmF2aWdhdGUgdG8geW91ciBQb3N0Z3JlU1FMIGluc3RhbGxhdGlvbiBkaXJlY3RvcnksIHRoZW4gaW50byAnc2hhcmUnLCBhbmQgdGhlbiBpbnRvICdjb250cmliJy4gT3BlbiBmaWxlICdsdHJlZS5zcWwnIGluIHlvdXIgZmF2b3JpdGUgdGV4dCBlZGl0b3IuCiAyLjUuIFNlbGVjdCBhbGwgdGV4dCwgY29weSBpdCwgYW5kIHBhc3RlIHRvIFNRTCBxdWVyeSB3aW5kb3cgd2hpY2ggeW91IG9wZW5lZCBpbiBzdGFnZSAyLjIuCi0yLjYuIElmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IG1heSBjaGFuZ2UgdGhlIGxpbmUgJ1NFVCBzZWFyY2hfcGF0aCA9IHB1YmxpYzsnIHRvIG1ha2Ugc2VhcmNoX3BhdGggYmUgJ3BnX2NhdGFsb2cnLCBvciBuYW1lIG9mIHNjaGVtYSB0aGF0IFFpNGogYXBwbGljYXRpb24gd2lsbCB1c2UgKCdxaTRqJyBieSBkZWZhdWx0KS4gSXQncyBvayB0byBsZWF2ZSBpdCB0byAncHVibGljJyB0aG91Z2guCisyLjYuIElmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IG1heSBjaGFuZ2UgdGhlIGxpbmUgJ1NFVCBzZWFyY2hfcGF0aCA9IHB1YmxpYzsnIHRvIG1ha2Ugc2VhcmNoX3BhdGggYmUgJ3BnX2NhdGFsb2cnLCBvciBuYW1lIG9mIHNjaGVtYSB0aGF0IFplc3TihKIgYXBwbGljYXRpb24gd2lsbCB1c2UgKCdxaTRqJyBieSBkZWZhdWx0KS4gSXQncyBvayB0byBsZWF2ZSBpdCB0byAncHVibGljJyB0aG91Z2guCiAyLjcuIEhpdCBGNSBvciBnbyBRdWVyeSAtPiBFeGVjdXRlIFF1ZXJ5IHRvIGV4ZWN1dGUgdGhlIFNRTC4gSXQgc2hvdWxkIHByaW50IHNvbWUgbm90aWNlcyBpbnRvIG91dHB1dCB3aW5kb3cgYnV0IG5vIGVycm9ycyBub3Igd2FybmluZ3Mgc2hvdWxkIGJlIHByZXNlbnQuCiAyLjguIEx0cmVlIHR5cGUgc2hvdWxkIGJlIG5vdyBpbnN0YWxsZWQgdG8geW91ciBQb3N0Z3JlU1FMIGluc3RhbGxhdGlvbi4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9kb2NzL2luZGV4LXNxbC10ZXN0cy50eHQgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvZG9jcy9pbmRleC1zcWwtdGVzdHMudHh0CmluZGV4IGZhNmQ3MjkuLjhiOTBhYTggMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9kb2NzL2luZGV4LXNxbC10ZXN0cy50eHQKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL2RvY3MvaW5kZXgtc3FsLXRlc3RzLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tleHRlbnNpb24taW5kZXhpbmctc3FsLXRlc3RzLFNRTCBJbmRleC9RdWVyeSBUZXN0c11dCiA9IFNRTCBJbmRleC9RdWVyeSBUZXN0cyA9CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9kb2NzL2luZGV4LXNxbC50eHQgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvZG9jcy9pbmRleC1zcWwudHh0CmluZGV4IDZmMDFlNWEuLjVkNmZjNTcgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9kb2NzL2luZGV4LXNxbC50eHQKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL2RvY3MvaW5kZXgtc3FsLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tleHRlbnNpb24taW5kZXhpbmctc3FsLFNRTCBJbmRleC9RdWVyeV1dCiA9IFNRTCBJbmRleC9RdWVyeSA9CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbAppbmRleCA4OWQyNzA0Li5mNjJjN2FiIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9hc3NlbWJseS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvYXNzZW1ibHkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TUUwgSW5kZXgvUXVlcnkgQXNzZW1ibHkuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL2ludGVybmFsL1NRTEVudGl0eUZpbmRlci5qYXZhIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvaW50ZXJuYWwvU1FMRW50aXR5RmluZGVyLmphdmEKaW5kZXggMzc1YjExOS4uNzAzNmFmZCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvaW50ZXJuYWwvU1FMRW50aXR5RmluZGVyLmphdmEKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvaW50ZXJuYWwvU1FMRW50aXR5RmluZGVyLmphdmEKQEAgLTEwMCw4ICsxMDAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiB2YXJpYWJsZXMgKQogICAgICAgICB0aHJvd3MgRW50aXR5RmluZGVyRXhjZXB0aW9uCiAgICAgewotICAgICAgICAvLyBUT0RPIHdoYXQgaXMgUWk0aidzIHBvbGljeSBvbiBuZWdhdGl2ZSBmaXJzdFJlc3VsdCBhbmQvb3IgbWF4UmVzdWx0cz8gSkRCQyBoYXMgaXRzIG93biB3YXkgb2YgaW50ZXJwcmV0aW5nCi0gICAgICAgIC8vIHRoZXNlIHZhbHVlcyAtIGRvZXMgaXQgbWF0Y2ggd2l0aCBRaTRqJ3Mgd2F5PworICAgICAgICAvLyBUT0RPIHdoYXQgaXMgWmVzdCdzIHBvbGljeSBvbiBuZWdhdGl2ZSBmaXJzdFJlc3VsdCBhbmQvb3IgbWF4UmVzdWx0cz8gSkRCQyBoYXMgaXRzIG93biB3YXkgb2YgaW50ZXJwcmV0aW5nCisgICAgICAgIC8vIHRoZXNlIHZhbHVlcyAtIGRvZXMgaXQgbWF0Y2ggd2l0aCBaZXN0J3Mgd2F5PwogICAgICAgICBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+IHJlc3VsdDsKICAgICAgICAgaWYoIG1heFJlc3VsdHMgPT0gbnVsbCB8fCBtYXhSZXN1bHRzID4gMCApCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL2ludGVybmFsL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL2ludGVybmFsL3BhY2thZ2UuaHRtbAppbmRleCBkODVmM2NlLi44ZTk4ZTlmIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvaW50ZXJuYWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TUUwgSW5kZXgvUXVlcnkgSW50ZXJuYWwgUGFja2FnZS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvcGFja2FnZS5odG1sCmluZGV4IDM4NzFlYTMuLjAxMjhiOTkgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNRTCBJbmRleC9RdWVyeS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9hcGkvU1FMUXVlcnlpbmcuamF2YSBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvYXBpL1NRTFF1ZXJ5aW5nLmphdmEKaW5kZXggZGU5YjYxYy4uMzUxYjgyMiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9hcGkvU1FMUXVlcnlpbmcuamF2YQorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L2FwaS9TUUxRdWVyeWluZy5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgb3JnLnFpNGouc3BpLnF1ZXJ5LkVudGl0eUZpbmRlckV4Y2VwdGlvbjsKIAogLyoqCi0gKiBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBwYXJzaW5nIHN1cHBvcnQgZnJvbSBRaTRqIHF1ZXJpZXMgdG8gU1FMIHF1ZXJpZXMuIFRoZSBpZGVhIGlzIHRoYXQgdGhpcyBpbnRlcmZhY2UgcHJvZHVjZXMKKyAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHBhcnNpbmcgc3VwcG9ydCBmcm9tIFplc3QgcXVlcmllcyB0byBTUUwgcXVlcmllcy4gVGhlIGlkZWEgaXMgdGhhdCB0aGlzIGludGVyZmFjZSBwcm9kdWNlcwogICogU1FMIHdoaWNoIGNhbiBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB7QGxpbmsgUHJlcGFyZWRTdGF0ZW1lbnR9LgogICoKICAqIEBhdXRob3IgU3RhbmlzbGF2IE11aGFtZXRzaW4KQEAgLTM1LDEzICszNSwxMyBAQAogcHVibGljIGludGVyZmFjZSBTUUxRdWVyeWluZwogewogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdoZW4gcGFyc2luZyBuZWVkcyB0byBiZSBkb25lIGZyb20gUWk0aiBxdWVyeSB0byBTUUwgcXVlcnkuIFRoaXMgbWV0aG9kIGlzIHN1cHBvc2VkIHRvCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2hlbiBwYXJzaW5nIG5lZWRzIHRvIGJlIGRvbmUgZnJvbSBaZXN0IHF1ZXJ5IHRvIFNRTCBxdWVyeS4gVGhpcyBtZXRob2QgaXMgc3VwcG9zZWQgdG8KICAgICAgKiByZXR1cm4gb25lIHNpbmdsZSBTUUwgcXVlcnksIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGgge0BsaW5rIFByZXBhcmVkU3RhdGVtZW50fS4KICAgICAgKgotICAgICAqIEBwYXJhbSByZXN1bHRUeXBlIFRoZSByZXN1bHQgdHlwZSBvZiBRaTRqIHF1ZXJ5LgotICAgICAqIEBwYXJhbSB3aGVyZUNsYXVzZSBUaGUgd2hlcmUgY2xhdXNlIG9mIFFpNGogcXVlcnkuCi0gICAgICogQHBhcmFtIG9yZGVyQnlTZWdtZW50cyBUaGUgb3JkZXIgYnkgc2VnbWVudHMgb2YgUWk0aiBxdWVyeS4KLSAgICAgKiBAcGFyYW0gZmlyc3RSZXN1bHQgVGhlIGZpcnN0IHJlc3VsdCBpbmRleCBvZiBRaTRqIHF1ZXJ5LgorICAgICAqIEBwYXJhbSByZXN1bHRUeXBlIFRoZSByZXN1bHQgdHlwZSBvZiBaZXN0IHF1ZXJ5LgorICAgICAqIEBwYXJhbSB3aGVyZUNsYXVzZSBUaGUgd2hlcmUgY2xhdXNlIG9mIFplc3QgcXVlcnkuCisgICAgICogQHBhcmFtIG9yZGVyQnlTZWdtZW50cyBUaGUgb3JkZXIgYnkgc2VnbWVudHMgb2YgWmVzdCBxdWVyeS4KKyAgICAgKiBAcGFyYW0gZmlyc3RSZXN1bHQgVGhlIGZpcnN0IHJlc3VsdCBpbmRleCBvZiBaZXN0IHF1ZXJ5LgogICAgICAqIEBwYXJhbSBtYXhSZXN1bHRzIFRoZSBtYXggYW1vdW50IG9mIHJldHVybmVkIHJlc3VsdHMuCiAgICAgICogQHBhcmFtIHZhbHVlcyBWYWx1ZXMgdG8gcHV0IGludG8ge0BsaW5rIFByZXBhcmVkU3RhdGVtZW50fSwgaW4gdGhlIG9yZGVyIG9mIHRoZSBsaXN0LiBUaGlzIExpc3QgaXMgY3JlYXRlZCBmcm9tCiAgICAgICogICAgICAgICAgICB0aGUgb3V0c2lkZSBhbmQgdGhpcyBtZXRob2QgaXMgc3VwcG9zZWQgdG8gZmlsbCBpdCB3aXRoIG5lY2Vzc2FyeSB2YWx1ZXMsIGlmIGFueS4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvYXBpL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvYXBpL3BhY2thZ2UuaHRtbAppbmRleCA3ZGRkMjQ5Li5lNTk0MGFjIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L2FwaS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9hcGkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TUUwgSW5kZXgvUXVlcnkgVmVuZG9ycyBTdXBwb3J0IEFQSS48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9jb21tb24vUmVidWlsZGluZ1N0cmF0ZWd5LmphdmEgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L2NvbW1vbi9SZWJ1aWxkaW5nU3RyYXRlZ3kuamF2YQppbmRleCAxOTAwNWQ5Li5jODk3YTljIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L2NvbW1vbi9SZWJ1aWxkaW5nU3RyYXRlZ3kuamF2YQorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L2NvbW1vbi9SZWJ1aWxkaW5nU3RyYXRlZ3kuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogCiAgICAgLyoqCiAgICAgICogVGhlIHJlLWJ1aWxkaW5nIHN0cmF0ZWd5IHdoaWNoIE5FVkVSIHJlLWJ1aWxkcyB0aGUgZGF0YWJhc2Ugc2NoZW1hLiBVc2VmdWwgd2hlbiBjdXJyZW50Ci0gICAgICogUWk0ai1yZWxhdGVkIGRhdGFiYXNlIHNjaGVtYSBzdHJ1Y3R1cmUgbXVzdCBiZSBwcmVzZXJ2ZWQgYXQgYWxsIGNvc3RzLgorICAgICAqIFplc3QtcmVsYXRlZCBkYXRhYmFzZSBzY2hlbWEgc3RydWN0dXJlIG11c3QgYmUgcHJlc2VydmVkIGF0IGFsbCBjb3N0cy4KICAgICAgKi8KICAgICBwdWJsaWMgY2xhc3MgTmV2ZXJOZWVkCiAgICAgICAgIGltcGxlbWVudHMgUmVidWlsZGluZ1N0cmF0ZWd5CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L2NvbW1vbi9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L2NvbW1vbi9wYWNrYWdlLmh0bWwKaW5kZXggOTZiZDI2Ny4uY2UwNDY2MiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9jb21tb24vcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvY29tbW9uL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U1FMIEluZGV4L1F1ZXJ5IFZlbmRvcnMgQ29tbW9uIFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvZGVyYnkvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9kZXJieS9wYWNrYWdlLmh0bWwKaW5kZXggM2E3ZDY1NC4uYzU4OTliYSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9kZXJieS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9kZXJieS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNRTCBJbmRleC9RdWVyeSBBcGFjaGUgRGVyYnkgU3VwcG9ydC48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9wb3N0Z3Jlc3FsL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvcG9zdGdyZXNxbC9wYWNrYWdlLmh0bWwKaW5kZXggZGY4ODBhMC4uYTFiZWMxNSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9wb3N0Z3Jlc3FsL3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L3Bvc3RncmVzcWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TUUwgSW5kZXgvUXVlcnkgUG9zdGdyZVNRTCBTdXBwb3J0LjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L3NrZWxldG9ucy9BYnN0cmFjdFNRTEluZGV4aW5nLmphdmEgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L3NrZWxldG9ucy9BYnN0cmFjdFNRTEluZGV4aW5nLmphdmEKaW5kZXggNWYzNDU3YS4uM2E0YTFkOSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9za2VsZXRvbnMvQWJzdHJhY3RTUUxJbmRleGluZy5qYXZhCisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvc2tlbGV0b25zL0Fic3RyYWN0U1FMSW5kZXhpbmcuamF2YQpAQCAtNDcsNyArNDcsNiBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlczsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLlNwZWNpZmljYXRpb247CiBpbXBvcnQgb3JnLnFpNGouaW5kZXguc3FsLnN1cHBvcnQuYXBpLlNRTEluZGV4aW5nOwpAQCAtMzY4LDcgKzM2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXp5PFByZXBhcmVkU3RhdGVtZW50LCBTUUxFeGNlcHRpb24+IHF1ZXJ5UEtQUyApCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIC8vIFRPRE8gYnVpbGQgY2FjaGU6IFFpNGogSWRlbnRpdHkgLT4gUEsKKyAgICAgICAgLy8gVE9ETyBidWlsZCBjYWNoZTogWmVzdCBJZGVudGl0eSAtPiBQSwogICAgICAgICBMb25nIGVudGl0eVBLID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBxdWVyeVBLUFMuZ2V0VmFsdWUoKTsKICAgICAgICAgcHMuc2V0U3RyaW5nKCAxLCBzdGF0ZS5pZGVudGl0eSgpLmlkZW50aXR5KCkgKTsKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvc2tlbGV0b25zL0Fic3RyYWN0U1FMU3RhcnR1cC5qYXZhIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9za2VsZXRvbnMvQWJzdHJhY3RTUUxTdGFydHVwLmphdmEKaW5kZXggZGRiMjA0MS4uNWQzNTIzNiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9za2VsZXRvbnMvQWJzdHJhY3RTUUxTdGFydHVwLmphdmEKKysrIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9za2VsZXRvbnMvQWJzdHJhY3RTUUxTdGFydHVwLmphdmEKQEAgLTE0ODYsNyArMTQ4Niw2IEBACiAgICAgICAgIGlmKCAhbmV3UU5hbWVzLmNvbnRhaW5zKCBxTmFtZSApICYmICFxTmFtZS5uYW1lKCkuZXF1YWxzKCBJZGVudGl0eS5jbGFzcy5nZXROYW1lKCkgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIG5ld1FOYW1lcy5hZGQoIHFOYW1lICk7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlFOYW1lOiAiICsgcU5hbWUgKyAiLCBoYzogIiArIHFOYW1lLmhhc2hDb2RlKCkpOwogICAgICAgICAgICAgUU5hbWVJbmZvIGluZm8gPSBxTmFtZUluZm9zLmdldCggcU5hbWUgKTsKICAgICAgICAgICAgIGlmKCBpbmZvID09IG51bGwgKQogICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9za2VsZXRvbnMvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9za2VsZXRvbnMvcGFja2FnZS5odG1sCmluZGV4IDFmOGZlNzUuLjYzMDUzY2YgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvc2tlbGV0b25zL3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L3NrZWxldG9ucy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNRTCBJbmRleC9RdWVyeSBWZW5kb3JzIFN1cHBvcnQgU2tlbGV0b25zLjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L3NxbGl0ZS9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3NxbC9zdXBwb3J0L3NxbGl0ZS9wYWNrYWdlLmh0bWwKaW5kZXggMTk2OGE1Mi4uNzU2NDUwMyAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9zcWwvc3VwcG9ydC9zcWxpdGUvcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvc3FsL3N1cHBvcnQvc3FsaXRlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U1FMIEluZGV4L1F1ZXJ5IFNRTGl0ZSBTdXBwb3J0LjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay54bWwgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay54bWwKaW5kZXggYjZhZjE2MC4uOTRlYjkyYyAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2sueG1sCisrKyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGNvbmZpZ3VyYXRpb24+CiAKICAgICA8YXBwZW5kZXIgbmFtZT0ic3Rkb3V0IiBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5Db25zb2xlQXBwZW5kZXIiPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL3Bvc3RncmVzLWRhdGFzb3VyY2UucHJvcGVydGllcyBiL2V4dGVuc2lvbnMvaW5kZXhpbmctc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9wb3N0Z3Jlcy1kYXRhc291cmNlLnByb3BlcnRpZXMKaW5kZXggYTkwNmQ4NC4uZjdkN2FkNSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9pbmRleGluZy1zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL3Bvc3RncmVzLWRhdGFzb3VyY2UucHJvcGVydGllcworKysgYi9leHRlbnNpb25zL2luZGV4aW5nLXNxbC9zcmMvdGVzdC9yZXNvdXJjZXMvcG9zdGdyZXMtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGVuYWJsZWQ9dHJ1ZQogdXJsPWpkYmM6cG9zdGdyZXNxbDovL2xvY2FsaG9zdDo1NDMyL2pkYmNfdGVzdF9kYgogZHJpdmVyPW9yZy5wb3N0Z3Jlc3FsLkRyaXZlcgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9tZXRyaWNzLXlhbW1lci9OT1RJQ0UgYi9leHRlbnNpb25zL21ldHJpY3MteWFtbWVyL05PVElDRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRkOTEyMi4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zL21ldHJpY3MteWFtbWVyL05PVElDRQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVFpNGogRW50aXR5IFN0b3JlIE1pZ3JhdGlvbiBFeHRlbnNpb24KLUNvcHlyaWdodCAyMDA3LTIwMDgsIFRoZSBRaTRqIERldmVsb3BtZW50IFRlYW0gb2YgaW5kaXZpZHVhbHMuCi0KLVNlZSBodHRwOi8vd3d3LnFpNGoub3JnL2NvbnRyaWJ1dG9ycy5odG1sIGZvciBsaXN0IG9mIG9mIGluZGl2aWR1YWxzLgotQWxzbyBzZWUgZWFjaCBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIENvcHlyaWdodCBjbGFpbXMuCi0KLVFpNGogaXMgYSBjb21tdW5pdHkgYWdncmVnYXRlZCB3b3JrcyB1bmRlciBDb3B5cmlnaHQgbGF3LgotQWxsIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCB3b3JrcyBhdCBRaTRqIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2UgdmVyIDIuMCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMKLQotQmVsb3cgZm9sbG93cyBhIGxpc3Qgb2YgYmluYXJ5IGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgbGljZW5zZXM7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTxOT05FPgotCi1UaGlzIGNvbXBvbmVudCB1c2VzIE1ldHJpY3MgZnJvbSBodHRwOi8vbWV0cmljcy5jb2RhaGFsZS5jb20gYW5kCi1odHRwczovL2dpdGh1Yi5jb20vY29kYWhhbGUvbWV0cmljcyBwcm92aWRlZCB1bmRlciBBcGFjaGUgTGljZW5zZSB2Mi4wLgotRU5EIE9GIE5PVElDRQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvbWV0cmljcy15YW1tZXIvYnVpbGQuZ3JhZGxlIGIvZXh0ZW5zaW9ucy9tZXRyaWNzLXlhbW1lci9idWlsZC5ncmFkbGUKaW5kZXggN2ZmMWEwMC4uYzg5ZWJhMSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9tZXRyaWNzLXlhbW1lci9idWlsZC5ncmFkbGUKKysrIGIvZXh0ZW5zaW9ucy9tZXRyaWNzLXlhbW1lci9idWlsZC5ncmFkbGUKQEAgLTE0LDkgKzE0LDkgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLWRlc2NyaXB0aW9uID0gIlFpNGogTWV0cmljcyBFeHRlbnNpb24iCitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBNZXRyaWNzIEV4dGVuc2lvbiIKIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogRXh0ZW5zaW9uIC0gTWV0cmljcyIgfX0KK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBFeHRlbnNpb24gLSBNZXRyaWNzIiB9fQogCiBkZXBlbmRlbmNpZXMgewogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL21ldHJpY3MteWFtbWVyL3NyYy9kb2NzL21ldHJpY3MteWFtbWVyLnR4dCBiL2V4dGVuc2lvbnMvbWV0cmljcy15YW1tZXIvc3JjL2RvY3MvbWV0cmljcy15YW1tZXIudHh0CmluZGV4IDBiYTgwYzEuLjYyMWE5YzQgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvbWV0cmljcy15YW1tZXIvc3JjL2RvY3MvbWV0cmljcy15YW1tZXIudHh0CisrKyBiL2V4dGVuc2lvbnMvbWV0cmljcy15YW1tZXIvc3JjL2RvY3MvbWV0cmljcy15YW1tZXIudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2V4dGVuc2lvbi1tZXRyaWNzLXlhbW1lciwgWWFtbWVyIE1ldHJpY3NdXQogPSBZYW1tZXIgTWV0cmljcyA9CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvbWV0cmljcy15YW1tZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tZXRyaWNzL3lhbW1lci9ZYW1tZXJNZXRyaWNzTWl4aW4uamF2YSBiL2V4dGVuc2lvbnMvbWV0cmljcy15YW1tZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tZXRyaWNzL3lhbW1lci9ZYW1tZXJNZXRyaWNzTWl4aW4uamF2YQppbmRleCA0MTljYjI2Li4xNmE4MDkxIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL21ldHJpY3MteWFtbWVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWV0cmljcy95YW1tZXIvWWFtbWVyTWV0cmljc01peGluLmphdmEKKysrIGIvZXh0ZW5zaW9ucy9tZXRyaWNzLXlhbW1lci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21ldHJpY3MveWFtbWVyL1lhbW1lck1ldHJpY3NNaXhpbi5qYXZhCkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnYXVnZS52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSApOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWWFtbWVyR2F1Z2U8VD4oIHlhbW1lciApOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWWFtbWVyR2F1Z2U8PiggeWFtbWVyICk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9tZXRyaWNzLXlhbW1lci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21ldHJpY3MveWFtbWVyL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvbWV0cmljcy15YW1tZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tZXRyaWNzL3lhbW1lci9wYWNrYWdlLmh0bWwKaW5kZXggOTJmZTQyNS4uMmI0NGQyNCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9tZXRyaWNzLXlhbW1lci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21ldHJpY3MveWFtbWVyL3BhY2thZ2UuaHRtbAorKysgYi9leHRlbnNpb25zL21ldHJpY3MteWFtbWVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWV0cmljcy95YW1tZXIvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5ZYW1lciBNZXRyaWNzLjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL21pZ3JhdGlvbi9OT1RJQ0UgYi9leHRlbnNpb25zL21pZ3JhdGlvbi9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZjgxNmUuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9taWdyYXRpb24vTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotUWk0aiBFbnRpdHkgU3RvcmUgTWlncmF0aW9uIEV4dGVuc2lvbgotQ29weXJpZ2h0IDIwMDctMjAwOCwgVGhlIFFpNGogRGV2ZWxvcG1lbnQgVGVhbSBvZiBpbmRpdmlkdWFscy4KLQotU2VlIGh0dHA6Ly93d3cucWk0ai5vcmcvY29udHJpYnV0b3JzLmh0bWwgZm9yIGxpc3Qgb2Ygb2YgaW5kaXZpZHVhbHMuCi1BbHNvIHNlZSBlYWNoIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgQ29weXJpZ2h0IGNsYWltcy4KLQotUWk0aiBpcyBhIGNvbW11bml0eSBhZ2dyZWdhdGVkIHdvcmtzIHVuZGVyIENvcHlyaWdodCBsYXcuCi1BbGwgcGFydHMgb2YgdGhlIG9yaWdpbmFsIHdvcmtzIGF0IFFpNGogaXMgbGljZW5zZWQgdW5kZXIgdGhlCi1BcGFjaGUgTGljZW5zZSB2ZXIgMi4wIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcwotCi1CZWxvdyBmb2xsb3dzIGEgbGlzdCBvZiBiaW5hcnkgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBsaWNlbnNlczsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotPE5PTkU+Ci0KLQotRU5EIE9GIE5PVElDRQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvbWlncmF0aW9uL2J1aWxkLmdyYWRsZSBiL2V4dGVuc2lvbnMvbWlncmF0aW9uL2J1aWxkLmdyYWRsZQppbmRleCBkNWJkOGMzLi5mYTMwNzJhIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL21pZ3JhdGlvbi9idWlsZC5ncmFkbGUKKysrIGIvZXh0ZW5zaW9ucy9taWdyYXRpb24vYnVpbGQuZ3JhZGxlCkBAIC0xLDkgKzEsMjkgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogTWlncmF0aW9uIEV4dGVuc2lvbiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIE1pZ3JhdGlvbiIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIE1pZ3JhdGlvbiBFeHRlbnNpb24iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBFeHRlbnNpb24gLSBNaWdyYXRpb24iIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5zcGkiKSkKKyAgY29tcGlsZSBsaWJyYXJpZXMuc2xmNGpfYXBpCiAKICAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL21pZ3JhdGlvbi9kZXYtc3RhdHVzLnhtbCBiL2V4dGVuc2lvbnMvbWlncmF0aW9uL2Rldi1zdGF0dXMueG1sCmluZGV4IGQ2YzU2YWMuLmY2YjYwZTQgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvbWlncmF0aW9uL2Rldi1zdGF0dXMueG1sCisrKyBiL2V4dGVuc2lvbnMvbWlncmF0aW9uL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9taWdyYXRpb24vc3JjL2RvY3MvbWlncmF0aW9uLnR4dCBiL2V4dGVuc2lvbnMvbWlncmF0aW9uL3NyYy9kb2NzL21pZ3JhdGlvbi50eHQKaW5kZXggMjNjYjlmMy4uZTZjMGZmMSAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9taWdyYXRpb24vc3JjL2RvY3MvbWlncmF0aW9uLnR4dAorKysgYi9leHRlbnNpb25zL21pZ3JhdGlvbi9zcmMvZG9jcy9taWdyYXRpb24udHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2V4dGVuc2lvbi1taWdyYXRpb24sIE1pZ3JhdGlvbl1dCiA9IE1pZ3JhdGlvbiA9CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvbWlncmF0aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWlncmF0aW9uL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvbWlncmF0aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWlncmF0aW9uL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbAppbmRleCBjZDI2MmFhLi45ZGFkMTE1IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL21pZ3JhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21pZ3JhdGlvbi9hc3NlbWJseS9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9taWdyYXRpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9taWdyYXRpb24vYXNzZW1ibHkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5FbnRpdGllcyBNaWdyYXRpb24gQXNzZW1ibHkuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvbWlncmF0aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWlncmF0aW9uL29wZXJhdGlvbi9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL21pZ3JhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21pZ3JhdGlvbi9vcGVyYXRpb24vcGFja2FnZS5odG1sCmluZGV4IDI5ZDM1NGEuLjc3MTE1YjAgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvbWlncmF0aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWlncmF0aW9uL29wZXJhdGlvbi9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9taWdyYXRpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9taWdyYXRpb24vb3BlcmF0aW9uL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RW50aXRpZXMgTWlncmF0aW9uIE9wZXJhdGlvbnMuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvbWlncmF0aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWlncmF0aW9uL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvbWlncmF0aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWlncmF0aW9uL3BhY2thZ2UuaHRtbAppbmRleCA5NDg1ZWM0Li4zZWVjNjA4IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL21pZ3JhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21pZ3JhdGlvbi9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9taWdyYXRpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9taWdyYXRpb24vcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5FbnRpdGllcyBNaWdyYXRpb24gRXh0ZW5zaW9uLjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL3JlaW5kZXhlci9OT1RJQ0UgYi9leHRlbnNpb25zL3JlaW5kZXhlci9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOTg4YzYuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotUWk0aiBSZS1JbmRleGluZyBFeHRlbnNpb24KLUNvcHlyaWdodCAyMDA3LTIwMDgsIFRoZSBRaTRqIERldmVsb3BtZW50IFRlYW0gb2YgaW5kaXZpZHVhbHMuCi0KLVNlZSBodHRwOi8vd3d3LnFpNGoub3JnL2NvbnRyaWJ1dG9ycy5odG1sIGZvciBsaXN0IG9mIG9mIGluZGl2aWR1YWxzLgotQWxzbyBzZWUgZWFjaCBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIENvcHlyaWdodCBjbGFpbXMuCi0KLVFpNGogaXMgYSBjb21tdW5pdHkgYWdncmVnYXRlZCB3b3JrcyB1bmRlciBDb3B5cmlnaHQgbGF3LgotQWxsIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCB3b3JrcyBhdCBRaTRqIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2UgdmVyIDIuMCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMKLQotQmVsb3cgZm9sbG93cyBhIGxpc3Qgb2YgYmluYXJ5IGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgbGljZW5zZXM7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTxOT05FPgotCi0KLUVORCBPRiBOT1RJQ0UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL3JlaW5kZXhlci9idWlsZC5ncmFkbGUgYi9leHRlbnNpb25zL3JlaW5kZXhlci9idWlsZC5ncmFkbGUKaW5kZXggMzVhZTZlYi4uMDE4YWNlMCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvYnVpbGQuZ3JhZGxlCisrKyBiL2V4dGVuc2lvbnMvcmVpbmRleGVyL2J1aWxkLmdyYWRsZQpAQCAtMSw4ICsxLDI3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IGRlc2NyaXB0aW9uID0gIlFpNGogUmVpbmRleGVyIEV4dGVuc2lvbiIgfX0KK2phciB7IG1hbmlmZXN0IHsgZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgUmVpbmRleGVyIEV4dGVuc2lvbiIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnNwaSIpKQorICBjb21waWxlKGxpYnJhcmllcy5zbGY0al9hcGkpCiAKICAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQogICB0ZXN0Q29tcGlsZShwcm9qZWN0KCc6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24uZW50aXR5c3RvcmUtamRibScpKQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvZGV2LXN0YXR1cy54bWwgYi9leHRlbnNpb25zL3JlaW5kZXhlci9kZXYtc3RhdHVzLnhtbAppbmRleCBkNmM1NmFjLi5mNmI2MGU0IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3JlaW5kZXhlci9kZXYtc3RhdHVzLnhtbAorKysgYi9leHRlbnNpb25zL3JlaW5kZXhlci9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy9kb2NzL3JlaW5kZXhlci50eHQgYi9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvZG9jcy9yZWluZGV4ZXIudHh0CmluZGV4IDU1MTZmYzEuLjdlOGE3M2IgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy9kb2NzL3JlaW5kZXhlci50eHQKKysrIGIvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvc3JjL2RvY3MvcmVpbmRleGVyLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tleHRlbnNpb24tcmVpbmRleGVyLFJlaW5kZXhlcl1dCiA9IFJlaW5kZXhlciA9CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmVpbmRleGVyL2ludGVybmFsL1JlaW5kZXhlck1peGluLmphdmEgYi9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JlaW5kZXhlci9pbnRlcm5hbC9SZWluZGV4ZXJNaXhpbi5qYXZhCmluZGV4IDIxMTIwNmIuLjU2MzhjZDMgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmVpbmRleGVyL2ludGVybmFsL1JlaW5kZXhlck1peGluLmphdmEKKysrIGIvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZWluZGV4ZXIvaW50ZXJuYWwvUmVpbmRleGVyTWl4aW4uamF2YQpAQCAtMjYsNyArMjYsNiBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKIGltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwogaW1wb3J0IG9yZy5xaTRqLmluZGV4LnJlaW5kZXhlci5SZWluZGV4ZXI7CiBpbXBvcnQgb3JnLnFpNGouaW5kZXgucmVpbmRleGVyLlJlaW5kZXhlckNvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLnFpNGouaW8uT3V0cHV0OwpAQCAtMzUsOTkgKzM0LDEwNCBAQAogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHkuRW50aXR5U3RhdGU7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5TdGF0ZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKIHB1YmxpYyBjbGFzcyBSZWluZGV4ZXJNaXhpbgotICAgICAgICBpbXBsZW1lbnRzIFJlaW5kZXhlcgorICAgIGltcGxlbWVudHMgUmVpbmRleGVyCiB7Ci0gICBwcml2YXRlIHN0YXRpYyBRdWFsaWZpZWROYW1lIGlkZW50aXR5UU47CisgICAgcHJpdmF0ZSBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpZGVudGl0eVFOOwogCi0gICBzdGF0aWMKLSAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAgaWRlbnRpdHlRTiA9IFF1YWxpZmllZE5hbWUuZnJvbUFjY2Vzc29yKCBJZGVudGl0eS5jbGFzcy5nZXRNZXRob2QoICJpZGVudGl0eSIgKSApOwotICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiUWk0aiBDb3JlIFJ1bnRpbWUgY29kZWJhc2UgaXMgY29ycnVwdGVkLiBDb250YWN0IFFpNGogdGVhbTogUmVpbmRleGVyTWl4aW4iKTsKLSAgICAgIH0KLSAgIH0KKyAgICBzdGF0aWMKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBpZGVudGl0eVFOID0gUXVhbGlmaWVkTmFtZS5mcm9tQWNjZXNzb3IoIElkZW50aXR5LmNsYXNzLmdldE1ldGhvZCggImlkZW50aXR5IiApICk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlICkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoICJaZXN0IENvcmUgUnVudGltZSBjb2RlYmFzZSBpcyBjb3JydXB0ZWQuIENvbnRhY3QgWmVzdCB0ZWFtOiBSZWluZGV4ZXJNaXhpbiIgKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgQFRoaXMKLSAgIHByaXZhdGUgQ29uZmlndXJhdGlvbjxSZWluZGV4ZXJDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uOworICAgIEBUaGlzCisgICAgcHJpdmF0ZSBDb25maWd1cmF0aW9uPFJlaW5kZXhlckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb247CiAKLSAgIEBTZXJ2aWNlCi0gICBwcml2YXRlIEVudGl0eVN0b3JlIHN0b3JlOwotICAgQFNlcnZpY2UKLSAgIHByaXZhdGUgSXRlcmFibGU8U2VydmljZVJlZmVyZW5jZTxTdGF0ZUNoYW5nZUxpc3RlbmVyPj4gbGlzdGVuZXJzOwotICAgQFN0cnVjdHVyZQotICAgcHJpdmF0ZSBNb2R1bGUgbW9kdWxlOworICAgIEBTZXJ2aWNlCisgICAgcHJpdmF0ZSBFbnRpdHlTdG9yZSBzdG9yZTsKIAotICAgcHJpdmF0ZSBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoUmVpbmRleGVyLmNsYXNzKTsKKyAgICBAU2VydmljZQorICAgIHByaXZhdGUgSXRlcmFibGU8U2VydmljZVJlZmVyZW5jZTxTdGF0ZUNoYW5nZUxpc3RlbmVyPj4gbGlzdGVuZXJzOworCisgICAgQFN0cnVjdHVyZQorICAgIHByaXZhdGUgTW9kdWxlU3BpIG1vZHVsZTsKKworICAgIHByaXZhdGUgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCBSZWluZGV4ZXIuY2xhc3MgKTsKIAogICAgIEBPdmVycmlkZQotICAgcHVibGljIHZvaWQgcmVpbmRleCgpCi0gICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnJlZnJlc2goKTsKLSAgICAgIFJlaW5kZXhlckNvbmZpZ3VyYXRpb24gY29uZiA9IGNvbmZpZ3VyYXRpb24uZ2V0KCk7Ci0gICAgICBJbnRlZ2VyIGxvYWRWYWx1ZSA9IGNvbmYubG9hZFZhbHVlKCkuZ2V0KCk7Ci0gICAgICBpZiAobG9hZFZhbHVlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgICBsb2FkVmFsdWUgPSA1MDsKLSAgICAgIH0KLSAgICAgIG5ldyBSZWluZGV4ZXJPdXRwdXQobG9hZFZhbHVlKS5yZWluZGV4KHN0b3JlKTsKLSAgIH0KKyAgICBwdWJsaWMgdm9pZCByZWluZGV4KCkKKyAgICB7CisgICAgICAgIGNvbmZpZ3VyYXRpb24ucmVmcmVzaCgpOworICAgICAgICBSZWluZGV4ZXJDb25maWd1cmF0aW9uIGNvbmYgPSBjb25maWd1cmF0aW9uLmdldCgpOworICAgICAgICBJbnRlZ2VyIGxvYWRWYWx1ZSA9IGNvbmYubG9hZFZhbHVlKCkuZ2V0KCk7CisgICAgICAgIGlmKCBsb2FkVmFsdWUgPT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRWYWx1ZSA9IDUwOworICAgICAgICB9CisgICAgICAgIG5ldyBSZWluZGV4ZXJPdXRwdXQoIGxvYWRWYWx1ZSApLnJlaW5kZXgoIHN0b3JlICk7CisgICAgfQogCi0gICBwcml2YXRlIGNsYXNzIFJlaW5kZXhlck91dHB1dAotICAgICAgICAgICBpbXBsZW1lbnRzIE91dHB1dDxFbnRpdHlTdGF0ZSwgUnVudGltZUV4Y2VwdGlvbj4sIFJlY2VpdmVyPEVudGl0eVN0YXRlLCBSdW50aW1lRXhjZXB0aW9uPgotICAgewotICAgICAgcHJpdmF0ZSBpbnQgY291bnQ7Ci0gICAgICBwcml2YXRlIGludCBsb2FkVmFsdWU7Ci0gICAgICBwcml2YXRlIEFycmF5TGlzdDxFbnRpdHlTdGF0ZT4gc3RhdGVzOworICAgIHByaXZhdGUgY2xhc3MgUmVpbmRleGVyT3V0cHV0CisgICAgICAgIGltcGxlbWVudHMgT3V0cHV0PEVudGl0eVN0YXRlLCBSdW50aW1lRXhjZXB0aW9uPiwgUmVjZWl2ZXI8RW50aXR5U3RhdGUsIFJ1bnRpbWVFeGNlcHRpb24+CisgICAgeworICAgICAgICBwcml2YXRlIGludCBjb3VudDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbG9hZFZhbHVlOworICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxFbnRpdHlTdGF0ZT4gc3RhdGVzOwogCi0gICAgICBwdWJsaWMgUmVpbmRleGVyT3V0cHV0KEludGVnZXIgbG9hZFZhbHVlKQotICAgICAgewotICAgICAgICAgdGhpcy5sb2FkVmFsdWUgPSBsb2FkVmFsdWU7Ci0gICAgICAgICBzdGF0ZXMgPSBuZXcgQXJyYXlMaXN0PEVudGl0eVN0YXRlPigpOwotICAgICAgfQorICAgICAgICBwdWJsaWMgUmVpbmRleGVyT3V0cHV0KCBJbnRlZ2VyIGxvYWRWYWx1ZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMubG9hZFZhbHVlID0gbG9hZFZhbHVlOworICAgICAgICAgICAgc3RhdGVzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIH0KIAotICAgICAgcHVibGljIHZvaWQgcmVpbmRleChFbnRpdHlTdG9yZSBzdG9yZSkKLSAgICAgIHsKKyAgICAgICAgcHVibGljIHZvaWQgcmVpbmRleCggRW50aXR5U3RvcmUgc3RvcmUgKQorICAgICAgICB7CiAKLSAgICAgICAgIHN0b3JlLmVudGl0eVN0YXRlcyhtb2R1bGUpLnRyYW5zZmVyVG8odGhpcyk7Ci0gICAgICAgICByZWluZGV4U3RhdGUoKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgPFNlbmRlclRocm93YWJsZVR5cGUgZXh0ZW5kcyBUaHJvd2FibGU+IHZvaWQgcmVjZWl2ZUZyb20oU2VuZGVyPD8gZXh0ZW5kcyBFbnRpdHlTdGF0ZSwgU2VuZGVyVGhyb3dhYmxlVHlwZT4gc2VuZGVyKSB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiwgU2VuZGVyVGhyb3dhYmxlVHlwZQotICAgICAgewotICAgICAgICAgc2VuZGVyLnNlbmRUbyh0aGlzKTsKLSAgICAgICAgIHJlaW5kZXhTdGF0ZSgpOwotICAgICAgfQotCi0gICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCByZWNlaXZlKEVudGl0eVN0YXRlIGl0ZW0pCi0gICAgICAgICAgICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uCi0gICAgICB7Ci0gICAgICAgICBjb3VudCsrOwotICAgICAgICAgaXRlbS5zZXRQcm9wZXJ0eVZhbHVlKCBpZGVudGl0eVFOLCBpdGVtLmlkZW50aXR5KCkuaWRlbnRpdHkoKSApOwotICAgICAgICAgc3RhdGVzLmFkZChpdGVtKTsKLQotICAgICAgICAgaWYgKHN0YXRlcy5zaXplKCkgPj0gbG9hZFZhbHVlKQotICAgICAgICAgeworICAgICAgICAgICAgc3RvcmUuZW50aXR5U3RhdGVzKCBtb2R1bGUgKS50cmFuc2ZlclRvKCB0aGlzICk7CiAgICAgICAgICAgICByZWluZGV4U3RhdGUoKTsKLSAgICAgICAgIH0KLSAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICBwdWJsaWMgdm9pZCByZWluZGV4U3RhdGUoKQotICAgICAgewotICAgICAgICAgZm9yIChTZXJ2aWNlUmVmZXJlbmNlPFN0YXRlQ2hhbmdlTGlzdGVuZXI+IGxpc3RlbmVyIDogbGlzdGVuZXJzKQotICAgICAgICAgewotICAgICAgICAgICAgbGlzdGVuZXIuZ2V0KCkubm90aWZ5Q2hhbmdlcyhzdGF0ZXMpOwotICAgICAgICAgfQotICAgICAgICAgc3RhdGVzLmNsZWFyKCk7Ci0gICAgICAgICBsb2dnZXIuZGVidWcoIlJlaW5kZXhlZCAiICsgY291bnQgKyAiIGVudGl0aWVzIik7Ci0gICAgICB9Ci0gICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgPFNlbmRlclRocm93YWJsZVR5cGUgZXh0ZW5kcyBUaHJvd2FibGU+IHZvaWQgcmVjZWl2ZUZyb20oIFNlbmRlcjw/IGV4dGVuZHMgRW50aXR5U3RhdGUsIFNlbmRlclRocm93YWJsZVR5cGU+IHNlbmRlciApCisgICAgICAgICAgICB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiwgU2VuZGVyVGhyb3dhYmxlVHlwZQorICAgICAgICB7CisgICAgICAgICAgICBzZW5kZXIuc2VuZFRvKCB0aGlzICk7CisgICAgICAgICAgICByZWluZGV4U3RhdGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCByZWNlaXZlKCBFbnRpdHlTdGF0ZSBpdGVtICkKKyAgICAgICAgICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICBpdGVtLnNldFByb3BlcnR5VmFsdWUoIGlkZW50aXR5UU4sIGl0ZW0uaWRlbnRpdHkoKS5pZGVudGl0eSgpICk7CisgICAgICAgICAgICBzdGF0ZXMuYWRkKCBpdGVtICk7CisKKyAgICAgICAgICAgIGlmKCBzdGF0ZXMuc2l6ZSgpID49IGxvYWRWYWx1ZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVpbmRleFN0YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCByZWluZGV4U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIFNlcnZpY2VSZWZlcmVuY2U8U3RhdGVDaGFuZ2VMaXN0ZW5lcj4gbGlzdGVuZXIgOiBsaXN0ZW5lcnMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpc3RlbmVyLmdldCgpLm5vdGlmeUNoYW5nZXMoIHN0YXRlcyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVzLmNsZWFyKCk7CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoICJSZWluZGV4ZWQgIiArIGNvdW50ICsgIiBlbnRpdGllcyIgKTsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmVpbmRleGVyL2ludGVybmFsL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmVpbmRleGVyL2ludGVybmFsL3BhY2thZ2UuaHRtbAppbmRleCBlNDc0NGRjLi4wZDUyNTI5IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JlaW5kZXhlci9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZWluZGV4ZXIvaW50ZXJuYWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5FbnRpdGllcyBSZWluZGV4ZXIgRXh0ZW5zaW9uIEludGVybmFsIFBhY2thZ2UuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmVpbmRleGVyL3BhY2thZ2UuaHRtbCBiL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaW5kZXgvcmVpbmRleGVyL3BhY2thZ2UuaHRtbAppbmRleCBiZTA3ZTE1Li41YTAyNjg3IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2luZGV4L3JlaW5kZXhlci9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pbmRleC9yZWluZGV4ZXIvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5FbnRpdGllcyBSZWluZGV4ZXIgRXh0ZW5zaW9uLjwvaDI+CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2luZGV4L3JlaW5kZXhlci9SZWluZGV4ZXJUZXN0LmphdmEgYi9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2luZGV4L3JlaW5kZXhlci9SZWluZGV4ZXJUZXN0LmphdmEKaW5kZXggZDY1NmI2Zi4uOTIzMTUxZCAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9pbmRleC9yZWluZGV4ZXIvUmVpbmRleGVyVGVzdC5qYXZhCisrKyBiL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovaW5kZXgvcmVpbmRleGVyL1JlaW5kZXhlclRlc3QuamF2YQpAQCAtMzksNyArMzksOSBAQAogaW1wb3J0IG9yZy5xaTRqLnRlc3QuQWJzdHJhY3RRaTRqVGVzdDsKIGltcG9ydCBvcmcucWk0ai50ZXN0LkVudGl0eVRlc3RBc3NlbWJsZXI7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhhdDsKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouYXBpLnF1ZXJ5LlF1ZXJ5RXhwcmVzc2lvbnMuZXE7CiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmFwaS5xdWVyeS5RdWVyeUV4cHJlc3Npb25zLnRlbXBsYXRlRm9yOwogCkBAIC04NSw2ICs4NywxMCBAQAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZURhdGFXaXBlSW5kZXhSZWluZGV4QW5kQXNzZXJ0RGF0YSgpCiAgICAgICAgICAgICB0aHJvd3MgVW5pdE9mV29ya0NvbXBsZXRpb25FeGNlcHRpb24KICAgICB7CisgICAgICAgIEZpbGUgcmRmRGlyID0gbmV3IEZpbGUoIFN5c3RlbS5nZXRQcm9wZXJ0eSggInVzZXIuZGlyIiApLCAiYnVpbGQvdGVzdGRhdGEvcWk0ai1pbmRleCIgKS5nZXRBYnNvbHV0ZUZpbGUoKTsKKyAgICAgICAgcmRmRGlyLm1rZGlycygpOworICAgICAgICBhc3NlcnRUaGF0KCByZGZEaXIuZXhpc3RzKCksIGlzKHRydWUpICk7CisKICAgICAgICAgLy8gLS0tLT4gQ3JlYXRlIGRhdGEgYW5kIHdpcGUgaW5kZXgKIAogICAgICAgICBVbml0T2ZXb3JrIHVvdyA9IG1vZHVsZS5uZXdVbml0T2ZXb3JrKCk7CkBAIC05Nyw2ICsxMDMsNyBAQAogICAgICAgICB1b3cuY29tcGxldGUoKTsKIAogICAgICAgICBkZWxldGVJbmRleERhdGEoKTsgLy8gV2lwZSB0aGUgaW5kZXggZGF0YSBvbiBkaXNrCisgICAgICAgIHJkZkRpci5ta2RpcnMoKTsKIAogCiAgICAgICAgIC8vIC0tLS0+IFJlaW5kZXggYW5kIGFzc2VydCBkYXRhCkBAIC0xMzIsNyArMTM5LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRlbGV0ZUVudGl0aWVzRGF0YSgpCiAgICAgewogICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICBGaWxlIGVzRGlyID0gbmV3IEZpbGUoICJidWlsZC90ZXN0ZGF0YS9xaTRqLWVudGl0aWVzIiApOworICAgICAgICBGaWxlIGVzRGlyID0gbmV3IEZpbGUoIFN5c3RlbS5nZXRQcm9wZXJ0eSggInVzZXIuZGlyIiApLCAiYnVpbGQvdGVzdGRhdGEvcWk0ai1lbnRpdGllcyIgKS5nZXRBYnNvbHV0ZUZpbGUoKTsKICAgICAgICAgaWYgKCBlc0Rpci5leGlzdHMoKSApIHsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBGaWxlVXRpbC5kZWx0cmVlKCBlc0RpciApOwogICAgICAgICB9CkBAIC0xNDIsNyArMTQ5LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRlbGV0ZUluZGV4RGF0YSgpCiAgICAgewogICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICBGaWxlIHJkZkRpciA9IG5ldyBGaWxlKCAiYnVpbGQvdGVzdGRhdGEvcWk0ai1pbmRleCIgKTsKKyAgICAgICAgRmlsZSByZGZEaXIgPSBuZXcgRmlsZSggU3lzdGVtLmdldFByb3BlcnR5KCAidXNlci5kaXIiICksICJidWlsZC90ZXN0ZGF0YS9xaTRqLWluZGV4IiApLmdldEFic29sdXRlRmlsZSgpOwogICAgICAgICBpZiAoIHJkZkRpci5leGlzdHMoKSApIHsKICAgICAgICAgICAgIEZpbGVVdGlscy5kZWxldGUoIHJkZkRpciApOwogICAgICAgICAgICAgc3VjY2VzcyA9IEZpbGVVdGlsLmRlbHRyZWUoIHJkZkRpciApOwpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vSmRibUVudGl0eVN0b3JlU2VydmljZS5wcm9wZXJ0aWVzIGIvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vSmRibUVudGl0eVN0b3JlU2VydmljZS5wcm9wZXJ0aWVzCmluZGV4IDViZGY5NTkuLjUxNGMxMzMgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvcmVpbmRleGVyL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS9qZGJtL0pkYm1FbnRpdHlTdG9yZVNlcnZpY2UucHJvcGVydGllcworKysgYi9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvamRibS9KZGJtRW50aXR5U3RvcmVTZXJ2aWNlLnByb3BlcnRpZXMKQEAgLTEgKzEsMTYgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGZpbGU9YnVpbGQvdGVzdGRhdGEvcWk0ai1lbnRpdGllcy9xaTRqLWVudGl0aWVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9yZWluZGV4ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmRmL3JlcG9zaXRvcnkvcmRmLWluZGV4aW5nLnByb3BlcnRpZXMgYi9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9yZGYtaW5kZXhpbmcucHJvcGVydGllcwppbmRleCBlNTA5NzczLi5kZGQzNTJkIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9yZGYtaW5kZXhpbmcucHJvcGVydGllcworKysgYi9leHRlbnNpb25zL3JlaW5kZXhlci9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9yZGYtaW5kZXhpbmcucHJvcGVydGllcwpAQCAtMSArMSwxNiBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogZGF0YURpcmVjdG9yeT1idWlsZC90ZXN0ZGF0YS9xaTRqLWluZGV4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9idWlsZC5ncmFkbGUgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL2J1aWxkLmdyYWRsZQppbmRleCA0OGZiMWZiLi42MTZlMDFiIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL2J1aWxkLmdyYWRsZQorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIEphY2tzb24gVmFsdWVTZXJpYWxpemF0aW9uIEV4dGVuc2lvbiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIFZhbHVlU2VyaWFsaXphdGlvbiAtIEphY2tzb24iIH0gfQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgSmFja3NvbiBWYWx1ZVNlcmlhbGl6YXRpb24gRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gVmFsdWVTZXJpYWxpemF0aW9uIC0gSmFja3NvbiIgfSB9CiAKIGRlcGVuZGVuY2llcyB7CiAKQEAgLTEwLDcgKzI5LDcgQEAKICAgICB0ZXN0Q29tcGlsZSBwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikKIAogICAgIHRlc3RSdW50aW1lIHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpCi0gICAgdGVzdFJ1bnRpbWUgbGlicmFyaWVzLmxvZ2JhY2sKKyAgICB0ZXN0UnVudGltZSBsaWJyYXJpZXMuc2xmNGpfc2ltcGxlCiAKIH0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9kZXYtc3RhdHVzLnhtbCBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLWphY2tzb24vZGV2LXN0YXR1cy54bWwKaW5kZXggNWJjYzY1Yy4uY2JmNTEyZiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9kZXYtc3RhdHVzLnhtbAorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvZG9jcy92cy1qYWNrc29uLnR4dCBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLWphY2tzb24vc3JjL2RvY3MvdnMtamFja3Nvbi50eHQKaW5kZXggMzA3MTIxNS4uODk4YThkNyAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvZG9jcy92cy1qYWNrc29uLnR4dAorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL3NyYy9kb2NzL3ZzLWphY2tzb24udHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2V4dGVuc2lvbi12cy1qYWNrc29uLCBKYWNrc29uIFZhbHVlU2VyaWFsaXphdGlvbl1dCiA9IEphY2tzb24gVmFsdWVTZXJpYWxpemF0aW9uID0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9qYWNrc29uL0phY2tzb25WYWx1ZURlc2VyaWFsaXplci5qYXZhIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9qYWNrc29uL0phY2tzb25WYWx1ZURlc2VyaWFsaXplci5qYXZhCmluZGV4IDVjNjc3NGIuLjNkODJmNDMgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLWphY2tzb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vamFja3Nvbi9KYWNrc29uVmFsdWVEZXNlcmlhbGl6ZXIuamF2YQorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL2phY2tzb24vSmFja3NvblZhbHVlRGVzZXJpYWxpemVyLmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQubm9kZS5PYmplY3ROb2RlOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TZXJ2aWNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwpAQCAtMzQxLDYgKzM0MiwzMSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIDxWPiB2b2lkIHB1dE9iamVjdE5vZGVJbk1hcCggSnNvbk5vZGUgaW5wdXROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uPEpzb25Ob2RlLCBWPiB2YWx1ZURlc2VyaWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBWPiBtYXAKKyAgICApCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGlmKCBpc051bGxPck1pc3NpbmcoIGlucHV0Tm9kZSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmKCAhaW5wdXROb2RlLmlzT2JqZWN0KCkgKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVTZXJpYWxpemF0aW9uRXhjZXB0aW9uKCAiRXhwZWN0ZWQgYW4gb2JqZWN0IGJ1dCBnb3QgIiArIGlucHV0Tm9kZSApOworICAgICAgICB9CisgICAgICAgIE9iamVjdE5vZGUgb2JqZWN0ID0gKE9iamVjdE5vZGUpIGlucHV0Tm9kZTsKKyAgICAgICAgSXRlcmF0b3I8TWFwLkVudHJ5PFN0cmluZywgSnNvbk5vZGU+PiBmaWVsZHMgPSBvYmplY3QuZmllbGRzKCk7CisgICAgICAgIHdoaWxlKCBmaWVsZHMuaGFzTmV4dCgpICkKKyAgICAgICAgeworICAgICAgICAgICAgTWFwLkVudHJ5PFN0cmluZywgSnNvbk5vZGU+IGVudHJ5ID0gZmllbGRzLm5leHQoKTsKKyAgICAgICAgICAgIFYgdmFsdWUgPSB2YWx1ZURlc2VyaWFsaXplci5tYXAoIGVudHJ5LmdldFZhbHVlKCkgKTsKKyAgICAgICAgICAgIG1hcC5wdXQoIGVudHJ5LmdldEtleSgpLCB2YWx1ZSApOworICAgICAgICB9CisgICAgfQorCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc051bGxPck1pc3NpbmcoIEpzb25Ob2RlIGlucHV0Tm9kZSApCiAgICAgewogICAgICAgICByZXR1cm4gaW5wdXROb2RlID09IG51bGwgfHwgaW5wdXROb2RlLmlzTnVsbCgpIHx8IGlucHV0Tm9kZS5pc01pc3NpbmdOb2RlKCk7CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL2phY2tzb24vcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9qYWNrc29uL3BhY2thZ2UuaHRtbAppbmRleCBmNTJkM2RiLi4wZGU3MjkzIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL2phY2tzb24vcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLWphY2tzb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vamFja3Nvbi9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkphY2tzb24gVmFsdWUgU2VyaWFsaXplci48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9qYWNrc29uL0phY2tzb25Db25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdC5qYXZhIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9qYWNrc29uL0phY2tzb25Db25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMDlhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL2phY2tzb24vSmFja3NvbkNvbmZpZ3VyYXRpb25EZXNlcmlhbGl6YXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCisKK3BhY2thZ2Ugb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLmphY2tzb247CisKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLnRlc3QuZW50aXR5LkFic3RyYWN0Q29uZmlndXJhdGlvbkRlc2VyaWFsaXphdGlvblRlc3Q7CisKK3B1YmxpYyBjbGFzcyBKYWNrc29uQ29uZmlndXJhdGlvbkRlc2VyaWFsaXphdGlvblRlc3QKKyAgICBleHRlbmRzIEFic3RyYWN0Q29uZmlndXJhdGlvbkRlc2VyaWFsaXphdGlvblRlc3QKK3sKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggZmluYWwgTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlci5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIG5ldyBKYWNrc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyKCkKKyAgICAgICAgICAgIC5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvdGVzdC9yZXNvdXJjZXMvY29uZmlndGVzdC5qc29uIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvdGVzdC9yZXNvdXJjZXMvY29uZmlndGVzdC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OGEyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1qYWNrc29uL3NyYy90ZXN0L3Jlc291cmNlcy9jb25maWd0ZXN0Lmpzb24KQEAgLTAsMCArMSw4IEBACit7CisgICJpZGVudGl0eSIgOiAiY29uZmlndGVzdCIsCisgICJob3N0IjogeworICAgICJpcCI6ICIxMi4yMy4zNC40NSIsCisgICAgInBvcnQiOiAxMjM0CisgIH0sCisgICJuYW1lIjogIm1haW4iCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbCBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLWphY2tzb24vc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZWUxM2YuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tamFja3Nvbi9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y29uZmlndXJhdGlvbj4KLQotICAgIDxhcHBlbmRlciBuYW1lPSJzdGRvdXQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgIDxsYXlvdXQgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNsYXNzaWMuUGF0dGVybkxheW91dCI+Ci0gICAgICAgICAgICA8UGF0dGVybj4lLTVsZXZlbCAlbG9nZ2VyezI0fSAtICVtc2clbjwvUGF0dGVybj4KLSAgICAgICAgPC9sYXlvdXQ+Ci0gICAgPC9hcHBlbmRlcj4KLQotICAgIDxyb290IGxldmVsPSJpbmZvIj4KLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9InN0ZG91dCIgLz4KLSAgICA8L3Jvb3Q+Ci0KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5xaTRqLnNwaS52YWx1ZSIgbGV2ZWw9InRyYWNlIi8+Ci0gICAgPGxvZ2dlciBuYW1lPSJvcmcucWk0ai50ZXN0LnZhbHVlIiBsZXZlbD0idHJhY2UiLz4KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5xaTRqLnN0YXRlc2VyaWFsaXplciIgbGV2ZWw9InRyYWNlIi8+Ci0KLTwvY29uZmlndXJhdGlvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uL2J1aWxkLmdyYWRsZSBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24vYnVpbGQuZ3JhZGxlCmluZGV4IGVjMzExZTUuLmE5MTlmNGUgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24vYnVpbGQuZ3JhZGxlCisrKyBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24vYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogb3JnLmpzb24gVmFsdWVTZXJpYWxpemF0aW9uIEV4dGVuc2lvbiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIFZhbHVlU2VyaWFsaXphdGlvbiAtIG9yZy5qc29uIiB9IH0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIG9yZy5qc29uIFZhbHVlU2VyaWFsaXphdGlvbiBFeHRlbnNpb24iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBFeHRlbnNpb24gLSBWYWx1ZVNlcmlhbGl6YXRpb24gLSBvcmcuanNvbiIgfSB9CiAKIGRlcGVuZGVuY2llcyB7CiAKQEAgLTksNyArMjgsNyBAQAogICAgIHRlc3RDb21waWxlIHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiKQogCiAgICAgdGVzdFJ1bnRpbWUgcHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lIikKLSAgICB0ZXN0UnVudGltZSBsaWJyYXJpZXMubG9nYmFjaworICAgIHRlc3RSdW50aW1lIGxpYnJhcmllcy5zbGY0al9zaW1wbGUKIAogfQogCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uL2Rldi1zdGF0dXMueG1sIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbi9kZXYtc3RhdHVzLnhtbAppbmRleCBjZmY0ZjkzLi5iNDFiNGY3IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uL2Rldi1zdGF0dXMueG1sCisrKyBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24vZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uL3NyYy9kb2NzL3ZzLW9yZ2pzb24udHh0IGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbi9zcmMvZG9jcy92cy1vcmdqc29uLnR4dAppbmRleCAwODdhMDA2Li5hODkzYWMwIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uL3NyYy9kb2NzL3ZzLW9yZ2pzb24udHh0CisrKyBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24vc3JjL2RvY3MvdnMtb3JnanNvbi50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbZXh0ZW5zaW9uLXZzLW9yZ2pzb24sIG9yZy5qc29uIFZhbHVlU2VyaWFsaXphdGlvbl1dCiA9IG9yZy5qc29uIFZhbHVlU2VyaWFsaXphdGlvbiA9CiAKZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vb3JnanNvbi9wYWNrYWdlLmh0bWwgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL29yZ2pzb24vcGFja2FnZS5odG1sCmluZGV4IGQwNjk0M2IuLmY4OGJmZjggMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLW9yZ2pzb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vb3JnanNvbi9wYWNrYWdlLmh0bWwKKysrIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9vcmdqc29uL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+b3JnLmpzb24gVmFsdWUgU2VyaWFsaXphdGlvbi48L2gyPgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9vcmdqc29uL09yZ0pzb25Db25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdC5qYXZhIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9vcmdqc29uL09yZ0pzb25Db25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOWNkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL29yZ2pzb24vT3JnSnNvbkNvbmZpZ3VyYXRpb25EZXNlcmlhbGl6YXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCisKK3BhY2thZ2Ugb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLm9yZ2pzb247CisKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLnRlc3QuZW50aXR5LkFic3RyYWN0Q29uZmlndXJhdGlvbkRlc2VyaWFsaXphdGlvblRlc3Q7CisKK3B1YmxpYyBjbGFzcyBPcmdKc29uQ29uZmlndXJhdGlvbkRlc2VyaWFsaXphdGlvblRlc3QKKyAgICBleHRlbmRzIEFic3RyYWN0Q29uZmlndXJhdGlvbkRlc2VyaWFsaXphdGlvblRlc3QKK3sKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggZmluYWwgTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlci5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIG5ldyBPcmdKc29uVmFsdWVTZXJpYWxpemF0aW9uQXNzZW1ibGVyKCkKKyAgICAgICAgICAgIC5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbi9zcmMvdGVzdC9yZXNvdXJjZXMvY29uZmlndGVzdC5qc29uIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbi9zcmMvdGVzdC9yZXNvdXJjZXMvY29uZmlndGVzdC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OGEyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uL3NyYy90ZXN0L3Jlc291cmNlcy9jb25maWd0ZXN0Lmpzb24KQEAgLTAsMCArMSw4IEBACit7CisgICJpZGVudGl0eSIgOiAiY29uZmlndGVzdCIsCisgICJob3N0IjogeworICAgICJpcCI6ICIxMi4yMy4zNC40NSIsCisgICAgInBvcnQiOiAxMjM0CisgIH0sCisgICJuYW1lIjogIm1haW4iCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9idWlsZC5ncmFkbGUgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L2J1aWxkLmdyYWRsZQppbmRleCAxZjk1YWIzLi5lYTA1MTM2IDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L2J1aWxkLmdyYWRsZQorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIFN0YVggVmFsdWVTZXJpYWxpemF0aW9uIEV4dGVuc2lvbiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIEV4dGVuc2lvbiAtIFZhbHVlU2VyaWFsaXphdGlvbiAtIFN0YVgiIH0gfQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgU3RhWCBWYWx1ZVNlcmlhbGl6YXRpb24gRXh0ZW5zaW9uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRXh0ZW5zaW9uIC0gVmFsdWVTZXJpYWxpemF0aW9uIC0gU3RhWCIgfSB9CiAKIGRlcGVuZGVuY2llcyB7CiAKQEAgLTEwLDcgKzI5LDcgQEAKICAgICB0ZXN0Q29tcGlsZSBwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikKIAogICAgIHRlc3RSdW50aW1lIHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpCi0gICAgdGVzdFJ1bnRpbWUgbGlicmFyaWVzLmxvZ2JhY2sKKyAgICB0ZXN0UnVudGltZSBsaWJyYXJpZXMuc2xmNGpfc2ltcGxlCiAKIH0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9kZXYtc3RhdHVzLnhtbCBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLXN0YXgvZGV2LXN0YXR1cy54bWwKaW5kZXggNWJjYzY1Yy4uY2JmNTEyZiAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9kZXYtc3RhdHVzLnhtbAorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9zcmMvZG9jcy92cy1zdGF4LnR4dCBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLXN0YXgvc3JjL2RvY3MvdnMtc3RheC50eHQKaW5kZXggYWJlOWVjZi4uNzMwMmE0NyAxMDA2NDQKLS0tIGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9zcmMvZG9jcy92cy1zdGF4LnR4dAorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L3NyYy9kb2NzL3ZzLXN0YXgudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2V4dGVuc2lvbi12cy1zdGF4LCBTdEFYIFZhbHVlU2VyaWFsaXphdGlvbl1dCiA9IFN0QVggVmFsdWVTZXJpYWxpemF0aW9uID0KIApkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9zdGF4L1N0YXhWYWx1ZURlc2VyaWFsaXplci5qYXZhIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9zdGF4L1N0YXhWYWx1ZURlc2VyaWFsaXplci5qYXZhCmluZGV4IDliZGMzNGEuLjZjNjFmZmIgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLXN0YXgvc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vc3RheC9TdGF4VmFsdWVEZXNlcmlhbGl6ZXIuamF2YQorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL3N0YXgvU3RheFZhbHVlRGVzZXJpYWxpemVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudmFsdWVzZXJpYWxpemF0aW9uLnN0YXg7CiAKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwpAQCAtNDA0LDYgKzQyMiwzMyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIDxWPiB2b2lkIHB1dE9iamVjdE5vZGVJbk1hcCggTm9kZSBpbnB1dE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb248Tm9kZSwgVj4gdmFsdWVEZXNlcmlhbGl6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgVj4gbWFwICkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgaWYoIGlucHV0Tm9kZSA9PSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmKCAhIm9iamVjdCIuZXF1YWxzKCBpbnB1dE5vZGUuZ2V0TG9jYWxOYW1lKCkgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZVNlcmlhbGl6YXRpb25FeGNlcHRpb24oICJFeHBlY3RlZCBhbiA8b2JqZWN0Lz4gYnV0IGdvdCAiICsgaW5wdXROb2RlICk7CisgICAgICAgIH0KKyAgICAgICAgTm9kZUxpc3QgZmllbGRzTm9kZXMgPSBpbnB1dE5vZGUuZ2V0Q2hpbGROb2RlcygpOworICAgICAgICBmb3IoIGludCBpZHggPSAwOyBpZHggPCBmaWVsZHNOb2Rlcy5nZXRMZW5ndGgoKTsgaWR4KysgKQorICAgICAgICB7CisgICAgICAgICAgICBOb2RlIGZpZWxkTm9kZSA9IGZpZWxkc05vZGVzLml0ZW0oIGlkeCApOworICAgICAgICAgICAgU3RyaW5nIGtleSA9IGdldERpcmVjdENoaWxkTm9kZSggZmllbGROb2RlLCAibmFtZSIgKS5nZXRUZXh0Q29udGVudCgpOworICAgICAgICAgICAgaWYoIGtleSAhPSBudWxsICYmIGtleS5sZW5ndGgoKSA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFYgdmFsdWUgPSBnZXRPYmplY3RGaWVsZFZhbHVlKCBpbnB1dE5vZGUsIGtleSwgdmFsdWVEZXNlcmlhbGl6ZXIgKTsKKyAgICAgICAgICAgICAgICBtYXAucHV0KCBrZXksIHZhbHVlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBAU3VwcHJlc3NXYXJuaW5ncyggIkFzc2lnbm1lbnRUb01ldGhvZFBhcmFtZXRlciIgKQogICAgIHByaXZhdGUgT2JqZWN0IGRldGVjdEFuZENvbnZlcnRTdHJpbmdWYWx1ZSggU3RyaW5nIHN0cmluZ1ZhbHVlICkKICAgICB7CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL3N0YXgvcGFja2FnZS5odG1sIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9zdGF4L3BhY2thZ2UuaHRtbAppbmRleCA5OWUwYzAzLi4yZDNhMWRkIDEwMDY0NAotLS0gYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L3NyYy9tYWluL2phdmEvb3JnL3FpNGovdmFsdWVzZXJpYWxpemF0aW9uL3N0YXgvcGFja2FnZS5odG1sCisrKyBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLXN0YXgvc3JjL21haW4vamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vc3RheC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlhNTCBTdEFYIFZhbHVlIFNlcmlhbGl6ZXIuPC9oMj4KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLXN0YXgvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vc3RheC9TdGF4Q29uZmlndXJhdGlvbkRlc2VyaWFsaXphdGlvblRlc3QuamF2YSBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLXN0YXgvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai92YWx1ZXNlcmlhbGl6YXRpb24vc3RheC9TdGF4Q29uZmlndXJhdGlvbkRlc2VyaWFsaXphdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjMyOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3ZhbHVlc2VyaWFsaXphdGlvbi9zdGF4L1N0YXhDb25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqLworCitwYWNrYWdlIG9yZy5xaTRqLnZhbHVlc2VyaWFsaXphdGlvbi5zdGF4OworCitpbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlNlcnZpY2U7CitpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQnVpbGRlcjsKK2ltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVTZXJpYWxpemF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGoudGVzdC5lbnRpdHkuQWJzdHJhY3RDb25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdDsKKworQElnbm9yZSggIkNvbXBsZXggY29uZmlndXJhdGlvbnMgYXJlIG5vdCB5ZXQgc3VwcG9ydCBpbiBTdGF4IFZhbHVlU2VyaWFsaXphdGlvbiwgZHVlIHRvIGhhbmRsaW5nIGFycmF5cyB3aXRoIEphdmEgc2VyaWFsaXphdGlvbi4iKQorcHVibGljIGNsYXNzIFN0YXhDb25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdAorICAgIGV4dGVuZHMgQWJzdHJhY3RDb25maWd1cmF0aW9uRGVzZXJpYWxpemF0aW9uVGVzdAoreworICAgIEBTZXJ2aWNlCisgICAgcHJpdmF0ZSBWYWx1ZVNlcmlhbGl6YXRpb24gdmFsdWVTZXJpYWxpemF0aW9uOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIGZpbmFsIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgc3VwZXIuYXNzZW1ibGUoIG1vZHVsZSApOworICAgICAgICBuZXcgU3RheFZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcigpCisgICAgICAgICAgICAuYXNzZW1ibGUoIG1vZHVsZSApOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2VyaWFsaXplVGVzdCgpCisgICAgeworICAgICAgICBWYWx1ZUJ1aWxkZXI8Q29uZmlnU2VyaWFsaXphdGlvbkNvbmZpZz4gYnVpbGRlciA9IG1vZHVsZS5uZXdWYWx1ZUJ1aWxkZXIoIENvbmZpZ1NlcmlhbGl6YXRpb25Db25maWcuY2xhc3MgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5uYW1lKCkuc2V0KCAibWFpbiIgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5ob3N0KCkuc2V0KCBjcmVhdGVIb3N0KCkgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5pZGVudGl0eSgpLnNldCggImNvbmZpZ3Rlc3QiICk7CisgICAgICAgIENvbmZpZ1NlcmlhbGl6YXRpb25Db25maWcgdmFsdWUgPSBidWlsZGVyLm5ld0luc3RhbmNlKCk7CisKKyAgICAgICAgdmFsdWVTZXJpYWxpemF0aW9uLnNlcmlhbGl6ZSggdmFsdWUsIFN5c3RlbS5vdXQgKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEhvc3QgY3JlYXRlSG9zdCgpCisgICAgeworICAgICAgICBWYWx1ZUJ1aWxkZXI8SG9zdD4gYnVpbGRlciA9IG1vZHVsZS5uZXdWYWx1ZUJ1aWxkZXIoIEhvc3QuY2xhc3MgKTsKKyAgICAgICAgYnVpbGRlci5wcm90b3R5cGUoKS5pcCgpLnNldCggIjEyLjIzLjM0LjQ1IiApOworICAgICAgICBidWlsZGVyLnByb3RvdHlwZSgpLnBvcnQoKS5zZXQoIDEyMzQgKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L3NyYy90ZXN0L3Jlc291cmNlcy9jb25maWd0ZXN0LnhtbCBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLXN0YXgvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbmZpZ3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZDJkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9leHRlbnNpb25zL3ZhbHVlc2VyaWFsaXphdGlvbi1zdGF4L3NyYy90ZXN0L3Jlc291cmNlcy9jb25maWd0ZXN0LnhtbApAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IS0tCisgIH4gIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICB+ICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgfiAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICB+ICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICB+ICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB+ICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIH4KKyAgLS0+CisKKzxvYmplY3Q+CisgIDxmaWVsZD4KKyAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgIDx2YWx1ZT5tYWluPC92YWx1ZT4KKyAgPC9maWVsZD4KKyAgPGZpZWxkPgorICAgIDxuYW1lPmhvc3Q8L25hbWU+CisgICAgPHZhbHVlPgorICAgICAgPG9iamVjdD4KKyAgICAgICAgPGZpZWxkPgorICAgICAgICAgIDxuYW1lPl90eXBlPC9uYW1lPgorICAgICAgICAgIDx2YWx1ZT5vcmcucWk0ai50ZXN0LmVudGl0eS5BYnN0cmFjdENvbmZpZ3VyYXRpb25EZXNlcmlhbGl6YXRpb25UZXN0JEhvc3Q8L3ZhbHVlPgorICAgICAgICA8L2ZpZWxkPgorICAgICAgICA8ZmllbGQ+CisgICAgICAgICAgPG5hbWU+cG9ydDwvbmFtZT4KKyAgICAgICAgICA8dmFsdWU+MTIzNDwvdmFsdWU+CisgICAgICAgIDwvZmllbGQ+CisgICAgICAgIDxmaWVsZD4KKyAgICAgICAgICA8bmFtZT5pcDwvbmFtZT4KKyAgICAgICAgICA8dmFsdWU+MTIuMjMuMzQuNDU8L3ZhbHVlPgorICAgICAgICA8L2ZpZWxkPgorICAgICAgPC9vYmplY3Q+CisgICAgPC92YWx1ZT4KKyAgPC9maWVsZD4KKyAgPGZpZWxkPgorICAgIDxuYW1lPmlkZW50aXR5PC9uYW1lPgorICAgIDx2YWx1ZT5jb25maWd0ZXN0PC92YWx1ZT4KKyAgPC9maWVsZD4KKzwvb2JqZWN0PgpkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbCBiL2V4dGVuc2lvbnMvdmFsdWVzZXJpYWxpemF0aW9uLXN0YXgvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZTZmYjguLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy92YWx1ZXNlcmlhbGl6YXRpb24tc3RheC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y29uZmlndXJhdGlvbj4KLQotICAgIDxhcHBlbmRlciBuYW1lPSJzdGRvdXQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgIDxsYXlvdXQgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNsYXNzaWMuUGF0dGVybkxheW91dCI+Ci0gICAgICAgICAgICA8UGF0dGVybj4lLTVsZXZlbCAlbG9nZ2VyezI0fSAtICVtc2clbjwvUGF0dGVybj4KLSAgICAgICAgPC9sYXlvdXQ+Ci0gICAgPC9hcHBlbmRlcj4KLQotICAgIDxyb290IGxldmVsPSJpbmZvIj4KLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9InN0ZG91dCIgLz4KLSAgICA8L3Jvb3Q+Ci0KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5xaTRqLnNwaS52YWx1ZSIgbGV2ZWw9ImRlYnVnIi8+Ci0gICAgPGxvZ2dlciBuYW1lPSJvcmcucWk0ai50ZXN0LnZhbHVlIiBsZXZlbD0iZGVidWciLz4KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5xaTRqLnZhbHVlc2VyaWFsaXplciIgbGV2ZWw9ImRlYnVnIi8+Ci0gICAgPGxvZ2dlciBuYW1lPSJvcmcucWk0ai52YWx1ZXNlcmlhbGl6YXRpb24iIGxldmVsPSJkZWJ1ZyIvPgotCi08L2NvbmZpZ3VyYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JhZGxlLnByb3BlcnRpZXMgYi9ncmFkbGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTVhNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JhZGxlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9ncmFkbGUvd3JhcHBlci9ncmFkbGUtd3JhcHBlci5wcm9wZXJ0aWVzIGIvZ3JhZGxlL3dyYXBwZXIvZ3JhZGxlLXdyYXBwZXIucHJvcGVydGllcwppbmRleCA3MTg1MjU5Li40OGYyMDJhIDEwMDY0NAotLS0gYS9ncmFkbGUvd3JhcHBlci9ncmFkbGUtd3JhcHBlci5wcm9wZXJ0aWVzCisrKyBiL2dyYWRsZS93cmFwcGVyL2dyYWRsZS13cmFwcGVyLnByb3BlcnRpZXMKQEAgLTEsNiArMSw2IEBACi0jVGh1IEp1biAxMiAxNDoxOToyMCBDRVNUIDIwMTQKKyNNb24gSnVsIDA2IDEwOjQzOjU5IEVFU1QgMjAxNQogZGlzdHJpYnV0aW9uQmFzZT1HUkFETEVfVVNFUl9IT01FCiBkaXN0cmlidXRpb25QYXRoPXdyYXBwZXIvZGlzdHMKIHppcFN0b3JlQmFzZT1HUkFETEVfVVNFUl9IT01FCiB6aXBTdG9yZVBhdGg9d3JhcHBlci9kaXN0cwotZGlzdHJpYnV0aW9uVXJsPWh0dHBzXDovL3NlcnZpY2VzLmdyYWRsZS5vcmcvZGlzdHJpYnV0aW9ucy9ncmFkbGUtMi4yLjEtYmluLnppcAorZGlzdHJpYnV0aW9uVXJsPWh0dHBzXDovL3NlcnZpY2VzLmdyYWRsZS5vcmcvZGlzdHJpYnV0aW9ucy9ncmFkbGUtMi41LWFsbC56aXAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy5ncmFkbGUgYi9saWJyYXJpZXMuZ3JhZGxlCmluZGV4IDc5MDNjNTkuLjE1MDdiYzggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy5ncmFkbGUKKysrIGIvbGlicmFyaWVzLmdyYWRsZQpAQCAtMSw4MyArMSw4NiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwogLy8gVmVyc2lvbnMgb2YgRGVwZW5kZW5jaWVzOwotZGVmIGFzbVZlcnNpb24gPSAnNS4wLjMnCi1kZWYgYmVhbnNoZWxsVmVyc2lvbiA9ICcyLjBiNCcKK2RlZiBhc21WZXJzaW9uID0gJzUuMC40JwogZGVmIGJvbmVjcFZlcnNpb24gPSAnMC44LjAuUkVMRUFTRScKLWRlZiBib3VuY3lWZXJzaW9uID0gJzEuNTAnCi1kZWYgYzNwMFZlcnNpb24gPSAnMC45LjEuMicKLWRlZiBjb21tb25zQ29kZWNWZXJzaW9uID0gJzEuOCcKLWRlZiBjb21tb25zRGJjcFZlcnNpb24gPSAnMS40JyAvLyBTaG91bGQgYmUgbW92ZWQgdG8gb3JnLmFwYWNoZS50b21jYXQ6dG9tY2F0LWpkYmM6OC4wLjgKLWRlZiBjb21tb25zSW9WZXJzaW9uID0gJzIuNCcKLWRlZiBjb21tb25zTGFuZ1ZlcnNpb24gPSAnMi42JwotZGVmIGN4ZlZlcnNpb24gPSAnMi41LjYnIC8vIDIuNy4xMSBVbmFibGUgdG8gcmVzb2x2ZSBkZXBlbmRlbmNpZXMhIC0gMy4wLjAgZXhpc3RzCi1kZWYgZGVyYnlWZXJzaW9uID0gJzEwLjEwLjIuMCcKLWRlZiBkbnNKYXZhVmVyc2lvbiA9ICcyLjEuNicKLWRlZiBlaGNhY2hlVmVyc2lvbiA9ICcyLjguMycKLWRlZiBlbGFzdGljc2VhcmNoVmVyc2lvbiA9ICcxLjMuNCcKLWRlZiBmcmVlbWFya2VyVmVyc2lvbiA9ICcyLjMuMjAnCi1kZWYgZ2FlVmVyc2lvbiA9ICcxLjguOCcKLWRlZiBncm9vdnlWZXJzaW9uID0gJzIuMy4yJwotZGVmIGd1YXZhVmVyc2lvbiA9ICcxNy4wJwotZGVmIGgyVmVyc2lvbiA9ICcxLjQuMTc4JwotZGVmIGhhemVsY2FzdFZlcnNpb24gPSAnMy4yLjInCitkZWYgYm91bmN5VmVyc2lvbiA9ICcxLjUyJworZGVmIGNvbW1vbnNEYmNwVmVyc2lvbiA9ICcxLjQnIC8vIFNob3VsZCBiZSBtb3ZlZCB0byBjb21tb25zLWRiY3AyCitkZWYgY29tbW9uc0xhbmdWZXJzaW9uID0gJzIuNicgLy8gU2hvdWxkIGJlIG1vdmVkIHRvIGNvbW1vbnMtbGFuZzMKK2RlZiBkZXJieVZlcnNpb24gPSAnMTAuMTEuMS4xJworZGVmIGRuc0phdmFWZXJzaW9uID0gJzIuMS43JworZGVmIGVoY2FjaGVWZXJzaW9uID0gJzIuMTAuMCcKK2RlZiBlbGFzdGljc2VhcmNoVmVyc2lvbiA9ICcxLjYuMCcKK2RlZiBmcmVlbWFya2VyVmVyc2lvbiA9ICcyLjMuMjInCitkZWYgZ3Jvb3Z5VmVyc2lvbiA9ICcyLjQuMycKK2RlZiBoMlZlcnNpb24gPSAnMS40LjE4NycKK2RlZiBoYXplbGNhc3RWZXJzaW9uID0gJzMuNScKIGRlZiBodHRwQ2xpZW50VmVyc2lvbiA9ICc0LjIuMicgLy8gNC4zLjQgZXhpc3RzCi1kZWYgamFja3NvblZlcnNpb24gPSAnMi40LjAnCi1kZWYgamF2YXNjcmlwdFZlcnNpb24gPSAnMS43UjQnCitkZWYgamFja3NvblZlcnNpb24gPSAnMi41LjQnCitkZWYgamF2YXNjcmlwdFZlcnNpb24gPSAnMS43LjcnCiBkZWYgamF2YXNxbGdlbmVyYXRvclZlcnNpb24gPSAnMC4zLjInCi1kZWYgamNsb3Vkc1ZlcnNpb24gPSAnMS43LjMnCitkZWYgamNsb3Vkc1ZlcnNpb24gPSAnMS45LjAnCiBkZWYgamRibVZlcnNpb24gPSAnMi40JwotZGVmIGpkb21WZXJzaW9uID0gJzIuMC4yJwotZGVmIGplZGlzVmVyc2lvbiA9ICcyLjUuMScKLWRlZiBqZXR0eVZlcnNpb24gPSAnOS4yLjEudjIwMTQwNjA5JworZGVmIGplZGlzVmVyc2lvbiA9ICcyLjcuMicKK2RlZiBqZXR0eVZlcnNpb24gPSAnOS4yLjExLnYyMDE1MDUyOScgLy8gOS4zLnggVGVzdHMgZmFpbCEKIGRlZiBqZ29vZGllc0xvb2tzVmVyc2lvbiA9ICcyLjUuMycKLWRlZiBqb2RhTW9uZXlWZXJzaW9uID0gJzAuOS4xJwotZGVmIGpvZGFUaW1lVmVyc2lvbiA9ICcyLjMnCi1kZWYganJ1YnlWZXJzaW9uID0gJzEuNy44JyAvLyAxLjcuMTIgLSBGYWlscyB0byBydW4hCitkZWYgam9kYU1vbmV5VmVyc2lvbiA9ICcwLjEwLjAnCitkZWYgam9kYVRpbWVWZXJzaW9uID0gJzIuOC4xJwogZGVmIGp0YVZlcnNpb24gPSAnMS4xJwogZGVmIGxldmVsZGJWZXJzaW9uID0gJzAuNycKIGRlZiBsZXZlbGRiSm5pVmVyc2lvbiA9ICcxLjgnCi1kZWYgbGlxdWliYXNlVmVyc2lvbiA9ICczLjIuMCcKLWRlZiBsb2c0alZlcnNpb24gPSAnMS4yLjE3JwotZGVmIGxvZ2JhY2tWZXJzaW9uID0gJzEuMS4yJwotZGVmIG1vbmdvZGJWZXJzaW9uID0gJzIuMTIuMicKLWRlZiBteXNxbFZlcnNpb24gPSAnNS4xLjMxJwotZGVmIG5lb1ZlcnNpb24gPSAnMS4zJyAvLyAxLjkuNCBGYWlscyB0byBjb21waWxlISAtIDIuMS4yIGV4aXN0cwotZGVmIG5lb0luZGV4VmVyc2lvbiA9ICcxLjMtMS4zLk0wMScgLy8gRG8gbm90IGV4aXN0IGFueW1vcmUhCitkZWYgbGlxdWliYXNlVmVyc2lvbiA9ICczLjQuMCcKK2RlZiBsb2diYWNrVmVyc2lvbiA9ICcxLjEuMycKK2RlZiBtb25nb2RiVmVyc2lvbiA9ICcyLjEzLjInIC8vIDMuMC54IEZhaWxzIHRvIGNvbXBpbGUhCitkZWYgbXlzcWxWZXJzaW9uID0gJzUuMS4zNScKIGRlZiBvcmdKc29uVmVyc2lvbiA9ICcyMDEzMDIxMycKIGRlZiBvc2dpVmVyc2lvbiA9ICc0LjIuMCcgLy8gNC4zLjAgRmFpbHMgdG8gY29tcGlsZSEgLSA1LjAuMCBleGlzdHMKIGRlZiBwZGZib3hWZXJzaW9uID0gJzEuOC41JwotZGVmIHBvc3RncmVzcWxWZXJzaW9uID0gJzkuMy0xMTAxLWpkYmM0JworZGVmIHBvc3RncmVzcWxWZXJzaW9uID0gJzkuNC0xMjAxLWpkYmM0MScKIGRlZiBwcmVmdXNlVmVyc2lvbiA9ICcwLjIxJwogZGVmIHJlc3RsZXRWZXJzaW9uID0gJzIuMC4xNScgLy8gMi4yLjEgRmFpbHMgdG8gY29tcGlsZSEKIGRlZiByZGZWZXJzaW9uID0gJzIuNy45JwotZGVmIHJpYWtWZXJzaW9uID0gJzEuNC40JwotZGVmIHNjYWxhVmVyc2lvbiA9ICcyLjExLjEnCitkZWYgcmlha1ZlcnNpb24gPSAnMS40LjQnIC8vIDIuMC54IEZhaWxzIHRvIGNvbXBpbGUhCitkZWYgc2NhbGFWZXJzaW9uID0gJzIuMTEuNicKIGRlZiBzZXJ2bGV0VmVyc2lvbiA9ICczLjEuMCcKIGRlZiBzaGlyb1ZlcnNpb24gPSAnMS4yLjMnCiBkZWYgc2tlZFZlcnNpb24gPSAnMi4xJwotZGVmIHNsZWVweWNhdFZlcnNpb24gPSAnNS4wLjczJwotZGVmIHNsZjRqVmVyc2lvbiA9ICcxLjcuNycKK2RlZiBzbGY0alZlcnNpb24gPSAnMS43LjEyJwogZGVmIHNvbHJWZXJzaW9uID0gIjEuNC4xIiAvLyA0LjguMSBGYWlscyB0byBjb21waWxlIQotZGVmIHNwcmluZ1ZlcnNpb24gPSAnMy4yLjYuUkVMRUFTRScgLy8gNC4wLjUuUkVMRUFTRSBGYWlscyB0byBjb21waWxlIQotZGVmIHNweW1lbWNhY2hlZFZlcnNpb24gPSAnMi4xMS4zJwotZGVmIHNxbGl0ZVZlcnNpb24gPSAnMy43LjInCi1kZWYgc3RydXRzVmVyc2lvbiA9ICcyLjMuMTUuMycgLy8gMi4zLjE2LjMgRmFpbHMgdG8gY29tcGlsZSEKK2RlZiBzcHJpbmdWZXJzaW9uID0gJzQuMS43LlJFTEVBU0UnCitkZWYgc3B5bWVtY2FjaGVkVmVyc2lvbiA9ICcyLjEyLjAnCitkZWYgc3FsaXRlVmVyc2lvbiA9ICczLjguMTAuMScKIGRlZiB2ZWxvY2l0eVZlcnNpb24gPSAnMS43JwotZGVmIHZvbGRlbW9ydFZlcnNpb24gPSAnMS4zLjAnCiBkZWYgd2lja2V0VmVyc2lvbiA9ICcxLjUuOCcgLy8gNi4xNS4wIFNhbXBsZXMgZmFpbHMgdG8gY29tcGlsZSEKIGRlZiB3aWNrZXRTdGF0ZWxlc3NWZXJzaW9uID0gJzEuNS4wJwotZGVmIHdvb2RzdG94VmVyc2lvbiA9ICc0LjQuMCcKLWRlZiB3c2RsNGpWZXJzaW9uID0gJzEuNi4zJworZGVmIHdvb2RzdG94VmVyc2lvbiA9ICc0LjQuMScKIGRlZiB5YW1tZXJNZXRyaWNzVmVyc2lvbiA9ICcyLjIuMCcKIAotZGVmIGFudFZlcnNpb24gPSAnMS45LjQnCi1kZWYgYXdhaXRpbGl0eVZlcnNpb24gPSAnMS42LjAnCi1kZWYgZWFzeU1vY2tWZXJzaW9uID0gJzMuMicKLWRlZiBqbW9ja1ZlcnNpb24gPSAnMi42LjAnCitkZWYgYW50VmVyc2lvbiA9ICcxLjkuNScKK2RlZiBhd2FpdGlsaXR5VmVyc2lvbiA9ICcxLjYuMycKK2RlZiBlYXN5TW9ja1ZlcnNpb24gPSAnMy4zLjEnCitkZWYgam1vY2tWZXJzaW9uID0gJzIuOC4xJwogZGVmIGp1bml0VmVyc2lvbiA9ICc0LjExJwotZGVmIG1vY2tpdG9WZXJzaW9uID0gJzEuOS41JwotZGVmIHRlc3ROZ1ZlcnNpb24gPSAnNi44LjgnCi1kZWYgcmVzdEFzc3VyZWRWZXJzaW9uPSAnMi4zLjInCi1kZWYgeG1sdW5pdFZlcnNpb24gPSAnMS41JworZGVmIG1vY2tpdG9WZXJzaW9uID0gJzEuMTAuMTknCitkZWYgdGVzdE5nVmVyc2lvbiA9ICc2LjkuNCcKK2RlZiByZXN0QXNzdXJlZFZlcnNpb249ICcyLjQuMScKK2RlZiB4bWx1bml0VmVyc2lvbiA9ICcxLjYnCiAKIC8vIGJ1aWxkIGEgbWFwIG9mIHRoZSBkZXBlbmRlbmN5IGFydGlmYWN0cyB0byB1c2UuICBBbGxvd3MgY2VudHJhbGl6ZWQgZGVmaW5pdGlvbiBvZiB0aGUgdmVyc2lvbiBvZiBhcnRpZmFjdHMgdG8KIC8vIHVzZS4gIEluIHRoYXQgcmVzcGVjdCBpdCBzZXJ2ZXMgYSByb2xlIHNpbWlsYXIgdG8gPGRlcGVuZGVuY3lNYW5hZ2VtZW50PiBpbiBNYXZlbgpAQCAtMTAxLDcgKzEwNCw2IEBACiAgICAgICAgICAgLy8gbG9nZ2luZwogICAgICAgICAgIHNsZjRqX2FwaTogIm9yZy5zbGY0ajpzbGY0ai1hcGk6JHNsZjRqVmVyc2lvbiIsCiAgICAgICAgICAgc2xmNGpfc2ltcGxlOiAib3JnLnNsZjRqOnNsZjRqLXNpbXBsZTokc2xmNGpWZXJzaW9uIiwKLSAgICAgICAgICBsb2c0ajogJ2xvZzRqOmxvZzRqOicgKyBsb2c0alZlcnNpb24sCiAgICAgICAgICAgbG9nYmFjazogJ2NoLnFvcy5sb2diYWNrOmxvZ2JhY2stY2xhc3NpYzonICsgbG9nYmFja1ZlcnNpb24sCiAgICAgICAgICAgamNsX3NsZjRqOiAib3JnLnNsZjRqOmpjbC1vdmVyLXNsZjRqOiRzbGY0alZlcnNpb24iLAogICAgICAgICAgIGpjbF9hcGk6ICdjb21tb25zLWxvZ2dpbmc6Y29tbW9ucy1sb2dnaW5nLWFwaTo5OS4wLWRvZXMtbm90LWV4aXN0JywgIC8vZW5zdXJlIGl0IGlzIG5ldmVyIHVzZWQuCkBAIC0xNzMsMjIgKzE3NSw5IEBACiAgICAgICAgICAgamV0dHlfY2xpZW50OiAib3JnLmVjbGlwc2UuamV0dHk6amV0dHktY2xpZW50OiRqZXR0eVZlcnNpb24iLAogICAgICAgICAgIGpldHR5X3htbDogIm9yZy5lY2xpcHNlLmpldHR5OmpldHR5LXhtbDokamV0dHlWZXJzaW9uIiwKIAotICAgICAgICAgIC8vIFN0cnV0cwotICAgICAgICAgIHN0cnV0c19jb2RlYmVoaW5kOiAib3JnLmFwYWNoZS5zdHJ1dHM6c3RydXRzMi1jb2RlYmVoaW5kLXBsdWdpbjokc3RydXRzVmVyc2lvbiIsCi0gICAgICAgICAgc3RydXRzX2NvbnZlbnRpb246ICJvcmcuYXBhY2hlLnN0cnV0czpzdHJ1dHMyLWNvbnZlbnRpb24tcGx1Z2luOiRzdHJ1dHNWZXJzaW9uIiwKLSAgICAgICAgICBzdHJ1dHNfY29yZTogIm9yZy5hcGFjaGUuc3RydXRzOnN0cnV0czItY29yZTokc3RydXRzVmVyc2lvbiIsCi0KICAgICAgICAgICAvLyBTY3JpcHRpbmcKICAgICAgICAgICBncm9vdnk6ICJvcmcuY29kZWhhdXMuZ3Jvb3Z5Omdyb292eS1hbGw6JGdyb292eVZlcnNpb24iLAogCi0gICAgICAgICAganJ1Ynk6ICJvcmcuanJ1Ynk6anJ1Ynk6JGpydWJ5VmVyc2lvbiIsCi0KLSAgICAgICAgICBiZWFuc2hlbGw6IFsgIm9yZy5iZWFuc2hlbGw6YnNoLWNvcmU6JGJlYW5zaGVsbFZlcnNpb24iLAotICAgICAgICAgICAgICAgICAgIm9yZy5iZWFuc2hlbGw6YnNoLWNsYXNzcGF0aDokYmVhbnNoZWxsVmVyc2lvbiIsCi0gICAgICAgICAgICAgICAgICAib3JnLmJlYW5zaGVsbDpic2gtY2xhc3NnZW46JGJlYW5zaGVsbFZlcnNpb24iLAotICAgICAgICAgICAgICAgICAgIm9yZy5iZWFuc2hlbGw6YnNoLXJlZmxlY3Q6JGJlYW5zaGVsbFZlcnNpb24iCi0KLSAgICAgICAgICBdLAogICAgICAgICAgIGphdmFzY3JpcHQ6ICJvcmcubW96aWxsYTpyaGlubzokamF2YXNjcmlwdFZlcnNpb24iLAogCiAgICAgICAgICAgLy8gV2lja2V0CkBAIC0yMTYsMzUgKzIwNSwxNSBAQAogICAgICAgICAgIGxldmVsZGJfYXBpOiAib3JnLmlxODAubGV2ZWxkYjpsZXZlbGRiLWFwaTokbGV2ZWxkYlZlcnNpb24iLAogICAgICAgICAgIGxldmVsZGJfamF2YTogIm9yZy5pcTgwLmxldmVsZGI6bGV2ZWxkYjokbGV2ZWxkYlZlcnNpb24iLAogICAgICAgICAgIGxldmVsZGJfam5pX2FsbDogIm9yZy5mdXNlc291cmNlLmxldmVsZGJqbmk6bGV2ZWxkYmpuaS1hbGw6JGxldmVsZGJKbmlWZXJzaW9uIiwKLSAgICAgICAgICBhcHBlbmdpbmU6ICJjb20uZ29vZ2xlLmFwcGVuZ2luZTphcHBlbmdpbmUtYXBpLTEuMC1zZGs6JGdhZVZlcnNpb24iLAogICAgICAgICAgIG1vbmdvZGI6ICJvcmcubW9uZ29kYjptb25nby1qYXZhLWRyaXZlcjokbW9uZ29kYlZlcnNpb24iLAogICAgICAgICAgIHJpYWs6ICJjb20uYmFzaG8ucmlhazpyaWFrLWNsaWVudDokcmlha1ZlcnNpb24iLAotICAgICAgICAgIG5lbzRqOiBbICJvcmcubmVvNGo6bmVvNGo6JG5lb1ZlcnNpb24iLAotICAgICAgICAgICAgICAgICAgIm9yZy5uZW80ajpuZW80ai1pbmRleDokbmVvSW5kZXhWZXJzaW9uIgotICAgICAgICAgIF0sCiAgICAgICAgICAganRhOiAiamF2YXgudHJhbnNhY3Rpb246anRhOiRqdGFWZXJzaW9uIiwKICAgICAgICAgICBqYXZhU3FsR2VuZXJhdG9yOiAib3JnLmphdmEtc3FsLWdlbmVyYXRvcjpvcmcuamF2YS1zcWwtZ2VuZXJhdG9yLmFwaTokamF2YXNxbGdlbmVyYXRvclZlcnNpb24iLAogICAgICAgICAgIGphdmFTcWxHZW5lcmF0b3JJbXBsOiAib3JnLmphdmEtc3FsLWdlbmVyYXRvcjpvcmcuamF2YS1zcWwtZ2VuZXJhdG9yLmltcGxlbWVudGF0aW9uOiRqYXZhc3FsZ2VuZXJhdG9yVmVyc2lvbiIsCi0gICAgICAgICAgdm9sZGVtb3J0OiAib3JnLmltbXVub2dlbm9taWNzLmdsLnZvbGRlbW9ydDp2b2xkZW1vcnQ6JHZvbGRlbW9ydFZlcnNpb24iLAotICAgICAgICAgIGd1YXZhOiAiY29tLmdvb2dsZS5ndWF2YTpndWF2YTokZ3VhdmFWZXJzaW9uIiwKLSAgICAgICAgICBzbGVlcHljYXQ6ICJjb20uc2xlZXB5Y2F0OmplOiRzbGVlcHljYXRWZXJzaW9uIiwKLSAgICAgICAgICBqZG9tOiAib3JnLmpkb206amRvbTokamRvbVZlcnNpb24iLAogICAgICAgICAgIHZlbG9jaXR5OiAib3JnLmFwYWNoZS52ZWxvY2l0eTp2ZWxvY2l0eTokdmVsb2NpdHlWZXJzaW9uIiwKLSAgICAgICAgICBjb21tb25zX2NvZGVjOiAiY29tbW9ucy1jb2RlYzpjb21tb25zLWNvZGVjOiRjb21tb25zQ29kZWNWZXJzaW9uIiwKICAgICAgICAgICBjb21tb25zX2RiY3A6ICJjb21tb25zLWRiY3A6Y29tbW9ucy1kYmNwOiRjb21tb25zRGJjcFZlcnNpb24iLAotICAgICAgICAgIGNvbW1vbnNfaW86ICJjb21tb25zLWlvOmNvbW1vbnMtaW86JGNvbW1vbnNJb1ZlcnNpb24iLAogICAgICAgICAgIGNvbW1vbnNfbGFuZzogImNvbW1vbnMtbGFuZzpjb21tb25zLWxhbmc6JGNvbW1vbnNMYW5nVmVyc2lvbiIsCiAgICAgICAgICAgc2VydmxldF9hcGk6ICJqYXZheC5zZXJ2bGV0OmphdmF4LnNlcnZsZXQtYXBpOiRzZXJ2bGV0VmVyc2lvbiIsCi0gICAgICAgICAgY3hmX2FwaTogJ29yZy5hcGFjaGUuY3hmOmN4Zi1hcGk6JyArIGN4ZlZlcnNpb24sCi0gICAgICAgICAgY3hmX3V0aWw6ICJvcmcuYXBhY2hlLmN4ZjpjeGYtY29tbW9uLXV0aWxpdGllczokY3hmVmVyc2lvbiIsCi0gICAgICAgICAgY3hmX3J0X2NvcmU6ICJvcmcuYXBhY2hlLmN4ZjpjeGYtcnQtY29yZTokY3hmVmVyc2lvbiIsCi0gICAgICAgICAgY3hmX3J0X3NvYXA6ICJvcmcuYXBhY2hlLmN4ZjpjeGYtcnQtYmluZGluZ3Mtc29hcDokY3hmVmVyc2lvbiIsCi0gICAgICAgICAgY3hmX3J0X2pheHdzOiAib3JnLmFwYWNoZS5jeGY6Y3hmLXJ0LWZyb250ZW5kLWpheHdzOiRjeGZWZXJzaW9uIiwKLSAgICAgICAgICBjeGZfcnRfYWVnaXM6ICJvcmcuYXBhY2hlLmN4ZjpjeGYtcnQtZGF0YWJpbmRpbmctYWVnaXM6JGN4ZlZlcnNpb24iLAotICAgICAgICAgIGN4Zl9ydF9sb2NhbDogIm9yZy5hcGFjaGUuY3hmOmN4Zi1ydC10cmFuc3BvcnRzLWxvY2FsOiRjeGZWZXJzaW9uIiwKLSAgICAgICAgICBjeGZfcnRfaHR0cDogIm9yZy5hcGFjaGUuY3hmOmN4Zi1ydC10cmFuc3BvcnRzLWh0dHA6JGN4ZlZlcnNpb24iLAotICAgICAgICAgIGN4Zl9ydF9odHRwX2pldHR5OiAib3JnLmFwYWNoZS5jeGY6Y3hmLXJ0LXRyYW5zcG9ydHMtaHR0cC1qZXR0eTokY3hmVmVyc2lvbiIsCi0gICAgICAgICAgd3NkbDRqOiAnd3NkbDRqOndzZGw0ajonICsgd3NkbDRqVmVyc2lvbiwKICAgICAgICAgICBodHRwX2NsaWVudDogIm9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHM6aHR0cGNsaWVudDokaHR0cENsaWVudFZlcnNpb24iLAogICAgICAgICAgIHdvb2RzdG94OiAib3JnLmNvZGVoYXVzLndvb2RzdG94Ondvb2RzdG94LWNvcmUtYXNsOiR3b29kc3RveFZlcnNpb24iLAogICAgICAgICAgIHJlc3RsZXRfeG1sOiAib3JnLnJlc3RsZXQuamVlOm9yZy5yZXN0bGV0LmV4dC54bWw6JHJlc3RsZXRWZXJzaW9uIiwKQEAgLTI1NCw3ICsyMjMsNiBAQAogICAgICAgICAgIHNoaXJvOiAib3JnLmFwYWNoZS5zaGlybzpzaGlyby1jb3JlOiRzaGlyb1ZlcnNpb24iLAogICAgICAgICAgIHNoaXJvX3dlYjogIm9yZy5hcGFjaGUuc2hpcm86c2hpcm8td2ViOiRzaGlyb1ZlcnNpb24iLAogICAgICAgICAgIGJvbmVjcDogImNvbS5qb2xib3g6Ym9uZWNwOiRib25lY3BWZXJzaW9uIiwKLSAgICAgICAgICBjM3AwOiAiYzNwMDpjM3AwOiRjM3AwVmVyc2lvbiIsCiAgICAgICAgICAgbGlxdWliYXNlOiAib3JnLmxpcXVpYmFzZTpsaXF1aWJhc2UtY29yZTokbGlxdWliYXNlVmVyc2lvbiIsCiAgICAgICAgICAgc2tlZDogIm9yZy5jb2RlYXJ0aXNhbnM6c2tlZDokc2tlZFZlcnNpb24iLAogICAgICAgICAgIHlhbW1lcl9tZXRyaWNzOiAiY29tLnlhbW1lci5tZXRyaWNzOm1ldHJpY3MtY29yZTokeWFtbWVyTWV0cmljc1ZlcnNpb24iLApAQCAtMjgyLDMgKzI1MCw0NyBAQAogICBdCiB9CiAKKy8vIEdsb2JhbCB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBzdWJzdGl0dXRpb24gcnVsZXMKKy8vIFNlZSBodHRwczovL2RvY3MuZ3JhZGxlLm9yZy9jdXJyZW50L3VzZXJndWlkZS9kZXBlbmRlbmN5X21hbmFnZW1lbnQuaHRtbCNkZXBlbmRlbmN5X3N1YnN0aXR1dGlvbl9ydWxlcworLy8gU2VlIGh0dHBzOi8vZG9jcy5ncmFkbGUub3JnL2N1cnJlbnQvZHNsL29yZy5ncmFkbGUuYXBpLmFydGlmYWN0cy5EZXBlbmRlbmN5U3Vic3RpdHV0aW9ucy5odG1sCithbGxwcm9qZWN0cyB7CisgIGNvbmZpZ3VyYXRpb25zLmFsbCB7CisgICAgcmVzb2x1dGlvblN0cmF0ZWd5LmRlcGVuZGVuY3lTdWJzdGl0dXRpb24uYWxsIHsgRGVwZW5kZW5jeVN1YnN0aXR1dGlvbiBkZXAgLT4KKyAgICAgIGlmKCBkZXAucmVxdWVzdGVkIGluc3RhbmNlb2YgTW9kdWxlQ29tcG9uZW50U2VsZWN0b3IgKSB7CisgICAgICAgIC8vIEFsd2F5cyByZXNvbHZlIFNMRjRKIHRvIHRoZSBzYW1lIHZlcnNpb24KKyAgICAgICAgaWYoIGRlcC5yZXF1ZXN0ZWQuZ3JvdXAgPT0gJ29yZy5zbGY0aicgKSB7CisgICAgICAgICAgZGVwLnVzZVRhcmdldCBncm91cDogZGVwLnJlcXVlc3RlZC5ncm91cCwgbmFtZTogZGVwLnJlcXVlc3RlZC5tb2R1bGUsIHZlcnNpb246IHNsZjRqVmVyc2lvbgorICAgICAgICB9CisgICAgICAgIC8vIEFsd2F5cyByZXNvbHZlIEFTTSB0byB0aGUgc2FtZSB2ZXJzaW9uCisgICAgICAgIGlmKCBkZXAucmVxdWVzdGVkLmdyb3VwID09ICdvcmcub3cyLmFzbScgKSB7CisgICAgICAgICAgZGVwLnVzZVRhcmdldCBncm91cDogZGVwLnJlcXVlc3RlZC5ncm91cCwgbmFtZTogZGVwLnJlcXVlc3RlZC5tb2R1bGUsIHZlcnNpb246IGFzbVZlcnNpb24KKyAgICAgICAgfQorICAgICAgICAvLyBBbHdheXMgcmVzb2x2ZSBPU0dpIHRvIHRoZSBzYW1lIHZlcnNpb24KKyAgICAgICAgaWYoIGRlcC5yZXF1ZXN0ZWQuZ3JvdXAgPT0gJ29yZy5vc2dpJyApIHsKKyAgICAgICAgICBkZXAudXNlVGFyZ2V0IGdyb3VwOiBkZXAucmVxdWVzdGVkLmdyb3VwLCBuYW1lOiBkZXAucmVxdWVzdGVkLm1vZHVsZSwgdmVyc2lvbjogb3NnaVZlcnNpb24KKyAgICAgICAgfQorICAgICAgICAvLyBBbHdheXMgcmVzb2x2ZSBKYWNrc29uIHRvIHRoZSBzYW1lIHZlcnNpb24KKyAgICAgICAgaWYoIGRlcC5yZXF1ZXN0ZWQuZ3JvdXAuc3RhcnRzV2l0aCggJ2NvbS5mYXN0ZXJ4bWwuamFja3NvbicgKSApIHsKKyAgICAgICAgICBkZXAudXNlVGFyZ2V0IGdyb3VwOiBkZXAucmVxdWVzdGVkLmdyb3VwLCBuYW1lOiBkZXAucmVxdWVzdGVkLm1vZHVsZSwgdmVyc2lvbjogamFja3NvblZlcnNpb24KKyAgICAgICAgfQorICAgICAgICAvLyB3b29kc3RveDp3c3R4LWFzbCBpcyBicm9rZW4gKG5vIHBvbSksIHVzZSBvcmcuY29kZWhhdXMud29vZHN0b3g6d3N0eC1hc2wgaW5zdGVhZAorICAgICAgICBpZiggZGVwLnJlcXVlc3RlZC5ncm91cCA9PSAnd29vZHN0b3gnICYmIGRlcC5yZXF1ZXN0ZWQubW9kdWxlID09ICd3c3R4LWFzbCcgKSB7CisgICAgICAgICAgZGVwLnVzZVRhcmdldCBncm91cDogJ29yZy5jb2RlaGF1cy53b29kc3RveCcsIG5hbWU6ICd3c3R4LWFzbCcsIHZlcnNpb246IGRlcC5yZXF1ZXN0ZWQudmVyc2lvbgorICAgICAgICB9CisgICAgICAgIC8vIHNvbWUgYmFkIGNpdGl6ZW5zIGhhdmUgU05BUFNIT1QgcGFyZW50cyAuLi4KKyAgICAgICAgaWYoIGRlcC5yZXF1ZXN0ZWQubW9kdWxlID09ICdjb21tb25zLXNhbmRib3gtcGFyZW50JyAmJiBkZXAucmVxdWVzdGVkLnZlcnNpb24gPT0gJzMtU05BUFNIT1QnKSB7CisgICAgICAgICAgZGVwLnVzZVRhcmdldCBncm91cDogZGVwLnJlcXVlc3RlZC5ncm91cCwgbmFtZTogZGVwLnJlcXVlc3RlZC5tb2R1bGUsIHZlcnNpb246ICczJworICAgICAgICB9CisgICAgICAgIC8vIEdTT04gMi4zIFBPTSBpcyBpbnZhbGlkLCB1c2UgMi4zLjEgaW5zdGVhZCAuLiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9nc29uL2lzc3Vlcy81ODgKKyAgICAgICAgaWYoIGRlcC5yZXF1ZXN0ZWQuZ3JvdXAgPT0gJ2NvbS5nb29nbGUuY29kZS5nc29uJyAmJiBkZXAucmVxdWVzdGVkLm1vZHVsZSA9PSAnZ3NvbicgJiYgZGVwLnJlcXVlc3RlZC52ZXJzaW9uID09ICcyLjMnICkgeworICAgICAgICAgIGRlcC51c2VUYXJnZXQgZ3JvdXA6IGRlcC5yZXF1ZXN0ZWQuZ3JvdXAsIG5hbWU6IGRlcC5yZXF1ZXN0ZWQubW9kdWxlLCB2ZXJzaW9uOiAnMi4zLjEnCisgICAgICAgIH0KKyAgICAgICAgLy8gRmluZGJ1Z3MgQW5ub3RhdGlvbiBpcyBMR1BMLCB1c2UgaHR0cHM6Ly9naXRodWIuY29tL3N0ZXBoZW5jL2ZpbmRidWdzLWFubm90YXRpb25zIHdoaWNoIGlzCisgICAgICAgIC8vIEFwYWNoZSAyIGxpY2Vuc2VkIGluc3RlYWQKKyAgICAgICAgaWYoIGRlcC5yZXF1ZXN0ZWQuZ3JvdXAgPT0gJ25ldC5zb3VyY2Vmb3JnZS5maW5kYnVncycgJiYgZGVwLnJlcXVlc3RlZC5tb2R1bGUgPT0gJ2Fubm90YXRpb25zJyApIHsKKyAgICAgICAgICBkZXAudXNlVGFyZ2V0IGdyb3VwOiAnY29tLmdpdGh1Yi5zdGVwaGVuYy5maW5kYnVncycsIG5hbWU6ICdmaW5kYnVncy1hbm5vdGF0aW9ucycsIHZlcnNpb246ICcxLjMuOS0xJworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvLmdpdGlnbm9yZSBiL2xpYnJhcmllcy8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzEwZmQxLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0qLmltbAotYnVpbGQvCi1vdXQvCi1yZGYvYXBwbGljYXRpb24ucmRmbjMKLXJkZi9hcHBsaWNhdGlvbi5yZGZ4bWwKLXNxbC9kZXJieS5sb2cKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9MSUNFTlNFIGIvbGlicmFyaWVzL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MzNiMWEuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9OT1RJQ0UgYi9saWJyYXJpZXMvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWVkMWUwLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9OT1RJQ0UKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotUWk0aiBMaWJyYXJ5IC0gSHR0cCBTZXJ2aWNlCi1Db3B5cmlnaHQgMjAwNy0yMDA4LCBUaGUgUWk0aiBEZXZlbG9wbWVudCBUZWFtIG9mIGluZGl2aWR1YWxzLgotCi1TZWUgaHR0cDovL3d3dy5xaTRqLm9yZy9jb250cmlidXRvcnMuaHRtbCBmb3IgbGlzdCBvZiBvZiBpbmRpdmlkdWFscy4KLUFsc28gc2VlIGVhY2ggZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBDb3B5cmlnaHQgY2xhaW1zLgotCi1RaTRqIGlzIGEgY29tbXVuaXR5IGFnZ3JlZ2F0ZWQgd29ya3MgdW5kZXIgQ29weXJpZ2h0IGxhdy4KLUFsbCBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgd29ya3MgYXQgUWk0aiBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLUFwYWNoZSBMaWNlbnNlIHZlciAyLjAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzCi0KLUJlbG93IGZvbGxvd3MgYSBsaXN0IG9mIGJpbmFyeSBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGxpY2Vuc2VzOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLWxpYnJhcmllcy9odHRwIE5PVElDRQotVGhpcyBtb2R1bGUgdXNlcyBKZXR0eSwgZGV2ZWxvcGVkIGF0IE1vcnRiYXkgYW5kIENvZGVoYXVzIHVuZGVyIEFwYWNoZQotTGljZW5zZSAyLjAuIFNlZSBMSUNFTlNFCi0KLVRoaXMgbW9kdWxlIHVzZXMgU0xGNEosIGRldmVsb3BlZCBhdCBzbGY0ai5vcmcgdW5kZXIgTUlUIExpY2Vuc2UuCi1TZWUgbGljZW5zZXMvc2xmNGoubGljZW5zZQotCi0KLWxpYnJhcmllcy9yZGYgTk9USUNFCi0KLVRoaXMgbW9kdWxlIHVzZXMgT3BlblJERiBTZXNhbWUgZGV2ZWxvcGVkIGJ5IEFkdW5hIFNvZnR3YXJlLgotQ29weXJpZ2h0IEFkdW5hIChodHRwOi8vd3d3LmFkdW5hLXNvZnR3YXJlLmNvbS8pIO+/vSAyMDAxLTIwMDcKLVNlZSBsaWNlbnNlcy9vcGVucmRmLmxpY2Vuc2UKLQotVGhpcyBtb2R1bGUgdXNlcyBTTEY0SiwgZGV2ZWxvcGVkIGF0IHNsZjRqLm9yZyB1bmRlciBNSVQgTGljZW5zZS4KLVNlZSBsaWNlbnNlcy9zbGY0ai5saWNlbnNlCi0KLQotbGlicmFyaWVzL3NjcmlwdGluZy9iZWFuc2hlbGwgTk9USUNFCi0KLVRoaXMgbW9kdWxlIHVzZXMgQmVhbnNoZWxsLCBkZXZlbG9wZWQgYXQgYmVhbnNoZWxsLm9yZy4KLUl0IGlzIGRldmVsb3BlZCB1bmRlciBhIGR1YWwgbGljZW5zaW5nIHNjaGVtZSwgdGhlIFN1biBQdWJsaWMgTGljZW5zZQotYW5kIHRoZSAiTGVzc2VyIEdOVSBQdWJsaWMgTGljZW5zZSIuIFRoZSBhdXRob3Igc2F5czsKLTxxdW90ZT4KLUR1YWwgTGljZW5zaW5nOiBTdW4gUHVibGljIExpY2Vuc2UgLyBHbnUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlCi1CZWFuU2hlbGwgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoIHRoZSBTUEwgYW5kIExHUEwuCi1Zb3UgbWF5IHVzZSBhbmQgZGV2ZWxvcCBCZWFuU2hlbGwgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCi0KLVBsZWFzZSBzZWUgdGhlIFN1biBQdWJsaWMgTGljZW5zZSBmb3IgZGV0YWlscy4KLQotQWJvdXQgdGhlIExHUEwKLU5vdGU6IHRoZSBMR1BMIGhhcyBiZWNvbWUgdGhlICJMZXNzZXIgR251IFB1YmxpYyBMaWNlbnNlIiBhbmQKLUJlYW5TaGVsbCBoYXMgYWRvcHRlZCB0aGUgbmV3IHZlcnNpb24uLi4KLQotQSBxdWljayBub3RlIGFib3V0IHRoZSBMR1BMOgotCi1UaGUgTEdQTCBpcyBsZXNzIHJlc3RyaWN0aXZlIHRoYW4gdGhlIG9yZGluYXJ5IEdOVSBQdWJsaWMgTGljZW5zZSBpbgotdGhhdCBpdCBkb2VzIG5vdCBmb3JjZSB5b3UgdG8gZGlzdHJpYnV0ZSB5b3VyIG93biBhcHBsaWNhdGlvbnMgdW5kZXIKLXRoZSB0ZXJtcyBvZiB0aGUgR1BMLiBJdCBwcmltYXJpbHkgcmVxdWlyZXMgdGhhdCB5b3UgaW5jbHVkZSBhIG5vdGljZQotdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBzb2Z0d2FyZSBpbiB5b3VyIGRvY3VtZW50YXRpb24gYW5kIHByb3ZpZGUKLWFjY2VzcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUuIEl0IGFsc28gZXNzZW50aWFsbHkgcmVxdWlyZXMgdGhhdAotaWYgeW91IG1vZGlmeSBvciBleHRlbmQgQmVhblNoZWxsIGl0c2VsZiB0aGF0IHlvdSBtYWtlIHRob3NlIGNoYW5nZXMKLWF2YWlsYWJsZSBzZXBhcmF0ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBMR1BMIG9yIHRoZSBHUEwuCi1JIHdvdWxkIGFzayB0aGF0IHlvdSBhY2NvbW9kYXRlIHRoaXMgYnkgc2ltcGx5IHNlbmRpbmcgbWUgeW91ciBidWcKLWZpeGVzIGFuZCBpbXByb3ZlbWVudCB0byBhbGxvdyBtZSB0byBpbmNvcnBvcmF0ZSB0aGVtIGludG8gdGhlCi1nZW5lcmFsIEJlYW5TaGVsbCByZWxlYXNlLiBQbGVhc2Ugc2VlIHRoZSBMR1BMIGZvciB0aGUgZGV0YWlscy4KLQotSWYgeW91IGhhdmUgYSBtb3JlIHByZWNpc2UsIGJyaWVmIGV4cGxhbmF0aW9uIHBsZWFzZSBsZXQgbWUga25vdyEKLVRoYW5rcyEgLSBQYXQKLQotUGxlYXNlIGFsc28gZmVlbCBmcmVlIHRvIGNvbnRhY3QgbWU6IChQYXQgTmllbWV5ZXIgcGF0QHBhdC5uZXQpIGFib3V0Ci1vdGhlciBsaWNlbnNpbmcgYXJyYW5nZW1lbnRzLgotPC9xdW90ZT4KLQotCi1saWJyYXJpZXMvc2NyaXB0aW5nL2dyb29jeSBOT1RJQ0UKLVRoaXMgbW9kdWxlIGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieQotVGhlIEdyb292eSBjb21tdW5pdHkgKGh0dHA6Ly9ncm9vdnkuY29kZWhhdXMub3JnLykgdW5kZXIgQXBhY2hlCi1MaWNlbnNlIDIuMC4gQ29weXJpZ2h0IDIwMDMtMjAwOS4gU2VlIExJQ0VOU0UKLQotCi1saWJyYXJpZXMvc2NyaXB0aW5nL2phdmFzY3JpcHQgTk9USUNFCi1UaGlzIG1vZHVsZSBpbmNsdWRlcyBSaGlubywgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5Ci1UaGUgTW96aWxsYSBjb21tdW5pdHkgKGh0dHA6Ly9tb3ppbGxhLm9yZy8pIHVuZGVyIE1vemlsbGEgUHVibGljCi1MaWNlbnNlIDEuMS5Tc2VlIGxpY2Vuc2VzL3JoaW5vLmxpY2Vuc2UKLQotCi1saWJyYXJpZXMvc2NyaXB0aW5nL2pydWJ5IE5PVElDRQotVGhpcyBtb2R1bGUgaW5jbHVkZXMgSlJ1YnksIHdoaWNoIE5PVElDRSBpcyBzaWduaWZpY2FudGx5IGxhcmdlCi1hbmQgY2FuIGJlIGZvdW5kIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9RaTRqL3FpNGotbGlicmFyaWVzL2Jsb2IvZGV2ZWxvcC9zY3JpcHRpbmcvanJ1YnkvTk9USUNFCi0KLQotbGlicmFyaWVzL3NlcnZsZXQgTk9USUNFCi1UaGlzIG1vZHVsZSB1c2VzIFNMRjRKLCBkZXZlbG9wZWQgYXQgc2xmNGoub3JnIHVuZGVyIE1JVCBMaWNlbnNlLgotU2VlIGxpY2Vuc2VzL3NsZjRqLmxpY2Vuc2UKLQotCi1saWJyYXJpZXMvc2hpcm8tY29yZSBhbmQgbGlicmFyaWVzL3NoaXJvLXdlYiBOT1RJQ0UKLVRoaXMgbW9kdWxlIHVzZXMgSk9EQSBUaW1lLCBkZXZlbG9wZWQgYXQgaHR0cDovL2pvZGEtdGltZS5zb3VyY2Vmb3JnZS5uZXQKLXVuZGVyIEFwYWNoZSBMaWNlbnNlIDIuMC4gU2VlIExJQ0VOU0UgZmlsZS4KLQotVGhpcyBtb2R1bGUgdXNlcyBCb3VuY3lDYXN0bGUsIGRldmVsb3BlZCBhdCBodHRwOi8vd3d3LmJvdW5jeWNhc3RsZS5vcmcvCi11bmRlciBhIHBlcm1pc3NpdmUgbGljZW5zZS4gU2VlIGxpY2Vuc2VzL2JvdW5jeWNhc3RsZS5saWNlbnNlCi1Cb3VuY3lDYXN0bGUgdXNhZ2UgbWF5IGhhdmUgYWRkaXRpb25hbCBleHBvcnQgcmVzdHJpY3Rpb25zIGluIFVTQSBhbmQKLXBvc3NpYmx5IG90aGVyIGNvdW50cmllcy4KLQotVGhpcyBtb2R1bGUgdXNlcyBBcGFjaGUgU2hpcm8sIHNvZnR3YXJlIGRldmVsb3BlZCBhdCBBcGFjaGUgU29mdHdhcmUKLUZvdW5kYXRpb24gKGh0dHA6Ly9zaGlyby5hcGFjaGUub3JnKSB1bmRlciBBcGFjaGUgTGljZW5zZSAyLjAuCi1TZWUgTElDRU5TRSBmaWxlLgotCi0KLWxpYnJhcmllcy9zcHJpbmcgTk9USUNFCi1UaGlzIG1vZHVsZSB1c2VzIFNwcmluZyBGcmFtZXdvcmssIHNvZnR3YXJlIGRldmVsb3BlZCBhdAotaHR0cDovL3d3dy5zcHJpbmdzb3VyY2Uub3JnLCB1bmRlciBBcGFjaGUgTGljZW5zZSAyLjAuIFNlZSBMSUNFTlNFLgotCi0KLWxpYnJhcmllcy9zdHJ1dHMtKiBOT1RJQ0UKLVRoaXMgbW9kdWxlIHVzZXMgQXBhY2hlIFN0cnV0cywgZGV2ZWxvcGVkIGF0IEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0oaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnKSwgdW5kZXIgQXBhY2hlIExpY2Vuc2UgMi4wLiBTZWUgTElDRU5TRS4KLQotCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2FsYXJtL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9hbGFybS9idWlsZC5ncmFkbGUKaW5kZXggOTdiODg2YS4uNzJmMGZiMSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2FsYXJtL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvYWxhcm0vYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogQWxhcm0gTGlicmFyeSBwcm92aWRlcyBpbmR1c3RyaWFsIGF1dG9tYXRpb24gc3R5bGUgYWxhcm0gcG9pbnQgd29ya2Zsb3cgc2VtYW50aWNzLiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBBbGFybSAtIEFQaSIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIEFsYXJtIExpYnJhcnkgcHJvdmlkZXMgaW5kdXN0cmlhbCBhdXRvbWF0aW9uIHN0eWxlIGFsYXJtIHBvaW50IHdvcmtmbG93IHNlbWFudGljcy4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gQWxhcm0gLSBBUGkiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hbGFybS9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9hbGFybS9kZXYtc3RhdHVzLnhtbAppbmRleCBlZGQxYmM2Li5mNzU0MTQ2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvYWxhcm0vZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL2FsYXJtL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2FsYXJtL3NyYy9kb2NzL2FsYXJtLnR4dCBiL2xpYnJhcmllcy9hbGFybS9zcmMvZG9jcy9hbGFybS50eHQKaW5kZXggMjU1Y2YwNy4uYzBjN2E1OSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2FsYXJtL3NyYy9kb2NzL2FsYXJtLnR4dAorKysgYi9saWJyYXJpZXMvYWxhcm0vc3JjL2RvY3MvYWxhcm0udHh0CkBAIC0zNCw3ICszNCw3IEBACiB3b3JsZCBvZiB0b2RheSwgd2hlcmUgX0FsYXJtIFBvaW50c18gYWxsb3dzIGZvciBmaW5lLWdyYWluZWQgbm90aWZpY2F0aW9uIGFuZCB2aWV3IGludG8gdGhlIGhlYWx0aCBvZiBvbmUgb3IgbW9yZQogc3lzdGVtcy4KIAotSW4gUWk0aiwgd2UgYXJlIGJ1aWxkaW5nIHVwb24gdGhpcyBwb3dlcmZ1bCBhYnN0cmFjdGlvbiwgZnJvbSBkZWNhZGVzIG9mIGZpZWxkIGV4cGVyaWVuY2UuCitJbiBaZXN0LCB3ZSBhcmUgYnVpbGRpbmcgdXBvbiB0aGlzIHBvd2VyZnVsIGFic3RyYWN0aW9uLCBmcm9tIGRlY2FkZXMgb2YgZmllbGQgZXhwZXJpZW5jZS4KIAogaW5jbHVkZTo6Li4vLi4vYnVpbGQvZG9jcy9idWlsZGluZm8vYXJ0aWZhY3QudHh0W10KIApAQCAtNzgsNyArNzgsNyBAQAogLS0tLS0tLS0tLS0tLS0KIAogPT0gQWxhcm0gTW9kZWxzID09Ci1UaGUgUWk0aiBBbGFybSBsaWJyYXJ5IGNvbWVzIHdpdGggMyBfQWxhcm0gTW9kZWxzXyB3aGljaCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbW9zdCB1c2VzLiBUaGVzZSBhcmUgYmFzZWQgb24gZGVjYWRlcworVGhlIFplc3TihKIgQWxhcm0gbGlicmFyeSBjb21lcyB3aXRoIDMgX0FsYXJtIE1vZGVsc18gd2hpY2ggc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgdXNlcy4gVGhlc2UgYXJlIGJhc2VkIG9uIGRlY2FkZXMKIG9mIGV4cGVyaWVuY2UgZnJvbSB0aGUgaW5kdXN0cmlhbCBhdXRvbWF0aW9uIGluZHVzdHJ5IGFuZCB1c2VyIGZlZWRiYWNrLgogCiA9PSBTaW1wbGUgQWxhcm0gTW9kZWwgPT0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hbGFybS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYWxhcm0vcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2FsYXJtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hbGFybS9wYWNrYWdlLmh0bWwKaW5kZXggZDZiZDBiNS4uZGJkNTE4YiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2FsYXJtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hbGFybS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2FsYXJtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hbGFybS9wYWNrYWdlLmh0bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDwvcD4KIAogPHA+Ci0gICAgVGhpcyBBbGFybSBTeXN0ZW0sIHRoYXQgaXMgYmFzZWQgb24gUWk0aidzIGV4Y2VsbGVudCBwZXJzaXN0ZW5jZSBzdXBwb3J0LCBpcyBhbiBhdHRlbXB0IGF0IGJyaW5naW5nIGEgZmlyc3QtY2xhc3MKKyAgICBUaGlzIEFsYXJtIFN5c3RlbSwgdGhhdCBpcyBiYXNlZCBvbiBaZXN0J3MgZXhjZWxsZW50IHBlcnNpc3RlbmNlIHN1cHBvcnQsIGlzIGFuIGF0dGVtcHQgYXQgYnJpbmdpbmcgYSBmaXJzdC1jbGFzcwogICAgIG1vZGVsIGZyb20gdGhlIGluZHVzdHJpYWwgYXV0b21hdGlvbiB3b3JsZCBpbnRvIHRoZSBlbnRlcnByaXNlIG9mIGxhcmdlLXNjYWxlIHNvZnR3YXJlIHN5c3RlbXMsIHRoYXQgbm93YWRheXMKICAgICBhcmUgc28gbGFyZ2UgYW5kIHVuLXdpZWxkbHkgdGhhdCBsb2cgZmlsZXMsIHN5c2xvZyBhbmQgZW1haWxzIGNhbiBubyBsb25nZXIgY29wZSB3aXRoIHRoZSBidXJkZW4gb2YgbWFuYWdlbWVudAogICAgIG5lZWRzLgpAQCAtNzEsOCArNzEsOCBAQAogICAgIHRoZSBiZWhhdmlvciBvZiB0aGUgc3RhdGUgbWFjaGluZSBpbiB0aGUgPGk+QWxhcm08L2k+IGl0c2VsZi4KIDwvcD4KIDxwPgotICAgIFRoZSA8aT5BbGFybSBNb2RlbDwvaT4gaXMgYW4gUWk0aiA8Y29kZT5TZXJ2aWNlPC9jb2RlPiBhbmQgbG9jYXRlZCB2aWEgdGhlIG5vcm1hbCA8Y29kZT5WaXNpYmlsaXR5PC9jb2RlPiBydWxlcywKLSAgICBtYWtpbmcgaXQgcG9zc2libGUgdG8gaGF2ZSBhIGRpZmZlcmVudCA8aT5BbGFybSBNb2RlbDwvaT4gaW4gZWFjaCBRaTRqIG1vZHVsZS4KKyAgICBUaGUgPGk+QWxhcm0gTW9kZWw8L2k+IGlzIGFuIFplc3TihKIgPGNvZGU+U2VydmljZTwvY29kZT4gYW5kIGxvY2F0ZWQgdmlhIHRoZSBub3JtYWwgPGNvZGU+VmlzaWJpbGl0eTwvY29kZT4gcnVsZXMsCisgICAgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGhhdmUgYSBkaWZmZXJlbnQgPGk+QWxhcm0gTW9kZWw8L2k+IGluIGVhY2ggWmVzdOKEoiBtb2R1bGUuCiA8L3A+CiAKIDxoMj5BbGFybSBTdGF0dXM8L2gyPgpAQCAtOTgsNyArOTgsNyBAQAogPC9wPgogPGgxPlN0YXRlIE1hbmFnZW1lbnQ8L2gxPgogPHA+Ci0gICAgPGk+QWxhcm08L2k+IGluc3RhbmNlcyBhcmUgUWk0aiBFbnRpdGllcywgc28gdGhlIDxpPkFsYXJtIFN0YXR1czwvaT4gaXMgcHJlc2VydmVkIG92ZXIgdGltZSBpbiBwZXJzaXN0ZWQgc3RvcmFnZS4KKyAgICA8aT5BbGFybTwvaT4gaW5zdGFuY2VzIGFyZSBaZXN04oSiIEVudGl0aWVzLCBzbyB0aGUgPGk+QWxhcm0gU3RhdHVzPC9pPiBpcyBwcmVzZXJ2ZWQgb3ZlciB0aW1lIGluIHBlcnNpc3RlZCBzdG9yYWdlLgogICAgIFRoaXMgaW4gdHVybiBtZWFucyB0aGF0IHRoZSA8aT5BbGFybTwvaT4gbXVzdCBiZSBhY2Nlc3NlZCB3aXRoaW4gYSA8Y29kZT5Vbml0T2ZXb3JrPC9jb2RlPiBhbmQgdGhlIEFsYXJtIGlzIG5vdCB2YWxpZAogICAgIG91dHNpZGUgdGhlIDxjb2RlPlVuaXRPZldvcms8L2NvZGU+LgogICAgIDwvcD4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hbGFybS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYWxhcm0vQWxhcm1IaXN0b3J5SW1wbFRlc3QuamF2YSBiL2xpYnJhcmllcy9hbGFybS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYWxhcm0vQWxhcm1IaXN0b3J5SW1wbFRlc3QuamF2YQppbmRleCA3OTQzNDdkLi41OGRiOGQ5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvYWxhcm0vc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FsYXJtL0FsYXJtSGlzdG9yeUltcGxUZXN0LmphdmEKKysrIGIvbGlicmFyaWVzL2FsYXJtL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9hbGFybS9BbGFybUhpc3RvcnlJbXBsVGVzdC5qYXZhCkBAIC0yNTQsNyArMjU0LDcgQEAKICAgICAgICAgaW50IG1heHNpemUgPSBoaXN0Lm1heFNpemUoKS5nZXQoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCAzMCwgbWF4c2l6ZSApOwogCi0gICAgICAgIGhpc3QubWF4U2l6ZSgpLnNldCggMyApOyAgICAvLyBUaGUgUWk0aiB2ZXJzaW9uIGRvZXNuJ3QgaW50ZXJjZXB0IHRoZSBtYXhTaXplKCkuc2V0KCkgbWV0aG9kIGFuZCBwdXJnZSB0aGUgb2xkCisgICAgICAgIGhpc3QubWF4U2l6ZSgpLnNldCggMyApOyAgICAvLyBUaGUgWmVzdCB2ZXJzaW9uIGRvZXNuJ3QgaW50ZXJjZXB0IHRoZSBtYXhTaXplKCkuc2V0KCkgbWV0aG9kIGFuZCBwdXJnZSB0aGUgb2xkCiAgICAgICAgIHVuZGVyVGVzdC50cmlnZ2VyKCBBbGFybVBvaW50LlRSSUdHRVJfQUNUSVZBVEUgKTsgLy8gc28gd2UgZG8gYW5vdGhlciBldmVudCB0byBwdXJnZS4KICAgICAgICAgYXNzZXJ0RXF1YWxzKCAzLCBoaXN0LmFsbEFsYXJtRXZlbnRzKCkuZ2V0KCkuc2l6ZSgpICk7CiAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0Jyb3dzZXIuamF2YSBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0Jyb3dzZXIuamF2YQppbmRleCAwMjgyMjUzLi5hYjNkMDBhIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9Ccm93c2VyLmphdmEKKysrIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvQnJvd3Nlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuYXBwYnJvd3NlcjsKIAogaW1wb3J0IGphdmEudXRpbC5TdGFjazsKQEAgLTM2LDcgKzU0LDYgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odmlzaXRlZC5nZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlci5lbnRlciggdmlzaXRlZCApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXRjaCggSlNPTkV4Y2VwdGlvbiBlICkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0Jyb3dzZXJFeGNlcHRpb24uamF2YSBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0Jyb3dzZXJFeGNlcHRpb24uamF2YQppbmRleCBkNWU4ZjgzLi5lNmZmOTNjIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9Ccm93c2VyRXhjZXB0aW9uLmphdmEKKysrIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvQnJvd3NlckV4Y2VwdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuYXBwYnJvd3NlcjsKIAogaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9Gb3JtYXR0ZXIuamF2YSBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0Zvcm1hdHRlci5qYXZhCmluZGV4IDVjOGU3Y2QuLmE3Y2NjYTMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0Zvcm1hdHRlci5qYXZhCisrKyBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0Zvcm1hdHRlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuYXBwYnJvd3NlcjsKIAogaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9Gb3JtYXR0ZXJGYWN0b3J5LmphdmEgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9Gb3JtYXR0ZXJGYWN0b3J5LmphdmEKaW5kZXggZWIyNzRkNy4uY2E3NzE2MCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvRm9ybWF0dGVyRmFjdG9yeS5qYXZhCisrKyBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0Zvcm1hdHRlckZhY3RvcnkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmFwcGJyb3dzZXI7CiAKIHB1YmxpYyBpbnRlcmZhY2UgRm9ybWF0dGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9BYnN0cmFjdEpzb25Gb3JtYXR0ZXIuamF2YSBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vQWJzdHJhY3RKc29uRm9ybWF0dGVyLmphdmEKaW5kZXggYzE3ZjMzMC4uNDZhNDE5ZiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9BYnN0cmFjdEpzb25Gb3JtYXR0ZXIuamF2YQorKysgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0Fic3RyYWN0SnNvbkZvcm1hdHRlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuYXBwYnJvd3Nlci5qc29uOwogCiBpbXBvcnQgb3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vQXBwbGljYXRpb25Nb2RlbEZvcm1hdHRlci5qYXZhIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9BcHBsaWNhdGlvbk1vZGVsRm9ybWF0dGVyLmphdmEKaW5kZXggM2RkYjVjNS4uNzNlOTYzZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9BcHBsaWNhdGlvbk1vZGVsRm9ybWF0dGVyLmphdmEKKysrIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9BcHBsaWNhdGlvbk1vZGVsRm9ybWF0dGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5hcHBicm93c2VyLmpzb247CiAKIGltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9BcnJheUZvcm1hdHRlci5qYXZhIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9BcnJheUZvcm1hdHRlci5qYXZhCmluZGV4IDljMDJmYTcuLjgzMTRlYTIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vQXJyYXlGb3JtYXR0ZXIuamF2YQorKysgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0FycmF5Rm9ybWF0dGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5hcHBicm93c2VyLmpzb247CiAKIGltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9Db21wb3NpdGVNZXRob2RNb2RlbEZvcm1hdHRlci5qYXZhIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9Db21wb3NpdGVNZXRob2RNb2RlbEZvcm1hdHRlci5qYXZhCmluZGV4IGYzYmVjYzQuLjVjYTI0ZDIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vQ29tcG9zaXRlTWV0aG9kTW9kZWxGb3JtYXR0ZXIuamF2YQorKysgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0NvbXBvc2l0ZU1ldGhvZE1vZGVsRm9ybWF0dGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5hcHBicm93c2VyLmpzb247CiAKIGltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9Db25zdHJ1Y3Rvck1vZGVsRm9ybWF0dGVyLmphdmEgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0NvbnN0cnVjdG9yTW9kZWxGb3JtYXR0ZXIuamF2YQppbmRleCBjMWY1NDFkLi5jOTQ3NDlmIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0NvbnN0cnVjdG9yTW9kZWxGb3JtYXR0ZXIuamF2YQorKysgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0NvbnN0cnVjdG9yTW9kZWxGb3JtYXR0ZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmFwcGJyb3dzZXIuanNvbjsKIAogaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0VudGl0eU1vZGVsRm9ybWF0dGVyLmphdmEgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0VudGl0eU1vZGVsRm9ybWF0dGVyLmphdmEKaW5kZXggYzUwZjU1Yy4uNTIxMTkxNyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9FbnRpdHlNb2RlbEZvcm1hdHRlci5qYXZhCisrKyBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vRW50aXR5TW9kZWxGb3JtYXR0ZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmFwcGJyb3dzZXIuanNvbjsKIAogaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0luamVjdGVkRmllbGRNb2RlbEZvcm1hdHRlci5qYXZhIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9JbmplY3RlZEZpZWxkTW9kZWxGb3JtYXR0ZXIuamF2YQppbmRleCBhNmNiNDlmLi45MTMzNGYxIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0luamVjdGVkRmllbGRNb2RlbEZvcm1hdHRlci5qYXZhCisrKyBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vSW5qZWN0ZWRGaWVsZE1vZGVsRm9ybWF0dGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5hcHBicm93c2VyLmpzb247CiAKIGltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9Kc29uRm9ybWF0dGVyRmFjdG9yeS5qYXZhIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9Kc29uRm9ybWF0dGVyRmFjdG9yeS5qYXZhCmluZGV4IDVlOTI1OTQuLjUwZDI0ZTQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vSnNvbkZvcm1hdHRlckZhY3RvcnkuamF2YQorKysgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL0pzb25Gb3JtYXR0ZXJGYWN0b3J5LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5hcHBicm93c2VyLmpzb247CiAKIGltcG9ydCBqYXZhLmlvLldyaXRlcjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vTGF5ZXJNb2RlbEZvcm1hdHRlci5qYXZhIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9MYXllck1vZGVsRm9ybWF0dGVyLmphdmEKaW5kZXggMTA5MWEzNy4uNGY5ZjJiNyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9MYXllck1vZGVsRm9ybWF0dGVyLmphdmEKKysrIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9MYXllck1vZGVsRm9ybWF0dGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5hcHBicm93c2VyLmpzb247CiAKIGltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9NaXhpbk1vZGVsRm9ybWF0dGVyLmphdmEgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL01peGluTW9kZWxGb3JtYXR0ZXIuamF2YQppbmRleCA1OTlkNTU3Li5iZTdiMWFkIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL01peGluTW9kZWxGb3JtYXR0ZXIuamF2YQorKysgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL01peGluTW9kZWxGb3JtYXR0ZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmFwcGJyb3dzZXIuanNvbjsKIAogaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL01vZHVsZU1vZGVsRm9ybWF0dGVyLmphdmEgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL01vZHVsZU1vZGVsRm9ybWF0dGVyLmphdmEKaW5kZXggNGYxZDlkNi4uMjcxZmRlZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9Nb2R1bGVNb2RlbEZvcm1hdHRlci5qYXZhCisrKyBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vTW9kdWxlTW9kZWxGb3JtYXR0ZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmFwcGJyb3dzZXIuanNvbjsKIAogaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL051bGxGb3JtYXR0ZXIuamF2YSBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vTnVsbEZvcm1hdHRlci5qYXZhCmluZGV4IGQzNjJmMzQuLjRlYjljZWEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vTnVsbEZvcm1hdHRlci5qYXZhCisrKyBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vTnVsbEZvcm1hdHRlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuYXBwYnJvd3Nlci5qc29uOwogCiBpbXBvcnQgb3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vT2JqZWN0TW9kZWxGb3JtYXR0ZXIuamF2YSBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vT2JqZWN0TW9kZWxGb3JtYXR0ZXIuamF2YQppbmRleCBkZmE4ZTJmLi5mYTNiNWRlIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL09iamVjdE1vZGVsRm9ybWF0dGVyLmphdmEKKysrIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9PYmplY3RNb2RlbEZvcm1hdHRlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuYXBwYnJvd3Nlci5qc29uOwogCiBpbXBvcnQgb3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vU2VydmljZU1vZGVsRm9ybWF0dGVyLmphdmEgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL1NlcnZpY2VNb2RlbEZvcm1hdHRlci5qYXZhCmluZGV4IDI3ZThlY2QuLjM4NWNkYzEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vU2VydmljZU1vZGVsRm9ybWF0dGVyLmphdmEKKysrIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvanNvbi9TZXJ2aWNlTW9kZWxGb3JtYXR0ZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmFwcGJyb3dzZXIuanNvbjsKIAogaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9qc29uL1ZhbHVlTW9kZWxGb3JtYXR0ZXIuamF2YSBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vVmFsdWVNb2RlbEZvcm1hdHRlci5qYXZhCmluZGV4IDczODYzNmEuLmJhYWNiNWYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vVmFsdWVNb2RlbEZvcm1hdHRlci5qYXZhCisrKyBiL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL2pzb24vVmFsdWVNb2RlbEZvcm1hdHRlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuYXBwYnJvd3Nlci5qc29uOwogCiBpbXBvcnQgb3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0FwcEJyb3dzZXJUZXN0LmphdmEgYi9saWJyYXJpZXMvYXBwYnJvd3Nlci9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvYXBwYnJvd3Nlci9BcHBCcm93c2VyVGVzdC5qYXZhCmluZGV4IDAwZWQ0MWUuLjIwNzk0NTYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9hcHBicm93c2VyL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9hcHBicm93c2VyL0FwcEJyb3dzZXJUZXN0LmphdmEKKysrIGIvbGlicmFyaWVzL2FwcGJyb3dzZXIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2FwcGJyb3dzZXIvQXBwQnJvd3NlclRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmFwcGJyb3dzZXI7CiAKIGltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKQEAgLTQxLDcgKzU5LDYgQEAKICAgICAgICAgRm9ybWF0dGVyRmFjdG9yeSBqc29uRmFjdG9yeSA9IG5ldyBKc29uRm9ybWF0dGVyRmFjdG9yeSggb3V0cHV0ICk7CiAgICAgICAgIEJyb3dzZXIgYnJvd3NlciA9IG5ldyBCcm93c2VyKCBhcHBsaWNhdGlvbk1vZGVsLCBqc29uRmFjdG9yeSApOwogICAgICAgICBicm93c2VyLnRvSnNvbigpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIG91dHB1dC50b1N0cmluZygpICk7CiAgICAgfQogCiAgICAgQE1peGlucyggUGVyc29uLk1peGluLmNsYXNzICkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvY2lyY3VpdGJyZWFrZXIvYnVpbGQuZ3JhZGxlCmluZGV4IDgwNzBhNzcuLmQ5MWJmYTggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL2NpcmN1aXRicmVha2VyL2J1aWxkLmdyYWRsZQpAQCAtMSwxMCArMSwzMCBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBDaXJjdWl0IEJyZWFrZXIgTGlicmFyeSBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgY29ubmVjdGluZyBleHRlcm5hbCByZXNvdXJjZXMsIHNvIHRoYXQgdGhleSBjYW4gYmUgZGlzYWJsZWQgZHVyaW5nIHJlLXBsYXkgb2YgZXZlbnRzLiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHtuYW1lID0gIlFpNGogTGlicmFyeSAtIENpcmN1aXQgQnJlYWtlciJ9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgQ2lyY3VpdCBCcmVha2VyIExpYnJhcnkgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIGNvbm5lY3RpbmcgZXh0ZXJuYWwgcmVzb3VyY2VzLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGRpc2FibGVkIGR1cmluZyByZS1wbGF5IG9mIGV2ZW50cy4iCisKK2phciB7IG1hbmlmZXN0IHtuYW1lID0gIkFwYWNoZSBaZXN04oSiIExpYnJhcnkgLSBDaXJjdWl0IEJyZWFrZXIifX0KIAogZGVwZW5kZW5jaWVzIHsKICAgICBjb21waWxlIHByb2plY3QoICc6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmFwaScgKQogICAgIGNvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5qbXgnICkKKyAgICBjb21waWxlIGxpYnJhcmllcy5zbGY0al9hcGkKIAogICAgIHRlc3RDb21waWxlIHByb2plY3QoICc6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0JyApCiAgICAgdGVzdENvbXBpbGUgbGlicmFyaWVzLmF3YWl0aWxpdHkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9kZXYtc3RhdHVzLnhtbAppbmRleCA2MDZiMDQ4Li43Y2Q4NzE5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY2lyY3VpdGJyZWFrZXIvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL2NpcmN1aXRicmVha2VyL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NpcmN1aXRicmVha2VyL3NyYy9kb2NzL2NpcmN1aXRicmVha2VyLnR4dCBiL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9zcmMvZG9jcy9jaXJjdWl0YnJlYWtlci50eHQKaW5kZXggMDU3YTdhMy4uNjcwNmJkNSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NpcmN1aXRicmVha2VyL3NyYy9kb2NzL2NpcmN1aXRicmVha2VyLnR4dAorKysgYi9saWJyYXJpZXMvY2lyY3VpdGJyZWFrZXIvc3JjL2RvY3MvY2lyY3VpdGJyZWFrZXIudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2xpYnJhcnktY2lyY3VpdGJyZWFrZXIsQ2lyY3VpdCBCcmVha2VyIExpYnJhcnldXQogPSBDaXJjdWl0IEJyZWFrZXIgPQogCkBAIC04LDcgKzI3LDcgQEAKIAogVGhlIENpcmN1aXQgQnJlYWtlciBsaWJyYXJ5IHByb3ZpZGVzIGEgd2F5IHRvIGd1YXJkIHlvdXIgYXBwbGljYXRpb24KIGFnYWluc3QgZmF1bHR5IGV4dGVybmFsIHN5c3RlbXMgKGUuZy4gbWFpbCBzZXJ2ZXJzICBiZWluZyBkb3duLCB3ZWIKLXNlcnZpY2VzIGJlaW5nIGRvd24pLiBJdCBpcyB1c2VkIGJ5IG1hbnkgUWk0aiBFeHRlbnNpb25zIGFuZCBMaWJyYXJpZXMuCitzZXJ2aWNlcyBiZWluZyBkb3duKS4gSXQgaXMgdXNlZCBieSBtYW55IFplc3TihKIgRXh0ZW5zaW9ucyBhbmQgTGlicmFyaWVzLgogCiBUaGVyZSdzIGEgY291cGxlIG9mIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhbmQgb3RoZXJzCiBzZWVuIG9uIHRoZSBuZXQsIGJ1dCB3ZSd2ZSBhbHNvIGhlYXZpbHkgYm9ycm93ZWQgZnJvbSBvdGhlcnMuIFRoZQpAQCAtMzUsNyArNTQsNyBAQAogYnJlYWtlcnMuCiAKIEZvdXJ0aCwgaWYgYW4gZXh0ZXJuYWwgc3lzdGVtIGlzIHVuYXZhaWxhYmxlIGR1ZSB0byBhIGNpcmN1aXRicmVha2VyCi10cmlwcGluZyBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZXhwb3NlIHRoaXMgdG8gb3RoZXIgUWk0aiBzZXJ2aWNlcy4KK3RyaXBwaW5nIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBleHBvc2UgdGhpcyB0byBvdGhlciBaZXN04oSiIHNlcnZpY2VzLgogVGhlcmUgaXMgYSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXZhaWxhYmlsaXR5IGludGVyZmFjZSB0aGF0CiBkZWxlZ2F0ZXMgdG8gYSBjaXJjdWl0IGJyZWFrZXIgYW5kIHRoZSBFbmFibGVkIGNvbmZpZ3VyYXRpb24gZmxhZywgd2hpY2gKIGlzIHdoYXQgd2UnZCBzdXNwZWN0IHdpbGwgYmUgdXNlZCBpbiBtb3N0IGNhc2VzIHdoZXJlIGV4dGVybmFsIHN5c3RlbXMKQEAgLTQ1LDcgKzY0LDcgQEAKIAogPT0gRGlyZWN0IHVzYWdlID09CiAKLVRoZSBDaXJjdWl0QnJlYWtlciBjYW4gYmUgdXNlZCBkaXJlY3RseSwgZXZlbiB3aXRob3V0IHVzaW5nIGFueXRoaW5nIGVsc2UgZnJvbSB0aGUgUWk0aiBTREsuCitUaGUgQ2lyY3VpdEJyZWFrZXIgY2FuIGJlIHVzZWQgZGlyZWN0bHksIGV2ZW4gd2l0aG91dCB1c2luZyBhbnl0aGluZyBlbHNlIGZyb20gdGhlIFplc3TihKIgU0RLLgogCiBIZXJlIGlzIGEgY29kZSBzbmlwcGV0IHRoYXQgZGVtb25zdHJhdGUgaG93IHRvIGNyZWF0ZSBhIENpcmN1aXRCcmVha2VyIGFuZCBob3cgaXQgYmVoYXZlOgogCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY2lyY3VpdGJyZWFrZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NpcmN1aXRicmVha2VyL2pteC9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvY2lyY3VpdGJyZWFrZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NpcmN1aXRicmVha2VyL2pteC9wYWNrYWdlLmh0bWwKaW5kZXggYzZiZDEzNi4uYjNjYTNhOSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NpcmN1aXRicmVha2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jaXJjdWl0YnJlYWtlci9qbXgvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY2lyY3VpdGJyZWFrZXIvam14L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+Q2lyY3VpdCBCcmVha2VyIEpNWCBTdXBwb3J0LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY2lyY3VpdGJyZWFrZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NpcmN1aXRicmVha2VyL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY2lyY3VpdGJyZWFrZXIvcGFja2FnZS5odG1sCmluZGV4IDAwMTg5NDAuLmRmNDE3MGMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY2lyY3VpdGJyZWFrZXIvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY2lyY3VpdGJyZWFrZXIvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5DaXJjdWl0IEJyZWFrZXIgTGlicmFyeS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NpcmN1aXRicmVha2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jaXJjdWl0YnJlYWtlci9zZXJ2aWNlL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY2lyY3VpdGJyZWFrZXIvc2VydmljZS9wYWNrYWdlLmh0bWwKaW5kZXggNDUwZDQyZi4uY2U0ZGQ3MSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NpcmN1aXRicmVha2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jaXJjdWl0YnJlYWtlci9zZXJ2aWNlL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvY2lyY3VpdGJyZWFrZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NpcmN1aXRicmVha2VyL3NlcnZpY2UvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5DaXJjdWl0IEJyZWFrZXIgU2VydmljZS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NpcmN1aXRicmVha2VyL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jaXJjdWl0YnJlYWtlci9DaXJjdWl0QnJlYWtlclRlc3QuamF2YSBiL2xpYnJhcmllcy9jaXJjdWl0YnJlYWtlci9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY2lyY3VpdGJyZWFrZXIvQ2lyY3VpdEJyZWFrZXJUZXN0LmphdmEKaW5kZXggNzgzMjM3Zi4uYjFjMmVhZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NpcmN1aXRicmVha2VyL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jaXJjdWl0YnJlYWtlci9DaXJjdWl0QnJlYWtlclRlc3QuamF2YQorKysgYi9saWJyYXJpZXMvY2lyY3VpdGJyZWFrZXIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NpcmN1aXRicmVha2VyL0NpcmN1aXRCcmVha2VyVGVzdC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKIGltcG9ydCBzdGF0aWMgY29tLmpheXdheS5hd2FpdGlsaXR5LkF3YWl0aWxpdHkuYXdhaXQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5qYXl3YXkuYXdhaXRpbGl0eS5EdXJhdGlvbi5GSVZFX0hVTkRSRURfTUlMTElTRUNPTkRTOworaW1wb3J0IHN0YXRpYyBjb20uamF5d2F5LmF3YWl0aWxpdHkuRHVyYXRpb24uT05FX1NFQ09ORDsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXMuaXM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhhdDsKIApAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgIC8vIEVORCBTTklQUEVUOiBkaXJlY3QKICAgICAgICAgYXNzZXJ0VGhhdCggY2Iuc3RhdHVzKCksIENvcmVNYXRjaGVycy5lcXVhbFRvKCBDaXJjdWl0QnJlYWtlci5TdGF0dXMub2ZmICkgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiV2FpdC4uLiIgKTsKLSAgICAgICAgYXdhaXQoKS5hdE1vc3QoIEZJVkVfSFVORFJFRF9NSUxMSVNFQ09ORFMgKS51bnRpbCggY2lyY3VpdEJyZWFrZXJTdGF0dXMoKSwgaXMoIENpcmN1aXRCcmVha2VyLlN0YXR1cy5vbiApICk7CisgICAgICAgIGF3YWl0KCkuYXRNb3N0KCBPTkVfU0VDT05EICkudW50aWwoIGNpcmN1aXRCcmVha2VyU3RhdHVzKCksIGlzKCBDaXJjdWl0QnJlYWtlci5TdGF0dXMub24gKSApOwogCiAgICAgICAgIC8vIFNUQVJUIFNOSVBQRVQ6IGRpcmVjdAogICAgICAgICAvLyBDaXJjdWl0QnJlYWtlciBpcyBiYWNrIG9uCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL2J1aWxkLmdyYWRsZQppbmRleCA0OThjNTkzLi44MjZiNzNkIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29uc3RyYWludHMvYnVpbGQuZ3JhZGxlCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBDb25zdHJhaW50IExpYnJhcnkgcHJvdmlkZXMgY29tbW9uIHNldCBvZiBjb25zdHJhaW50cy4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gQ29uc3RyYWludHMifX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIENvbnN0cmFpbnQgTGlicmFyeSBwcm92aWRlcyBjb21tb24gc2V0IG9mIGNvbnN0cmFpbnRzLiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIExpYnJhcnkgLSBDb25zdHJhaW50cyJ9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvY29uc3RyYWludHMvZGV2LXN0YXR1cy54bWwKaW5kZXggYTBjOWZiYi4uYmRmMDBlNyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL2Rldi1zdGF0dXMueG1sCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvZG9jcy9jb25zdHJhaW50cy50eHQgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL2RvY3MvY29uc3RyYWludHMudHh0CmluZGV4IDBjYmUwNTEuLmMzNThmNzUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvZG9jcy9jb25zdHJhaW50cy50eHQKKysrIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9kb2NzL2NvbnN0cmFpbnRzLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LWNvbnN0cmFpbnRzLENvbnN0cmFpbnRzIExpYnJhcnldXQogPSBDb25zdHJhaW50cyA9CiAKQEAgLTcsNyArMjYsNyBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhlIENvbnN0cmFpbnRzIGxpYnJhcnkgcHJvdmlkZSBhIGJ1bmNoIG9mIG9mdGVuIHVzZWQgQ29uc3RyYWludHMgYmFzZWQgb24gdGhlCi1RaTRqIENvbnN0cmFpbnRzIGFwaSBkZXNjcmliZWQgaW4gPDxkZWYtY29uc3RyYWludD4+LgorWmVzdOKEoiBDb25zdHJhaW50cyBhcGkgZGVzY3JpYmVkIGluIDw8ZGVmLWNvbnN0cmFpbnQ+Pi4KIAogUmVtZW1iZXIgdGhhdCB5b3UgYXJlIG5vdCBsaW1pdGVkIHRvIGNvbnN0cmFpbnRzIHByZXNlbnRzIGluIHRoaXMgbGlicmFyeSwgeW91CiBhcmUgZW5jb3VyYWdlZCB0byB3cml0ZSB5b3VyIG93biBjb25zdHJhaW50cy4gU2VlIDw8aG93dG8tY3JlYXRlLWNvbnN0cmFpbnQ+PgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9Db250YWluc0NvbnN0cmFpbnQuamF2YSBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvQ29udGFpbnNDb25zdHJhaW50LmphdmEKaW5kZXggZTQ2NTM0ZC4uMjQ4ZTA0MCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9Db250YWluc0NvbnN0cmFpbnQuamF2YQorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL0NvbnRhaW5zQ29uc3RyYWludC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHM7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uc3RyYWludC5Db25zdHJhaW50OwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9HcmVhdGVyVGhhbkNvbnN0cmFpbnQuamF2YSBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvR3JlYXRlclRoYW5Db25zdHJhaW50LmphdmEKaW5kZXggNDMzMjk0Yi4uYzI4YzExMCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9HcmVhdGVyVGhhbkNvbnN0cmFpbnQuamF2YQorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL0dyZWF0ZXJUaGFuQ29uc3RyYWludC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHM7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uc3RyYWludC5Db25zdHJhaW50OwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9MZXNzVGhhbkNvbnN0cmFpbnQuamF2YSBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvTGVzc1RoYW5Db25zdHJhaW50LmphdmEKaW5kZXggNWU4OGY1NC4uZDY4ODBlMyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9MZXNzVGhhbkNvbnN0cmFpbnQuamF2YQorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL0xlc3NUaGFuQ29uc3RyYWludC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHM7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uc3RyYWludC5Db25zdHJhaW50OwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9NYXRjaGVzQ29uc3RyYWludC5qYXZhIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9NYXRjaGVzQ29uc3RyYWludC5qYXZhCmluZGV4IDY3ZmM1NzUuLmMwMDQ4YTQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvTWF0Y2hlc0NvbnN0cmFpbnQuamF2YQorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL01hdGNoZXNDb25zdHJhaW50LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50czsKIAogaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9NYXhMZW5ndGhDb25zdHJhaW50LmphdmEgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL01heExlbmd0aENvbnN0cmFpbnQuamF2YQppbmRleCA1N2JkNmIzLi5iODM3NTkzIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL01heExlbmd0aENvbnN0cmFpbnQuamF2YQorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL01heExlbmd0aENvbnN0cmFpbnQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbnN0cmFpbnQuQ29uc3RyYWludDsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvTWluTGVuZ3RoQ29uc3RyYWludC5qYXZhIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9NaW5MZW5ndGhDb25zdHJhaW50LmphdmEKaW5kZXggMmY0YzBmMS4uMWVmZDM5ZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9NaW5MZW5ndGhDb25zdHJhaW50LmphdmEKKysrIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9NaW5MZW5ndGhDb25zdHJhaW50LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50czsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25zdHJhaW50LkNvbnN0cmFpbnQ7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL09uZU9mQ29uc3RyYWludC5qYXZhIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9PbmVPZkNvbnN0cmFpbnQuamF2YQppbmRleCBmNWYxNzJiLi5hOWM2ZDJiIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL09uZU9mQ29uc3RyYWludC5qYXZhCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvT25lT2ZDb25zdHJhaW50LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50czsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25zdHJhaW50LkNvbnN0cmFpbnQ7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL1JhbmdlQ29uc3RyYWludC5qYXZhIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9SYW5nZUNvbnN0cmFpbnQuamF2YQppbmRleCBkM2MyNTVkLi5lNjcxZmYwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL1JhbmdlQ29uc3RyYWludC5qYXZhCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvUmFuZ2VDb25zdHJhaW50LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50czsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25zdHJhaW50LkNvbnN0cmFpbnQ7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vQ29udGFpbnMuamF2YSBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9Db250YWlucy5qYXZhCmluZGV4IDk1NGY1OTYuLjhkZDExYmUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9Db250YWlucy5qYXZhCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9Db250YWlucy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMuYW5ub3RhdGlvbjsKIAogaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9FbWFpbC5qYXZhIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL0VtYWlsLmphdmEKaW5kZXggNmE2NzU0Ny4uZGRmZjM1OSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL0VtYWlsLmphdmEKKysrIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL0VtYWlsLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50cy5hbm5vdGF0aW9uOwogCiBpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL0dyZWF0ZXJUaGFuLmphdmEgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vR3JlYXRlclRoYW4uamF2YQppbmRleCAxNzBlNTU1Li4zYmU2MjhlIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vR3JlYXRlclRoYW4uamF2YQorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vR3JlYXRlclRoYW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzLmFubm90YXRpb247CiAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vTGVzc1RoYW4uamF2YSBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9MZXNzVGhhbi5qYXZhCmluZGV4IGQ4MGJjZjguLjMzOWNmOWIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9MZXNzVGhhbi5qYXZhCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9MZXNzVGhhbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMuYW5ub3RhdGlvbjsKIAogaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9NYXRjaGVzLmphdmEgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vTWF0Y2hlcy5qYXZhCmluZGV4IDQzYjU4NmEuLmFjYTljYTMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9NYXRjaGVzLmphdmEKKysrIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL01hdGNoZXMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzLmFubm90YXRpb247CiAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vTWF4TGVuZ3RoLmphdmEgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vTWF4TGVuZ3RoLmphdmEKaW5kZXggNDBiYTIwNi4uYzU2ZTM0MCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL01heExlbmd0aC5qYXZhCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9NYXhMZW5ndGguamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzLmFubm90YXRpb247CiAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vTWluTGVuZ3RoLmphdmEgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vTWluTGVuZ3RoLmphdmEKaW5kZXggMDY4NmEwMS4uYTdiZDg1OSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL01pbkxlbmd0aC5qYXZhCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9NaW5MZW5ndGguamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzLmFubm90YXRpb247CiAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vT25lT2YuamF2YSBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9PbmVPZi5qYXZhCmluZGV4IDBlMjNiMDEuLjZhYjdiZWEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9PbmVPZi5qYXZhCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9PbmVPZi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMuYW5ub3RhdGlvbjsKIAogaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9SYW5nZS5qYXZhIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL1JhbmdlLmphdmEKaW5kZXggNTBiYTEyOC4uODI0MDNkNyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL1JhbmdlLmphdmEKKysrIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL1JhbmdlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50cy5hbm5vdGF0aW9uOwogCiBpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvYW5ub3RhdGlvbi9wYWNrYWdlLmh0bWwKaW5kZXggMWIxM2RiNy4uMTdiMjJjNSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9hbm5vdGF0aW9uL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL2Fubm90YXRpb24vcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5Db25zdHJhaW50cyBBbm5vdGF0aW9ucy48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3BhY2thZ2UuaHRtbAppbmRleCA5YzQzOWFiLi5kNGM5YmQwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+Q29uc3RyYWludHMgTGlicmFyeS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9UZXN0Q2FzZUNvbXBvc2l0ZS5qYXZhIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9UZXN0Q2FzZUNvbXBvc2l0ZS5qYXZhCmluZGV4IDY5MzQzZTYuLjY4Nzc3ZjMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvVGVzdENhc2VDb21wb3NpdGUuamF2YQorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL1Rlc3RDYXNlQ29tcG9zaXRlLmphdmEKQEAgLTE3LDcgKzE3LDkgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlRyYW5zaWVudENvbXBvc2l0ZTsKIGltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzLmFubm90YXRpb24uKjsKKyAgICAvLyBTVEFSVCBTTklQUEVUOiBjb25zdHJhaW50cworICAgIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzLmFubm90YXRpb24uKjsKKyAgICAvLyBFTkQgU05JUFBFVDogY29uc3RyYWludHMKIAogLyoqCiAgKiBUZXN0IGNvbXBvc2l0ZSB3aXRoIGFsbCB0aGUgY29uc3RyYWludHMKQEAgLTU2LDcgKzU4LDcgQEAKIAogICAgIEBPbmVPZiggeyAiQmFyIiwgIlh5enp5IiB9ICkgUHJvcGVydHk8U3RyaW5nPiBvbmVPZigpOwogCi0gICAgdm9pZCB0ZXN0UGFyYW1ldGVycyhAR3JlYXRlclRoYW4oMTApIEludGVnZXIgZ3JlYXRlclRoYW4pOworICAgIHZvaWQgdGVzdFBhcmFtZXRlcnMoIEBHcmVhdGVyVGhhbiggMTAgKSBJbnRlZ2VyIGdyZWF0ZXJUaGFuICk7CiAgICAgLy8gRU5EIFNOSVBQRVQ6IGNvbnN0cmFpbnRzCiAKICAgICBhYnN0cmFjdCBjbGFzcyBUZXN0Q2FzZU1peGluCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3FpNzAvSXNzdWVUZXN0LmphdmEgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3FpNzAvSXNzdWVUZXN0LmphdmEKaW5kZXggNmZhMTFmOS4uOTE3OGFlZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9xaTcwL0lzc3VlVGVzdC5qYXZhCisrKyBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvcWk3MC9Jc3N1ZVRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzLnFpNzA7CiAKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvcWk3MC9TYW1wbGUuamF2YSBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvcWk3MC9TYW1wbGUuamF2YQppbmRleCBjNTFlZDI2Li5hZDkyNjIxIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3FpNzAvU2FtcGxlLmphdmEKKysrIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9xaTcwL1NhbXBsZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMucWk3MDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvcWk3MC9TYW1wbGVDb21wb3NpdGUuamF2YSBiL2xpYnJhcmllcy9jb25zdHJhaW50cy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29uc3RyYWludHMvcWk3MC9TYW1wbGVDb21wb3NpdGUuamF2YQppbmRleCA0OTFmNjllLi45MjRlMmZmIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3FpNzAvU2FtcGxlQ29tcG9zaXRlLmphdmEKKysrIGIvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9xaTcwL1NhbXBsZUNvbXBvc2l0ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMucWk3MDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50Q29tcG9zaXRlOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jb25zdHJhaW50cy9xaTcwL1NhbXBsZU1peGluLmphdmEgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3FpNzAvU2FtcGxlTWl4aW4uamF2YQppbmRleCBjMDg4MWRjLi44OTIwMmEyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3FpNzAvU2FtcGxlTWl4aW4uamF2YQorKysgYi9saWJyYXJpZXMvY29uc3RyYWludHMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnN0cmFpbnRzL3FpNzAvU2FtcGxlTWl4aW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzLnFpNzA7CiAKIHB1YmxpYyBjbGFzcyBTYW1wbGVNaXhpbgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnZlcnNpb24vYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL2NvbnZlcnNpb24vYnVpbGQuZ3JhZGxlCmluZGV4IGM3YmIyZDIuLjgzYTdhZDcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb252ZXJzaW9uL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvY29udmVyc2lvbi9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBWYWx1ZXMgTGlicmFyeSBoYXMgdmFyaW91cyBnZW5lcmljIHNlcnZpY2VzIHRvIG1hbmlwdWxhdGUgUWk0aiBWYWx1ZUNvbXBvc2l0ZXMsIHN1Y2ggYXMgY29udmVydGluZyBhbiBFbnRpdHkgdG8gYSBWYWx1ZS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gVmFsdWVzIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgQ29udmVyc2lvbiBMaWJyYXJ5IGhhcyB2YXJpb3VzIGdlbmVyaWMgc2VydmljZXMgdG8gbWFuaXB1bGF0ZSBBcGFjaGUgWmVzdOKEoiBWYWx1ZUNvbXBvc2l0ZXMsIHN1Y2ggYXMgY29udmVydGluZyBhbiBFbnRpdHkgdG8gYSBWYWx1ZS4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gQ29udmVyc2lvbiIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnZlcnNpb24vZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvY29udmVyc2lvbi9kZXYtc3RhdHVzLnhtbAppbmRleCA4OWU3ZmExLi41MTUyOTFhIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29udmVyc2lvbi9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvY29udmVyc2lvbi9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9kb2NzL2NvbnZlcnNpb24udHh0IGIvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL2RvY3MvY29udmVyc2lvbi50eHQKaW5kZXggN2Q3ZGE5Mi4uMDE1ZjNlNiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL2RvY3MvY29udmVyc2lvbi50eHQKKysrIGIvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL2RvY3MvY29udmVyc2lvbi50eHQKQEAgLTEsNSArMSwyNCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbbGlicmFyeS1jb252ZXJzaW9uLCBDb252ZXJzaW9uIExpYnJhcnldXQotPSBDb252ZXJzaW9uID0KKz0gQ29udmVyc2lvbiAtIERFUFJFQ0FURUQgPQogCiBbZGV2c3RhdHVzXQogLS0tLS0tLS0tLS0tLS0KQEAgLTEwLDYgKzI5LDE2IEBACiAKIGluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCiAKKworW1dBUk5JTkddCisuREVQUkVDQVRFRAorPT09PQorVGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdyBwcmVzZW50IGluIDw8ZGVmLXVuaXRvZndvcms+PiBhcwordGhlIHR3byBtZXRob2RzIHRvRW50aXR5KCkgYW5kIHRvVmFsdWUoKS4gU2luY2UgdGhpcyBsaWJyYXJ5IHdhcyB3cml0dGVuCithc3NvY2F0aW9ucyBvZiBhbGwga2luZHMgYXJlIG5vdyBmdWxseSBzdXBwb3J0ZWQgaW4gVmFsdWVzLgorPT09PQorCisKID09IEVudGl0aWVzIHRvIFZhbHVlcyA9PQogCiBUbyBjb252ZXJ0IEVudGl0aWVzIHRvIFZhbHVlcywgdXNlIHRoZSBFbnRpdHlUb1ZhbHVlU2VydmljZS4gSXQgaXMgZWFzaWx5IGFzc2VtYmxlZDoKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9FbnRpdHlUb1ZhbHVlLmphdmEgYi9saWJyYXJpZXMvY29udmVyc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29udmVyc2lvbi92YWx1ZXMvRW50aXR5VG9WYWx1ZS5qYXZhCmluZGV4IDVkMGZlMGEuLmQwOWViM2UgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9FbnRpdHlUb1ZhbHVlLmphdmEKKysrIGIvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL0VudGl0eVRvVmFsdWUuamF2YQpAQCAtNTAsNiArNTAsOSBAQAogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5saWJyYXJ5LmNvbnZlcnNpb24udmFsdWVzLlNoYXJlZC5TVFJJTkdfTUFQX1RZUEVfU1BFQzsKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGoubGlicmFyeS5jb252ZXJzaW9uLnZhbHVlcy5TaGFyZWQuU1RSSU5HX1RZUEVfU1BFQzsKIAorLyoqCisgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIHtAbGluayBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrI3RvVmFsdWUoQ2xhc3MsIElkZW50aXR5KX0gaW5zdGVhZC4KKyAqLwogQE1peGlucyggRW50aXR5VG9WYWx1ZS5FbnRpdHlUb1ZhbHVlTWl4aW4uY2xhc3MgKQogcHVibGljIGludGVyZmFjZSBFbnRpdHlUb1ZhbHVlCiB7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29udmVyc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29udmVyc2lvbi92YWx1ZXMvRW50aXR5VG9WYWx1ZUFzc2VtYmxlci5qYXZhIGIvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL0VudGl0eVRvVmFsdWVBc3NlbWJsZXIuamF2YQppbmRleCBmM2VlZTI5Li42ODYyMDRmIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29udmVyc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29udmVyc2lvbi92YWx1ZXMvRW50aXR5VG9WYWx1ZUFzc2VtYmxlci5qYXZhCisrKyBiL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9FbnRpdHlUb1ZhbHVlQXNzZW1ibGVyLmphdmEKQEAgLTE3LDYgKzE3LDcgQEAKICAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmNvbnZlcnNpb24udmFsdWVzOwogCitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5JZGVudGl0eTsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibGVyczsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwpAQCAtMjQsNiArMjUsNyBAQAogCiAvKioKICAqIEVudGl0eVRvVmFsdWUgU2VydmljZSBBc3NlbWJsZXIuCisgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIHtAbGluayBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrI3RvVmFsdWUoQ2xhc3MsIElkZW50aXR5KX0gaW5zdGVhZC4KICAqLwogcHVibGljIGNsYXNzIEVudGl0eVRvVmFsdWVBc3NlbWJsZXIKICAgICBleHRlbmRzIEFzc2VtYmxlcnMuVmlzaWJpbGl0eUlkZW50aXR5PEVudGl0eVRvVmFsdWVBc3NlbWJsZXI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29udmVyc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29udmVyc2lvbi92YWx1ZXMvRW50aXR5VG9WYWx1ZVNlcnZpY2UuamF2YSBiL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9FbnRpdHlUb1ZhbHVlU2VydmljZS5qYXZhCmluZGV4IDY3YWUyMzEuLjE5YjQ1MzQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9FbnRpdHlUb1ZhbHVlU2VydmljZS5qYXZhCisrKyBiL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9FbnRpdHlUb1ZhbHVlU2VydmljZS5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jb252ZXJzaW9uLnZhbHVlczsKIAoraW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHk7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZUNvbXBvc2l0ZTsKIAogLyoqIFRoZSBFbnRpdHlUb1ZhbHVlU2VydmljZSBjb252ZXJ0cyBFbnRpdGllcyB0byBtYXRjaGluZyBWYWx1ZXMuCkBAIC00NSw2ICs0Niw3IEBACiAgKiA8cD4KICAqIElmIGEgUHJvcGVydHkgZnJvbSB0aGUgRW50aXR5IGlzIG5vdCBmb3VuZCBpbiB0aGUgVmFsdWUsIHRoZW4gaXQgaXMgaWdub3JlZC4KICAqIDwvcD4KKyAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2Uge0BsaW5rIG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmsjdG9WYWx1ZShDbGFzcywgSWRlbnRpdHkpfSBpbnN0ZWFkLgogICovCiBwdWJsaWMgaW50ZXJmYWNlIEVudGl0eVRvVmFsdWVTZXJ2aWNlIGV4dGVuZHMgRW50aXR5VG9WYWx1ZSwgU2VydmljZUNvbXBvc2l0ZQogewpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL1ZhbHVlVG9FbnRpdHkuamF2YSBiL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9WYWx1ZVRvRW50aXR5LmphdmEKaW5kZXggNTU5ZmIzNy4uZjQyZmIyOCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL1ZhbHVlVG9FbnRpdHkuamF2YQorKysgYi9saWJyYXJpZXMvY29udmVyc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29udmVyc2lvbi92YWx1ZXMvVmFsdWVUb0VudGl0eS5qYXZhCkBAIC0yMyw2ICsyMyw3IEBACiAKIC8qKgogICogQ3JlYXRlIG9yIHVwZGF0ZSBFbnRpdGllcyBmcm9tIG1hdGNoaW5nIFZhbHVlcy4KKyAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2Uge0BsaW5rIG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmsjdG9FbnRpdHkoQ2xhc3MsIElkZW50aXR5KX0gaW5zdGVhZC4KICAqLwogcHVibGljIGludGVyZmFjZSBWYWx1ZVRvRW50aXR5CiB7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY29udmVyc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29udmVyc2lvbi92YWx1ZXMvVmFsdWVUb0VudGl0eUFzc2VtYmxlci5qYXZhIGIvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL1ZhbHVlVG9FbnRpdHlBc3NlbWJsZXIuamF2YQppbmRleCBlNTYwYjJjLi5iZTg2MWVlIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY29udmVyc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29udmVyc2lvbi92YWx1ZXMvVmFsdWVUb0VudGl0eUFzc2VtYmxlci5qYXZhCisrKyBiL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9WYWx1ZVRvRW50aXR5QXNzZW1ibGVyLmphdmEKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmNvbnZlcnNpb24udmFsdWVzOwogCitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5JZGVudGl0eTsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibGVyczsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwpAQCAtMjIsNiArMjMsNyBAQAogCiAvKioKICAqIFZhbHVlVG9FbnRpdHkgU2VydmljZSBBc3NlbWJsZXIuCisgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIHtAbGluayBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrI3RvRW50aXR5KENsYXNzLCBJZGVudGl0eSl9IGluc3RlYWQuCiAgKi8KIHB1YmxpYyBjbGFzcyBWYWx1ZVRvRW50aXR5QXNzZW1ibGVyCiAgICAgZXh0ZW5kcyBBc3NlbWJsZXJzLlZpc2liaWxpdHlJZGVudGl0eTxWYWx1ZVRvRW50aXR5QXNzZW1ibGVyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL1ZhbHVlVG9FbnRpdHlNaXhpbi5qYXZhIGIvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL1ZhbHVlVG9FbnRpdHlNaXhpbi5qYXZhCmluZGV4IGI1ZDkxYmIuLjczYmFlNTUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9WYWx1ZVRvRW50aXR5TWl4aW4uamF2YQorKysgYi9saWJyYXJpZXMvY29udmVyc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29udmVyc2lvbi92YWx1ZXMvVmFsdWVUb0VudGl0eU1peGluLmphdmEKQEAgLTM1LDcgKzM1LDYgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LklkZW50aXR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLk5vU3VjaEVudGl0eUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVDb21wb3NpdGU7CkBAIC00MywxMyArNDIsMTggQEAKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5RaTRqU1BJOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kZWxNb2R1bGU7CitpbXBvcnQgb3JnLnFpNGouc3BpLm1vZHVsZS5Nb2R1bGVTcGk7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMubWFwOwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5saWJyYXJ5LmNvbnZlcnNpb24udmFsdWVzLlNoYXJlZC5TVFJJTkdfQ09MTEVDVElPTl9UWVBFX1NQRUM7CiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmxpYnJhcnkuY29udmVyc2lvbi52YWx1ZXMuU2hhcmVkLlNUUklOR19NQVBfVFlQRV9TUEVDOwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5saWJyYXJ5LmNvbnZlcnNpb24udmFsdWVzLlNoYXJlZC5TVFJJTkdfVFlQRV9TUEVDOwogCiAvKioKICAqIFZhbHVlVG9FbnRpdHkgTWl4aW4uCisgKgorICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSB7QGxpbmsgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29yayN0b0VudGl0eShDbGFzcywgSWRlbnRpdHkpfSBpbnN0ZWFkLgogICovCiBwdWJsaWMgY2xhc3MgVmFsdWVUb0VudGl0eU1peGluCiAgICAgaW1wbGVtZW50cyBWYWx1ZVRvRW50aXR5CkBAIC02OCw3ICs3Miw3IEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlICkKICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoICJRaTRqIENvcmUgUnVudGltZSBjb2RlYmFzZSBpcyBjb3JydXB0ZWQuIENvbnRhY3QgUWk0aiB0ZWFtOiBWYWx1ZVRvRW50aXR5TWl4aW4iICk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvciggIlplc3QgQ29yZSBSdW50aW1lIGNvZGViYXNlIGlzIGNvcnJ1cHRlZC4gQ29udGFjdCBaZXN0IHRlYW06IFZhbHVlVG9FbnRpdHlNaXhpbiIgKTsKICAgICAgICAgfQogICAgICAgICBNQU5ZX0FTU09DX1RPX0VOVElUWV9SRUZfSVRFUkFCTEUgPSBuZXcgRnVuY3Rpb248TWFueUFzc29jaWF0aW9uPD8+LCBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+PigpCiAgICAgICAgIHsKQEAgLTE0NCw3ICsxNDgsNyBAQAogICAgIHByaXZhdGUgUWk0alNQSSBzcGk7CiAKICAgICBAU3RydWN0dXJlCi0gICAgcHJpdmF0ZSBNb2R1bGUgbW9kdWxlOworICAgIHByaXZhdGUgTW9kdWxlU3BpIG1vZHVsZTsKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyA8VD4gVCBjcmVhdGUoIENsYXNzPFQ+IGVudGl0eVR5cGUsIE9iamVjdCB2YWx1ZSApCkBAIC0xOTMsNyArMTk3LDggQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgPFQ+IEl0ZXJhYmxlPFQ+IGNyZWF0ZSggZmluYWwgQ2xhc3M8VD4gZW50aXR5VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgSXRlcmFibGU8T2JqZWN0PiB2YWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZ1bmN0aW9uPFQsIFQ+IHByb3RvdHlwZU9wcG9ydHVuaXR5ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRnVuY3Rpb248VCwgVD4gcHJvdG90eXBlT3Bwb3J0dW5pdHkKKyAgICApCiAgICAgewogICAgICAgICByZXR1cm4gSXRlcmFibGVzLm1hcCgKICAgICAgICAgICAgIG5ldyBGdW5jdGlvbjxPYmplY3QsIFQ+KCkKQEAgLTIxMyw3ICsyMTgsMTEgQEAKICAgICAgICAgRW50aXR5RGVzY3JpcHRvciBlRGVzYyA9IG1vZHVsZS5lbnRpdHlEZXNjcmlwdG9yKCBlbnRpdHlUeXBlLmdldE5hbWUoKSApOwogICAgICAgICBpZiggZURlc2MgPT0gbnVsbCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFbnRpdHlUeXBlTm90Rm91bmRFeGNlcHRpb24oIGVudGl0eVR5cGUuZ2V0TmFtZSgpICk7CisgICAgICAgICAgICB0aHJvdyBuZXcgRW50aXR5VHlwZU5vdEZvdW5kRXhjZXB0aW9uKCBlbnRpdHlUeXBlLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoIE1vZGVsTW9kdWxlLnRvU3RyaW5nRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5maW5kVmlzaWJsZUVudGl0eVR5cGVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKTsKICAgICAgICAgfQogCiAgICAgICAgIFZhbHVlQ29tcG9zaXRlIHZDb21wb3NpdGUgPSAoVmFsdWVDb21wb3NpdGUpIHZhbHVlOwpAQCAtMjM3LDExOCArMjQ2LDExOCBAQAogICAgIHsKICAgICAgICAgRnVuY3Rpb248UHJvcGVydHlEZXNjcmlwdG9yLCBPYmplY3Q+IHByb3BzCiAgICAgICAgICAgICA9IG5ldyBGdW5jdGlvbjxQcm9wZXJ0eURlc2NyaXB0b3IsIE9iamVjdD4oKQorICAgICAgICB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgbWFwKCBQcm9wZXJ0eURlc2NyaXB0b3IgZVByb3BEZXNjICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IG1hcCggUHJvcGVydHlEZXNjcmlwdG9yIGVQcm9wRGVzYyApCisgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlN0YXRlLnByb3BlcnR5Rm9yKCBlUHJvcERlc2MuYWNjZXNzb3IoKSApLmdldCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHByb3BOb3RGb3VuZE9uVmFsdWUgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkgbm90IGZvdW5kCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBFbnRpdHlSZWZlcmVuY2U+IGFzc29jcworICAgICAgICAgICAgPSBuZXcgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBFbnRpdHlSZWZlcmVuY2U+KCkKKyAgICAgICAgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIG1hcCggQXNzb2NpYXRpb25EZXNjcmlwdG9yIGVBc3NvY0Rlc2MgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVudGl0eVJlZmVyZW5jZS5lbnRpdHlSZWZlcmVuY2VGb3IoIHZTdGF0ZS5hc3NvY2lhdGlvbkZvciggZUFzc29jRGVzYy5hY2Nlc3NvcigpICkgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2goIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBhc3NvY05vdEZvdW5kT25WYWx1ZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIFN0cmluZyBQcm9wZXJ0eSBhbmQgY29udmVydCB0byBBc3NvY2lhdGlvbgorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvcE5hbWUgPSBlQXNzb2NEZXNjLnF1YWxpZmllZE5hbWUoKS5uYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlN0YXRlLnByb3BlcnR5Rm9yKCBlUHJvcERlc2MuYWNjZXNzb3IoKSApLmdldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHZQcm9wRGVzYyA9IHZTdGF0ZURlc2MuZmluZFByb3BlcnR5TW9kZWxCeU5hbWUoIHByb3BOYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggU1RSSU5HX1RZUEVfU1BFQy5zYXRpc2ZpZWRCeSggdlByb3BEZXNjLnZhbHVlVHlwZSgpICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhc3NvY1N0YXRlID0gKFN0cmluZykgdlN0YXRlLnByb3BlcnR5Rm9yKCB2UHJvcERlc2MuYWNjZXNzb3IoKSApLmdldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGFzc29jU3RhdGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gcHJvcE5vdEZvdW5kT25WYWx1ZSApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG5vdCBmb3VuZAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEVudGl0eVJlZmVyZW5jZT4gYXNzb2NzCi0gICAgICAgICAgICA9IG5ldyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEVudGl0eVJlZmVyZW5jZT4oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBFbnRpdHlSZWZlcmVuY2UgbWFwKCBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgZUFzc29jRGVzYyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVudGl0eVJlZmVyZW5jZS5lbnRpdHlSZWZlcmVuY2VGb3IoIHZTdGF0ZS5hc3NvY2lhdGlvbkZvciggZUFzc29jRGVzYy5hY2Nlc3NvcigpICkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGFzc29jTm90Rm91bmRPblZhbHVlICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBTdHJpbmcgUHJvcGVydHkgYW5kIGNvbnZlcnQgdG8gQXNzb2NpYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wTmFtZSA9IGVBc3NvY0Rlc2MucXVhbGlmaWVkTmFtZSgpLm5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciB2UHJvcERlc2MgPSB2U3RhdGVEZXNjLmZpbmRQcm9wZXJ0eU1vZGVsQnlOYW1lKCBwcm9wTmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBTVFJJTkdfVFlQRV9TUEVDLnNhdGlzZmllZEJ5KCB2UHJvcERlc2MudmFsdWVUeXBlKCkgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXNzb2NTdGF0ZSA9IChTdHJpbmcpIHZTdGF0ZS5wcm9wZXJ0eUZvciggdlByb3BEZXNjLmFjY2Vzc29yKCkgKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggYXNzb2NTdGF0ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gcHJvcE5vdEZvdW5kT25WYWx1ZSApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9OwogICAgICAgICBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEl0ZXJhYmxlPEVudGl0eVJlZmVyZW5jZT4+IG1hbnlBc3NvY3MKICAgICAgICAgICAgID0gbmV3IEZ1bmN0aW9uPEFzc29jaWF0aW9uRGVzY3JpcHRvciwgSXRlcmFibGU8RW50aXR5UmVmZXJlbmNlPj4oKQorICAgICAgICB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+IG1hcCggQXNzb2NpYXRpb25EZXNjcmlwdG9yIGVBc3NvY0Rlc2MgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+IG1hcCggQXNzb2NpYXRpb25EZXNjcmlwdG9yIGVBc3NvY0Rlc2MgKQorICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTWFueUFzc29jaWF0aW9uPE9iamVjdD4gdkFzc29jU3RhdGUgPSB2U3RhdGUubWFueUFzc29jaWF0aW9uRm9yKCBlQXNzb2NEZXNjLmFjY2Vzc29yKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1BTllfQVNTT0NfVE9fRU5USVRZX1JFRl9JVEVSQUJMRS5tYXAoIHZBc3NvY1N0YXRlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gYXNzb2NOb3RGb3VuZE9uVmFsdWUgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBDb2xsZWN0aW9uPFN0cmluZz4gUHJvcGVydHkgYW5kIGNvbnZlcnQgdG8gTWFueUFzc29jaWF0aW9uCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wTmFtZSA9IGVBc3NvY0Rlc2MucXVhbGlmaWVkTmFtZSgpLm5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hbnlBc3NvY2lhdGlvbjxPYmplY3Q+IHZBc3NvY1N0YXRlID0gdlN0YXRlLm1hbnlBc3NvY2lhdGlvbkZvciggZUFzc29jRGVzYy5hY2Nlc3NvcigpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUFOWV9BU1NPQ19UT19FTlRJVFlfUkVGX0lURVJBQkxFLm1hcCggdkFzc29jU3RhdGUgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGFzc29jTm90Rm91bmRPblZhbHVlICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBDb2xsZWN0aW9uPFN0cmluZz4gUHJvcGVydHkgYW5kIGNvbnZlcnQgdG8gTWFueUFzc29jaWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvcE5hbWUgPSBlQXNzb2NEZXNjLnF1YWxpZmllZE5hbWUoKS5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciB2UHJvcERlc2MgPSB2U3RhdGVEZXNjLmZpbmRQcm9wZXJ0eU1vZGVsQnlOYW1lKCBwcm9wTmFtZSApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIFNUUklOR19DT0xMRUNUSU9OX1RZUEVfU1BFQy5zYXRpc2ZpZWRCeSggdlByb3BEZXNjLnZhbHVlVHlwZSgpICkgKQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciB2UHJvcERlc2MgPSB2U3RhdGVEZXNjLmZpbmRQcm9wZXJ0eU1vZGVsQnlOYW1lKCBwcm9wTmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBTVFJJTkdfQ09MTEVDVElPTl9UWVBFX1NQRUMuc2F0aXNmaWVkQnkoIHZQcm9wRGVzYy52YWx1ZVR5cGUoKSApICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxlY3Rpb248U3RyaW5nPiB2QXNzb2NTdGF0ZSA9IChDb2xsZWN0aW9uKSB2U3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPFN0cmluZz4gdkFzc29jU3RhdGUgPSAoQ29sbGVjdGlvbikgdlN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eUZvciggdlByb3BEZXNjLmFjY2Vzc29yKCkgKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNUUklOR19DT0xMRUNfVE9fRU5USVRZX1JFRl9JVEVSQUJMRS5tYXAoIHZBc3NvY1N0YXRlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYWJsZXMuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RSSU5HX0NPTExFQ19UT19FTlRJVFlfUkVGX0lURVJBQkxFLm1hcCggdkFzc29jU3RhdGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gcHJvcE5vdEZvdW5kT25WYWx1ZSApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlcy5lbXB0eSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlcy5lbXB0eSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gcHJvcE5vdEZvdW5kT25WYWx1ZSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYWJsZXMuZW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH07CiAgICAgICAgIEZ1bmN0aW9uPEFzc29jaWF0aW9uRGVzY3JpcHRvciwgTWFwPFN0cmluZywgRW50aXR5UmVmZXJlbmNlPj4gbmFtZWRBc3NvY3MKICAgICAgICAgICAgID0gbmV3IEZ1bmN0aW9uPEFzc29jaWF0aW9uRGVzY3JpcHRvciwgTWFwPFN0cmluZywgRW50aXR5UmVmZXJlbmNlPj4oKQorICAgICAgICB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+IG1hcCggQXNzb2NpYXRpb25EZXNjcmlwdG9yIGVBc3NvY0Rlc2MgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+IG1hcCggQXNzb2NpYXRpb25EZXNjcmlwdG9yIGVBc3NvY0Rlc2MgKQorICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmFtZWRBc3NvY2lhdGlvbjw/PiB2QXNzb2NTdGF0ZSA9IHZTdGF0ZS5uYW1lZEFzc29jaWF0aW9uRm9yKCBlQXNzb2NEZXNjLmFjY2Vzc29yKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5BTUVEX0FTU09DX1RPX0VOVElUWV9SRUZfTUFQLm1hcCggdkFzc29jU3RhdGUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2goIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBhc3NvY05vdEZvdW5kT25WYWx1ZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIE1hcDxTdHJpbmcsU3RyaW5nPiBQcm9wZXJ0eSBhbmQgY29udmVydCB0byBOYW1lZEFzc29jaWF0aW9uCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wTmFtZSA9IGVBc3NvY0Rlc2MucXVhbGlmaWVkTmFtZSgpLm5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVkQXNzb2NpYXRpb248Pz4gdkFzc29jU3RhdGUgPSB2U3RhdGUubmFtZWRBc3NvY2lhdGlvbkZvciggZUFzc29jRGVzYy5hY2Nlc3NvcigpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkFNRURfQVNTT0NfVE9fRU5USVRZX1JFRl9NQVAubWFwKCB2QXNzb2NTdGF0ZSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gYXNzb2NOb3RGb3VuZE9uVmFsdWUgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIE1hcDxTdHJpbmcsU3RyaW5nPiBQcm9wZXJ0eSBhbmQgY29udmVydCB0byBOYW1lZEFzc29jaWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvcE5hbWUgPSBlQXNzb2NEZXNjLnF1YWxpZmllZE5hbWUoKS5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciB2UHJvcERlc2MgPSB2U3RhdGVEZXNjLmZpbmRQcm9wZXJ0eU1vZGVsQnlOYW1lKCBwcm9wTmFtZSApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIFNUUklOR19NQVBfVFlQRV9TUEVDLnNhdGlzZmllZEJ5KCB2UHJvcERlc2MudmFsdWVUeXBlKCkgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHZQcm9wRGVzYyA9IHZTdGF0ZURlc2MuZmluZFByb3BlcnR5TW9kZWxCeU5hbWUoIHByb3BOYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIFNUUklOR19NQVBfVFlQRV9TUEVDLnNhdGlzZmllZEJ5KCB2UHJvcERlc2MudmFsdWVUeXBlKCkgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHZBc3NvY1N0YXRlID0gKE1hcCkgdlN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiB2QXNzb2NTdGF0ZSA9IChNYXApIHZTdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcGVydHlGb3IoIHZQcm9wRGVzYy5hY2Nlc3NvcigpICkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTVFJJTkdfTUFQX1RPX0VOVElUWV9SRUZfTUFQLm1hcCggdkFzc29jU3RhdGUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX01BUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RSSU5HX01BUF9UT19FTlRJVFlfUkVGX01BUC5tYXAoIHZBc3NvY1N0YXRlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHByb3BOb3RGb3VuZE9uVmFsdWUgKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9NQVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTUFQOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gcHJvcE5vdEZvdW5kT25WYWx1ZSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9NQVA7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9OwogICAgICAgICByZXR1cm4gbW9kdWxlLmN1cnJlbnRVbml0T2ZXb3JrKCkubmV3RW50aXR5QnVpbGRlcldpdGhTdGF0ZSgKICAgICAgICAgICAgIGVudGl0eVR5cGUsIGlkZW50aXR5LCBwcm9wcywgYXNzb2NzLCBtYW55QXNzb2NzLCBuYW1lZEFzc29jcwogICAgICAgICApOwpAQCAtMzYxLDEyNCArMzcwLDEyNCBAQAogICAgIHsKICAgICAgICAgRnVuY3Rpb248UHJvcGVydHlEZXNjcmlwdG9yLCBPYmplY3Q+IHByb3BzCiAgICAgICAgICAgICA9IG5ldyBGdW5jdGlvbjxQcm9wZXJ0eURlc2NyaXB0b3IsIE9iamVjdD4oKQorICAgICAgICB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgbWFwKCBQcm9wZXJ0eURlc2NyaXB0b3IgZVByb3BEZXNjICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IG1hcCggUHJvcGVydHlEZXNjcmlwdG9yIGVQcm9wRGVzYyApCisgICAgICAgICAgICAgICAgU3RyaW5nIHByb3BOYW1lID0gZVByb3BEZXNjLnF1YWxpZmllZE5hbWUoKS5uYW1lKCk7CisgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvcE5hbWUgPSBlUHJvcERlc2MucXVhbGlmaWVkTmFtZSgpLm5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHZQcm9wRGVzYyA9IHZTdGF0ZURlc2MuZmluZFByb3BlcnR5TW9kZWxCeU5hbWUoIHByb3BOYW1lICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2U3RhdGUucHJvcGVydHlGb3IoIHZQcm9wRGVzYy5hY2Nlc3NvcigpICkuZ2V0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gcHJvcE5vdEZvdW5kT25WYWx1ZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBQcm9wZXJ0eSBub3QgZm91bmQgb24gVmFsdWUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEVudGl0eVJlZmVyZW5jZT4gYXNzb2NzCisgICAgICAgICAgICA9IG5ldyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEVudGl0eVJlZmVyZW5jZT4oKQorICAgICAgICB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBFbnRpdHlSZWZlcmVuY2UgbWFwKCBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgZUFzc29jRGVzYyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGFzc29jTmFtZSA9IGVBc3NvY0Rlc2MucXVhbGlmaWVkTmFtZSgpLm5hbWUoKTsKKyAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciB2QXNzb2NEZXNjID0gdlN0YXRlRGVzYy5nZXRBc3NvY2lhdGlvbkJ5TmFtZSggYXNzb2NOYW1lICk7CisgICAgICAgICAgICAgICAgICAgIE9iamVjdCBhc3NvY0VudGl0eSA9IHZTdGF0ZS5hc3NvY2lhdGlvbkZvciggdkFzc29jRGVzYy5hY2Nlc3NvcigpICkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhc3NvY0VudGl0eSA9PSBudWxsID8gbnVsbCA6IEVudGl0eVJlZmVyZW5jZS5lbnRpdHlSZWZlcmVuY2VGb3IoIGFzc29jRW50aXR5ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gYXNzb2NOb3RGb3VuZE9uVmFsdWUgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXNzb2NpYXRpb24gbm90IGZvdW5kIG9uIFZhbHVlLCBmaW5kIFByb3BlcnR5PFN0cmluZz4gYW5kIGNvbnZlcnQgdG8gQXNzb2NpYXRpb24KICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciB2UHJvcERlc2MgPSB2U3RhdGVEZXNjLmZpbmRQcm9wZXJ0eU1vZGVsQnlOYW1lKCBwcm9wTmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZTdGF0ZS5wcm9wZXJ0eUZvciggdlByb3BEZXNjLmFjY2Vzc29yKCkgKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciB2UHJvcERlc2MgPSB2U3RhdGVEZXNjLmZpbmRQcm9wZXJ0eU1vZGVsQnlOYW1lKCBhc3NvY05hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBTVFJJTkdfVFlQRV9TUEVDLnNhdGlzZmllZEJ5KCB2UHJvcERlc2MudmFsdWVUeXBlKCkgKSApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFzc29jSWQgPSAoU3RyaW5nKSB2U3RhdGUucHJvcGVydHlGb3IoIHZQcm9wRGVzYy5hY2Nlc3NvcigpICkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzc29jSWQgPT0gbnVsbCA/IG51bGwgOiBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGFzc29jSWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gcHJvcE5vdEZvdW5kT25WYWx1ZSApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG5vdCBmb3VuZCBvbiBWYWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEVudGl0eVJlZmVyZW5jZT4gYXNzb2NzCi0gICAgICAgICAgICA9IG5ldyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEVudGl0eVJlZmVyZW5jZT4oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBFbnRpdHlSZWZlcmVuY2UgbWFwKCBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgZUFzc29jRGVzYyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXNzb2NOYW1lID0gZUFzc29jRGVzYy5xdWFsaWZpZWROYW1lKCkubmFtZSgpOwotICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHZBc3NvY0Rlc2MgPSB2U3RhdGVEZXNjLmdldEFzc29jaWF0aW9uQnlOYW1lKCBhc3NvY05hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBhc3NvY0VudGl0eSA9IHZTdGF0ZS5hc3NvY2lhdGlvbkZvciggdkFzc29jRGVzYy5hY2Nlc3NvcigpICkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXNzb2NFbnRpdHkgPT0gbnVsbCA/IG51bGwgOiBFbnRpdHlSZWZlcmVuY2UuZW50aXR5UmVmZXJlbmNlRm9yKCBhc3NvY0VudGl0eSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gYXNzb2NOb3RGb3VuZE9uVmFsdWUgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3NvY2lhdGlvbiBub3QgZm91bmQgb24gVmFsdWUsIGZpbmQgUHJvcGVydHk8U3RyaW5nPiBhbmQgY29udmVydCB0byBBc3NvY2lhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHZQcm9wRGVzYyA9IHZTdGF0ZURlc2MuZmluZFByb3BlcnR5TW9kZWxCeU5hbWUoIGFzc29jTmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBTVFJJTkdfVFlQRV9TUEVDLnNhdGlzZmllZEJ5KCB2UHJvcERlc2MudmFsdWVUeXBlKCkgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXNzb2NJZCA9IChTdHJpbmcpIHZTdGF0ZS5wcm9wZXJ0eUZvciggdlByb3BEZXNjLmFjY2Vzc29yKCkgKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzc29jSWQgPT0gbnVsbCA/IG51bGwgOiBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGFzc29jSWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHByb3BOb3RGb3VuZE9uVmFsdWUgKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKICAgICAgICAgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+PiBtYW55QXNzb2NzCiAgICAgICAgICAgICA9IG5ldyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIEl0ZXJhYmxlPEVudGl0eVJlZmVyZW5jZT4+KCkKKyAgICAgICAgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgSXRlcmFibGU8RW50aXR5UmVmZXJlbmNlPiBtYXAoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBlQXNzb2NEZXNjICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgSXRlcmFibGU8RW50aXR5UmVmZXJlbmNlPiBtYXAoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBlQXNzb2NEZXNjICkKKyAgICAgICAgICAgICAgICBTdHJpbmcgYXNzb2NOYW1lID0gZUFzc29jRGVzYy5xdWFsaWZpZWROYW1lKCkubmFtZSgpOworICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFzc29jTmFtZSA9IGVBc3NvY0Rlc2MucXVhbGlmaWVkTmFtZSgpLm5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRpb25EZXNjcmlwdG9yIHZBc3NvY0Rlc2MgPSB2U3RhdGVEZXNjLmdldE1hbnlBc3NvY2lhdGlvbkJ5TmFtZSggYXNzb2NOYW1lICk7CisgICAgICAgICAgICAgICAgICAgIE1hbnlBc3NvY2lhdGlvbjxPYmplY3Q+IHZNYW55QXNzb2MgPSB2U3RhdGUubWFueUFzc29jaWF0aW9uRm9yKCB2QXNzb2NEZXNjLmFjY2Vzc29yKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1BTllfQVNTT0NfVE9fRU5USVRZX1JFRl9JVEVSQUJMRS5tYXAoIHZNYW55QXNzb2MgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2goIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBhc3NvY05vdEZvdW5kT25WYWx1ZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBNYW55QXNzb2NpYXRpb24gbm90IGZvdW5kIG9uIFZhbHVlLCBmaW5kIExpc3Q8U3RyaW5nPiBhbmQgY29udmVydCB0byBNYW55QXNzb2NpYXRpb24KICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciB2QXNzb2NEZXNjID0gdlN0YXRlRGVzYy5nZXRNYW55QXNzb2NpYXRpb25CeU5hbWUoIGFzc29jTmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgTWFueUFzc29jaWF0aW9uPE9iamVjdD4gdk1hbnlBc3NvYyA9IHZTdGF0ZS5tYW55QXNzb2NpYXRpb25Gb3IoIHZBc3NvY0Rlc2MuYWNjZXNzb3IoKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1BTllfQVNTT0NfVE9fRU5USVRZX1JFRl9JVEVSQUJMRS5tYXAoIHZNYW55QXNzb2MgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGFzc29jTm90Rm91bmRPblZhbHVlICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFueUFzc29jaWF0aW9uIG5vdCBmb3VuZCBvbiBWYWx1ZSwgZmluZCBMaXN0PFN0cmluZz4gYW5kIGNvbnZlcnQgdG8gTWFueUFzc29jaWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciB2UHJvcERlc2MgPSB2U3RhdGVEZXNjLmZpbmRQcm9wZXJ0eU1vZGVsQnlOYW1lKCBhc3NvY05hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBTVFJJTkdfQ09MTEVDVElPTl9UWVBFX1NQRUMuc2F0aXNmaWVkQnkoIHZQcm9wRGVzYy52YWx1ZVR5cGUoKSApICkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgdlByb3BEZXNjID0gdlN0YXRlRGVzYy5maW5kUHJvcGVydHlNb2RlbEJ5TmFtZSggYXNzb2NOYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIFNUUklOR19DT0xMRUNUSU9OX1RZUEVfU1BFQy5zYXRpc2ZpZWRCeSggdlByb3BEZXNjLnZhbHVlVHlwZSgpICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbjxTdHJpbmc+IHZBc3NvY1N0YXRlID0gKENvbGxlY3Rpb24pIHZTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxlY3Rpb248U3RyaW5nPiB2QXNzb2NTdGF0ZSA9IChDb2xsZWN0aW9uKSB2U3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5Rm9yKCB2UHJvcERlc2MuYWNjZXNzb3IoKSApLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RSSU5HX0NPTExFQ19UT19FTlRJVFlfUkVGX0lURVJBQkxFLm1hcCggdkFzc29jU3RhdGUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlcy5lbXB0eSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTVFJJTkdfQ09MTEVDX1RPX0VOVElUWV9SRUZfSVRFUkFCTEUubWFwKCB2QXNzb2NTdGF0ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBwcm9wTm90Rm91bmRPblZhbHVlICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmFibGVzLmVtcHR5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmFibGVzLmVtcHR5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2F0Y2goIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBwcm9wTm90Rm91bmRPblZhbHVlICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlcy5lbXB0eSgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKICAgICAgICAgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+PiBuYW1lZEFzc29jcwogICAgICAgICAgICAgPSBuZXcgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBNYXA8U3RyaW5nLCBFbnRpdHlSZWZlcmVuY2U+PigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4gbWFwKCBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgZUFzc29jRGVzYyApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4gbWFwKCBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgZUFzc29jRGVzYyApCisgICAgICAgICAgICAgICAgU3RyaW5nIGFzc29jTmFtZSA9IGVBc3NvY0Rlc2MucXVhbGlmaWVkTmFtZSgpLm5hbWUoKTsKKyAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBhc3NvY05hbWUgPSBlQXNzb2NEZXNjLnF1YWxpZmllZE5hbWUoKS5uYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciB2QXNzb2NEZXNjID0gdlN0YXRlRGVzYy5nZXROYW1lZEFzc29jaWF0aW9uQnlOYW1lKCBhc3NvY05hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgTmFtZWRBc3NvY2lhdGlvbjxPYmplY3Q+IHZBc3NvY1N0YXRlID0gdlN0YXRlLm5hbWVkQXNzb2NpYXRpb25Gb3IoIHZBc3NvY0Rlc2MuYWNjZXNzb3IoKSApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkFNRURfQVNTT0NfVE9fRU5USVRZX1JFRl9NQVAubWFwKCB2QXNzb2NTdGF0ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGFzc29jTm90Rm91bmRPblZhbHVlICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgTWFwPFN0cmluZyxTdHJpbmc+IFByb3BlcnR5IGFuZCBjb252ZXJ0IHRvIE5hbWVkQXNzb2NpYXRpb24KICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0aW9uRGVzY3JpcHRvciB2QXNzb2NEZXNjID0gdlN0YXRlRGVzYy5nZXROYW1lZEFzc29jaWF0aW9uQnlOYW1lKCBhc3NvY05hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVkQXNzb2NpYXRpb248T2JqZWN0PiB2QXNzb2NTdGF0ZSA9IHZTdGF0ZS5uYW1lZEFzc29jaWF0aW9uRm9yKCB2QXNzb2NEZXNjLmFjY2Vzc29yKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOQU1FRF9BU1NPQ19UT19FTlRJVFlfUkVGX01BUC5tYXAoIHZBc3NvY1N0YXRlICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2F0Y2goIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBhc3NvY05vdEZvdW5kT25WYWx1ZSApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgTWFwPFN0cmluZyxTdHJpbmc+IFByb3BlcnR5IGFuZCBjb252ZXJ0IHRvIE5hbWVkQXNzb2NpYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHZQcm9wRGVzYyA9IHZTdGF0ZURlc2MuZmluZFByb3BlcnR5TW9kZWxCeU5hbWUoIGFzc29jTmFtZSApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIFNUUklOR19NQVBfVFlQRV9TUEVDLnNhdGlzZmllZEJ5KCB2UHJvcERlc2MudmFsdWVUeXBlKCkgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHZQcm9wRGVzYyA9IHZTdGF0ZURlc2MuZmluZFByb3BlcnR5TW9kZWxCeU5hbWUoIGFzc29jTmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBTVFJJTkdfTUFQX1RZUEVfU1BFQy5zYXRpc2ZpZWRCeSggdlByb3BEZXNjLnZhbHVlVHlwZSgpICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiB2QXNzb2NTdGF0ZSA9IChNYXApIHZTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gdkFzc29jU3RhdGUgPSAoTWFwKSB2U3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5Rm9yKCB2UHJvcERlc2MuYWNjZXNzb3IoKSApLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RSSU5HX01BUF9UT19FTlRJVFlfUkVGX01BUC5tYXAoIHZBc3NvY1N0YXRlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9NQVA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNUUklOR19NQVBfVE9fRU5USVRZX1JFRl9NQVAubWFwKCB2QXNzb2NTdGF0ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBwcm9wTm90Rm91bmRPblZhbHVlICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTUFQOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX01BUDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHByb3BOb3RGb3VuZE9uVmFsdWUgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTUFQOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKICAgICAgICAgcmV0dXJuIG1vZHVsZS5jdXJyZW50VW5pdE9mV29yaygpLm5ld0VudGl0eUJ1aWxkZXJXaXRoU3RhdGUoCiAgICAgICAgICAgICBlbnRpdHlUeXBlLCBpZGVudGl0eSwgcHJvcHMsIGFzc29jcywgbWFueUFzc29jcywgbmFtZWRBc3NvY3MKICAgICAgICAgKTsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9WYWx1ZVRvRW50aXR5U2VydmljZS5qYXZhIGIvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL1ZhbHVlVG9FbnRpdHlTZXJ2aWNlLmphdmEKaW5kZXggODI0YzFkNi4uMmQyZmE3ZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL1ZhbHVlVG9FbnRpdHlTZXJ2aWNlLmphdmEKKysrIGIvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL1ZhbHVlVG9FbnRpdHlTZXJ2aWNlLmphdmEKQEAgLTE1LDEwICsxNSwxMiBAQAogICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY29udmVyc2lvbi52YWx1ZXM7CiAKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LklkZW50aXR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7CiAKIC8qKgogICogU2VydmljZSB0aGF0IGNyZWF0ZXMgb3IgdXBkYXRlcyBFbnRpdGllcyBmcm9tIG1hdGNoaW5nIFZhbHVlcy4KKyAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2Uge0BsaW5rIG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmsjdG9FbnRpdHkoQ2xhc3MsIElkZW50aXR5KX0gaW5zdGVhZC4KICAqLwogQE1peGlucyggVmFsdWVUb0VudGl0eU1peGluLmNsYXNzICkKIHB1YmxpYyBpbnRlcmZhY2UgVmFsdWVUb0VudGl0eVNlcnZpY2UKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvY29udmVyc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY29udmVyc2lvbi92YWx1ZXMvcGFja2FnZS5odG1sCmluZGV4IDgwZjg5NTUuLmUyYmU1NzUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jb252ZXJzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jb252ZXJzaW9uL3ZhbHVlcy9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2NvbnZlcnNpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2NvbnZlcnNpb24vdmFsdWVzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RW50aXRpZXMgdG8gVmFsdWVzIENvbnZlcnNpb24uPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jeGYvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL2N4Zi9idWlsZC5ncmFkbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMzM5NmIuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2N4Zi9idWlsZC5ncmFkbGUKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIENYRiBMaWJyYXJ5IGludGVncmF0ZXMgQXBhY2hlIENYRiB3aXRoIFFpNGouIgotCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gQ1hGIiB9fQotCi1kZXBlbmRlbmNpZXMgewotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCi0gIGNvbXBpbGUobGlicmFyaWVzLmN4Zl9hcGkpCi0gIGNvbXBpbGUobGlicmFyaWVzLmN4Zl91dGlsKQotICBjb21waWxlKGxpYnJhcmllcy5jeGZfcnRfY29yZSkKLSAgY29tcGlsZShsaWJyYXJpZXMuY3hmX3J0X3NvYXApCi0gIGNvbXBpbGUobGlicmFyaWVzLmN4Zl9ydF9qYXh3cykKLSAgY29tcGlsZShsaWJyYXJpZXMuY3hmX3J0X2FlZ2lzKQotICBjb21waWxlKGxpYnJhcmllcy5jeGZfcnRfbG9jYWwpCi0gIGNvbXBpbGUobGlicmFyaWVzLndzZGw0aikKLSAgY29tcGlsZShsaWJyYXJpZXMud29vZHN0b3gpCi0vLyAgY29tcGlsZSgnb3JnLmFwYWNoZS53cy5jb21tb25zLnNjaGVtYTpYbWxTY2hlbWE6JyArIHhtbFNjaGVtYVZlcnNpb24pCi0KLSAgcnVudGltZShsaWJyYXJpZXMuY3hmX3J0X2h0dHApCi0gIHJ1bnRpbWUobGlicmFyaWVzLmN4Zl9ydF9odHRwX2pldHR5KQotCi0gIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiKSkKLSAgdGVzdENvbXBpbGUobGlicmFyaWVzLmh0dHBfY2xpZW50KQotICB0ZXN0Q29tcGlsZShsaWJyYXJpZXMueG1sdW5pdCkKLQotICB0ZXN0UnVudGltZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiKSkKLSAgdGVzdFJ1bnRpbWUobGlicmFyaWVzLmxvZ2JhY2spCi19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL2N4Zi9kZXYtc3RhdHVzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU0ZDNhYS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL2Rldi1zdGF0dXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCi0gICAgICAgIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZCI+Ci0gIDxzdGF0dXM+Ci0gICAgPCEtLW5vbmUsZWFybHksYmV0YSxzdGFibGUsbWF0dXJlLS0+Ci0gICAgPGNvZGViYXNlPmJldGE8L2NvZGViYXNlPgotCi0gICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPGRvY3VtZW50YXRpb24+bm9uZTwvZG9jdW1lbnRhdGlvbj4KLQotICAgIDwhLS0gbm9uZSwgc29tZSwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPHVuaXR0ZXN0cz5zb21lPC91bml0dGVzdHM+Ci0gIDwvc3RhdHVzPgotICA8bGljZW5zZXM+Ci0gICAgPGxpY2Vuc2U+QUx2MjwvbGljZW5zZT4KLSAgPC9saWNlbnNlcz4KLTwvbW9kdWxlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jeGYvc3JjL2RvY3MvY3hmLnR4dCBiL2xpYnJhcmllcy9jeGYvc3JjL2RvY3MvY3hmLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1NzBiYS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy9kb2NzL2N4Zi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1bW2xpYnJhcnktY3hmLCBDWEYgTGlicmFyeV1dCi09IENYRiBXZWJTZXJ2aWNlID0KLQotW2RldnN0YXR1c10KLS0tLS0tLS0tLS0tLS0tCi1zb3VyY2U9bGlicmFyaWVzL2N4Zi9kZXYtc3RhdHVzLnhtbAotLS0tLS0tLS0tLS0tLS0KLQotQ1hGIFdlYlNlcnZpY2UgTGlicmFyeQotCi1OT1RFOiBUaGlzIExpYnJhcnkgaGFzIG5vIGRvY3VtZW50YXRpb24geWV0LiBMZWFybiBob3cgdG8gY29udHJpYnV0ZSBpbiA8PGNvbW11bml0eS1kb2NzPj4uCi0KLWluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvQ3hmQXNzZW1ibGVyLmphdmEgYi9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvQ3hmQXNzZW1ibGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZGQ4M2YuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2N4Zi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL0N4ZkFzc2VtYmxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmN4ZjsKLQotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJsZXJzOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7Ci0KLXB1YmxpYyBjbGFzcyBDeGZBc3NlbWJsZXIKLSAgICBleHRlbmRzIEFzc2VtYmxlcnMuVmlzaWJpbGl0eTxDeGZBc3NlbWJsZXI+Ci17Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCi0gICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgbW9kdWxlLm9iamVjdHMoIFFpNGpUeXBlQ3JlYXRvci5jbGFzcywgVmFsdWVDb21wb3NpdGVDeGZUeXBlLmNsYXNzICkudmlzaWJsZUluKCB2aXNpYmlsaXR5KCkgKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSmF4V3NDcmVhdG9yLmphdmEgYi9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSmF4V3NDcmVhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZDBhMDcuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2N4Zi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL0pheFdzQ3JlYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4d3MuSmF4V3NTZXJ2ZXJGYWN0b3J5QmVhbjsKLQotcHVibGljIGludGVyZmFjZSBKYXhXc0NyZWF0b3IKLXsKLSAgICB2b2lkIGluaXRpYWxpemUoIEpheFdzU2VydmVyRmFjdG9yeUJlYW4gc3ZyRmFjdG9yeSApOwotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2N4Zi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL0pheFdzU2VydmVyRmFjdG9yeUluZm8uamF2YSBiL2xpYnJhcmllcy9jeGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9KYXhXc1NlcnZlckZhY3RvcnlJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZWUwZDguLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2N4Zi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL0pheFdzU2VydmVyRmFjdG9yeUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMCBOaWNsYXMgSGVkaG1hbi4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmN4ZjsKLQotLyoqCi0gKiBUaGUgSmF4V3NTZXJ2ZXJGYWN0b3J5SW5mbyBpcyBhIG1ldGFJbmZvIHR5cGUgdG8gc2V0IHRvIHNlcnZpY2VzIHRoYXQgd2FudHMgdG8gYmUgZXhwb3NlZCBhcwotICogV2ViU2VydmljZXMuIEFkZGl0aW9uYWxseSwgdGhlIHNlcnZpY2UgbXVzdCBoYXZlIGEge0Bjb2RlIFZpc2liaWxpdHl9IHNldCB0byB7QGNvZGUgYXBwbGljYXRpb259Ci0gKiBvdGhlcndpc2UgdGhlIEFwYWNoZSBDWEYgZXh0ZW5zaW9uIHdpbGwgbm90IGJlIGFibGUgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiB0aGUgc2VydmljZSAoYXNzdW1pbmcgaXQgaXMgaW4gYQotICogaGlnaGVyIGxheWVyKS4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEpheFdzU2VydmVyRmFjdG9yeUluZm8KLXsKLQotICAgIHByaXZhdGUgZmluYWwgSmF4V3NDcmVhdG9yIGluaXRpYWxpemVyOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGFkZHJlc3M7Ci0KLSAgICBwdWJsaWMgSmF4V3NTZXJ2ZXJGYWN0b3J5SW5mbyggSmF4V3NDcmVhdG9yIGluaXRpYWxpemVyLCBTdHJpbmcgYWRkcmVzcyApCi0gICAgewotICAgICAgICB0aGlzLmluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXI7Ci0gICAgICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBhZGRyZXNzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzOwotICAgIH0KLQotICAgIHB1YmxpYyBKYXhXc0NyZWF0b3IgaW5pdGlhbGl6ZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluaXRpYWxpemVyOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jeGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9KYXhXc1NlcnZpY2UuamF2YSBiL2xpYnJhcmllcy9jeGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9KYXhXc1NlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY2OTQ5YS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSmF4V3NTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jeGYuYWVnaXMuQWVnaXNDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmFlZ2lzLmRhdGFiaW5kaW5nLkFlZ2lzRGF0YWJpbmRpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jeGYuYWVnaXMudHlwZS5BYnN0cmFjdFR5cGVDcmVhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmFlZ2lzLnR5cGUuVHlwZUNyZWF0aW9uT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLmN4Zi5hZWdpcy50eXBlLlR5cGVNYXBwaW5nOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLmN4Zi5qYXh3cy5KYXhXc1NlcnZlckZhY3RvcnlCZWFuOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRvckFkYXB0ZXI7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmFjdGl2YXRpb24uQWN0aXZhdG9yczsKLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlVzZXM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKLWltcG9ydCBvcmcucWk0ai5hcGkub2JqZWN0Lk9iamVjdEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZUNvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwotCi1pbXBvcnQgc3RhdGljIG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzLmZpcnN0OwotCi1ATWl4aW5zKCBKYXhXc1NlcnZpY2UuSmF4V3NNaXhpbi5jbGFzcyApCi1AQWN0aXZhdG9ycyggSmF4V3NTZXJ2aWNlLkFjdGl2YXRvci5jbGFzcyApCi1wdWJsaWMgaW50ZXJmYWNlIEpheFdzU2VydmljZSBleHRlbmRzIFNlcnZpY2VDb21wb3NpdGUKLXsKLQotCi0gICAgdm9pZCBpbml0aWFsaXplSmF4V3NGYWN0b3J5KCk7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEFjdGl2YXRvcgotICAgICAgICAgICAgZXh0ZW5kcyBBY3RpdmF0b3JBZGFwdGVyPFNlcnZpY2VSZWZlcmVuY2U8SmF4V3NTZXJ2aWNlPj4KLSAgICB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGFmdGVyQWN0aXZhdGlvbiggU2VydmljZVJlZmVyZW5jZTxKYXhXc1NlcnZpY2U+IGFjdGl2YXRlZCApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBhY3RpdmF0ZWQuZ2V0KCkuaW5pdGlhbGl6ZUpheFdzRmFjdG9yeSgpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIEpheFdzTWl4aW4KLSAgICAgICAgaW1wbGVtZW50cyBKYXhXc1NlcnZpY2UKLSAgICB7Ci0gICAgICAgIEBTdHJ1Y3R1cmUKLSAgICAgICAgcHJpdmF0ZSBNb2R1bGUgbW9kdWxlOwotCi0gICAgICAgIEBTdHJ1Y3R1cmUKLSAgICAgICAgcHJpdmF0ZSBPYmplY3RGYWN0b3J5IG9iZjsKLQotICAgICAgICBAVXNlcwotICAgICAgICBTZXJ2aWNlRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplSmF4V3NGYWN0b3J5KCkKLSAgICAgICAgewotICAgICAgICAgICAgZmluYWwgSmF4V3NTZXJ2ZXJGYWN0b3J5SW5mbyBpbmZvID0gZGVzY3JpcHRvci5tZXRhSW5mbyggSmF4V3NTZXJ2ZXJGYWN0b3J5SW5mby5jbGFzcyApOwotICAgICAgICAgICAgQWVnaXNEYXRhYmluZGluZyBkYXRhQmluZGluZyA9IG5ldyBBZWdpc0RhdGFiaW5kaW5nKCk7Ci0gICAgICAgICAgICBjcmVhdGVRaTRqVHlwZUNyZWF0b3IoIGRhdGFCaW5kaW5nICk7Ci0gICAgICAgICAgICBKYXhXc1NlcnZlckZhY3RvcnlCZWFuIHN2ckZhY3RvcnkgPSBuZXcgSmF4V3NTZXJ2ZXJGYWN0b3J5QmVhbigpOwotICAgICAgICAgICAgc3ZyRmFjdG9yeS5zZXREYXRhQmluZGluZyggZGF0YUJpbmRpbmcgKTsKLSAgICAgICAgICAgIHN2ckZhY3Rvcnkuc2V0U2VydmljZUNsYXNzKCBmaXJzdCggZGVzY3JpcHRvci50eXBlcygpICkgKTsKLSAgICAgICAgICAgIHN2ckZhY3Rvcnkuc2V0U2VydmljZUJlYW4oIGZpbmRUaGlzU2VydmljZSgpICk7Ci0gICAgICAgICAgICBpZiggaW5mbyAhPSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdnJGYWN0b3J5LnNldEFkZHJlc3MoIGluZm8uYWRkcmVzcygpICk7Ci0gICAgICAgICAgICAgICAgSmF4V3NDcmVhdG9yIGNyZWF0b3IgPSBpbmZvLmluaXRpYWxpemVyKCk7Ci0gICAgICAgICAgICAgICAgaWYoIGNyZWF0b3IgIT0gbnVsbCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjcmVhdG9yLmluaXRpYWxpemUoIHN2ckZhY3RvcnkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3ZyRmFjdG9yeS5zZXRBZGRyZXNzKCAiaHR0cDovL2xvY2FsaG9zdDo5MzAwLyIgKyBpZGVudGl0eSgpLmdldCgpICk7Ci0gICAgICAgICAgICAgICAgc3ZyRmFjdG9yeS5nZXRJbkludGVyY2VwdG9ycygpLmFkZCggbmV3IExvZ2dpbmdJbkludGVyY2VwdG9yKCkgKTsKLSAgICAgICAgICAgICAgICBzdnJGYWN0b3J5LmdldE91dEludGVyY2VwdG9ycygpLmFkZCggbmV3IExvZ2dpbmdPdXRJbnRlcmNlcHRvcigpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdnJGYWN0b3J5LmNyZWF0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVFpNGpUeXBlQ3JlYXRvciggQWVnaXNEYXRhYmluZGluZyBkYXRhQmluZGluZyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFpNGpUeXBlQ3JlYXRvciBxaTRqVHlwZUNyZWF0b3IgPSBvYmYubmV3T2JqZWN0KCBRaTRqVHlwZUNyZWF0b3IuY2xhc3MgKTsKLQotICAgICAgICAgICAgQWVnaXNDb250ZXh0IGFlZ2lzQ29udGV4dCA9IGRhdGFCaW5kaW5nLmdldEFlZ2lzQ29udGV4dCgpOwotICAgICAgICAgICAgVHlwZU1hcHBpbmcgdHlwZU1hcHBpbmcgPSBhZWdpc0NvbnRleHQuZ2V0VHlwZU1hcHBpbmcoKTsKLSAgICAgICAgICAgIEFic3RyYWN0VHlwZUNyZWF0b3IgZGVmYXVsdENyZWF0b3IgPSAoQWJzdHJhY3RUeXBlQ3JlYXRvcikgdHlwZU1hcHBpbmcuZ2V0VHlwZUNyZWF0b3IoKTsKLSAgICAgICAgICAgIFR5cGVDcmVhdGlvbk9wdGlvbnMgY29uZmlndXJhdGlvbiA9IGRlZmF1bHRDcmVhdG9yLmdldENvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgICAgIHFpNGpUeXBlQ3JlYXRvci5zZXRDb25maWd1cmF0aW9uKCBjb25maWd1cmF0aW9uICk7Ci0gICAgICAgICAgICBxaTRqVHlwZUNyZWF0b3Iuc2V0TmV4dENyZWF0b3IoIGRlZmF1bHRDcmVhdG9yICk7Ci0gICAgICAgICAgICBxaTRqVHlwZUNyZWF0b3Iuc2V0VHlwZU1hcHBpbmcoIHR5cGVNYXBwaW5nICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIE9iamVjdCBmaW5kVGhpc1NlcnZpY2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTZXJ2aWNlUmVmZXJlbmNlPD8+IHJlZmVyZW5jZSA9IG1vZHVsZS5maW5kU2VydmljZSggZmlyc3QoIGRlc2NyaXB0b3IudHlwZXMoKSkgKTsKLSAgICAgICAgICAgIGlmKCByZWZlcmVuY2UgPT0gbnVsbCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiSW50ZXJuYWwgRXJyb3I/PyBKYXhXc1NlcnZpY2UuZmluZFRoaXNTZXJ2aWNlKCkiICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIFNob3VsZCBub3QgYmUgcG9zc2libGUuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlLmdldCgpOwotICAgICAgICB9Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvTmFtZXNwYWNlVXRpbC5qYXZhIGIvbGlicmFyaWVzL2N4Zi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL05hbWVzcGFjZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ0ZTFjOC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvTmFtZXNwYWNlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuUGFyYW1ldGVyaXplZFR5cGU7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBOYW1lc3BhY2VVdGlsCi17Ci0KLSAgICBwcml2YXRlIE5hbWVzcGFjZVV0aWwoKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFFOYW1lIGNvbnZlcnRKYXZhVHlwZVRvUU5hbWUoIFR5cGUgdHlwZSApCi0gICAgewotICAgICAgICBpZiggdHlwZSBpbnN0YW5jZW9mIENsYXNzICkKLSAgICAgICAgewotICAgICAgICAgICAgQ2xhc3M8Pz4gdmFsdWVUeXBlID0gKENsYXNzPD8+KSB0eXBlOwotICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gdmFsdWVUeXBlLmdldFBhY2thZ2UoKS5nZXROYW1lKCk7Ci0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gdmFsdWVUeXBlLmdldFNpbXBsZU5hbWUoKTsKLSAgICAgICAgICAgIFFOYW1lIHR5cGVRTmFtZSA9IG5ldyBRTmFtZSggInVybjpxaTRqOnR5cGU6dmFsdWU6IiArIHBhY2thZ2VOYW1lLCBjbGFzc05hbWUgKTsKLSAgICAgICAgICAgIHJldHVybiB0eXBlUU5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiggdHlwZSBpbnN0YW5jZW9mIFBhcmFtZXRlcml6ZWRUeXBlICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRKYXZhVHlwZVRvUU5hbWUoICggKFBhcmFtZXRlcml6ZWRUeXBlKSB0eXBlICkuZ2V0UmF3VHlwZSgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIlR5cGVzIHRoYXQgYXJlIG5vdCBDbGFzcyBub3IgUGFyYW1ldGVyaXplZFR5cGUgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkOiIgKyB0eXBlICk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvUWk0alR5cGVDcmVhdG9yLmphdmEgYi9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvUWk0alR5cGVDcmVhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNzFkNTkuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2N4Zi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL1FpNGpUeXBlQ3JlYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmOwotCi1pbXBvcnQgamF2YS5iZWFucy5Qcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmFlZ2lzLnR5cGUuQWJzdHJhY3RUeXBlQ3JlYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLmN4Zi5hZWdpcy50eXBlLkFlZ2lzVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLmN4Zi5hZWdpcy50eXBlLlR5cGVDbGFzc0luZm87Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TdHJ1Y3R1cmU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnV0aWwuQ2xhc3NlczsKLWltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVDb21wb3NpdGU7Ci0KLXB1YmxpYyBjbGFzcyBRaTRqVHlwZUNyZWF0b3IgZXh0ZW5kcyBBYnN0cmFjdFR5cGVDcmVhdG9yCi17Ci0gICAgQFN0cnVjdHVyZQotICAgIHByaXZhdGUgTW9kdWxlIG1vZHVsZTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUeXBlQ2xhc3NJbmZvIGNyZWF0ZUNsYXNzSW5mbyggUHJvcGVydHlEZXNjcmlwdG9yIHBkICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBBZWdpc1R5cGUgY3JlYXRlQ29sbGVjdGlvblR5cGUoIFR5cGVDbGFzc0luZm8gaW5mbyApCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQWVnaXNUeXBlIGNyZWF0ZURlZmF1bHRUeXBlKCBUeXBlQ2xhc3NJbmZvIGluZm8gKQotICAgIHsKLSAgICAgICAgaWYoIFZhbHVlQ29tcG9zaXRlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIENsYXNzZXMuUkFXX0NMQVNTLm1hcCggaW5mby5nZXRUeXBlKCkgKSApICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5uZXdPYmplY3QoIFZhbHVlQ29tcG9zaXRlQ3hmVHlwZS5jbGFzcywgaW5mby5nZXRUeXBlKCksIGdldFR5cGVNYXBwaW5nKCkgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV4dENyZWF0b3IuY3JlYXRlRGVmYXVsdFR5cGUoIGluZm8gKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVHlwZUNsYXNzSW5mbyBjcmVhdGVDbGFzc0luZm8oIE1ldGhvZCBtLCBpbnQgaW5kZXggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2N4Zi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL1ZhbHVlQ29tcG9zaXRlQ3hmVHlwZS5qYXZhIGIvbGlicmFyaWVzL2N4Zi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL1ZhbHVlQ29tcG9zaXRlQ3hmVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDFmYjU4Li4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9jeGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9WYWx1ZUNvbXBvc2l0ZUN4ZlR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBOaWNsYXMgSGVoZG1hbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqCi0gKiAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jeGY7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5QYXJhbWV0ZXJpemVkVHlwZTsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5UeXBlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLmN4Zi5hZWdpcy5Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmFlZ2lzLkRhdGFiaW5kaW5nRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmFlZ2lzLnR5cGUuQWVnaXNUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmFlZ2lzLnR5cGUuVHlwZU1hcHBpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jeGYuYWVnaXMudHlwZS5jb2xsZWN0aW9uLkNvbGxlY3Rpb25UeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmFlZ2lzLnR5cGUuY29sbGVjdGlvbi5NYXBUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmFlZ2lzLnhtbC5NZXNzYWdlUmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmFlZ2lzLnhtbC5NZXNzYWdlV3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi54bWxzY2hlbWEuWG1sU2NoZW1hVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS53cy5jb21tb25zLnNjaGVtYS5YbWxTY2hlbWE7Ci1pbXBvcnQgb3JnLmFwYWNoZS53cy5jb21tb25zLnNjaGVtYS5YbWxTY2hlbWFBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53cy5jb21tb25zLnNjaGVtYS5YbWxTY2hlbWFDb21wbGV4VHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzLmNvbW1vbnMuc2NoZW1hLlhtbFNjaGVtYUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53cy5jb21tb25zLnNjaGVtYS5YbWxTY2hlbWFTZXF1ZW5jZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuUWk0ajsKLWltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb25TdGF0ZUhvbGRlcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uT3B0aW9uYWw7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuU3RhdGVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuSWRlbnRpdHk7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TdHJ1Y3R1cmU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5Vc2VzOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKLWltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS51dGlsLkNsYXNzZXM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLk5vU3VjaFZhbHVlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZUJ1aWxkZXI7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKLWltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlczsKLWltcG9ydCBvcmcucWk0ai5zcGkuUWk0alNQSTsKLQotaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5maXJzdDsKLQotcHVibGljIGNsYXNzIFZhbHVlQ29tcG9zaXRlQ3hmVHlwZQotICAgIGV4dGVuZHMgQWVnaXNUeXBlCi17Ci0gICAgQFN0cnVjdHVyZQotICAgIHByaXZhdGUgTW9kdWxlIG1vZHVsZTsKLQotICAgIEBTdHJ1Y3R1cmUKLSAgICBRaTRqU1BJIHNwaTsKLQotICAgIHB1YmxpYyBWYWx1ZUNvbXBvc2l0ZUN4ZlR5cGUoIEBVc2VzIFR5cGUgdHlwZSwgQFVzZXMgVHlwZU1hcHBpbmcgdHlwZU1hcHBpbmcgKQotICAgIHsKLSAgICAgICAgc2V0VHlwZU1hcHBpbmcoIHR5cGVNYXBwaW5nICk7Ci0gICAgICAgIHNldFR5cGVDbGFzcyggdHlwZSApOwotICAgICAgICBzZXRTY2hlbWFUeXBlKCBOYW1lc3BhY2VVdGlsLmNvbnZlcnRKYXZhVHlwZVRvUU5hbWUoIHR5cGUgKSApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgcmVhZE9iamVjdCggZmluYWwgTWVzc2FnZVJlYWRlciByZWFkZXIsIGZpbmFsIENvbnRleHQgY29udGV4dCApCi0gICAgICAgIHRocm93cyBEYXRhYmluZGluZ0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgUU5hbWUgcW5hbWUgPSBnZXRTY2hlbWFUeXBlKCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBjbGFzc05hbWUgPSAoIHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpICsgIi4iICsgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkgKS5zdWJzdHJpbmcoIDIwICk7Ci0KLSAgICAgICAgLy8gUmVhZCBhdHRyaWJ1dGVzCi0gICAgICAgIFZhbHVlRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbW9kdWxlLnZhbHVlRGVzY3JpcHRvciggY2xhc3NOYW1lICk7Ci0gICAgICAgIFN0YXRlRGVzY3JpcHRvciBzdGF0ZURlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLnN0YXRlKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxRdWFsaWZpZWROYW1lLCBPYmplY3Q+IHZhbHVlcyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgd2hpbGUoIHJlYWRlci5oYXNNb3JlRWxlbWVudFJlYWRlcnMoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIE1lc3NhZ2VSZWFkZXIgY2hpbGRSZWFkZXIgPSByZWFkZXIuZ2V0TmV4dEVsZW1lbnRSZWFkZXIoKTsKLSAgICAgICAgICAgIFFOYW1lIGNoaWxkTmFtZSA9IGNoaWxkUmVhZGVyLmdldE5hbWUoKTsKLSAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgY2hpbGRRdWFsaWZpZWROYW1lID0gUXVhbGlmaWVkTmFtZS5mcm9tQ2xhc3MoIChDbGFzcykgdHlwZUNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROYW1lLmdldExvY2FsUGFydCgpICk7Ci0gICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHlEZXNjcmlwdG9yID0gc3RhdGVEZXNjcmlwdG9yLmZpbmRQcm9wZXJ0eU1vZGVsQnlRdWFsaWZpZWROYW1lKAotICAgICAgICAgICAgICAgIGNoaWxkUXVhbGlmaWVkTmFtZSApOwotICAgICAgICAgICAgVHlwZSBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eURlc2NyaXB0b3IudHlwZSgpOwotICAgICAgICAgICAgQWVnaXNUeXBlIHR5cGUgPSBnZXRUeXBlTWFwcGluZygpLmdldFR5cGUoIHByb3BlcnR5VHlwZSApOwotICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gdHlwZS5yZWFkT2JqZWN0KCBjaGlsZFJlYWRlciwgY29udGV4dCApOwotICAgICAgICAgICAgdmFsdWVzLnB1dCggY2hpbGRRdWFsaWZpZWROYW1lLCB2YWx1ZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgVmFsdWVCdWlsZGVyPD8+IGJ1aWxkZXIgPSBtb2R1bGUubmV3VmFsdWVCdWlsZGVyV2l0aFN0YXRlKAotICAgICAgICAgICAgKENsYXNzPD8+KSB0eXBlQ2xhc3MsCi0gICAgICAgICAgICBuZXcgRnVuY3Rpb248UHJvcGVydHlEZXNjcmlwdG9yLCBPYmplY3Q+KCkKLSAgICAgICAgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgT2JqZWN0IG1hcCggUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmdldCggZGVzY3JpcHRvcjEucXVhbGlmaWVkTmFtZSgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgbmV3IEZ1bmN0aW9uPEFzc29jaWF0aW9uRGVzY3JpcHRvciwgRW50aXR5UmVmZXJlbmNlPigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIEVudGl0eVJlZmVyZW5jZSBtYXAoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHZhbHVlcy5nZXQoIGRlc2NyaXB0b3IucXVhbGlmaWVkTmFtZSgpICk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKCB2YWx1ZSA9PSBudWxsICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggdmFsdWUudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBuZXcgRnVuY3Rpb248QXNzb2NpYXRpb25EZXNjcmlwdG9yLCBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+PigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIEl0ZXJhYmxlPEVudGl0eVJlZmVyZW5jZT4gbWFwKCBBc3NvY2lhdGlvbkRlc2NyaXB0b3IgZGVzY3JpcHRvciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSB2YWx1ZXMuZ2V0KCBkZXNjcmlwdG9yLnF1YWxpZmllZE5hbWUoKSApOwotICAgICAgICAgICAgICAgICAgICBpZiggdmFsdWUgPT0gbnVsbCApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYWJsZXMuZW1wdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBpZHMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCAiLCIgKTsKLSAgICAgICAgICAgICAgICAgICAgTGlzdDxFbnRpdHlSZWZlcmVuY2U+IHJlZmVyZW5jZXMgPSBuZXcgQXJyYXlMaXN0PD4oIGlkcy5sZW5ndGggKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKCBTdHJpbmcgaWQgOiBpZHMgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzLmFkZCggRW50aXR5UmVmZXJlbmNlLnBhcnNlRW50aXR5UmVmZXJlbmNlKCBpZCApICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIG5ldyBGdW5jdGlvbjxBc3NvY2lhdGlvbkRlc2NyaXB0b3IsIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4+KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgTWFwPFN0cmluZywgRW50aXR5UmVmZXJlbmNlPiBtYXAoIEFzc29jaWF0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHZhbHVlcy5nZXQoIGRlc2NyaXB0b3IucXVhbGlmaWVkTmFtZSgpICk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKCB2YWx1ZSA9PSBudWxsICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gbmFtZWRSZWZzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCggIiwiICk7Ci0gICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIEVudGl0eVJlZmVyZW5jZT4gcmVmZXJlbmNlcyA9IG5ldyBIYXNoTWFwPD4oIG5hbWVkUmVmcy5sZW5ndGggKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKCBTdHJpbmcgbmFtZWRSZWYgOiBuYW1lZFJlZnMgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBzcGxpdHRlZCA9IG5hbWVkUmVmLnNwbGl0KCAiOiIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMucHV0KCBzcGxpdHRlZFswXSwgRW50aXR5UmVmZXJlbmNlLnBhcnNlRW50aXR5UmVmZXJlbmNlKCBzcGxpdHRlZFsxXSApICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSApOwotCi0gICAgICAgIHJldHVybiBidWlsZGVyLm5ld0luc3RhbmNlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVPYmplY3QoIE9iamVjdCBvYmplY3QsIGZpbmFsIE1lc3NhZ2VXcml0ZXIgd3JpdGVyLCBmaW5hbCBDb250ZXh0IGNvbnRleHQgKQotICAgICAgICB0aHJvd3MgRGF0YWJpbmRpbmdFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFZhbHVlQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IChWYWx1ZUNvbXBvc2l0ZSkgb2JqZWN0OwotICAgICAgICB3cml0ZXIud3JpdGVYc2lUeXBlKCBOYW1lc3BhY2VVdGlsLmNvbnZlcnRKYXZhVHlwZVRvUU5hbWUoCi0gICAgICAgICAgICBmaXJzdCggUWk0ai5GVU5DVElPTl9ERVNDUklQVE9SX0ZPUi5tYXAoIGNvbXBvc2l0ZSApLnR5cGVzKCkgKSApICk7Ci0gICAgICAgIEFzc29jaWF0aW9uU3RhdGVIb2xkZXIgc3RhdGUgPSBzcGkuc3RhdGVPZiggY29tcG9zaXRlICk7Ci0gICAgICAgIGZvciggUHJvcGVydHk8Pz4gcHJvcGVydHkgOiBzdGF0ZS5wcm9wZXJ0aWVzKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBwcm9wZXJ0eS5nZXQoKTsKLSAgICAgICAgICAgIEFlZ2lzVHlwZSB0eXBlID0gbnVsbDsKLSAgICAgICAgICAgIGlmKCB2YWx1ZSBpbnN0YW5jZW9mIFZhbHVlQ29tcG9zaXRlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBWYWx1ZUNvbXBvc2l0ZSBjb21wb3NpdGVWYWx1ZSA9IChWYWx1ZUNvbXBvc2l0ZSkgdmFsdWU7Ci0gICAgICAgICAgICAgICAgdHlwZSA9IGdldFR5cGVNYXBwaW5nKCkuZ2V0VHlwZSggTmFtZXNwYWNlVXRpbC5jb252ZXJ0SmF2YVR5cGVUb1FOYW1lKAotICAgICAgICAgICAgICAgICAgICBmaXJzdCggUWk0ai5GVU5DVElPTl9ERVNDUklQVE9SX0ZPUi5tYXAoIGNvbXBvc2l0ZVZhbHVlICkudHlwZXMoKSApICkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoIHZhbHVlICE9IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHR5cGUgPSBnZXRPckNyZWF0ZU5vblFpNGpUeXBlKCB2YWx1ZSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBRTmFtZSBjaGlsZE5hbWUgPSBuZXcgUU5hbWUoICIiLCBzcGkucHJvcGVydHlEZXNjcmlwdG9yRm9yKCBwcm9wZXJ0eSApLnF1YWxpZmllZE5hbWUoKS5uYW1lKCkgKTsKLSAgICAgICAgICAgIE1lc3NhZ2VXcml0ZXIgY3dyaXRlciA9IHdyaXRlci5nZXRFbGVtZW50V3JpdGVyKCBjaGlsZE5hbWUgKTsKLSAgICAgICAgICAgIGlmKCB0eXBlICE9IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHR5cGUud3JpdGVPYmplY3QoIHZhbHVlLCBjd3JpdGVyLCBjb250ZXh0ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgICAgICAgY3dyaXRlci53cml0ZVhzaU5pbCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3dyaXRlci5jbG9zZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQWVnaXNUeXBlIHR5cGUgPSBnZXRUeXBlTWFwcGluZygpLmdldFR5cGUoIE5hbWVzcGFjZVV0aWwuY29udmVydEphdmFUeXBlVG9RTmFtZSggU3RyaW5nLmNsYXNzICkgKTsKLSAgICAgICAgZm9yKCBBc3NvY2lhdGlvbjw/PiBhc3NvY2lhdGlvbiA6IHN0YXRlLmFsbEFzc29jaWF0aW9ucygpICkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgY2hpbGROYW1lID0gbmV3IFFOYW1lKCAiIiwgc3BpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggYXNzb2NpYXRpb24gKS5xdWFsaWZpZWROYW1lKCkubmFtZSgpICk7Ci0gICAgICAgICAgICBNZXNzYWdlV3JpdGVyIGN3cml0ZXIgPSB3cml0ZXIuZ2V0RWxlbWVudFdyaXRlciggY2hpbGROYW1lICk7Ci0KLSAgICAgICAgICAgIGlmKCBhc3NvY2lhdGlvbi5nZXQoKSAhPSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0eXBlLndyaXRlT2JqZWN0KCAoIChJZGVudGl0eSkgYXNzb2NpYXRpb24uZ2V0KCkgKS5pZGVudGl0eSgpLmdldCgpLCBjd3JpdGVyLCBjb250ZXh0ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjd3JpdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IoIE1hbnlBc3NvY2lhdGlvbjw/PiBhc3NvY2lhdGlvbiA6IHN0YXRlLmFsbE1hbnlBc3NvY2lhdGlvbnMoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lIGNoaWxkTmFtZSA9IG5ldyBRTmFtZSggIiIsIHNwaS5hc3NvY2lhdGlvbkRlc2NyaXB0b3JGb3IoIGFzc29jaWF0aW9uICkucXVhbGlmaWVkTmFtZSgpLm5hbWUoKSApOwotICAgICAgICAgICAgTWVzc2FnZVdyaXRlciBjd3JpdGVyID0gd3JpdGVyLmdldEVsZW1lbnRXcml0ZXIoIGNoaWxkTmFtZSApOwotCi0gICAgICAgICAgICBTdHJpbmcgaWRzID0gbnVsbDsKLSAgICAgICAgICAgIGZvciggT2JqZWN0IGVudGl0eSA6IGFzc29jaWF0aW9uICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaWQgPSBFbnRpdHlSZWZlcmVuY2UuZW50aXR5UmVmZXJlbmNlRm9yKCBlbnRpdHkgKS5pZGVudGl0eSgpOwotICAgICAgICAgICAgICAgIGlmKCBpZHMgIT0gbnVsbCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZHMgKz0gIiwiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZHMgKz0gaWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiggaWRzID09IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlkcyA9ICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHlwZS53cml0ZU9iamVjdCggaWRzLCBjd3JpdGVyLCBjb250ZXh0ICk7Ci0gICAgICAgICAgICBjd3JpdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IoIE5hbWVkQXNzb2NpYXRpb248Pz4gYXNzb2NpYXRpb24gOiBzdGF0ZS5hbGxOYW1lZEFzc29jaWF0aW9ucygpICkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgY2hpbGROYW1lID0gbmV3IFFOYW1lKCAiIiwgc3BpLmFzc29jaWF0aW9uRGVzY3JpcHRvckZvciggYXNzb2NpYXRpb24gKS5xdWFsaWZpZWROYW1lKCkubmFtZSgpICk7Ci0gICAgICAgICAgICBNZXNzYWdlV3JpdGVyIGN3cml0ZXIgPSB3cml0ZXIuZ2V0RWxlbWVudFdyaXRlciggY2hpbGROYW1lICk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBpZHMgPSBudWxsOwotICAgICAgICAgICAgZm9yKCBTdHJpbmcgbmFtZSA6IGFzc29jaWF0aW9uICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaWQgPSBFbnRpdHlSZWZlcmVuY2UuZW50aXR5UmVmZXJlbmNlRm9yKCBhc3NvY2lhdGlvbi5nZXQoIG5hbWUgKSApLmlkZW50aXR5KCk7Ci0gICAgICAgICAgICAgICAgaWYoIGlkcyAhPSBudWxsICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlkcyArPSAiLCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlkcyArPSBuYW1lICsgIjoiICsgaWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiggaWRzID09IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlkcyA9ICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHlwZS53cml0ZU9iamVjdCggaWRzLCBjd3JpdGVyLCBjb250ZXh0ICk7Ci0gICAgICAgICAgICBjd3JpdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIEFlZ2lzVHlwZSBnZXRPckNyZWF0ZU5vblFpNGpUeXBlKCBPYmplY3QgdmFsdWUgKQotICAgIHsKLSAgICAgICAgQWVnaXNUeXBlIHR5cGU7Ci0gICAgICAgIFR5cGVNYXBwaW5nIG1hcHBpbmcgPSBnZXRUeXBlTWFwcGluZygpOwotICAgICAgICBDbGFzczw/PiBqYXZhVHlwZSA9IHZhbHVlLmdldENsYXNzKCk7Ci0gICAgICAgIHR5cGUgPSBtYXBwaW5nLmdldFR5cGUoIGphdmFUeXBlICk7Ci0gICAgICAgIGlmKCB0eXBlID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIHdyb25nIGFuZCBpbnN0ZWFkIHRoZSB1bHRpbWF0ZSB0b3AgcGFyZW50IHNob3VsZCBiZSB1c2VkLiBUaGlzIHdvcmtzLCBzaW5jZQotICAgICAgICAgICAgLy8gd2Uga25vdyB0aGF0IHdlIGFyZSB0aGUgdG9wIHBhcmVudC4KLSAgICAgICAgICAgIHR5cGUgPSBnZXRUeXBlTWFwcGluZygpLmdldFR5cGVDcmVhdG9yKCkuY3JlYXRlVHlwZSggamF2YVR5cGUgKTsKLSAgICAgICAgICAgIG1hcHBpbmcucmVnaXN0ZXIoIHR5cGUgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHlwZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZVNjaGVtYSggWG1sU2NoZW1hIHJvb3QgKQotICAgIHsKLSAgICAgICAgWG1sU2NoZW1hQ29tcGxleFR5cGUgY29tcGxleCA9IG5ldyBYbWxTY2hlbWFDb21wbGV4VHlwZSggcm9vdCwgdHJ1ZSApOwotICAgICAgICBjb21wbGV4LnNldE5hbWUoIGdldFNjaGVtYVR5cGUoKS5nZXRMb2NhbFBhcnQoKSApOwotICAgICAgICByb290LmdldEl0ZW1zKCkuYWRkKCBjb21wbGV4ICk7Ci0KLSAgICAgICAgWG1sU2NoZW1hU2VxdWVuY2Ugc2VxdWVuY2UgPSBuZXcgWG1sU2NoZW1hU2VxdWVuY2UoKTsgLy8gTm8gY2x1ZSB3aHkgdGhpcz8KLSAgICAgICAgY29tcGxleC5zZXRQYXJ0aWNsZSggc2VxdWVuY2UgKTsgIC8vIE5vIGlkZWEgd2hhdCB0aGlzIGlzIGZvcgotCi0gICAgICAgIFZhbHVlRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbW9kdWxlLnZhbHVlRGVzY3JpcHRvciggZ2V0VHlwZUNsYXNzKCkuZ2V0TmFtZSgpICk7Ci0KLSAgICAgICAgZm9yKCBQcm9wZXJ0eURlc2NyaXB0b3IgcCA6IGRlc2NyaXB0b3Iuc3RhdGUoKS5wcm9wZXJ0aWVzKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiggaXNWYWx1ZUNvbXBvc2l0ZSggcC50eXBlKCkgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWG1sU2NoZW1hRWxlbWVudCBlbGVtZW50ID0gbmV3IFhtbFNjaGVtYUVsZW1lbnQoIHJvb3QsIGZhbHNlICk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5zZXROYW1lKCBwLnF1YWxpZmllZE5hbWUoKS5uYW1lKCkgKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LnNldE5pbGxhYmxlKCBwLm1ldGFJbmZvKCBPcHRpb25hbC5jbGFzcyApICE9IG51bGwgKTsgLy8gc2VlIGJlbG93Ci0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZ2V0SXRlbXMoKS5hZGQoIGVsZW1lbnQgKTsKLSAgICAgICAgICAgICAgICBBZWdpc1R5cGUgbmVzdGVkID0gZ2V0T3JDcmVhdGVBZWdpc1R5cGUoIHAudHlwZSgpLCByb290ICk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRTY2hlbWFUeXBlTmFtZSggbmVzdGVkLmdldFNjaGVtYVR5cGUoKSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiggaXNDb2xsZWN0aW9uT3JNYXAoIHAgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWG1sU2NoZW1hRWxlbWVudCBlbGVtZW50ID0gbmV3IFhtbFNjaGVtYUVsZW1lbnQoIHJvb3QsIGZhbHNlICk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5zZXROYW1lKCBwLnF1YWxpZmllZE5hbWUoKS5uYW1lKCkgKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LnNldE5pbGxhYmxlKCBwLm1ldGFJbmZvKCBPcHRpb25hbC5jbGFzcyApICE9IG51bGwgKTsgLy8gc2VlIGJlbG93Ci0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZ2V0SXRlbXMoKS5hZGQoIGVsZW1lbnQgKTsKLSAgICAgICAgICAgICAgICBBZWdpc1R5cGUgbmVzdGVkID0gZ2V0T3JDcmVhdGVBZWdpc1R5cGUoIHAudHlwZSgpLCByb290ICk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRTY2hlbWFUeXBlTmFtZSggbmVzdGVkLmdldFNjaGVtYVR5cGUoKSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhtbFNjaGVtYUF0dHJpYnV0ZSBhdHRyaWJ1dGUgPSBuZXcgWG1sU2NoZW1hQXR0cmlidXRlKCByb290LCBmYWxzZSApOwotICAgICAgICAgICAgICAgIGNvbXBsZXguZ2V0QXR0cmlidXRlcygpLmFkZCggYXR0cmlidXRlICk7Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlLnNldE5hbWUoIHAucXVhbGlmaWVkTmFtZSgpLm5hbWUoKSApOwotICAgICAgICAgICAgICAgIEFlZ2lzVHlwZSBuZXN0ZWQgPSBnZXRUeXBlTWFwcGluZygpLmdldFR5cGUoIHAudHlwZSgpICk7Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlLnNldFNjaGVtYVR5cGVOYW1lKCBuZXN0ZWQuZ2V0U2NoZW1hVHlwZSgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBRTmFtZSBuYW1lID0gTmFtZXNwYWNlVXRpbC5jb252ZXJ0SmF2YVR5cGVUb1FOYW1lKCBwLnR5cGUoKSApOwotICAgICAgICAgICAgU3RyaW5nIG5zID0gbmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIGlmKCAhbnMuZXF1YWxzKCByb290LmdldFRhcmdldE5hbWVzcGFjZSgpICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhtbFNjaGVtYVV0aWxzLmFkZEltcG9ydElmTmVlZGVkKCByb290LCBucyApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBBZWdpc1R5cGUgZ2V0T3JDcmVhdGVBZWdpc1R5cGUoIFR5cGUgdHlwZSwgWG1sU2NoZW1hIHJvb3QgKQotICAgIHsKLSAgICAgICAgQWVnaXNUeXBlIG5lc3RlZCA9IGdldFR5cGVNYXBwaW5nKCkuZ2V0VHlwZSggdHlwZSApOwotICAgICAgICBpZiggbmVzdGVkID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXN0ZWQgPSBjcmVhdGVUeXBlKCB0eXBlLCByb290ICk7Ci0gICAgICAgICAgICBuZXN0ZWQud3JpdGVTY2hlbWEoIHJvb3QgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbmVzdGVkOwotICAgIH0KLQotICAgIHByaXZhdGUgQWVnaXNUeXBlIGNyZWF0ZVR5cGUoIFR5cGUgdHlwZSwgWG1sU2NoZW1hIHJvb3QgKQotICAgIHsKLSAgICAgICAgaWYoIGlzQ29sbGVjdGlvbiggdHlwZSApICkKLSAgICAgICAgewotICAgICAgICAgICAgQWVnaXNUeXBlIGNvbXBvbmVudFR5cGUgPSBnZXRPckNyZWF0ZUFlZ2lzVHlwZSggZ2V0Q29sbGVjdGlvbkNvbXBvbmVudFR5cGUoIHR5cGUgKSwgcm9vdCApOwotICAgICAgICAgICAgQ29sbGVjdGlvblR5cGUgcmVzdWx0VHlwZSA9IG5ldyBDb2xsZWN0aW9uVHlwZSggY29tcG9uZW50VHlwZSApOwotICAgICAgICAgICAgUU5hbWUgc2NoZW1hVHlwZSA9IG5ldyBRTmFtZSggImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImxpc3QiICk7Ci0gICAgICAgICAgICByZXN1bHRUeXBlLnNldFNjaGVtYVR5cGUoIHNjaGVtYVR5cGUgKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHRUeXBlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIGlzTWFwKCB0eXBlICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBBZWdpc1R5cGUga2V5VHlwZSA9IGdldE9yQ3JlYXRlQWVnaXNUeXBlKCBnZXRNYXBLZXlDb21wb25lbnRUeXBlKCB0eXBlICksIHJvb3QgKTsKLSAgICAgICAgICAgIEFlZ2lzVHlwZSB2YWx1ZVR5cGUgPSBnZXRPckNyZWF0ZUFlZ2lzVHlwZSggZ2V0TWFwVmFsdWVDb21wb25lbnRUeXBlKCB0eXBlICksIHJvb3QgKTsKLSAgICAgICAgICAgIFFOYW1lIHNjaGVtYVR5cGUgPSBuZXcgUU5hbWUoIENsYXNzZXMudG9VUkkoIENsYXNzZXMuUkFXX0NMQVNTLm1hcCggdHlwZSApICksICJtYXAiICk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IE1hcFR5cGUoIHNjaGVtYVR5cGUsIGtleVR5cGUsIHZhbHVlVHlwZSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIGlzVmFsdWVDb21wb3NpdGUoIHR5cGUgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZhbHVlQ29tcG9zaXRlQ3hmVHlwZSBhZWdpc1R5cGUgPSBtb2R1bGUubmV3T2JqZWN0KCBWYWx1ZUNvbXBvc2l0ZUN4ZlR5cGUuY2xhc3MsIGdldFR5cGVNYXBwaW5nKCksIHR5cGUgKTsKLSAgICAgICAgICAgIGdldFR5cGVNYXBwaW5nKCkucmVnaXN0ZXIoIGFlZ2lzVHlwZSApOwotICAgICAgICAgICAgcmV0dXJuIGFlZ2lzVHlwZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hWYWx1ZUV4Y2VwdGlvbiggdHlwZS50b1N0cmluZygpLCBtb2R1bGUubmFtZSgpICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNDb2xsZWN0aW9uT3JNYXAoIGZpbmFsIFByb3BlcnR5RGVzY3JpcHRvciBwICkKLSAgICB7Ci0gICAgICAgIFR5cGUgdHlwZSA9IHAudHlwZSgpOwotICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uT3JNYXAoIHR5cGUgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNDb2xsZWN0aW9uKCBUeXBlIHR5cGUgKQotICAgIHsKLSAgICAgICAgaWYoIGlzQ29sbGVjdGlvbkNsYXNzKCB0eXBlICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiggdHlwZSBpbnN0YW5jZW9mIFBhcmFtZXRlcml6ZWRUeXBlICkKLSAgICAgICAgewotICAgICAgICAgICAgUGFyYW1ldGVyaXplZFR5cGUgcGFyYW0gPSAoUGFyYW1ldGVyaXplZFR5cGUpIHR5cGU7Ci0gICAgICAgICAgICBUeXBlIHJhd1R5cGUgPSBwYXJhbS5nZXRSYXdUeXBlKCk7Ci0gICAgICAgICAgICBpZiggaXNDb2xsZWN0aW9uQ2xhc3MoIHJhd1R5cGUgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpc01hcCggVHlwZSB0eXBlICkKLSAgICB7Ci0gICAgICAgIGlmKCBpc01hcENsYXNzKCB0eXBlICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiggdHlwZSBpbnN0YW5jZW9mIFBhcmFtZXRlcml6ZWRUeXBlICkKLSAgICAgICAgewotICAgICAgICAgICAgUGFyYW1ldGVyaXplZFR5cGUgcGFyYW0gPSAoUGFyYW1ldGVyaXplZFR5cGUpIHR5cGU7Ci0gICAgICAgICAgICBUeXBlIHJhd1R5cGUgPSBwYXJhbS5nZXRSYXdUeXBlKCk7Ci0gICAgICAgICAgICBpZiggaXNDb2xsZWN0aW9uQ2xhc3MoIHJhd1R5cGUgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpc0NvbGxlY3Rpb25Pck1hcCggVHlwZSB0eXBlICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc01hcCggdHlwZSApIHx8IGlzQ29sbGVjdGlvbiggdHlwZSApOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAicmF3IiApCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzQ29sbGVjdGlvbkNsYXNzKCBUeXBlIHR5cGUgKQotICAgIHsKLSAgICAgICAgaWYoIHR5cGUgaW5zdGFuY2VvZiBDbGFzcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIENsYXNzIGNsYXp6ID0gKENsYXNzKSB0eXBlOwotICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb24uY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggY2xhenogKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoICJyYXciICkKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNNYXBDbGFzcyggVHlwZSB0eXBlICkKLSAgICB7Ci0gICAgICAgIGlmKCB0eXBlIGluc3RhbmNlb2YgQ2xhc3MgKQotICAgICAgICB7Ci0gICAgICAgICAgICBDbGFzcyBjbGF6eiA9IChDbGFzcykgdHlwZTsKLSAgICAgICAgICAgIHJldHVybiBNYXAuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggY2xhenogKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBUeXBlIGdldENvbGxlY3Rpb25Db21wb25lbnRUeXBlKCBUeXBlIHAgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEFjdHVhbFR5cGVBcmd1bWVudCggcCwgMCApOwotICAgIH0KLQotICAgIHByaXZhdGUgVHlwZSBnZXRNYXBLZXlDb21wb25lbnRUeXBlKCBUeXBlIHAgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEFjdHVhbFR5cGVBcmd1bWVudCggcCwgMCApOwotICAgIH0KLQotICAgIHByaXZhdGUgVHlwZSBnZXRNYXBWYWx1ZUNvbXBvbmVudFR5cGUoIFR5cGUgcCApCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0QWN0dWFsVHlwZUFyZ3VtZW50KCBwLCAxICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBUeXBlIGdldEFjdHVhbFR5cGVBcmd1bWVudCggVHlwZSBwLCBpbnQgaW5kZXggKQotICAgIHsKLSAgICAgICAgaWYoIHAgaW5zdGFuY2VvZiBQYXJhbWV0ZXJpemVkVHlwZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBhcmFtZXRlcml6ZWRUeXBlIHR5cGUgPSAoUGFyYW1ldGVyaXplZFR5cGUpIHA7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZS5nZXRBY3R1YWxUeXBlQXJndW1lbnRzKClbaW5kZXhdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAicmF3IiApCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzVmFsdWVDb21wb3NpdGUoIFR5cGUgdHlwZSApCi0gICAgewotICAgICAgICBDbGFzcyBjbGF6eiA9IENsYXNzZXMuUkFXX0NMQVNTLm1hcCggdHlwZSApOwotICAgICAgICBWYWx1ZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IG1vZHVsZS52YWx1ZURlc2NyaXB0b3IoIGNsYXp6LmdldE5hbWUoKSApOwotICAgICAgICByZXR1cm4gZGVzY3JpcHRvciAhPSBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQ29tcGxleCgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2N4Zi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZjZWQ2NC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD4KLSAgICA8Ym9keT4KLSAgICAgICAgPGgyPkNYRiBMaWJyYXJ5LjwvaDI+Ci0gICAgICAgIDxwPgotICAgICAgICAgICAgVGhlIENYRiBMaWJyYXJ5IGRlZmluZXMgVmFsdWUtdG8tU29hcCB0eXBlIGNvbnZlcnRlciBhbmQgYWxzbyBzaW1wbGlmaWVzIHRoZSBzZXQgdXAgb2YgQ1hGIGluIGEgUWk0agotICAgICAgICAgICAgZW52aXJvbm1lbnQuCi0gICAgICAgIDwvcD4KLSAgICA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL0hlbGxvQ2xpZW50LmphdmEgYi9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSGVsbG9DbGllbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBmMjdiMy4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSGVsbG9DbGllbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMCBOaWNsYXMgSGVkaG1hbi4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmN4ZjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLmN4Zi5qYXh3cy5KYXhXc1Byb3h5RmFjdG9yeUJlYW47Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBIZWxsb0NsaWVudAotewotICAgIHByaXZhdGUgSGVsbG9DbGllbnQoKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gICAgewotICAgICAgICBKYXhXc1Byb3h5RmFjdG9yeUJlYW4gZmFjdG9yeSA9IG5ldyBKYXhXc1Byb3h5RmFjdG9yeUJlYW4oKTsKLSAgICAgICAgZmFjdG9yeS5nZXRJbkludGVyY2VwdG9ycygpLmFkZCggbmV3IExvZ2dpbmdJbkludGVyY2VwdG9yKCkgKTsKLSAgICAgICAgZmFjdG9yeS5nZXRPdXRJbnRlcmNlcHRvcnMoKS5hZGQoIG5ldyBMb2dnaW5nT3V0SW50ZXJjZXB0b3IoKSApOwotICAgICAgICBmYWN0b3J5LnNldFNlcnZpY2VDbGFzcyggSGVsbG9Xb3JsZC5jbGFzcyApOwotICAgICAgICBmYWN0b3J5LnNldEFkZHJlc3MoICJodHRwOi8vbG9jYWxob3N0OjkwMDEvaGVsbG9Xb3JsZCIgKTsKLSAgICAgICAgSGVsbG9Xb3JsZCBjbGllbnQgPSAoSGVsbG9Xb3JsZCkgZmFjdG9yeS5jcmVhdGUoKTsKLQotICAgICAgICBTdHJpbmcgcmVwbHkgPSBjbGllbnQuc2F5SGkoICJXb3JsZCIgKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiU2VydmVyIHNhaWQ6ICIgKyByZXBseSApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jeGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9IZWxsb01haW4uamF2YSBiL2xpYnJhcmllcy9jeGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9IZWxsb01haW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlODgzYi4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSGVsbG9NYWluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4uCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jeGY7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nSW5JbnRlcmNlcHRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nT3V0SW50ZXJjZXB0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4d3MuSmF4V3NTZXJ2ZXJGYWN0b3J5QmVhbjsKLQotcHVibGljIGZpbmFsIGNsYXNzIEhlbGxvTWFpbgotewotICAgIHByaXZhdGUgSGVsbG9NYWluKCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICAgIHsKLSAgICAgICAgSGVsbG9Xb3JsZEltcGwgaW1wbGVtZW50b3IgPSBuZXcgSGVsbG9Xb3JsZEltcGwoKTsKLSAgICAgICAgSmF4V3NTZXJ2ZXJGYWN0b3J5QmVhbiBzdnJGYWN0b3J5ID0gbmV3IEpheFdzU2VydmVyRmFjdG9yeUJlYW4oKTsKLSAgICAgICAgc3ZyRmFjdG9yeS5zZXRTZXJ2aWNlQ2xhc3MoIEhlbGxvV29ybGQuY2xhc3MgKTsKLSAgICAgICAgc3ZyRmFjdG9yeS5zZXRBZGRyZXNzKCAiaHR0cDovL2xvY2FsaG9zdDo5MDAxL2hlbGxvV29ybGQiICk7Ci0gICAgICAgIHN2ckZhY3Rvcnkuc2V0U2VydmljZUJlYW4oIGltcGxlbWVudG9yICk7Ci0gICAgICAgIHN2ckZhY3RvcnkuZ2V0SW5JbnRlcmNlcHRvcnMoKS5hZGQoIG5ldyBMb2dnaW5nSW5JbnRlcmNlcHRvcigpICk7Ci0gICAgICAgIHN2ckZhY3RvcnkuZ2V0T3V0SW50ZXJjZXB0b3JzKCkuYWRkKCBuZXcgTG9nZ2luZ091dEludGVyY2VwdG9yKCkgKTsKLSAgICAgICAgc3ZyRmFjdG9yeS5jcmVhdGUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSGVsbG9Xb3JsZC5qYXZhIGIvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL0hlbGxvV29ybGQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxZGYyOS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSGVsbG9Xb3JsZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmOwotCi1pbXBvcnQgamF2YXguandzLldlYlBhcmFtOwotaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOwotCi1AV2ViU2VydmljZQotcHVibGljIGludGVyZmFjZSBIZWxsb1dvcmxkCi17Ci0gICAgU3RyaW5nIHNheUhpKCBAV2ViUGFyYW0oIG5hbWUgPSAidGV4dCIgKSBTdHJpbmcgdGV4dCApOwotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL0hlbGxvV29ybGRJbXBsLmphdmEgYi9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSGVsbG9Xb3JsZEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyMzZhNS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvSGVsbG9Xb3JsZEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMCBOaWNsYXMgSGVkaG1hbi4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmN4ZjsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7Ci0KLUBXZWJTZXJ2aWNlKCBlbmRwb2ludEludGVyZmFjZSA9ICJvcmcucWk0ai5saWJyYXJ5LmN4Zi5IZWxsb1dvcmxkIiwKLSAgICAgICAgICAgICBzZXJ2aWNlTmFtZSA9ICJIZWxsb1dvcmxkIiApCi1wdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZEltcGwgaW1wbGVtZW50cyBIZWxsb1dvcmxkCi17Ci0gICAgcHJpdmF0ZSBmaW5hbCBNYXA8SW50ZWdlciwgVXNlcj4gdXNlcnM7Ci0KLSAgICBwdWJsaWMgSGVsbG9Xb3JsZEltcGwoKQotICAgIHsKLSAgICAgICAgdXNlcnMgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBzYXlIaSggU3RyaW5nIHRleHQgKQotICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAic2F5SGkgY2FsbGVkIiApOwotICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB0ZXh0OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgc2F5SGlUb1VzZXIoIFVzZXIgdXNlciApCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJzYXlIaVRvVXNlciBjYWxsZWQiICk7Ci0gICAgICAgIHVzZXJzLnB1dCggdXNlcnMuc2l6ZSgpICsgMSwgdXNlciApOwotICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB1c2VyLmdldE5hbWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPEludGVnZXIsIFVzZXI+IGdldFVzZXJzKCkKLSAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImdldFVzZXJzIGNhbGxlZCIgKTsKLSAgICAgICAgcmV0dXJuIHVzZXJzOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9jeGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9TdWJzY3JpcHRpb24uamF2YSBiL2xpYnJhcmllcy9jeGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9TdWJzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RkN2U5OS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvU3Vic2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4uCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jeGY7Ci0KLXB1YmxpYyBjbGFzcyBTdWJzY3JpcHRpb24KLXsKLSAgICBwcml2YXRlIFN0cmluZyBrZXk7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEtleSgpCi0gICAgewotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEtleSggU3RyaW5nIGtleSApCi0gICAgewotICAgICAgICB0aGlzLmtleSA9IGtleTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9EaXZQb2ludC5qYXZhIGIvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvRGl2UG9pbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ3ZjQ5MC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9EaXZQb2ludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmLmRpdnM7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQ29tcG9zaXRlOwotCi1wdWJsaWMgaW50ZXJmYWNlIERpdlBvaW50IGV4dGVuZHMgVmFsdWVDb21wb3NpdGUKLXsKLSAgICBQcm9wZXJ0eTxTdHJpbmc+IGR0KCk7Ci0KLSAgICBQcm9wZXJ0eTxTdHJpbmc+IHZhbCgpOwotCi0gICAgUHJvcGVydHk8U3RyaW5nPiB2YWxDY3koKTsKLQotICAgIFByb3BlcnR5PFN0cmluZz4gZGl2VHlwZSgpOwotCi0gICAgUHJvcGVydHk8U3RyaW5nPiByZWNUeXBlKCk7Ci0KLSAgICBQcm9wZXJ0eTxTdHJpbmc+IG5ldCgpOwotCi0gICAgUHJvcGVydHk8U3RyaW5nPiBuZXRDY3koKTsKLQotICAgIFByb3BlcnR5PFN0cmluZz4gcmVjRGF0ZSgpOwotCi0gICAgUHJvcGVydHk8U3RyaW5nPiBwYXlkYXRlKCk7Ci0KLSAgICBQcm9wZXJ0eTxTdHJpbmc+IGRpdlR5cGVDRCgpOwotCi0gICAgUHJvcGVydHk8U3RyaW5nPiBjb21tZW50KCk7Ci0KLSAgICBQcm9wZXJ0eTxTdHJpbmc+IHVwZGF0ZVRTKCk7Ci0KLSAgICBQcm9wZXJ0eTxTdHJpbmc+IGxhc3RVcGRhdGVyKCk7Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9EaXZTdHJlYW0uamF2YSBiL2xpYnJhcmllcy9jeGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9kaXZzL0RpdlN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjFlYzRkLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9jeGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9kaXZzL0RpdlN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmLmRpdnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQ29tcG9zaXRlOwotCi1wdWJsaWMgaW50ZXJmYWNlIERpdlN0cmVhbSBleHRlbmRzIFZhbHVlQ29tcG9zaXRlCi17Ci0gICAgUHJvcGVydHk8U3RyaW5nPiBtZFN5bWJvbCgpOwotCi0gICAgUHJvcGVydHk8U3RyaW5nPiBzdHJlYW1OYW1lKCk7Ci0KLSAgICBQcm9wZXJ0eTxTdHJpbmc+IGNvbnNvbGlkYXRlKCk7Ci0KLSAgICBQcm9wZXJ0eTxTdHJpbmc+IGlzc3VlSWQoKTsKLQotICAgIFByb3BlcnR5PFN0cmluZz4gc3lzdGVtVXBkYXRlVFMoKTsKLQotICAgIFByb3BlcnR5PFN0cmluZz4gdXNlclVwZGF0ZVRTKCk7Ci0KLSAgICBQcm9wZXJ0eTxMaXN0PERpdlBvaW50Pj4gZGl2UG9pbnRzKCk7Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9EaXZpZGVuZHNNYWluLmphdmEgYi9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9EaXZpZGVuZHNNYWluLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMjQ1OGYuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvRGl2aWRlbmRzTWFpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmLmRpdnM7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkFwcGxpY2F0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLlNpbmdsZXRvbkFzc2VtYmxlcjsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmN4Zi5DeGZBc3NlbWJsZXI7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBEaXZpZGVuZHNNYWluCi17Ci0gICAgcHJpdmF0ZSBEaXZpZGVuZHNNYWluKCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTaW5nbGV0b25Bc3NlbWJsZXIgYXNzZW1ibGVyID0gbmV3IFNpbmdsZXRvbkFzc2VtYmxlcigpCi0gICAgICAgIHsKLQotICAgICAgICAgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBQcm9qZWN0ZWREaXZpZGVuZHNTZXJ2aWNlLmNsYXNzICkuaW5zdGFudGlhdGVPblN0YXJ0dXAoKTsKLSAgICAgICAgICAgICAgICBtb2R1bGUudmFsdWVzKCBEaXZTdHJlYW0uY2xhc3MsIERpdlBvaW50LmNsYXNzICk7Ci0gICAgICAgICAgICAgICAgbmV3IEN4ZkFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgZmluYWwgQXBwbGljYXRpb24gYXBwbGljYXRpb24gPSBhc3NlbWJsZXIuYXBwbGljYXRpb24oKTsKLSAgICAgICAgUnVudGltZS5nZXRSdW50aW1lKCkuYWRkU2h1dGRvd25Ib29rKCBuZXcgVGhyZWFkKCkKLSAgICAgICAgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24ucGFzc2l2YXRlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJQcm9ibGVtIHNodXR0aW5nIGRvd24gUWk0aiIgKTsKLSAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9EaXZpZGVuZHNUZXN0LmphdmEgYi9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9EaXZpZGVuZHNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZTRjNDIuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvRGl2aWRlbmRzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMCBOaWNsYXMgSGVkaG1hbi4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmN4Zi5kaXZzOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBFbnRpdHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBSZXNwb25zZTsKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lkh0dHBDbGllbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBQb3N0OwotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5lbnRpdHkuU3RyaW5nRW50aXR5OwotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudC5EZWZhdWx0SHR0cENsaWVudDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotaW1wb3J0IG9yZy5jdXN0b21tb25rZXkueG1sdW5pdC5YTUxBc3NlcnQ7Ci0KLXB1YmxpYyBjbGFzcyBEaXZpZGVuZHNUZXN0Ci17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEID0KLSAgICAgICAgIjxzb2FwOkVudmVsb3BlIHhtbG5zOnNvYXA9XCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlL1wiPiIgKwotICAgICAgICAiPHNvYXA6Qm9keT48bnMxOkRTRGF0YVJlc3BvbnNlIHhtbG5zOm5zMT1cImh0dHA6Ly9kaXZzLmN4Zi5saWJyYXJ5LnFpNGoub3JnL1wiPiIgKwotICAgICAgICAiPG5zMTpTbmFwc2hvdD4iICsKLSAgICAgICAgIjxuczE6ZW50cnk+IiArCi0gICAgICAgICI8bnMxOmtleT5idC5sL1BSSVZBVEVfbmljbGFzPC9uczE6a2V5PiIgKwotICAgICAgICAiPG5zMTp2YWx1ZSB4bWxuczpuczI9XCJ1cm46cWk0ajp0eXBlOnZhbHVlOm9yZy5xaTRqLmxpYnJhcnkuY3hmLmRpdnNcIiAiICsKLSAgICAgICAgInhtbG5zOnhzaT1cImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXCIgeHNpOnR5cGU9XCJuczI6RGl2U3RyZWFtXCI+IiArCi0gICAgICAgICI8aXNzdWVJZD5QQzEwWVpOWkMxMDA8L2lzc3VlSWQ+IiArCi0gICAgICAgICI8ZGl2UG9pbnRzPiIgKwotICAgICAgICAiPG5zMzphbnlUeXBlIHhtbG5zOm5zMz1cImh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9hcnJheXNcIiB4c2k6dHlwZT1cIm5zMjpEaXZQb2ludFwiPiIgKwotICAgICAgICAiPHVwZGF0ZVRTPiIgKyBuZXcgRGF0ZSggMjAxMCwgMTAsIDEwICkudG9TdHJpbmcoKSArICI8L3VwZGF0ZVRTPiIgKwotICAgICAgICAiPGRpdlR5cGVDRD48L2RpdlR5cGVDRD4iICsKLSAgICAgICAgIjx2YWxDY3k+VVNEPC92YWxDY3k+IiArCi0gICAgICAgICI8cmVjVHlwZT5BPC9yZWNUeXBlPiIgKwotICAgICAgICAiPHZhbD4wLjcwODwvdmFsPiIgKwotICAgICAgICAiPGR0PjIwMTAtMDItMTI8L2R0PiIgKwotICAgICAgICAiPG5ldD4wLjYzNzIwMDAwMzg2MjM4MTwvbmV0PiIgKwotICAgICAgICAiPG5ldENjeT5VU0Q8L25ldENjeT4iICsKLSAgICAgICAgIjxwYXlkYXRlPjIwMTctMDktMTk8L3BheWRhdGU+IiArCi0gICAgICAgICI8cmVjRGF0ZT4yMDE0LTA2LTE2PC9yZWNEYXRlPiIgKwotICAgICAgICAiPGRpdlR5cGU+UkVHPC9kaXZUeXBlPiIgKwotICAgICAgICAiPGNvbW1lbnQ+U2lsbHkgY29tbWVudDwvY29tbWVudD4iICsKLSAgICAgICAgIjxsYXN0VXBkYXRlcj5uaWNsYXM8L2xhc3RVcGRhdGVyPiIgKwotICAgICAgICAiPC9uczM6YW55VHlwZT4iICsKLSAgICAgICAgIjxuczM6YW55VHlwZSB4bWxuczpuczM9XCJodHRwOi8vY3hmLmFwYWNoZS5vcmcvYXJyYXlzXCIgeHNpOnR5cGU9XCJuczI6RGl2UG9pbnRcIj4iICsKLSAgICAgICAgIjx1cGRhdGVUUz4iICsgbmV3IERhdGUoIDIwMTAsIDEwLCAxMCApLnRvU3RyaW5nKCkgKyAiPC91cGRhdGVUUz4iICsKLSAgICAgICAgIjxkaXZUeXBlQ0Q+PC9kaXZUeXBlQ0Q+IiArCi0gICAgICAgICI8dmFsQ2N5PlVTRDwvdmFsQ2N5PiIgKwotICAgICAgICAiPHJlY1R5cGU+QTwvcmVjVHlwZT4iICsKLSAgICAgICAgIjx2YWw+My4wNjg8L3ZhbD4iICsKLSAgICAgICAgIjxkdD4yMDIwLTAyLTIyPC9kdD4iICsKLSAgICAgICAgIjxuZXQ+Mi43NjEyMDAwNzAzODExNjQ2PC9uZXQ+IiArCi0gICAgICAgICI8bmV0Q2N5PlVTRDwvbmV0Q2N5PiIgKwotICAgICAgICAiPHBheWRhdGU+MjAyNy0wOS0xMDwvcGF5ZGF0ZT4iICsKLSAgICAgICAgIjxyZWNEYXRlPjIwMjQtMDYtMjY8L3JlY0RhdGU+IiArCi0gICAgICAgICI8ZGl2VHlwZT5SRUc8L2RpdlR5cGU+IiArCi0gICAgICAgICI8Y29tbWVudD5TaWxseSBjb21tZW50PC9jb21tZW50PiIgKwotICAgICAgICAiPGxhc3RVcGRhdGVyPm5pY2xhczwvbGFzdFVwZGF0ZXI+IiArCi0gICAgICAgICI8L25zMzphbnlUeXBlPiIgKwotICAgICAgICAiPC9kaXZQb2ludHM+IiArCi0gICAgICAgICI8c3lzdGVtVXBkYXRlVFM+IiArIG5ldyBEYXRlKCAyMDEwLCAxMCwgMTAgKS50b1N0cmluZygpICsgIjwvc3lzdGVtVXBkYXRlVFM+IiArCi0gICAgICAgICI8c3RyZWFtTmFtZT5QUklWQVRFX25pY2xhczwvc3RyZWFtTmFtZT4iICsKLSAgICAgICAgIjx1c2VyVXBkYXRlVFM+IiArIG5ldyBEYXRlKCAyMDEwLCAxMCwgMTAgKS50b1N0cmluZygpICsgIjwvdXNlclVwZGF0ZVRTPiIgKwotICAgICAgICAiPGNvbnNvbGlkYXRlPk48L2NvbnNvbGlkYXRlPiIgKwotICAgICAgICAiPG1kU3ltYm9sPmJ0Lmw8L21kU3ltYm9sPiIgKwotICAgICAgICAiPC9uczE6dmFsdWU+IiArCi0gICAgICAgICI8L25zMTplbnRyeT4iICsKLSAgICAgICAgIjwvbnMxOlNuYXBzaG90PiIgKwotICAgICAgICAiPC9uczE6RFNEYXRhUmVzcG9uc2U+IiArCi0gICAgICAgICI8L3NvYXA6Qm9keT4iICsKLSAgICAgICAgIjwvc29hcDpFbnZlbG9wZT4iOwotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB3aGVuUmVxdWVzdFFpNGpWYWx1ZUV4cGVjdENvcnJlY3RSZXN1bHQoKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBEaXZpZGVuZHNNYWluLm1haW4oIG5ldyBTdHJpbmdbIDAgXSApOyAgLy8gU3RhcnQgc2VydmVyOwotCi0gICAgICAgIEh0dHBDbGllbnQgaHR0cGNsaWVudCA9IG5ldyBEZWZhdWx0SHR0cENsaWVudCgpOwotICAgICAgICBIdHRwUG9zdCBodHRwUG9zdCA9IG5ldyBIdHRwUG9zdCggImh0dHA6Ly9sb2NhbGhvc3Q6OTMwMC9Qcm9qZWN0ZWREaXZpZGVuZHNTZXJ2aWNlIiApOwotICAgICAgICBodHRwUG9zdC5zZXRIZWFkZXIoICJTT0FQQWN0aW9uIiwgIlwiRFNEYXRhUmVxdWVzdFwiIiApOwotICAgICAgICBodHRwUG9zdC5zZXRIZWFkZXIoICJDb250ZW50LVR5cGUiLCAidGV4dC94bWw7Y2hhcnNldD1VVEYtOCIgKTsKLSAgICAgICAgSHR0cEVudGl0eSBkYXRhID0gbmV3IFN0cmluZ0VudGl0eSgKLSAgICAgICAgICAgICI8c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PVwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS9cIiAiICsKLSAgICAgICAgICAgICJ4bWxuczpkaXZzPVwiaHR0cDovL2RpdnMuY3hmLmxpYnJhcnkucWk0ai5vcmcvXCIgIiArCi0gICAgICAgICAgICAieG1sbnM6Y3hmPVwiaHR0cDovL2N4Zi5saWJyYXJ5LnFpNGoub3JnXCI+XG4iICsKLSAgICAgICAgICAgICIgICA8c29hcGVudjpIZWFkZXIvPlxuIiArCi0gICAgICAgICAgICAiICAgPHNvYXBlbnY6Qm9keT5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDxkaXZzOkRTRGF0YT5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgIDwhLS1PcHRpb25hbDotLT5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgIDxkaXZzOlJlcXVlc3RUeXBlPj88L2RpdnM6UmVxdWVzdFR5cGU+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgICA8IS0tT3B0aW9uYWw6LS0+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgICA8ZGl2czpEYXRhU2VydmljZT4/PC9kaXZzOkRhdGFTZXJ2aWNlPlxuIiArCi0gICAgICAgICAgICAiICAgICAgICAgPCEtLU9wdGlvbmFsOi0tPlxuIiArCi0gICAgICAgICAgICAiICAgICAgICAgPGRpdnM6U3Vic2NyaXB0aW9uPlxuIiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPCEtLU9wdGlvbmFsOi0tPlxuIiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPGN4ZjprZXk+PzwvY3hmOmtleT5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgIDwvZGl2czpTdWJzY3JpcHRpb24+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8L2RpdnM6RFNEYXRhPlxuIiArCi0gICAgICAgICAgICAiICAgPC9zb2FwZW52OkJvZHk+XG4iICsKLSAgICAgICAgICAgICI8L3NvYXBlbnY6RW52ZWxvcGU+IiApOwotICAgICAgICBodHRwUG9zdC5zZXRFbnRpdHkoIGRhdGEgKTsKLSAgICAgICAgSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKCBodHRwUG9zdCApOwotICAgICAgICBIdHRwRW50aXR5IGVudGl0eSA9IHJlc3BvbnNlLmdldEVudGl0eSgpOwotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gICAgICAgIGlmKCBlbnRpdHkgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIElucHV0U3RyZWFtIGluc3RyZWFtID0gZW50aXR5LmdldENvbnRlbnQoKTsKLSAgICAgICAgICAgIElucHV0U3RyZWFtUmVhZGVyIGlzciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlciggaW5zdHJlYW0gKTsKLSAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBpc3IgKTsKLSAgICAgICAgICAgIFN0cmluZyBsaW5lID0gYnIucmVhZExpbmUoKTsKLSAgICAgICAgICAgIHdoaWxlKCBsaW5lICE9IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGxpbmU7Ci0gICAgICAgICAgICAgICAgbGluZSA9IGJyLnJlYWRMaW5lKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgWE1MQXNzZXJ0LmFzc2VydFhNTEVxdWFsKCBFWFBFQ1RFRCwgcmVzdWx0ICk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvUHJvamVjdGVkRGl2aWRlbmRzLmphdmEgYi9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9Qcm9qZWN0ZWREaXZpZGVuZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjczNmI2OS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9Qcm9qZWN0ZWREaXZpZGVuZHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4uCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5jeGYuZGl2czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZheC5qd3MuV2ViTWV0aG9kOwotaW1wb3J0IGphdmF4Lmp3cy5XZWJQYXJhbTsKLWltcG9ydCBqYXZheC5qd3MuV2ViUmVzdWx0OwotaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQnVpbGRlcjsKLWltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmN4Zi5TdWJzY3JpcHRpb247Ci0KLUBXZWJTZXJ2aWNlCi1ATWl4aW5zKCBQcm9qZWN0ZWREaXZpZGVuZHMuUHJvamVjdGVkRGl2aWRlbmRzTWl4aW4uY2xhc3MgKQotcHVibGljIGludGVyZmFjZSBQcm9qZWN0ZWREaXZpZGVuZHMKLXsKLSAgICBAV2ViTWV0aG9kKCBhY3Rpb24gPSAiRFNEYXRhUmVxdWVzdCIsIG9wZXJhdGlvbk5hbWUgPSAiRFNEYXRhIiApCi0gICAgQFdlYlJlc3VsdCggbmFtZSA9ICJTbmFwc2hvdCIgKQotICAgIE1hcDxTdHJpbmcsIERpdlN0cmVhbT4gZ2V0U25hcHNob3QoCi0gICAgICAgIEBXZWJQYXJhbSggbmFtZSA9ICJSZXF1ZXN0VHlwZSIgKSBTdHJpbmcgcmVxdWVzdFR5cGUsCi0gICAgICAgIEBXZWJQYXJhbSggbmFtZSA9ICJEYXRhU2VydmljZSIgKSBTdHJpbmcgZGF0YVNlcnZpY2UsCi0gICAgICAgIEBXZWJQYXJhbSggbmFtZSA9ICJTdWJzY3JpcHRpb24iICkgU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbgotICAgICk7Ci0KLSAgICBwdWJsaWMgY2xhc3MgUHJvamVjdGVkRGl2aWRlbmRzTWl4aW4KLSAgICAgICAgaW1wbGVtZW50cyBQcm9qZWN0ZWREaXZpZGVuZHMKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBOSU5FVFlfUEVSQ0VOVCA9IDAuOTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgQkFTRV9PRkZTRVQgPSAwLjIzNmY7Ci0KLSAgICAgICAgQFN0cnVjdHVyZQotICAgICAgICBwcml2YXRlIFZhbHVlQnVpbGRlckZhY3RvcnkgdmJmOwotCi0gICAgICAgIHByaXZhdGUgaW50IGNvdW50ZXI7Ci0KLSAgICAgICAgcHVibGljIE1hcDxTdHJpbmcsIERpdlN0cmVhbT4gZ2V0U25hcHNob3QoIFN0cmluZyByZXF1ZXN0VHlwZSwgU3RyaW5nIGRhdGFTZXJ2aWNlLCBTdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uICkKLSAgICAgICAgewotICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIERpdlN0cmVhbT4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBEaXZTdHJlYW0+KCk7Ci0gICAgICAgICAgICByZXN1bHQucHV0KCAiYnQubC9QUklWQVRFX25pY2xhcyIsIGNyZWF0ZURpdlN0cmVhbSgpICk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBEaXZTdHJlYW0gY3JlYXRlRGl2U3RyZWFtKCkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWVCdWlsZGVyPERpdlN0cmVhbT4gYnVpbGRlciA9IHZiZi5uZXdWYWx1ZUJ1aWxkZXIoIERpdlN0cmVhbS5jbGFzcyApOwotICAgICAgICAgICAgRGl2U3RyZWFtIHByb3RvdHlwZSA9IGJ1aWxkZXIucHJvdG90eXBlKCk7Ci0gICAgICAgICAgICBMaXN0PERpdlBvaW50PiBkaXZQb2ludHMgPSBuZXcgQXJyYXlMaXN0PERpdlBvaW50PigpOwotICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCAyOyBpKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRpdlBvaW50cy5hZGQoIGNyZWF0ZURpdlBvaW50KCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByb3RvdHlwZS5kaXZQb2ludHMoKS5zZXQoIGRpdlBvaW50cyApOwotICAgICAgICAgICAgcHJvdG90eXBlLmNvbnNvbGlkYXRlKCkuc2V0KCAiTiIgKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS5zdHJlYW1OYW1lKCkuc2V0KCAiUFJJVkFURV9uaWNsYXMiICk7Ci0gICAgICAgICAgICBwcm90b3R5cGUuc3lzdGVtVXBkYXRlVFMoKS5zZXQoIG5ldyBEYXRlKCAyMDEwLCAxMCwgMTAgKS50b1N0cmluZygpICk7Ci0gICAgICAgICAgICBwcm90b3R5cGUudXNlclVwZGF0ZVRTKCkuc2V0KCBuZXcgRGF0ZSggMjAxMCwgMTAsIDEwICkudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgcHJvdG90eXBlLmlzc3VlSWQoKS5zZXQoICJQQzEwWVpOWkMxMDAiICk7Ci0gICAgICAgICAgICBwcm90b3R5cGUubWRTeW1ib2woKS5zZXQoICJidC5sIiApOwotICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgRGl2UG9pbnQgY3JlYXRlRGl2UG9pbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBWYWx1ZUJ1aWxkZXI8RGl2UG9pbnQ+IGJ1aWxkZXIgPSB2YmYubmV3VmFsdWVCdWlsZGVyKCBEaXZQb2ludC5jbGFzcyApOwotICAgICAgICAgICAgRGl2UG9pbnQgcHJvdG90eXBlID0gYnVpbGRlci5wcm90b3R5cGUoKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS5jb21tZW50KCkuc2V0KCAiU2lsbHkgY29tbWVudCAiICk7Ci0gICAgICAgICAgICBwcm90b3R5cGUuZHQoKS5zZXQoIGNyZWF0ZVJhbmRvbURhdGUoKSApOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gcmFuZG9tQW1vdW50KCk7Ci0gICAgICAgICAgICBwcm90b3R5cGUudmFsKCkuc2V0KCAiIiArIGFtb3VudCApOwotICAgICAgICAgICAgcHJvdG90eXBlLnZhbENjeSgpLnNldCggIlVTRCIgKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS5kaXZUeXBlKCkuc2V0KCAiUkVHIiApOwotICAgICAgICAgICAgcHJvdG90eXBlLnJlY1R5cGUoKS5zZXQoICJBIiApOwotICAgICAgICAgICAgcHJvdG90eXBlLm5ldCgpLnNldCggIiIgKyAoIGFtb3VudCAqIE5JTkVUWV9QRVJDRU5UICkgKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS5uZXRDY3koKS5zZXQoICJVU0QiICk7Ci0gICAgICAgICAgICBwcm90b3R5cGUucmVjRGF0ZSgpLnNldCggY3JlYXRlUmFuZG9tRGF0ZSgpICk7Ci0gICAgICAgICAgICBwcm90b3R5cGUucGF5ZGF0ZSgpLnNldCggY3JlYXRlUmFuZG9tRGF0ZSgpICk7Ci0gICAgICAgICAgICBwcm90b3R5cGUuZGl2VHlwZUNEKCkuc2V0KCAiIiApOwotICAgICAgICAgICAgcHJvdG90eXBlLmNvbW1lbnQoKS5zZXQoICJTaWxseSBjb21tZW50IiApOwotICAgICAgICAgICAgcHJvdG90eXBlLnVwZGF0ZVRTKCkuc2V0KCBuZXcgRGF0ZSggMjAxMCwgMTAsIDEwICkudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgcHJvdG90eXBlLmxhc3RVcGRhdGVyKCkuc2V0KCAibmljbGFzIiApOwotICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgZmxvYXQgcmFuZG9tQW1vdW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEJBU0VfT0ZGU0VUICogY291bnRlcisrOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlUmFuZG9tRGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAiMjAiICsgKCBjb3VudGVyKysgKyAxMCApICsgIi0wIiArICggKCBjb3VudGVyKysgJSAxMCApICsgMSApICsgIi0iICsgKCAoIGNvdW50ZXIrKyAlIDE5ICkgKyAxMCApOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvUHJvamVjdGVkRGl2aWRlbmRzU2VydmljZS5qYXZhIGIvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvUHJvamVjdGVkRGl2aWRlbmRzU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDBlY2I4Li4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9jeGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9kaXZzL1Byb2plY3RlZERpdmlkZW5kc1NlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMCBOaWNsYXMgSGVkaG1hbi4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmN4Zi5kaXZzOwotCi1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5jeGYuSmF4V3NTZXJ2aWNlOwotCi1wdWJsaWMgaW50ZXJmYWNlIFByb2plY3RlZERpdmlkZW5kc1NlcnZpY2UgZXh0ZW5kcyBQcm9qZWN0ZWREaXZpZGVuZHMsIEpheFdzU2VydmljZQotewotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmctamRibS9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1qZGJtL2J1aWxkLmdyYWRsZQppbmRleCAxY2E5YWUzLi5mNWQwZjI1IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1qZGJtL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1qZGJtL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJFeHRlbnNpb24gdG8gdGhlIFFpNGogRXZlbnQgU291cmNpbmcgTGlicmFyeSBmb3IgcHJvdmlkaW5nIGEgSkRCTSBiYXNlZCBldmVudCBzdG9yZS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gRXZlbnQgU291cmNpbmcgLSBKREJNIiB9fQorZGVzY3JpcHRpb24gPSAiRXh0ZW5zaW9uIHRvIHRoZSBBcGFjaGUgWmVzdOKEoiBFdmVudCBTb3VyY2luZyBMaWJyYXJ5IGZvciBwcm92aWRpbmcgYSBKREJNIGJhc2VkIGV2ZW50IHN0b3JlLiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIExpYnJhcnkgLSBFdmVudCBTb3VyY2luZyAtIEpEQk0iIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nLWpkYm0vZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1qZGJtL2Rldi1zdGF0dXMueG1sCmluZGV4IGY4ODExZDEuLjVhZGViZDcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nLWpkYm0vZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmctamRibS9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKQEAgLTgsNyArMjQsNyBAQAogICAgIDxjb2RlYmFzZT5iZXRhPC9jb2RlYmFzZT4KIAogICAgIDwhLS0gbm9uZSwgYnJpZWYsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDxkb2N1bWVudGF0aW9uPm5vbmU8L2RvY3VtZW50YXRpb24+CisgICAgPGRvY3VtZW50YXRpb24+YnJpZWY8L2RvY3VtZW50YXRpb24+CiAKICAgICA8IS0tIG5vbmUsIHNvbWUsIGdvb2QsIGNvbXBsZXRlIC0tPgogICAgIDx1bml0dGVzdHM+c29tZTwvdW5pdHRlc3RzPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmctamRibS9zcmMvZG9jcy9ldmVudHNvdXJjaW5nLWpkYm0udHh0IGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmctamRibS9zcmMvZG9jcy9ldmVudHNvdXJjaW5nLWpkYm0udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM4NTBkLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nLWpkYm0vc3JjL2RvY3MvZXZlbnRzb3VyY2luZy1qZGJtLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLVtbbGlicmFyeS1ldmVudHNvdXJjaW5nLWpkYm0sIEV2ZW50IFNvdXJjaW5nIEpEQk0gTGlicmFyeV1dCi09IEV2ZW50IFNvdXJjaW5nIC0gSkRCTSA9Ci0KLVtkZXZzdGF0dXNdCi0tLS0tLS0tLS0tLS0tLQotc291cmNlPWxpYnJhcmllcy9ldmVudHNvdXJjaW5nLWpkYm0vZGV2LXN0YXR1cy54bWwKLS0tLS0tLS0tLS0tLS0tCi0KLUV2ZW50IFNvdXJjaW5nIC0gSkRCTSBMaWJyYXJ5Ci0KLU5PVEU6IFRoaXMgTGlicmFyeSBoYXMgbm8gZG9jdW1lbnRhdGlvbiB5ZXQuIExlYXJuIGhvdyB0byBjb250cmlidXRlIGluIDw8Y29tbXVuaXR5LWRvY3M+Pi4KLQotaW5jbHVkZTo6Li4vLi4vYnVpbGQvZG9jcy9idWlsZGluZm8vYXJ0aWZhY3QudHh0W10KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nLWpkYm0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3NvdXJjZS9qZGJtL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nLWpkYm0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3NvdXJjZS9qZGJtL3BhY2thZ2UuaHRtbAppbmRleCBmYzNmNGZiLi40OTUxZjU3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1qZGJtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9zb3VyY2UvamRibS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmctamRibS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL2pkYm0vcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5KREJNIEV2ZW50U3RvcmUuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nLXJlc3QvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9idWlsZC5ncmFkbGUKaW5kZXggZjFkN2MwZS4uZWExMjg2YSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBFdmVudCBTb3VyY2luZyBMaWJyYXJ5IGZvciBSZXN0ZnVsIGFwcGxpY2F0aW9ucy4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gRXZlbnQgU291cmNpbmcgLSBSZXN0IiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgRXZlbnQgU291cmNpbmcgTGlicmFyeSBmb3IgUmVzdGZ1bCBhcHBsaWNhdGlvbnMuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIEV2ZW50IFNvdXJjaW5nIC0gUmVzdCIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nLXJlc3QvZGV2LXN0YXR1cy54bWwKaW5kZXggZjg4MTFkMS4uNWFkZWJkNyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1yZXN0L2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpAQCAtOCw3ICsyNCw3IEBACiAgICAgPGNvZGViYXNlPmJldGE8L2NvZGViYXNlPgogCiAgICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPGRvY3VtZW50YXRpb24+bm9uZTwvZG9jdW1lbnRhdGlvbj4KKyAgICA8ZG9jdW1lbnRhdGlvbj5icmllZjwvZG9jdW1lbnRhdGlvbj4KIAogICAgIDwhLS0gbm9uZSwgc29tZSwgZ29vZCwgY29tcGxldGUgLS0+CiAgICAgPHVuaXR0ZXN0cz5zb21lPC91bml0dGVzdHM+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1yZXN0L3NyYy9kb2NzL2V2ZW50c291cmNpbmctcmVzdC50eHQgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1yZXN0L3NyYy9kb2NzL2V2ZW50c291cmNpbmctcmVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYTYyMWIuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9zcmMvZG9jcy9ldmVudHNvdXJjaW5nLXJlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotW1tsaWJyYXJ5LWV2ZW50c291cmNpbmctcmVzdCwgRXZlbnQgU291cmNpbmcgUmVTVCBMaWJyYXJ5XV0KLT0gRXZlbnQgU291cmNpbmcgLSBSZVNUID0KLQotW2RldnN0YXR1c10KLS0tLS0tLS0tLS0tLS0tCi1zb3VyY2U9bGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9kZXYtc3RhdHVzLnhtbAotLS0tLS0tLS0tLS0tLS0KLQotRXZlbnQgU291cmNpbmcgLSBSZVNUIExpYnJhcnkKLQotTk9URTogVGhpcyBMaWJyYXJ5IGhhcyBubyBkb2N1bWVudGF0aW9uIHlldC4gTGVhcm4gaG93IHRvIGNvbnRyaWJ1dGUgaW4gPDxjb21tdW5pdHktZG9jcz4+LgotCi1pbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vcmVzdC9zZXJ2ZXIvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vcmVzdC9zZXJ2ZXIvcGFja2FnZS5odG1sCmluZGV4IGE3MDVlOTEuLjEwODYyYzQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nLXJlc3Qvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3Jlc3Qvc2VydmVyL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1yZXN0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9yZXN0L3NlcnZlci9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJlc3RsZXQgUmVzb3VyY2UgZXhwb3NpbmcgRXZlbnRTb3VyY2luZyBFdmVudHMgYXMgQXRvbS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvYnVpbGQuZ3JhZGxlCmluZGV4IDQ3ZTVmNzQuLjA1ZWQ1NDQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9idWlsZC5ncmFkbGUKQEAgLTEsOSArMSwyOSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBFdmVudCBTb3VyY2luZyBMaWJyYXJ5LiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBFdmVudCBTb3VyY2luZyIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIEV2ZW50IFNvdXJjaW5nIExpYnJhcnkuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIEV2ZW50IFNvdXJjaW5nIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCisgIGNvbXBpbGUgbGlicmFyaWVzLnNsZjRqX2FwaQogCiAgIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiKSkKIApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9kZXYtc3RhdHVzLnhtbAppbmRleCBmODgxMWQxLi41YWRlYmQ3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKQEAgLTgsNyArMjQsNyBAQAogICAgIDxjb2RlYmFzZT5iZXRhPC9jb2RlYmFzZT4KIAogICAgIDwhLS0gbm9uZSwgYnJpZWYsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDxkb2N1bWVudGF0aW9uPm5vbmU8L2RvY3VtZW50YXRpb24+CisgICAgPGRvY3VtZW50YXRpb24+YnJpZWY8L2RvY3VtZW50YXRpb24+CiAKICAgICA8IS0tIG5vbmUsIHNvbWUsIGdvb2QsIGNvbXBsZXRlIC0tPgogICAgIDx1bml0dGVzdHM+c29tZTwvdW5pdHRlc3RzPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL2RvY3MvZXZlbnRzb3VyY2luZy50eHQgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvZG9jcy9ldmVudHNvdXJjaW5nLnR4dAppbmRleCAwZGE3NDA0Li42OTM2ZWE1IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvZG9jcy9ldmVudHNvdXJjaW5nLnR4dAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvZG9jcy9ldmVudHNvdXJjaW5nLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LWV2ZW50c291cmNpbmcsIEV2ZW50IFNvdXJjaW5nIExpYnJhcnldXQogPSBFdmVudCBTb3VyY2luZyA9CiAKQEAgLTYsOCArMjUsMTExIEBACiBzb3VyY2U9bGlicmFyaWVzL2V2ZW50c291cmNpbmcvZGV2LXN0YXR1cy54bWwKIC0tLS0tLS0tLS0tLS0tCiAKLUV2ZW50IFNvdXJjaW5nIExpYnJhcnkKK1RoZSBFdmVudCBTb3VyY2luZyBMaWJyYXJ5IHN1cHBvcnRzIGdlbmVyYXRpbmcsIHN0b3JpbmcgYW5kIHJlcGxheWluZyB0d28gdHlwZXMgb2YgZXZlbnRzOiBhcHBsaWNhdGlvbi1ldmVudHMgYW5kIGRvbWFpbi1ldmVudHMuCiAKLU5PVEU6IFRoaXMgTGlicmFyeSBoYXMgbm8gZG9jdW1lbnRhdGlvbiB5ZXQuIExlYXJuIGhvdyB0byBjb250cmlidXRlIGluIDw8Y29tbXVuaXR5LWRvY3M+Pi4KK0FwcGxpY2F0aW9uIGV2ZW50cyBhcmUgYm91bmQgdG8gVXNlY2FzZSBhbmQgYXJlIHByb2R1Y2VkIGJ5IGV4ZWN1dGlvbiBvZiBzcGVjaWZpYyBtZXRob2RzIChvbmVzIHdpdGggYEFwcGxpY2F0aW9uRXZlbnRgIGFzIHRoZWlyIGZpcnN0IHBhcmFtZXRlcikuCitFYWNoIGFwcGxpY2F0aW9uIGV2ZW50IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IFVzZWNhc2UsIG1ldGhvZCBuYW1lIGFuZCBKU09OIHNlcmlhbGl6ZWQgdmFsdWVzIG9mIG1ldGhvZCBwYXJhbWV0ZXJzLgorCitEb21haW4gZXZlbnRzIGFyZSBib3VuZCB0byBlbnRpdHkgaW5zdGFuY2VzIGFuZCBhcmUgcHJvZHVjZWQgYnkgZXhlY3V0aW9uIG9mIGFubm90YXRlZCAoc2VlIGBARG9tYWluRXZlbnRgKSBtZXRob2RzIHRoYXQgYmVsb25ncyB0byBgRW50aXR5Q29tcG9zaXRlYC4KK0VhY2ggZG9tYWluIGV2ZW50IChzZWUgYERvbWFpbkV2ZW50VmFsdWVgKSBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBlbnRpdHkgdHlwZSwgaWRlbnRpdHksIG1ldGhvZCBuYW1lIGFuZCBKU09OIHNlcmlhbGl6ZWQgdmFsdWVzIG9mIG1ldGhvZCBwYXJhbWV0ZXJzLgorCitCb3RoIGFwcGxpY2F0aW9uIGFuZCBkb21haW4gZXZlbnRzIGFyZSBjYXB0dXJlZCBkdXJpbmcgYFVuaXRPZldvcmtgIGxpZmV0aW1lIGFuZCBhcmUgc3RvcmVkIGluIGBFdmVudFN0b3JlYCBhZnRlciBzdWNjZXNzZnVsbHkgY29tcGxldGVkIGBVbml0T2ZXb3JrYCBhcyBjb2xsZWN0aW9uIHRvZ2V0aGVyIChzZWUgYFVuaXRPZldvcmtEb21haW5FdmVudHNWYWx1ZWAgYW5kIGBUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzYCkuCisKK1RoZXJlIGlzIHN1cHBvcnQgZm9yIHJlcGxheWluZyBldmVudHMuCitXaGVuIGV2ZW50cyBhcmUgcmVwbGF5ZWQgdGhlIHNhbWUgY29kZSBpcyBleGVjdXRlZCBidXQgbm8gbmV3IGV2ZW50cyBhcmUgZ2VuZXJhdGVkLgorCitUaGVyZSBhcmUgaGVscGVyIGNsYXNzZXMgdGhhdCBlbmFibGVzIGEgc2VydmljZSB0byBlYXNpbHkgdHJhY2sgZXZlbnRzIGZlZWQsIGFuZCBmb3IgZG9tYWluIGV2ZW50cyB0aGVyZSBpcyBgRXZlbnRSb3V0ZXJgIHRoYXQgYWxsb3cgdG8gc3BlY2lmeSBzcGVjaWZpY2F0aW9uLT5yZWNlaXZlciByb3V0ZXMuCiAKIGluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCisKKypKREJNIGJhY2tlZCBzdG9yZSoKKworRXZlbnRTdG9yZSBzdXBwb3J0cyBpbmRleGVkIGFuZCBzdHJlYW1lZCBhY2Nlc3MgdG8gZXZlbnRzIGZlZWQuCitUaGVyZSBpcyBpbi1tZW1vcnkgYW5kIEpEQk0gYmFja2VkIGltcGxlbWVudGF0aW9ucy4KKworW2RldnN0YXR1c10KKy0tLS0tLS0tLS0tLS0tCitzb3VyY2U9bGlicmFyaWVzL2V2ZW50c291cmNpbmctamRibS9kZXYtc3RhdHVzLnhtbAorLS0tLS0tLS0tLS0tLS0KKworaW5jbHVkZTo6Li4vLi4vLi4vZXZlbnRzb3VyY2luZy1qZGJtL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCisKKypSRVNUIGFjY2VzcyoKKworRm9yIHJlbW90ZSBhY2Nlc3MgdG8gZmVlZCB0aGVyZSBpcyBgZXZlbnRzb3VyY2luZy1yZXN0YCBsaWJyYXJ5IHRoYXQgZXhwb3NlcyBldmVudHMgYXMgQXRvbSBmZWVkcy4KKworW2RldnN0YXR1c10KKy0tLS0tLS0tLS0tLS0tCitzb3VyY2U9bGlicmFyaWVzL2V2ZW50c291cmNpbmctcmVzdC9kZXYtc3RhdHVzLnhtbAorLS0tLS0tLS0tLS0tLS0KKworaW5jbHVkZTo6Li4vLi4vLi4vZXZlbnRzb3VyY2luZy1yZXN0L2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCisKKworPT0gQXBwbGljYXRpb24gRXZlbnRzID09CisKK0Fzc2VtYmx5IGlzIGRvbmUgYXMgZm9sbG93czoKKworW3NuaXBwZXQsamF2YV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9BcHBsaWNhdGlvbkV2ZW50VGVzdC5qYXZhCit0YWc9YXNzZW1ibHlBRQorLS0tLQorCitDb25maWd1cmUgYXBwbGljYXRpb24gZXZlbnRzIHN0b3JlOgorW3NuaXBwZXQsamF2YV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9BcHBsaWNhdGlvbkV2ZW50VGVzdC5qYXZhCit0YWc9c3RvcmVBRQorLS0tLQorCitBY3R1YWwgbWV0aG9kIG9uIGNvbXBvc2l0ZSB3aGljaCBleGVjdXRpb24gZW1pdHMgYXBwbGljYXRpb24gZXZlbnQuCitGaXJzdCBwYXJhbWV0ZXIgaXMgYG51bGxgIG9uICJub3JtYWwiIGV4ZWN1dGlvbi4KK0lmIGl0IGlzIG5vdCBgbnVsbGAsIHRoZW4gdGhlIG1ldGhvZCBjYWxsIGlzIGEgcmVwbGF5IG9mIHByZXZpb3VzbHkgY3JlYXRlZCBldmVudHMuCitbc25pcHBldCxqYXZhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL0FwcGxpY2F0aW9uRXZlbnRUZXN0LmphdmEKK3RhZz1tZXRob2RBRQorLS0tLQorCitUbyBlbmFibGUgZXhlY3V0aW9uIGNhcHR1cmluZywgeW91IGhhdmUgdG8gY29uZmlndXJlIGNvbXBvc2l0ZSB3aXRoIGNvbmNlcm46Citbc25pcHBldCxqYXZhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL0FwcGxpY2F0aW9uRXZlbnRUZXN0LmphdmEKK3RhZz1jb25jZXJuQUUKKy0tLS0KKworPT0gRG9tYWluIEV2ZW50cyA9PQorCitBc3NlbWJseToKKworW3NuaXBwZXQsamF2YV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vRG9tYWluRXZlbnRUZXN0LmphdmEKK3RhZz1hc3NlbWJseURFCistLS0tCisKK0NvbmZpZ3VyZSBkb21haW4gZXZlbnRzIHN0b3JlOgorCitbc25pcHBldCxqYXZhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9Eb21haW5FdmVudFRlc3QuamF2YQordGFnPXN0b3JlREUKKy0tLS0KKworQW5ub3RhdGUgeW91ciBlbnRpdHkgc3RhdGUgY2hhbmdpbmcgbWV0aG9kcy4KK0V2ZW50IG1ldGhvZHMgbWF5IG9ubHkgY2hhbmdlIHN0YXRlLgorVGhleSBtYXkgbm90IGZhaWwgb3IgdGhyb3duIGV4Y2VwdGlvbnM6Citbc25pcHBldCxqYXZhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9Eb21haW5FdmVudFRlc3QuamF2YQordGFnPW1ldGhvZERFCistLS0tCisKK1RvIGVuYWJsZSBtZXRob2QgZXhlY3V0aW9uIGNhcHR1cmluZywgeW91IGhhdmUgdG8gY29uZmlndXJlIGVudGl0eSB3aXRoIGNvbmNlcm46CisKK1tzbmlwcGV0LGphdmFdCistLS0tCitzb3VyY2U9bGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL0RvbWFpbkV2ZW50VGVzdC5qYXZhCit0YWc9Y29uY2VybkRFCistLS0tCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9hcGkvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvYXBwbGljYXRpb24vYXBpL3BhY2thZ2UuaHRtbAppbmRleCAxYWRkMTk4Li5kNzU5ZDM0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9hcGkvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL2FwaS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkV2ZW50U291cmNpbmcgQXBwbGljYXRpb24gQVBJLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9mYWN0b3J5L0FwcGxpY2F0aW9uRXZlbnRGYWN0b3J5U2VydmljZS5qYXZhIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvYXBwbGljYXRpb24vZmFjdG9yeS9BcHBsaWNhdGlvbkV2ZW50RmFjdG9yeVNlcnZpY2UuamF2YQppbmRleCA2NzVmNmJhLi5lNWM0ZTRmIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9mYWN0b3J5L0FwcGxpY2F0aW9uRXZlbnRGYWN0b3J5U2VydmljZS5qYXZhCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL2ZhY3RvcnkvQXBwbGljYXRpb25FdmVudEZhY3RvcnlTZXJ2aWNlLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmV2ZW50c291cmNpbmcuYXBwbGljYXRpb24uZmFjdG9yeTsKIAotaW1wb3J0IGphdmEudXRpbC5EYXRlOwogaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247CiBpbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsKIGltcG9ydCBvcmcuanNvbi5KU09OU3RyaW5nZXI7CkBAIC0zMywxMyArMzIsMTQgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVCdWlsZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZUJ1aWxkZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5hcHBsaWNhdGlvbi5hcGkuQXBwbGljYXRpb25FdmVudDsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmV2ZW50c291cmNpbmcuZG9tYWluLmZhY3RvcnkuVW5pdE9mV29ya05vdGlmaWNhdGlvbkNvbmNlcm47CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5ldmVudHNvdXJjaW5nLmRvbWFpbi5zcGkuQ3VycmVudFVzZXI7CiAKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKwogLyoqCiAgKiBEb21haW5FdmVudFZhbHVlIGZhY3RvcnkKICAqLwotQENvbmNlcm5zKFVuaXRPZldvcmtOb3RpZmljYXRpb25Db25jZXJuLmNsYXNzKQorQENvbmNlcm5zKFRyYW5zYWN0aW9uTm90aWZpY2F0aW9uQ29uY2Vybi5jbGFzcykKIEBNaXhpbnMoQXBwbGljYXRpb25FdmVudEZhY3RvcnlTZXJ2aWNlLk1peGluLmNsYXNzKQogcHVibGljIGludGVyZmFjZSBBcHBsaWNhdGlvbkV2ZW50RmFjdG9yeVNlcnZpY2UKICAgICAgICAgZXh0ZW5kcyBBcHBsaWNhdGlvbkV2ZW50RmFjdG9yeSwgU2VydmljZUNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvYXBwbGljYXRpb24vZmFjdG9yeS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9mYWN0b3J5L3BhY2thZ2UuaHRtbAppbmRleCBiOWE2NzQ0Li42MzUzZGRiIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9mYWN0b3J5L3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9mYWN0b3J5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RXZlbnRTb3VyY2luZyBBcHBsaWNhdGlvbiBGYWN0b3J5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9yZXBsYXkvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvYXBwbGljYXRpb24vcmVwbGF5L3BhY2thZ2UuaHRtbAppbmRleCA1YjAyNzc2Li4xMjZlMDgzIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9yZXBsYXkvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL3JlcGxheS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkV2ZW50U291cmNpbmcgQXBwbGljYXRpb24gUmVwbGF5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9zb3VyY2UvaGVscGVyL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL3NvdXJjZS9oZWxwZXIvcGFja2FnZS5odG1sCmluZGV4IDhiZjE1YWU5Li4zMmYxMDkyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9zb3VyY2UvaGVscGVyL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9zb3VyY2UvaGVscGVyL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RXZlbnRTb3VyY2luZyBBcHBsaWNhdGlvbiBTb3VyY2UgSGVscGVycy48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvYXBwbGljYXRpb24vc291cmNlL21lbW9yeS9NZW1vcnlBcHBsaWNhdGlvbkV2ZW50U3RvcmVTZXJ2aWNlLmphdmEgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9zb3VyY2UvbWVtb3J5L01lbW9yeUFwcGxpY2F0aW9uRXZlbnRTdG9yZVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmEyYmNlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvYXBwbGljYXRpb24vc291cmNlL21lbW9yeS9NZW1vcnlBcHBsaWNhdGlvbkV2ZW50U3RvcmVTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5hcHBsaWNhdGlvbi5zb3VyY2UubWVtb3J5OworCitpbXBvcnQgb3JnLnFpNGouYXBpLmFjdGl2YXRpb24uQWN0aXZhdG9yczsKK2ltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOworaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VDb21wb3NpdGU7CitpbXBvcnQgb3JnLnFpNGouaW8uSW5wdXQ7CitpbXBvcnQgb3JnLnFpNGouaW8uT3V0cHV0OworaW1wb3J0IG9yZy5xaTRqLmlvLlJlY2VpdmVyOworaW1wb3J0IG9yZy5xaTRqLmlvLlNlbmRlcjsKK2ltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmV2ZW50c291cmNpbmcuYXBwbGljYXRpb24uYXBpLlRyYW5zYWN0aW9uQXBwbGljYXRpb25FdmVudHM7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5ldmVudHNvdXJjaW5nLmFwcGxpY2F0aW9uLnNvdXJjZS4qOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5kb21haW4uYXBpLlVuaXRPZldvcmtEb21haW5FdmVudHNWYWx1ZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorICogSW4tTWVtb3J5IEFwcGxpY2F0aW9uRXZlbnRTdG9yZS4gTWFpbmx5IHVzZWQgZm9yIHRlc3RpbmcuCisgKi8KK0BNaXhpbnMoIE1lbW9yeUFwcGxpY2F0aW9uRXZlbnRTdG9yZVNlcnZpY2UuTWVtb3J5U3RvcmVNaXhpbi5jbGFzcyApCitAQWN0aXZhdG9ycyggQXBwbGljYXRpb25FdmVudFN0b3JlQWN0aXZhdGlvbi5BY3RpdmF0b3IuY2xhc3MgKQorcHVibGljIGludGVyZmFjZSBNZW1vcnlBcHBsaWNhdGlvbkV2ZW50U3RvcmVTZXJ2aWNlCisgICAgZXh0ZW5kcyBBcHBsaWNhdGlvbkV2ZW50U291cmNlLCBBcHBsaWNhdGlvbkV2ZW50U3RvcmUsIEFwcGxpY2F0aW9uRXZlbnRTdHJlYW0sIEFwcGxpY2F0aW9uRXZlbnRTdG9yZUFjdGl2YXRpb24sIFNlcnZpY2VDb21wb3NpdGUKK3sKKyAgICBhYnN0cmFjdCBjbGFzcyBNZW1vcnlTdG9yZU1peGluCisgICAgICAgIGV4dGVuZHMgQWJzdHJhY3RBcHBsaWNhdGlvbkV2ZW50U3RvcmVNaXhpbgorICAgICAgICBpbXBsZW1lbnRzIEFwcGxpY2F0aW9uRXZlbnRTb3VyY2UsIEFwcGxpY2F0aW9uRXZlbnRTdG9yZUFjdGl2YXRpb24KKyAgICB7CisgICAgICAgIC8vIFRoaXMgbGlzdCBob2xkcyBhbGwgdHJhbnNhY3Rpb25zCisgICAgICAgIHByaXZhdGUgTGlua2VkTGlzdDxUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzPiBzdG9yZSA9IG5ldyBMaW5rZWRMaXN0PFRyYW5zYWN0aW9uQXBwbGljYXRpb25FdmVudHM+KCk7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJbnB1dDxUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzLCBJT0V4Y2VwdGlvbj4gdHJhbnNhY3Rpb25zQWZ0ZXIoIGZpbmFsIGxvbmcgYWZ0ZXJUaW1lc3RhbXAsIGZpbmFsIGxvbmcgbWF4VHJhbnNhY3Rpb25zICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnB1dDxUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzLCBJT0V4Y2VwdGlvbj4oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyA8UmVjZWl2ZXJUaHJvd2FibGVUeXBlIGV4dGVuZHMgVGhyb3dhYmxlPiB2b2lkIHRyYW5zZmVyVG8oIE91dHB1dDw/IHN1cGVyIFRyYW5zYWN0aW9uQXBwbGljYXRpb25FdmVudHMsIFJlY2VpdmVyVGhyb3dhYmxlVHlwZT4gb3V0cHV0ICkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBSZWNlaXZlclRocm93YWJsZVR5cGUKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIExvY2sgc3RvcmUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgbG9jay5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQucmVjZWl2ZUZyb20oIG5ldyBTZW5kZXI8VHJhbnNhY3Rpb25BcHBsaWNhdGlvbkV2ZW50cywgSU9FeGNlcHRpb24+KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgPFJlY2VpdmVyVGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBzZW5kVG8oIFJlY2VpdmVyPD8gc3VwZXIgVHJhbnNhY3Rpb25BcHBsaWNhdGlvbkV2ZW50cywgUmVjZWl2ZXJUaHJvd2FibGVUeXBlPiByZWNlaXZlciApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZWNlaXZlclRocm93YWJsZVR5cGUsIElPRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcjxUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzPiBpdGVyYXRvciA9IHN0b3JlLml0ZXJhdG9yKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIGl0ZXJhdG9yLmhhc05leHQoKSAmJiBjb3VudCA8IG1heFRyYW5zYWN0aW9ucyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uQXBwbGljYXRpb25FdmVudHMgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBuZXh0LnRpbWVzdGFtcCgpLmdldCgpID4gYWZ0ZXJUaW1lc3RhbXAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLnJlY2VpdmUoIG5leHQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmluYWxseQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgSW5wdXQ8VHJhbnNhY3Rpb25BcHBsaWNhdGlvbkV2ZW50cywgSU9FeGNlcHRpb24+IHRyYW5zYWN0aW9uc0JlZm9yZSggZmluYWwgbG9uZyBiZWZvcmVUaW1lc3RhbXAsIGZpbmFsIGxvbmcgbWF4VHJhbnNhY3Rpb25zICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnB1dDxUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzLCBJT0V4Y2VwdGlvbj4oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyA8UmVjZWl2ZXJUaHJvd2FibGVUeXBlIGV4dGVuZHMgVGhyb3dhYmxlPiB2b2lkIHRyYW5zZmVyVG8oIE91dHB1dDw/IHN1cGVyIFRyYW5zYWN0aW9uQXBwbGljYXRpb25FdmVudHMsIFJlY2VpdmVyVGhyb3dhYmxlVHlwZT4gb3V0cHV0ICkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBSZWNlaXZlclRocm93YWJsZVR5cGUKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIExvY2sgc3RvcmUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgbG9jay5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQucmVjZWl2ZUZyb20oIG5ldyBTZW5kZXI8VHJhbnNhY3Rpb25BcHBsaWNhdGlvbkV2ZW50cywgSU9FeGNlcHRpb24+KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgPFJlY2VpdmVyVGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBzZW5kVG8oIFJlY2VpdmVyPD8gc3VwZXIgVHJhbnNhY3Rpb25BcHBsaWNhdGlvbkV2ZW50cywgUmVjZWl2ZXJUaHJvd2FibGVUeXBlPiByZWNlaXZlciApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZWNlaXZlclRocm93YWJsZVR5cGUsIElPRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcjxUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzPiBpdGVyYXRvciA9IHN0b3JlLmRlc2NlbmRpbmdJdGVyYXRvcigpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY291bnQgPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCBpdGVyYXRvci5oYXNOZXh0KCkgJiYgY291bnQgPCBtYXhUcmFuc2FjdGlvbnMgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggbmV4dC50aW1lc3RhbXAoKS5nZXQoKSA8IGJlZm9yZVRpbWVzdGFtcCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIucmVjZWl2ZSggbmV4dCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHN0b3JlRXZlbnRzKCBUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzIHRyYW5zYWN0aW9uRG9tYWluICkgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0b3JlLmFkZCggdHJhbnNhY3Rpb25Eb21haW4gKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL3NvdXJjZS9tZW1vcnkvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvYXBwbGljYXRpb24vc291cmNlL21lbW9yeS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyYmU5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL3NvdXJjZS9tZW1vcnkvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGh0bWw+CisgICAgPGJvZHk+CisgICAgICAgIDxoMj5FdmVudFNvdXJjaW5nIGluLW1lbW9yeSBFdmVudFN0b3JlLjwvaDI+CisgICAgPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL3NvdXJjZS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9zb3VyY2UvcGFja2FnZS5odG1sCmluZGV4IDU4MjFhZDAuLjUzM2ZhMGQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL3NvdXJjZS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvYXBwbGljYXRpb24vc291cmNlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RXZlbnRTb3VyY2luZyBBcHBsaWNhdGlvbiBTb3VyY2UuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2Jvb3RzdHJhcC9FdmVudHNvdXJjaW5nQXNzZW1ibGVyLmphdmEgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9ib290c3RyYXAvRXZlbnRzb3VyY2luZ0Fzc2VtYmxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOGQ2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9ib290c3RyYXAvRXZlbnRzb3VyY2luZ0Fzc2VtYmxlci5qYXZhCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5ib290c3RyYXA7CisKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibGVyczsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkltcG9ydGVkU2VydmljZURlY2xhcmF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmV2ZW50c291cmNpbmcuYXBwbGljYXRpb24uYXBpLkFwcGxpY2F0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5ldmVudHNvdXJjaW5nLmFwcGxpY2F0aW9uLmFwaS5UcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5hcHBsaWNhdGlvbi5mYWN0b3J5LkFwcGxpY2F0aW9uRXZlbnRGYWN0b3J5U2VydmljZTsKK2ltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmV2ZW50c291cmNpbmcuZG9tYWluLmFwaS5Eb21haW5FdmVudFZhbHVlOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5kb21haW4uYXBpLlVuaXRPZldvcmtEb21haW5FdmVudHNWYWx1ZTsKK2ltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmV2ZW50c291cmNpbmcuZG9tYWluLmZhY3RvcnkuQ3VycmVudFVzZXJVb1dQcmluY2lwYWw7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5ldmVudHNvdXJjaW5nLmRvbWFpbi5mYWN0b3J5LkRvbWFpbkV2ZW50RmFjdG9yeVNlcnZpY2U7CisKK3B1YmxpYyBjbGFzcyBFdmVudHNvdXJjaW5nQXNzZW1ibGVyCisgICAgZXh0ZW5kcyBBc3NlbWJsZXJzLlZpc2liaWxpdHk8RXZlbnRzb3VyY2luZ0Fzc2VtYmxlcj4KK3sKKyAgICBwcml2YXRlIGJvb2xlYW4gZG9tYWluRXZlbnRzOworICAgIHByaXZhdGUgYm9vbGVhbiBhcHBsaWNhdGlvbkV2ZW50czsKKworICAgIHByaXZhdGUgYm9vbGVhbiB1b3dQcmluY2lwYWw7CisKKyAgICBwdWJsaWMgRXZlbnRzb3VyY2luZ0Fzc2VtYmxlciB3aXRoRG9tYWluRXZlbnRzKCkKKyAgICB7CisgICAgICAgIGRvbWFpbkV2ZW50cyA9IHRydWU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyBFdmVudHNvdXJjaW5nQXNzZW1ibGVyIHdpdGhBcHBsaWNhdGlvbkV2ZW50cygpCisgICAgeworICAgICAgICBhcHBsaWNhdGlvbkV2ZW50cyA9IHRydWU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyBFdmVudHNvdXJjaW5nQXNzZW1ibGVyIHdpdGhDdXJyZW50VXNlckZyb21VT1dQcmluY2lwYWwoKQorICAgIHsKKyAgICAgICAgdW93UHJpbmNpcGFsID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoTW9kdWxlQXNzZW1ibHkgbW9kdWxlKSB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGlmKCBkb21haW5FdmVudHMgKQorICAgICAgICB7CisgICAgICAgICAgICBtb2R1bGUudmFsdWVzKCBEb21haW5FdmVudFZhbHVlLmNsYXNzLCBVbml0T2ZXb3JrRG9tYWluRXZlbnRzVmFsdWUuY2xhc3MgKTsKKyAgICAgICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggRG9tYWluRXZlbnRGYWN0b3J5U2VydmljZS5jbGFzcykudmlzaWJsZUluKHZpc2liaWxpdHkoKSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIGFwcGxpY2F0aW9uRXZlbnRzICkKKyAgICAgICAgeworICAgICAgICAgICAgbW9kdWxlLnZhbHVlcyggQXBwbGljYXRpb25FdmVudC5jbGFzcywgVHJhbnNhY3Rpb25BcHBsaWNhdGlvbkV2ZW50cy5jbGFzcyApOworICAgICAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBBcHBsaWNhdGlvbkV2ZW50RmFjdG9yeVNlcnZpY2UuY2xhc3MgKS52aXNpYmxlSW4oIHZpc2liaWxpdHkoKSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHVvd1ByaW5jaXBhbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1vZHVsZS5pbXBvcnRlZFNlcnZpY2VzKCBDdXJyZW50VXNlclVvV1ByaW5jaXBhbC5jbGFzcyApCisgICAgICAgICAgICAgICAgLmltcG9ydGVkQnkoIEltcG9ydGVkU2VydmljZURlY2xhcmF0aW9uLk5FV19PQkpFQ1QgKTsKKyAgICAgICAgICAgIG1vZHVsZS5vYmplY3RzKCBDdXJyZW50VXNlclVvV1ByaW5jaXBhbC5jbGFzcyApOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvYm9vdHN0cmFwL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2Jvb3RzdHJhcC9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5Mzc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2Jvb3RzdHJhcC9wYWNrYWdlLmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8aHRtbD4KKyAgICA8Ym9keT4KKyAgICAgICAgPGgyPkV2ZW50U291cmNpbmcgQXNzZW1ibHkuPC9oMj4KKyAgICA8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL2FwaS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vYXBpL3BhY2thZ2UuaHRtbAppbmRleCBmYWRlMDJhLi5lMjc4NjRjIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vYXBpL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vYXBpL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RXZlbnRTb3VyY2luZyBEb21haW4gQVBJLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vZmFjdG9yeS9Eb21haW5FdmVudEZhY3RvcnlTZXJ2aWNlLmphdmEgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vZmFjdG9yeS9Eb21haW5FdmVudEZhY3RvcnlTZXJ2aWNlLmphdmEKaW5kZXggOTE5NGJhMS4uMDBkYWZiOCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL2ZhY3RvcnkvRG9tYWluRXZlbnRGYWN0b3J5U2VydmljZS5qYXZhCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9mYWN0b3J5L0RvbWFpbkV2ZW50RmFjdG9yeVNlcnZpY2UuamF2YQpAQCAtNTQsNyArNTQsNyBAQAogCiAgICAgICAgICAgICBEb21haW5FdmVudFZhbHVlIHByb3RvdHlwZSA9IGJ1aWxkZXIucHJvdG90eXBlKCk7CiAgICAgICAgICAgICBwcm90b3R5cGUubmFtZSgpLnNldCggbmFtZSApOwotICAgICAgICAgICAgcHJvdG90eXBlLmVudGl0eVR5cGUoKS5zZXQoIGZpcnN0KFFpNGouRlVOQ1RJT05fREVTQ1JJUFRPUl9GT1IubWFwKCBlbnRpdHkgKS50eXBlcygpKS5nZXROYW1lKCkgKTsKKyAgICAgICAgICAgIHByb3RvdHlwZS5lbnRpdHlUeXBlKCkuc2V0KCBmaXJzdCggUWk0ai5GVU5DVElPTl9ERVNDUklQVE9SX0ZPUi5tYXAoIGVudGl0eSApLnR5cGVzKCkpLmdldE5hbWUoKSApOwogICAgICAgICAgICAgcHJvdG90eXBlLmVudGl0eUlkKCkuc2V0KCBlbnRpdHkuaWRlbnRpdHkoKS5nZXQoKSApOwogCiAgICAgICAgICAgICAvLyBKU09OLWlmeSBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vZmFjdG9yeS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vZmFjdG9yeS9wYWNrYWdlLmh0bWwKaW5kZXggY2I2ODE0MC4uZWMyNmZiMSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL2ZhY3RvcnkvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9mYWN0b3J5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RXZlbnRTb3VyY2luZyBEb21haW4gRmFjdG9yeS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3JlcGxheS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vcmVwbGF5L3BhY2thZ2UuaHRtbAppbmRleCBjMmI1YjdiLi5mMGRmNzE2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vcmVwbGF5L3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vcmVwbGF5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RXZlbnRTb3VyY2luZyBEb21haW4gUmVwbGF5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL2hlbHBlci9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL2hlbHBlci9wYWNrYWdlLmh0bWwKaW5kZXggZjEzMDg4NC4uOGJmMmY2MyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3NvdXJjZS9oZWxwZXIvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9zb3VyY2UvaGVscGVyL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RXZlbnRTb3VyY2luZyBEb21haW4gU291cmNlIEhlbHBlcnMuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9zb3VyY2UvbWVtb3J5L3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9zb3VyY2UvbWVtb3J5L3BhY2thZ2UuaHRtbAppbmRleCBhMTE4ZjJkLi4yZmMyN2YyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL21lbW9yeS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3NvdXJjZS9tZW1vcnkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5Jbi1NZW1vcnkgRXZlbnRTdG9yZS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3NvdXJjZS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL3BhY2thZ2UuaHRtbAppbmRleCA3NGZkMjllLi5jOTc1NGJiIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RXZlbnRTb3VyY2luZyBEb21haW4gU291cmNlLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc3BpL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9zcGkvcGFja2FnZS5odG1sCmluZGV4IDM5MTk1NGMuLjFhZDUyYjIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9zcGkvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9zcGkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5FdmVudFNvdXJjaW5nIERvbWFpbiBTUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2FwcGxpY2F0aW9uL0FwcGxpY2F0aW9uRXZlbnRUZXN0LmphdmEgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9BcHBsaWNhdGlvbkV2ZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjY2YwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9hcHBsaWNhdGlvbi9BcHBsaWNhdGlvbkV2ZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmV2ZW50c291cmNpbmcuYXBwbGljYXRpb247CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLk9wdGlvbmFsOworaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVXNlRGVmYXVsdHM7CitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5UcmFuc2llbnRDb21wb3NpdGU7CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlCdWlsZGVyOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU2VydmljZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOworaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKK2ltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrOworaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtGYWN0b3J5OworaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2VCdWlsZGVyOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouaW8uT3V0cHV0OworaW1wb3J0IG9yZy5xaTRqLmlvLlJlY2VpdmVyOworaW1wb3J0IG9yZy5xaTRqLmlvLlNlbmRlcjsKK2ltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmV2ZW50c291cmNpbmcuYXBwbGljYXRpb24uYXBpLkFwcGxpY2F0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5ldmVudHNvdXJjaW5nLmFwcGxpY2F0aW9uLmFwaS5UcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5hcHBsaWNhdGlvbi5mYWN0b3J5LkFwcGxpY2F0aW9uRXZlbnRDcmVhdGlvbkNvbmNlcm47CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5ldmVudHNvdXJjaW5nLmFwcGxpY2F0aW9uLnNvdXJjZS5BcHBsaWNhdGlvbkV2ZW50U291cmNlOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5hcHBsaWNhdGlvbi5zb3VyY2UuaGVscGVyLkFwcGxpY2F0aW9uRXZlbnRQYXJhbWV0ZXJzOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5hcHBsaWNhdGlvbi5zb3VyY2UubWVtb3J5Lk1lbW9yeUFwcGxpY2F0aW9uRXZlbnRTdG9yZVNlcnZpY2U7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5ldmVudHNvdXJjaW5nLmJvb3RzdHJhcC5FdmVudHNvdXJjaW5nQXNzZW1ibGVyOworaW1wb3J0IG9yZy5xaTRqLnRlc3QuQWJzdHJhY3RRaTRqVGVzdDsKK2ltcG9ydCBvcmcucWk0ai50ZXN0LkVudGl0eVRlc3RBc3NlbWJsZXI7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc2VjdXJpdHkuUHJpbmNpcGFsOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCisvKioKKyAqIFVzZXIgc2lnbnVwIHVzZWNhc2Ugd2l0aCBvcHRpb25hbCBtYWlsaW5nIGxpc3Qgc3Vic2NyaXB0aW9uLgorICogU3Vic2NyaXB0aW9uIGlzIG5vdCBzdG9yZWQgaW4gZG9tYWluIG1vZGVsIGJ1dCBpcyBhdmFpbGFibGUgdmlhIGFwcGxpY2F0aW9uIGV2ZW50cyBmZWVkLgorICovCitwdWJsaWMgY2xhc3MgQXBwbGljYXRpb25FdmVudFRlc3QKKyAgICBleHRlbmRzIEFic3RyYWN0UWk0alRlc3QKK3sKKyAgICBAU2VydmljZQorICAgIEFwcGxpY2F0aW9uRXZlbnRTb3VyY2UgZXZlbnRTb3VyY2U7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICAvLyBTVEFSVCBTTklQUEVUOiBhc3NlbWJseUFFCisgICAgICAgIG5ldyBFdmVudHNvdXJjaW5nQXNzZW1ibGVyKCkKKyAgICAgICAgICAgICAgICAud2l0aEFwcGxpY2F0aW9uRXZlbnRzKCkKKyAgICAgICAgICAgICAgICAud2l0aEN1cnJlbnRVc2VyRnJvbVVPV1ByaW5jaXBhbCgpCisgICAgICAgICAgICAgICAgLmFzc2VtYmxlKG1vZHVsZSk7CisgICAgICAgIC8vIEVORCBTTklQUEVUOiBhc3NlbWJseUFFCisKKyAgICAgICAgLy8gU1RBUlQgU05JUFBFVDogc3RvcmVBRQorICAgICAgICBtb2R1bGUuc2VydmljZXMoIE1lbW9yeUFwcGxpY2F0aW9uRXZlbnRTdG9yZVNlcnZpY2UuY2xhc3MgKTsKKyAgICAgICAgLy8gRU5EIFNOSVBQRVQ6IHN0b3JlQUUKKworICAgICAgICBuZXcgRW50aXR5VGVzdEFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKKworICAgICAgICAvLyBTVEFSVCBTTklQUEVUOiBjb25jZXJuQUUKKyAgICAgICAgbW9kdWxlLnRyYW5zaWVudHMoIFVzZXJzLmNsYXNzICkud2l0aENvbmNlcm5zKCBBcHBsaWNhdGlvbkV2ZW50Q3JlYXRpb25Db25jZXJuLmNsYXNzICk7CisgICAgICAgIC8vIEVORCBTTklQUEVUOiBjb25jZXJuQUUKKworICAgICAgICBtb2R1bGUuZW50aXRpZXMoIFVzZXJFbnRpdHkuY2xhc3MgKTsKKworICAgIH0KKworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXBwbGljYXRpb25FdmVudCgpIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIFVzZXJzIHVzZXJzID0gbW9kdWxlLm5ld1RyYW5zaWVudCggVXNlcnMuY2xhc3MgKTsKKworICAgICAgICBQcmluY2lwYWwgYWRtaW5pc3RyYXRvclByaW5jaXBhbCA9IG5ldyBQcmluY2lwYWwoKQorICAgICAgICB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJhZG1pbmlzdHJhdG9yIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBVbml0T2ZXb3JrIHVvdzEgPSBtb2R1bGUubmV3VW5pdE9mV29yayggVXNlY2FzZUJ1aWxkZXIubmV3VXNlY2FzZSggIlVzZXIgc2lnbnVwIiApICk7CisgICAgICAgIHVvdzEuc2V0TWV0YUluZm8oIGFkbWluaXN0cmF0b3JQcmluY2lwYWwgKTsKKyAgICAgICAgdXNlcnMuc2lnbnVwKCBudWxsLCAidXNlcjEiLCBBcnJheXMuYXNMaXN0KCAibmV3cy1hIiwgIm5ld3MtYiIgKSApOworICAgICAgICB1b3cxLmNvbXBsZXRlKCk7CisKKyAgICAgICAgVGhyZWFkLnNsZWVwKCAxICk7IC8vIEZvciBVb1dzIG5vdCBnZXR0aW5nIHRoZSBzYW1lIGBjdXJyZW50VGltZWAKKworICAgICAgICBVbml0T2ZXb3JrIHVvdzIgPSBtb2R1bGUubmV3VW5pdE9mV29yaygpOworICAgICAgICB1b3cyLnNldE1ldGFJbmZvKCBhZG1pbmlzdHJhdG9yUHJpbmNpcGFsICk7CisgICAgICAgIHVzZXJzLnNpZ251cCggbnVsbCwgInVzZXIyIiwgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCApOworICAgICAgICB1b3cyLmNvbXBsZXRlKCk7CisKKyAgICAgICAgVGhyZWFkLnNsZWVwKCAxICk7IC8vIEZvciBVb1dzIG5vdCBnZXR0aW5nIHRoZSBzYW1lIGBjdXJyZW50VGltZWAKKworICAgICAgICBVbml0T2ZXb3JrIHVvdzMgPSBtb2R1bGUubmV3VW5pdE9mV29yaygpOworICAgICAgICB1b3czLnNldE1ldGFJbmZvKCBhZG1pbmlzdHJhdG9yUHJpbmNpcGFsICk7CisgICAgICAgIHVzZXJzLnNpZ251cCggbnVsbCwgInVzZXIzIiwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCggIm5ld3MtYyIgKSApOworICAgICAgICB1b3czLmNvbXBsZXRlKCk7CisKKyAgICAgICAgLy8gcmVjZWl2ZSBldmVudHMgZnJvbSB1b3cyIGFuZCBsYXRlciBmb3J3YXJkcworICAgICAgICBFdmVudHNJbmJveCBhZnRlckluYm94ID0gbmV3IEV2ZW50c0luYm94KCk7CisgICAgICAgIGV2ZW50U291cmNlLnRyYW5zYWN0aW9uc0FmdGVyKCB1b3cyLmN1cnJlbnRUaW1lKCkgLSAxLCBJbnRlZ2VyLk1BWF9WQUxVRSApLnRyYW5zZmVyVG8oIGFmdGVySW5ib3ggKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoIDIsIGFmdGVySW5ib3guZ2V0RXZlbnRzKCkuc2l6ZSgpICk7CisKKyAgICAgICAgQXBwbGljYXRpb25FdmVudCBzaWdudXBFdmVudDIgPSBhZnRlckluYm94LmdldEV2ZW50cygpLmdldCggMCApLmV2ZW50cygpLmdldCgpLmdldCggMCApOworICAgICAgICBBcHBsaWNhdGlvbkV2ZW50IHNpZ251cEV2ZW50MyA9IGFmdGVySW5ib3guZ2V0RXZlbnRzKCkuZ2V0KCAxICkuZXZlbnRzKCkuZ2V0KCkuZ2V0KCAwICk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAic2lnbnVwIiwgc2lnbnVwRXZlbnQyLm5hbWUoKS5nZXQoKSApOworICAgICAgICBhc3NlcnRFcXVhbHMoICJ1c2VyMiIsIEFwcGxpY2F0aW9uRXZlbnRQYXJhbWV0ZXJzLmdldFBhcmFtZXRlciggc2lnbnVwRXZlbnQyLCAicGFyYW0xIiApICk7CisgICAgICAgIGFzc2VydEVxdWFscyggIltdIiwgQXBwbGljYXRpb25FdmVudFBhcmFtZXRlcnMuZ2V0UGFyYW1ldGVyKCBzaWdudXBFdmVudDIsICJwYXJhbTIiICkgKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoICJzaWdudXAiLCBzaWdudXBFdmVudDMubmFtZSgpLmdldCgpICk7CisgICAgICAgIGFzc2VydEVxdWFscyggInVzZXIzIiwgQXBwbGljYXRpb25FdmVudFBhcmFtZXRlcnMuZ2V0UGFyYW1ldGVyKCBzaWdudXBFdmVudDMsICJwYXJhbTEiICkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAiW1wibmV3cy1jXCJdIiwgQXBwbGljYXRpb25FdmVudFBhcmFtZXRlcnMuZ2V0UGFyYW1ldGVyKCBzaWdudXBFdmVudDMsICJwYXJhbTIiICkgKTsKKworICAgICAgICAvLyByZWNlaXZlIGV2ZW50cyBmcm9tIHVvdzIgYmFja3dhcmRzCisgICAgICAgIEV2ZW50c0luYm94IGJlZm9yZUluYm94ID0gbmV3IEV2ZW50c0luYm94KCk7CisgICAgICAgIGV2ZW50U291cmNlLnRyYW5zYWN0aW9uc0JlZm9yZSggdW93My5jdXJyZW50VGltZSgpLCBJbnRlZ2VyLk1BWF9WQUxVRSApLnRyYW5zZmVyVG8oIGJlZm9yZUluYm94ICk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAyLCBiZWZvcmVJbmJveC5nZXRFdmVudHMoKS5zaXplKCkgKTsKKworICAgICAgICBzaWdudXBFdmVudDIgPSBiZWZvcmVJbmJveC5nZXRFdmVudHMoKS5nZXQoIDAgKS5ldmVudHMoKS5nZXQoKS5nZXQoIDAgKTsKKyAgICAgICAgQXBwbGljYXRpb25FdmVudCBzaWdudXBFdmVudDEgPSBiZWZvcmVJbmJveC5nZXRFdmVudHMoKS5nZXQoIDEgKS5ldmVudHMoKS5nZXQoKS5nZXQoIDAgKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoICJzaWdudXAiLCBzaWdudXBFdmVudDIubmFtZSgpLmdldCgpICk7CisgICAgICAgIGFzc2VydEVxdWFscyggInVzZXIyIiwgQXBwbGljYXRpb25FdmVudFBhcmFtZXRlcnMuZ2V0UGFyYW1ldGVyKCBzaWdudXBFdmVudDIsICJwYXJhbTEiICkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAiW10iLCBBcHBsaWNhdGlvbkV2ZW50UGFyYW1ldGVycy5nZXRQYXJhbWV0ZXIoIHNpZ251cEV2ZW50MiwgInBhcmFtMiIgKSApOworCisgICAgICAgIGFzc2VydEVxdWFscyggInNpZ251cCIsIHNpZ251cEV2ZW50MS5uYW1lKCkuZ2V0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoICJ1c2VyMSIsIEFwcGxpY2F0aW9uRXZlbnRQYXJhbWV0ZXJzLmdldFBhcmFtZXRlciggc2lnbnVwRXZlbnQxLCAicGFyYW0xIiApICk7CisgICAgICAgIGFzc2VydEVxdWFscyggIltcIm5ld3MtYVwiLFwibmV3cy1iXCJdIiwgQXBwbGljYXRpb25FdmVudFBhcmFtZXRlcnMuZ2V0UGFyYW1ldGVyKCBzaWdudXBFdmVudDEsICJwYXJhbTIiICkgKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgRXZlbnRzSW5ib3ggaW1wbGVtZW50cyBPdXRwdXQ8VHJhbnNhY3Rpb25BcHBsaWNhdGlvbkV2ZW50cywgUnVudGltZUV4Y2VwdGlvbj4KKyAgICB7CisgICAgICAgIHByaXZhdGUgTGlzdDxUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzPiBldmVudHMgPSBuZXcgTGlua2VkTGlzdDw+KCk7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyA8U2VuZGVyVGhyb3dhYmxlVHlwZSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCByZWNlaXZlRnJvbSggU2VuZGVyPD8gZXh0ZW5kcyBUcmFuc2FjdGlvbkFwcGxpY2F0aW9uRXZlbnRzLCBTZW5kZXJUaHJvd2FibGVUeXBlPiBzZW5kZXIgKQorICAgICAgICAgICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24sIFNlbmRlclRocm93YWJsZVR5cGUKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2VuZGVyLnNlbmRUbyggbmV3IFJlY2VpdmVyPFRyYW5zYWN0aW9uQXBwbGljYXRpb25FdmVudHMsIFRocm93YWJsZT4oKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlY2VpdmUoIFRyYW5zYWN0aW9uQXBwbGljYXRpb25FdmVudHMgaXRlbSApIHRocm93cyBUaHJvd2FibGUKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLmFkZChpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCggVGhyb3dhYmxlIHRocm93YWJsZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhyb3dhYmxlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIExpc3Q8VHJhbnNhY3Rpb25BcHBsaWNhdGlvbkV2ZW50cz4gZ2V0RXZlbnRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGV2ZW50czsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNUQVJUIFNOSVBQRVQ6IG1ldGhvZEFFCisgICAgQE1peGlucyggVXNlcnMuTWl4aW4uY2xhc3MgKQorICAgIHB1YmxpYyBpbnRlcmZhY2UgVXNlcnMgZXh0ZW5kcyBUcmFuc2llbnRDb21wb3NpdGUKKyAgICB7CisgICAgICAgIHZvaWQgc2lnbnVwKCBAT3B0aW9uYWwgQXBwbGljYXRpb25FdmVudCBldnQsIFN0cmluZyB1c2VybmFtZSwgTGlzdDxTdHJpbmc+IG1haWxpbmdsaXN0cyApOworICAgICAgICAvLyBFTkQgU05JUFBFVDogbWV0aG9kQUUKKworICAgICAgICBhYnN0cmFjdCBjbGFzcyBNaXhpbiBpbXBsZW1lbnRzIFVzZXJzCisgICAgICAgIHsKKyAgICAgICAgICAgIEBTdHJ1Y3R1cmUKKyAgICAgICAgICAgIFVuaXRPZldvcmtGYWN0b3J5IHVvd0ZhY3Rvcnk7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgc2lnbnVwKCBBcHBsaWNhdGlvbkV2ZW50IGV2dCwgU3RyaW5nIHVzZXJuYW1lLCBMaXN0PFN0cmluZz4gbWFpbGluZ2xpc3RzICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZXZ0ID09IG51bGwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVbml0T2ZXb3JrIHVvdyA9IHVvd0ZhY3RvcnkuY3VycmVudFVuaXRPZldvcmsoKTsKKworICAgICAgICAgICAgICAgICAgICBFbnRpdHlCdWlsZGVyPFVzZXJFbnRpdHk+IGJ1aWxkZXIgPSB1b3cubmV3RW50aXR5QnVpbGRlciggVXNlckVudGl0eS5jbGFzcyApOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmluc3RhbmNlKCkudXNlcm5hbWUoKS5zZXQoIHVzZXJuYW1lICk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIFVzZXJFbnRpdHkKKyAgICAgICAgICAgIGV4dGVuZHMgRW50aXR5Q29tcG9zaXRlCisgICAgeworICAgICAgICBAVXNlRGVmYXVsdHMKKyAgICAgICAgUHJvcGVydHk8U3RyaW5nPiB1c2VybmFtZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9Eb21haW5FdmVudFRlc3QuamF2YSBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9Eb21haW5FdmVudFRlc3QuamF2YQppbmRleCA3YTg0OTk5Li4wZDMwZDllIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vRG9tYWluRXZlbnRUZXN0LmphdmEKKysrIGIvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL0RvbWFpbkV2ZW50VGVzdC5qYXZhCkBAIC0yOCw2ICsyOCw3IEBACiBpbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5GdW5jdGlvbjsKIGltcG9ydCBvcmcucWk0ai5pby5PdXRwdXRzOwogaW1wb3J0IG9yZy5xaTRqLmlvLlRyYW5zZm9ybXM7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5ldmVudHNvdXJjaW5nLmJvb3RzdHJhcC5FdmVudHNvdXJjaW5nQXNzZW1ibGVyOwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5kb21haW4uYXBpLkRvbWFpbkV2ZW50OwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5kb21haW4uYXBpLkRvbWFpbkV2ZW50VmFsdWU7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5ldmVudHNvdXJjaW5nLmRvbWFpbi5hcGkuVW5pdE9mV29ya0RvbWFpbkV2ZW50c1ZhbHVlOwpAQCAtNTIsMTMgKzUzLDIwIEBACiAgICAgewogICAgICAgICBuZXcgRW50aXR5VGVzdEFzc2VtYmxlciggICkuYXNzZW1ibGUoIG1vZHVsZSApOwogCi0gICAgICAgIG1vZHVsZS52YWx1ZXMoIERvbWFpbkV2ZW50VmFsdWUuY2xhc3MsIFVuaXRPZldvcmtEb21haW5FdmVudHNWYWx1ZS5jbGFzcyApOwotICAgICAgICBtb2R1bGUuc2VydmljZXMoIE1lbW9yeUV2ZW50U3RvcmVTZXJ2aWNlLmNsYXNzICk7Ci0gICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggRG9tYWluRXZlbnRGYWN0b3J5U2VydmljZS5jbGFzcyApOwotICAgICAgICBtb2R1bGUuaW1wb3J0ZWRTZXJ2aWNlcyggQ3VycmVudFVzZXJVb1dQcmluY2lwYWwuY2xhc3MgKS5pbXBvcnRlZEJ5KCBJbXBvcnRlZFNlcnZpY2VEZWNsYXJhdGlvbi5ORVdfT0JKRUNUICk7Ci0gICAgICAgIG1vZHVsZS5vYmplY3RzKCBDdXJyZW50VXNlclVvV1ByaW5jaXBhbC5jbGFzcyApOworICAgICAgICAvLyBTVEFSVCBTTklQUEVUOiBhc3NlbWJseURFCisgICAgICAgIG5ldyBFdmVudHNvdXJjaW5nQXNzZW1ibGVyKCkKKyAgICAgICAgICAgICAgICAud2l0aERvbWFpbkV2ZW50cygpCisgICAgICAgICAgICAgICAgLndpdGhDdXJyZW50VXNlckZyb21VT1dQcmluY2lwYWwoKQorICAgICAgICAgICAgICAgIC5hc3NlbWJsZShtb2R1bGUpOworICAgICAgICAvLyBFTkQgU05JUFBFVDogYXNzZW1ibHlERQogCisgICAgICAgIC8vIFNUQVJUIFNOSVBQRVQ6IHN0b3JlREUKKyAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBNZW1vcnlFdmVudFN0b3JlU2VydmljZS5jbGFzcyApOworICAgICAgICAvLyBFTkQgU05JUFBFVDogc3RvcmVERQorCisgICAgICAgIC8vIFNUQVJUIFNOSVBQRVQ6IGNvbmNlcm5ERQogICAgICAgICBtb2R1bGUuZW50aXRpZXMoIFRlc3RFbnRpdHkuY2xhc3MgKS53aXRoQ29uY2VybnMoRG9tYWluRXZlbnRDcmVhdGlvbkNvbmNlcm4uY2xhc3MpOworICAgICAgICAvLyBFTkQgU05JUFBFVDogY29uY2VybkRFCiAgICAgfQogCiAgICAgQFRlc3QKQEAgLTkzLDYgKzEwMSw3IEBACiAgICAgICAgICAgICAgICAgfSwgT3V0cHV0cy5zeXN0ZW1PdXQoKSApKTsKICAgICB9CiAKKyAgICAvLyBTVEFSVCBTTklQUEVUOiBtZXRob2RERQogICAgIEBNaXhpbnMoIFRlc3RFbnRpdHkuTWl4aW4uY2xhc3MgKQogICAgIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEVudGl0eQogICAgICAgICBleHRlbmRzIEVudGl0eUNvbXBvc2l0ZQpAQCAtMTEyLDQgKzEyMSw1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgLy8gRU5EIFNOSVBQRVQ6IG1ldGhvZERFCiB9CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL2hlbHBlci9FdmVudHNUZXN0LmphdmEgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL2hlbHBlci9FdmVudHNUZXN0LmphdmEKaW5kZXggMTJjZTZhYy4uYjIxNzMzZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3NvdXJjZS9oZWxwZXIvRXZlbnRzVGVzdC5qYXZhCisrKyBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9zb3VyY2UvaGVscGVyL0V2ZW50c1Rlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmV2ZW50c291cmNpbmcuZG9tYWluLnNvdXJjZS5oZWxwZXI7CiAKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3NvdXJjZS9oZWxwZXIvVW5pdE9mV29ya1JvdXRlclRlc3QuamF2YSBiL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9ldmVudHNvdXJjaW5nL2RvbWFpbi9zb3VyY2UvaGVscGVyL1VuaXRPZldvcmtSb3V0ZXJUZXN0LmphdmEKaW5kZXggZjMyODZmZi4uNWZhM2EwNiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2V2ZW50c291cmNpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2V2ZW50c291cmNpbmcvZG9tYWluL3NvdXJjZS9oZWxwZXIvVW5pdE9mV29ya1JvdXRlclRlc3QuamF2YQorKysgYi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZXZlbnRzb3VyY2luZy9kb21haW4vc291cmNlL2hlbHBlci9Vbml0T2ZXb3JrUm91dGVyVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuZXZlbnRzb3VyY2luZy5kb21haW4uc291cmNlLmhlbHBlcjsKIAogaW1wb3J0IG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnM7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZmlsZWNvbmZpZy9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvZmlsZWNvbmZpZy9idWlsZC5ncmFkbGUKaW5kZXggOTFmOTM2Ni4uODMwMTE3YSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ZpbGVjb25maWcvYnVpbGQuZ3JhZGxlCisrKyBiL2xpYnJhcmllcy9maWxlY29uZmlnL2J1aWxkLmdyYWRsZQpAQCAtMSw5ICsxLDI5IEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIEZpbGUgQ29uZmlndXJhdGlvbiBMaWJyYXJ5IHByb3ZpZGVzIHBsYXRmb3JtIHNwZWNpZmljIGZpbGUgbG9jYXRpb25zLiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBGaWxlQ29uZmlnIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgRmlsZSBDb25maWd1cmF0aW9uIExpYnJhcnkgcHJvdmlkZXMgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZSBsb2NhdGlvbnMuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIEZpbGVDb25maWciIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKKyAgY29tcGlsZSBsaWJyYXJpZXMuc2xmNGpfYXBpCiAKICAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQogCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvZmlsZWNvbmZpZy9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9maWxlY29uZmlnL2Rldi1zdGF0dXMueG1sCmluZGV4IGEwYzlmYmIuLmJkZjAwZTcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9maWxlY29uZmlnL2Rldi1zdGF0dXMueG1sCisrKyBiL2xpYnJhcmllcy9maWxlY29uZmlnL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL2RvY3MvZmlsZWNvbmZpZy50eHQgYi9saWJyYXJpZXMvZmlsZWNvbmZpZy9zcmMvZG9jcy9maWxlY29uZmlnLnR4dAppbmRleCA5YzQyZTg5Li5hYzk3M2U2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvZmlsZWNvbmZpZy9zcmMvZG9jcy9maWxlY29uZmlnLnR4dAorKysgYi9saWJyYXJpZXMvZmlsZWNvbmZpZy9zcmMvZG9jcy9maWxlY29uZmlnLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LWZpbGVjb25maWcsRmlsZUNvbmZpZyBMaWJyYXJ5XV0KID0gRmlsZUNvbmZpZyA9CiAKQEAgLTgsNyArMjcsNyBAQAogCiBUaGUgRmlsZUNvbmZpZyBsaWJyYXJ5IHByb3ZpZGUgYSBzZXJ2aWNlIGZvciBhY2Nlc3NpbmcgYXBwbGljYXRpb24tc3BlY2lmaWMgZGlyZWN0b3JpZXMuCiAKLUEgbG90IG9mIHRoZSBRaTRqIExpYnJhcmllcyBhbmQgRXh0ZW5zaW9ucyBtYWtlIHVzZSBvZiB0aGlzIGxpYnJhcnkgdG8gbG9jYXRlIGZpbGVzLgorQSBsb3Qgb2YgdGhlIFplc3TihKIgTGlicmFyaWVzIGFuZCBFeHRlbnNpb25zIG1ha2UgdXNlIG9mIHRoaXMgbGlicmFyeSB0byBsb2NhdGUgZmlsZXMuCiAKIGluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCiAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9maWxlY29uZmlnL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9maWxlY29uZmlnL0ZpbGVDb25maWd1cmF0aW9uU2VydmljZS5qYXZhIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmphdmEKaW5kZXggZjFhMWUzZS4uOWJjMTk0MSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmphdmEKKysrIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5maWxlY29uZmlnOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwpAQCAtMTExLDcgKzEyOSw3IEBACiAKICAgICAgICAgICAgIGRhdGEudXNlcigpLnNldCggbmV3IEZpbGUoIHVzZXIgKSApOwogCi0gICAgICAgICAgICAvLyBTZXQgYXBwbGljYXRpb24gbmFtZS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBRaTRqIGFwcGxpY2F0aW9uIGJ1dCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IGEgc3lzdGVtIHByb3BlcnR5CisgICAgICAgICAgICAvLyBTZXQgYXBwbGljYXRpb24gbmFtZS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBaZXN0IGFwcGxpY2F0aW9uIGJ1dCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IGEgc3lzdGVtIHByb3BlcnR5CiAgICAgICAgICAgICBTdHJpbmcgYXBwbGljYXRpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoICJhcHBsaWNhdGlvbiIsIGFwcC5uYW1lKCkgKTsKIAogICAgICAgICAgICAgaWYgKCAhYXBwLm1vZGUoKS5lcXVhbHMoIEFwcGxpY2F0aW9uLk1vZGUucHJvZHVjdGlvbiApICkgewpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvcGFja2FnZS5odG1sCmluZGV4IDAzYTY4YTQuLjAzYjUxODggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9maWxlY29uZmlnL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9maWxlY29uZmlnL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvZmlsZWNvbmZpZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvZmlsZWNvbmZpZy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkZpbGVDb25maWd1cmF0aW9uIExpYnJhcnkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9maWxlY29uZmlnL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25fbWFjLnByb3BlcnRpZXMgYi9saWJyYXJpZXMvZmlsZWNvbmZpZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9maWxlY29uZmlnL0ZpbGVDb25maWd1cmF0aW9uX21hYy5wcm9wZXJ0aWVzCmluZGV4IDc1OWVjMzUuLjdhZmI5NmUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9maWxlY29uZmlnL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25fbWFjLnByb3BlcnRpZXMKKysrIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvZmlsZWNvbmZpZy9GaWxlQ29uZmlndXJhdGlvbl9tYWMucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBjb25maWd1cmF0aW9uPXt1c2VyfS9MaWJyYXJ5L1ByZWZlcmVuY2VzL3thcHBsaWNhdGlvbn0KIGRhdGE9e3VzZXJ9L0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC97YXBwbGljYXRpb259CiB0ZW1wb3Jhcnk9e3RlbXB9L3thcHBsaWNhdGlvbn0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9maWxlY29uZmlnL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25fdW5peC5wcm9wZXJ0aWVzIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvZmlsZWNvbmZpZy9GaWxlQ29uZmlndXJhdGlvbl91bml4LnByb3BlcnRpZXMKaW5kZXggMDliNGZjNi4uNGRkZjg5NiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvZmlsZWNvbmZpZy9GaWxlQ29uZmlndXJhdGlvbl91bml4LnByb3BlcnRpZXMKKysrIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvZmlsZWNvbmZpZy9GaWxlQ29uZmlndXJhdGlvbl91bml4LnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogY29uZmlndXJhdGlvbj17dXNlcn0vLnthcHBsaWNhdGlvbn0vZXRjCiBkYXRhPXt1c2VyfS8ue2FwcGxpY2F0aW9ufS9kYXRhCiB0ZW1wb3Jhcnk9e3RlbXB9L3thcHBsaWNhdGlvbn0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9maWxlY29uZmlnL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25fd2luZG93cy5wcm9wZXJ0aWVzIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvZmlsZWNvbmZpZy9GaWxlQ29uZmlndXJhdGlvbl93aW5kb3dzLnByb3BlcnRpZXMKaW5kZXggMGM3YmE4Ni4uZDMzODQ4NCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvZmlsZWNvbmZpZy9GaWxlQ29uZmlndXJhdGlvbl93aW5kb3dzLnByb3BlcnRpZXMKKysrIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvZmlsZWNvbmZpZy9GaWxlQ29uZmlndXJhdGlvbl93aW5kb3dzLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogY29uZmlndXJhdGlvbj17dXNlcn0vQXBwbGljYXRpb24gRGF0YS97YXBwbGljYXRpb259L2NvbmYKIGRhdGE9e3VzZXJ9L0FwcGxpY2F0aW9uIERhdGEve2FwcGxpY2F0aW9ufS9kYXRhCiB0ZW1wb3Jhcnk9e3RlbXB9L3thcHBsaWNhdGlvbn0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9maWxlY29uZmlnL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9maWxlY29uZmlnL0ZpbGVDb25maWd1cmF0aW9uX21hYy5wcm9wZXJ0aWVzIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25fbWFjLnByb3BlcnRpZXMKaW5kZXggMDgxY2RkNS4uMGMyOGNlYiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25fbWFjLnByb3BlcnRpZXMKKysrIGIvbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ZpbGVjb25maWcvRmlsZUNvbmZpZ3VyYXRpb25fbWFjLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogIyBHZXQgSE9NRSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcwogY29uZmlndXJhdGlvbj17ZW52aXJvbm1lbnQuSE9NRX0vTGlicmFyeS9QcmVmZXJlbmNlcy97YXBwbGljYXRpb259CiAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9odHRwL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9odHRwL2J1aWxkLmdyYWRsZQppbmRleCBiZmI0OWM5Li5iZjc0ODliIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvaHR0cC9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL2h0dHAvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogSHR0cCBMaWJyYXJ5IHByb3ZpZGVzIGVtYmVkZGVkIEpldHR5IGZvciBRaTRqIGFwcGxpY2F0aW9uIHVzZS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gSHR0cCIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIEh0dHAgTGlicmFyeSBwcm92aWRlcyBlbWJlZGRlZCBKZXR0eSBmb3IgQXBhY2hlIFplc3TihKIgYXBwbGljYXRpb24gdXNlLiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIExpYnJhcnkgLSBIdHRwIiB9fQogCiB0ZXN0IHsKICAgc3lzdGVtUHJvcGVydGllcyAnbmV0d29ya2FkZHJlc3MuY2FjaGUudHRsJzogJzAnCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvaHR0cC9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9odHRwL2Rldi1zdGF0dXMueG1sCmluZGV4IGEwYzlmYmIuLmJkZjAwZTcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9odHRwL2Rldi1zdGF0dXMueG1sCisrKyBiL2xpYnJhcmllcy9odHRwL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2h0dHAvc3JjL2RvY3MvaHR0cC50eHQgYi9saWJyYXJpZXMvaHR0cC9zcmMvZG9jcy9odHRwLnR4dAppbmRleCBlNTFiMTg5Li43ZTRiOTA0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvaHR0cC9zcmMvZG9jcy9odHRwLnR4dAorKysgYi9saWJyYXJpZXMvaHR0cC9zcmMvZG9jcy9odHRwLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LWh0dHAsIEhUVFAgTGlicmFyeV1dCiA9IEhUVFAgPQogCkBAIC0xMCw3ICsyOSw3IEBACiBmaWx0ZXJzIGFzc2VtYmx5IGFzIFNlcnZpY2VzLgogCiBJdCdzIGFuIGVhc3kgd2F5IHRvIGVtYmVkZCBhIHNlcnZsZXQgY29udGFpbmVyIGFuZCByZXVzZSBldmVyeXRoaW5nIHRoYXQgY2FuIGJlIHJ1biBpbiBpdCAoSkFYLSosIFJlc3RsZXQsIFdpY2tldCwKLVZhYWRpbiwgR1dUIGV0Yy4uKS4gSWYgaW5zdGVhZCB5b3Ugd2FudCB0byBydW4gYSBRaTRqIEFwcGxpY2F0aW9uIGluIGEgc2VydmxldCBjb250YWluZXIsIHNlZSA8PGxpYnJhcnktc2VydmxldD4+LgorVmFhZGluLCBHV1QgZXRjLi4pLiBJZiBpbnN0ZWFkIHlvdSB3YW50IHRvIHJ1biBhIFplc3TihKIgQXBwbGljYXRpb24gaW4gYSBzZXJ2bGV0IGNvbnRhaW5lciwgc2VlIDw8bGlicmFyeS1zZXJ2bGV0Pj4uCiAKIGluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCiAKQEAgLTcxLDcgKzkwLDcgQEAKIAogPT09IENvbmZpZ3VyYXRpb24gPT09CiAKLVVuZGVybHlpbmcgSmV0dHkgZW5naW5lIGNvbmZpZ3VyYXRpb24gaXMgZXhwb3NlZCBhcyBhIFFpNGogU2VydmljZSBDb25maWd1cmF0aW9uLgorVW5kZXJseWluZyBKZXR0eSBlbmdpbmUgY29uZmlndXJhdGlvbiBpcyBleHBvc2VkIGFzIGEgWmVzdOKEoiBTZXJ2aWNlIENvbmZpZ3VyYXRpb24uCiBUaGUgb25seSBvbmUgdGhhdCBpcyBtYW5kYXRvcnkgaXMgdGhlIHBvcnQuCiAKIFNlZSBvcmcucWk0ai5saWJyYXJ5Lmh0dHAuSmV0dHlDb25maWd1cmF0aW9uIGZvciBhIHJlZmVyZW5jZSBvZiBhbGwgYXZhaWxhYmxlCkBAIC0xMTIsNyArMTMxLDMgQEAKIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcy4KIAogCi09PSBMb2dnaW5nID09Ci0KLVRoZSBTTEY0SiBsb2dnZXIgdXNlZCBieSB0aGlzIGxpYnJhcnkgaXMgbmFtZWQgIm9yZy5xaTRqLmxpYnJhcnkuaHR0cCIuCi0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9odHRwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9odHRwL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9odHRwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9odHRwL3BhY2thZ2UuaHRtbAppbmRleCAwYTFjYjFiLi4xNDUxY2Y1IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaHR0cC9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2h0dHAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2h0dHAvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5IVFRQIExpYnJhcnkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9odHRwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9odHRwL2Rucy9Mb2NhbE1hbmFnZWREbnMuamF2YSBiL2xpYnJhcmllcy9odHRwL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9odHRwL2Rucy9Mb2NhbE1hbmFnZWREbnMuamF2YQppbmRleCBlNDExMjU3Li4wZmQ2ZGM4IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvaHR0cC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaHR0cC9kbnMvTG9jYWxNYW5hZ2VkRG5zLmphdmEKKysrIGIvbGlicmFyaWVzL2h0dHAvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2h0dHAvZG5zL0xvY2FsTWFuYWdlZERucy5qYXZhCkBAIC02NCw3ICs2NCw2IEBACiAgICAgICAgICAgICBsb2cgKz0gIiBvbiBub24tbWFuYWdlZCBuYW1lICgiICsgbmFtZSArICIpIjsKICAgICAgICAgICAgIHJlc3VsdCA9IERFRkFVTFRfRE5TLmxvb2t1cEFsbEhvc3RBZGRyKCBuYW1lICk7CiAgICAgICAgIH0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBsb2cgKyAiIHdpbGwgcmV0dXJuOiAiICsgQXJyYXlzLnRvU3RyaW5nKCByZXN1bHQgKSApOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2h0dHAvc3JjL3Rlc3QvcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL3N1bi5uZXQuc3BpLm5hbWVzZXJ2aWNlLk5hbWVTZXJ2aWNlRGVzY3JpcHRvciBiL2xpYnJhcmllcy9odHRwL3NyYy90ZXN0L3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9zdW4ubmV0LnNwaS5uYW1lc2VydmljZS5OYW1lU2VydmljZURlc2NyaXB0b3IKaW5kZXggMGYzNTMyNS4uYWIxNzIxOCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2h0dHAvc3JjL3Rlc3QvcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL3N1bi5uZXQuc3BpLm5hbWVzZXJ2aWNlLk5hbWVTZXJ2aWNlRGVzY3JpcHRvcgorKysgYi9saWJyYXJpZXMvaHR0cC9zcmMvdGVzdC9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvc3VuLm5ldC5zcGkubmFtZXNlcnZpY2UuTmFtZVNlcnZpY2VEZXNjcmlwdG9yCkBAIC0xICsxLDE2IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBvcmcucWk0ai5saWJyYXJ5Lmh0dHAuZG5zLkxvY2FsTWFuYWdlZERuc0Rlc2NyaXB0b3IKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvaHR0cC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay54bWwgYi9saWJyYXJpZXMvaHR0cC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay54bWwKaW5kZXggMmU3NjI3Yy4uZGNiZGFlMiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2h0dHAvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2sueG1sCisrKyBiL2xpYnJhcmllcy9odHRwL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGNvbmZpZ3VyYXRpb24+CiAKICAgICA8YXBwZW5kZXIgbmFtZT0ic3Rkb3V0IiBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5Db25zb2xlQXBwZW5kZXIiPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvYnVpbGQuZ3JhZGxlCmluZGV4IDgwNzkwOTIuLjMzMmQzZDMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBJbnZvY2F0aW9uIENhY2hlIExpYnJhcnkgcHJvdmlkZXMgY2FjaGluZyBmcmFtZXdvcmsgZm9yIG1ldGhvZHMuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIEludm9jYXRpb24gQ2FjaGUiIH19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBJbnZvY2F0aW9uIENhY2hlIExpYnJhcnkgcHJvdmlkZXMgY2FjaGluZyBmcmFtZXdvcmsgZm9yIG1ldGhvZHMuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIEludm9jYXRpb24gQ2FjaGUiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUoIHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYXBpIikgKQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9kZXYtc3RhdHVzLnhtbAppbmRleCBmMWE5ZjI5Li43ZWE3NDZkIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9kb2NzL2ludm9jYXRpb24tY2FjaGUudHh0IGIvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL2RvY3MvaW52b2NhdGlvbi1jYWNoZS50eHQKaW5kZXggMTEzY2U3Ni4uZTYxM2M2YiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL2RvY3MvaW52b2NhdGlvbi1jYWNoZS50eHQKKysrIGIvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL2RvY3MvaW52b2NhdGlvbi1jYWNoZS50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbbGlicmFyeS1pbnZvY2F0aW9uLWNhY2hlLCBJbnZvY2F0aW9uIENhY2hlIExpYnJhcnldXQogPSBJbnZvY2F0aW9uIENhY2hlID0KIApAQCAtNiw5ICsyNSw3MiBAQAogc291cmNlPWxpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL2Rldi1zdGF0dXMueG1sCiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgSW52b2NhdGlvbiBDYWNoZSBMaWJyYXJ5IHByb3ZpZGVzIGNvbnN0cnVjdHMgdG8gZWFzaWx5IGNhY2hlIGNvbXBvc2l0ZSBtZXRob2RzIGludm9jYXRpb25zLgotSXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgPDxjb3JlLXNwaS1jYWNoZT4+LgorVGhlIEludm9jYXRpb24gQ2FjaGUgTGlicmFyeSBwcm92aWRlcyBjb25zdHJ1Y3RzIHRvIGVhc2lseSBjYWNoZSB0aGUgcmV0dXJuIHZhbHVlIG9mCittZXRob2QgaW52b2NhdGlvbnMgb24gY29tcG9zaXRlcy4KIAotTk9URTogVGhpcyBMaWJyYXJ5IGhhcyBubyBkb2N1bWVudGF0aW9uIHlldC4gTGVhcm4gaG93IHRvIGNvbnRyaWJ1dGUgaW4gPDxjb21tdW5pdHktZG9jcz4+LgorTk9URTogSXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgPDxjb3JlLXNwaS1jYWNoZT4+LgogCiBpbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQorCisKK0J5IGFwcGx5aW5nIG9uZSBvZiB0aGUgPDxkZWYtY29uY2VybixDb25jZXJucz4+IGl0IGlzIHBvc3NpYmxlIHRvIGNhY2hlIHRoZSByZXR1cm4gdmFsdWVzIG9mIG1ldGhvZAorY2FsbHMuIFRoZSBjb25jZXJuIHdpbGwgaW4gdHVybiBkZWxlZ2F0ZSB0byB0aGUgK0ludm9jYXRpb25DYWNoZSsgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBhCis8PGRlZi1wcml2YXRlLW1peGluPj4gaW4gdGhlIHNhbWUgY29tcG9zaXRlLgorCis9PSArQENhY2hlZCsgPT0KK1RoaXMgYW5ub3RhdGlvbiBpcyB1c2VkIHRvIG1hcmsgdGhlIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgY2FjaGluZy4gT25seSBpZiBhCitjYWNoaW5nIGNvbmNlcm4gaGFzIGJlZW4gZGVmaW5lZCBhbmQgdGhhdCBhbiArSW52b2NhdGlvbkNhY2hlKyBpbXBsZW1lbnRhdGlvbiBtaXhpbiBoYXMgYmVlbiBwcm92aWRlZAord2lsbCB0aGUgY2FjaGluZyBhY3R1YWxseSB0YWtlIHBsYWNlLgorCis9PSArUmV0dXJuQ2FjaGVkVmFsdWVDb25jZXJuKyA9PQorVGhpcyBnZW5lcmljIG1peGluIGltcGxlbWVudGF0aW9uIHdpbGwgZmlyc3QgbG9vayBpbiB0aGUgY2FjaGUgYW5kIHNlZSBpZiB0aGUgdmFsdWUgaXMgdGhlcmUsIGlmIHNvIHRoZSB2YWx1ZQoraXMgdW5jb25kaXRpb25hbGx5IHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisKK1RoaXMgY29uY2VybiBza2lwIGl0cyBmdW5jdGlvbiBpZiB0aGVyZSBpcyBubyArSW52b2NhdGlvbkNhY2hlKyBtaXhpbiBkZWNsYXJlZCBvbiB0aGUgY29tcG9zaXRlIG9yIGlmIHRoZSBtZXRob2QKK2hhcyBhICt2b2lkKyByZXR1cm4gdHlwZS4KKworPT0gK1JldHVybkNhY2hlZFZhbHVlT25FeGNlcHRpb25Db25jZXJuKyA9PQorVGhpcyBnZW5lcmljIG1peGluIGltcGxlbWVudGF0aW9uIHdpbGwgZmlyc3QgY2FsbCB0aGUgbWV0aG9kLCBhbmQgaWYgaXQgZmFpbHMgd2l0aCBhbiBFeGNlcHRpb24sIGl0IHdpbGwgdHJ5IHRvCityZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZS4gSWYgbm8gdmFsdWUgaXMgcHJlc2VudCBpbiB0aGUgY2FjaGUgKGkuZS4gbnVsbCBpcyByZXR1cm5lZCBmcm9tIHRoZSBjYWNoZSkgdGhlbgordGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHJldGhyb3duLgorCitUaGlzIGNvbmNlcm4gc2tpcCBpdHMgZnVuY3Rpb24gaWYgdGhlcmUgaXMgbm8gK0ludm9jYXRpb25DYWNoZSsgbWl4aW4gZGVjbGFyZWQgb24gdGhlIGNvbXBvc2l0ZSBvciBpZiB0aGUgbWV0aG9kCitoYXMgYSArdm9pZCsgcmV0dXJuIHR5cGUuCisKKz09IEV4YW1wbGUgPT0KKworTGV0J3Mgc2F5IHRoYXQgd2UgaGF2ZSBzb21lIHNlcnZpY2UgdGhhdCBpcyB2ZXJ5IGV4cGVuc2l2ZSB0byBjYWxsLgorCitbc25pcHBldCxqYXZhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQordGFnPWNvbXBvc2l0ZQorLS0tLQorCitBbmQgd2Uga25vdyB0aGF0IHRoZSBhcmd1bWVudCBjb21iaW5hdGlvbnMgaW50byB0aGlzIG1ldGhvZCBhcmUgcmVsYXRpdmVseSBmZXcsIHdlIGNhbiBzaW1wbHkgZGVjbGFyZSB0aGUKKytTaW1wbGVJbnZvY2F0aW9uQ2FjaGUrIG1peGluIGltcGxlbWVudGF0aW9uIHRvIHN0b3JlIHRoZSBwZXJtdXRhdGlvbnMgYW5kIHJldHVybiB0aGVtIGlmIGFscmVhZHkgYmVlbgorcHJvdmlkZWQuCisKK1tzbmlwcGV0LGphdmFdCistLS0tCitzb3VyY2U9bGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhCit0YWc9YXNzZW1ibHkKKy0tLS0KKworSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCB0aGUgK1NpbXBsZUludm9jYXRpb25DYWNoZSsgaW1wbGVtZW50YXRpb24gbmV2ZXIgZHJvcHMgdGhlIGNhY2hlZCB2YWx1ZXMsCithbmQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGluc3RydWN0IGl0IHRvIGRvIHNvLiBTbywgaW4gbW9zdCBjYXNlcyBpdCBpcyByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhlICtJbnZvY2F0aW9uQ2FjaGUrCitpbnRlcmZhY2UgeW91cnNlbGYsIGFuZCBjaG9vc2UgYSBjYWNoaW5nIHN0cmF0ZWd5IHRoYXQgd29ya3MgZm9yIHlvdS4KKworPT0gQ3VzdG9tICtJbnZvY2F0aW9uQ2FjaGUrIGltcGxlbWVudGF0aW9uID09CitUaGUgaW50ZXJmYWNlIHRvIGltcGxlbWVudCBpcyB2ZXJ5IHN0cmFpZ2h0IGZvcndhcmQuIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGEKKzw8ZGVmLXByaXZhdGUtbWl4aW4+PiBvZiB0aGUgY29tcG9zaXRlIHdoZXJlIHRoZSBjYWNoaW5nIGlzIGFwcGxpZWQsIGFuZCBub3QgYSBzZXBhcmF0ZSBzZXJ2aWNlLiBTbywgaWYKK3RoZSBpbXBsZW1lbnRhdGlvbiBpcyBleHBlY3RpbmcgdG8gYmUgcGFydCBvZiBhbiBlbnRpdHksIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUKKworW3NvdXJjZSxqYXZhXQorLS0tLQorQFRoaXMKK3ByaXZhdGUgSWRlbnRpdHkgbXlJZGVudGl0eTsKKy0tLS0KKwordG8gZ2V0IGhvbGQgb2YgdGhlIGN1cnJlbnQgZW50aXR5J3MgK0lkZW50aXR5Ky4gVGhpcyBhcHByb2FjaCBtYWtlcyB0aGUgY2FjaGluZyBhIGxvdCBzaW1wbGVyIHRoYW4gaWYgYSBzZXBhcmF0ZQorc2VydmljZSB3b3VsZCBoYXZlIGJlZW4gdXNlZCBpbnN0ZWFkLCBidXQgc3RpbGwgcG9zc2libGUgdG8gZGVsZWdhdGUgdG8gc3VjaC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL0NhY2hlSW52b2NhdGlvblJlc3VsdFNpZGVFZmZlY3QuamF2YSBiL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvQ2FjaGVJbnZvY2F0aW9uUmVzdWx0U2lkZUVmZmVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNlNzNiLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvQ2FjaGVJbnZvY2F0aW9uUmVzdWx0U2lkZUVmZmVjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IFJpY2thcmQgw5ZiZXJnLgotICoKLSAqIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5Lmludm9jYXRpb25jYWNoZTsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uQXBwbGllc1RvOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuSW52b2NhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlRoaXM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnNpZGVlZmZlY3QuR2VuZXJpY1NpZGVFZmZlY3Q7Ci0KLS8qKgotICogQ2FjaGUgcmVzdWx0IG9mIEBDYWNoZWQgbWV0aG9kIGNhbGxzLgotICovCi1AQXBwbGllc1RvKCBDYWNoZWQuY2xhc3MgKQotcHVibGljIGNsYXNzIENhY2hlSW52b2NhdGlvblJlc3VsdFNpZGVFZmZlY3QKLSAgICBleHRlbmRzIEdlbmVyaWNTaWRlRWZmZWN0Ci17Ci0gICAgQFRoaXMKLSAgICBwcml2YXRlIEludm9jYXRpb25DYWNoZSBjYWNoZTsKLSAgICBASW52b2NhdGlvbgotICAgIHByaXZhdGUgTWV0aG9kIG1ldGhvZDsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKCBPYmplY3QgcHJveHksIE1ldGhvZCBtZXRob2QsIE9iamVjdFtdIGFyZ3MgKQotICAgICAgICB0aHJvd3MgVGhyb3dhYmxlCi0gICAgewotICAgICAgICAvLyBHZXQgdmFsdWUKLSAgICAgICAgLy8gaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biwgZG9uJ3QgZG8gYW55dGhpbmcKLSAgICAgICAgT2JqZWN0IHJlcyA9IHJlc3VsdC5pbnZva2UoIHByb3h5LCBtZXRob2QsIGFyZ3MgKTsKLSAgICAgICAgaWYoIHJlcyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzID0gVm9pZC5UWVBFOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBjYWNoZU5hbWUgPSBtZXRob2QuZ2V0TmFtZSgpOwotICAgICAgICBpZiggYXJncyAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgY2FjaGVOYW1lICs9IEFycmF5cy5hc0xpc3QoIGFyZ3MgKTsKLSAgICAgICAgfQotICAgICAgICBPYmplY3Qgb2xkUmVzdWx0ID0gY2FjaGUuY2FjaGVkVmFsdWUoIGNhY2hlTmFtZSApOwotICAgICAgICBpZiggb2xkUmVzdWx0ID09IG51bGwgfHwgIW9sZFJlc3VsdC5lcXVhbHMoIHJlc3VsdCApICkKLSAgICAgICAgewotICAgICAgICAgICAgY2FjaGUuc2V0Q2FjaGVkVmFsdWUoIGNhY2hlTmFtZSwgcmVzdWx0ICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL0ludmFsaWRhdGVDYWNoZU9uU2V0dGVyc1NpZGVFZmZlY3QuamF2YSBiL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvSW52YWxpZGF0ZUNhY2hlT25TZXR0ZXJzU2lkZUVmZmVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODE5YTc2Li4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvSW52YWxpZGF0ZUNhY2hlT25TZXR0ZXJzU2lkZUVmZmVjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IFJpY2thcmQgw5ZiZXJnLgotICoKLSAqIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5Lmludm9jYXRpb25jYWNoZTsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLkFwcGxpZXNUbzsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLkFwcGxpZXNUb0ZpbHRlcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlRoaXM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnNpZGVlZmZlY3QuR2VuZXJpY1NpZGVFZmZlY3Q7Ci0KLS8qKgotICogSW52YWxpZGF0ZSBjYWNoZSBvbiBzZXR0ZXJzLgotICovCi1AQXBwbGllc1RvKCBJbnZhbGlkYXRlQ2FjaGVPblNldHRlcnNTaWRlRWZmZWN0LkFwcGxpZXNUby5jbGFzcyApCi1wdWJsaWMgY2xhc3MgSW52YWxpZGF0ZUNhY2hlT25TZXR0ZXJzU2lkZUVmZmVjdAotICAgIGV4dGVuZHMgR2VuZXJpY1NpZGVFZmZlY3QKLXsKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEFwcGxpZXNUbwotICAgICAgICBpbXBsZW1lbnRzIEFwcGxpZXNUb0ZpbHRlcgotICAgIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGFwcGxpZXNUbyggTWV0aG9kIG1ldGhvZCwgQ2xhc3M8Pz4gbWl4aW4sIENsYXNzPD8+IGNvbXBvc2l0ZVR5cGUsIENsYXNzPD8+IG1vZGlmaWVyQ2xhc3MgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gISggbWV0aG9kLmdldERlY2xhcmluZ0NsYXNzKCkuZXF1YWxzKCBJbnZvY2F0aW9uQ2FjaGUuY2xhc3MgKQotICAgICAgICAgICAgICAgICAgICAgIHx8IG1ldGhvZC5nZXREZWNsYXJpbmdDbGFzcygpLmVxdWFscyggSW52b2NhdGlvbkNhY2hlTWl4aW4uY2xhc3MgKSApOwotCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGhpcwotICAgIHByaXZhdGUgSW52b2NhdGlvbkNhY2hlIGNhY2hlOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgaW52b2tlKCBNZXRob2QgbWV0aG9kLCBPYmplY3RbXSBhcmdzICkKLSAgICB7Ci0gICAgICAgIGNhY2hlLmNsZWFyQ2FjaGVkVmFsdWVzKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9JbnZvY2F0aW9uQ2FjaGUuamF2YSBiL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvSW52b2NhdGlvbkNhY2hlLmphdmEKaW5kZXggN2Q4MzM1NS4uNGFiOGU5YyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9JbnZvY2F0aW9uQ2FjaGUuamF2YQorKysgYi9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL0ludm9jYXRpb25DYWNoZS5qYXZhCkBAIC0xNyw5ICsxNywxMiBAQAogICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuaW52b2NhdGlvbmNhY2hlOwogCitpbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKKwogLyoqCiAgKiBJbnZvY2F0aW9uIENhY2hlLgogICovCitATWl4aW5zKCBTaW1wbGVJbnZvY2F0aW9uQ2FjaGVNaXhpbi5jbGFzcyApCiBwdWJsaWMgaW50ZXJmYWNlIEludm9jYXRpb25DYWNoZQogewogICAgIE9iamVjdCBzZXRDYWNoZWRWYWx1ZSggU3RyaW5nIG5hbWUsIE9iamVjdCBhUmVzdWx0ICk7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL0ludm9jYXRpb25DYWNoZUFic3RyYWN0Q29tcG9zaXRlLmphdmEgYi9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL0ludm9jYXRpb25DYWNoZUFic3RyYWN0Q29tcG9zaXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4M2M0OTAuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9JbnZvY2F0aW9uQ2FjaGVBYnN0cmFjdENvbXBvc2l0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IFJpY2thcmQgw5ZiZXJnLgotICoKLSAqIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5Lmludm9jYXRpb25jYWNoZTsKLQotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25jZXJuLkNvbmNlcm5zOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnNpZGVlZmZlY3QuU2lkZUVmZmVjdHM7Ci0KLS8qKgotICogSkFWQURPQwotICovCi1ATWl4aW5zKCBJbnZvY2F0aW9uQ2FjaGVNaXhpbi5jbGFzcyApCi1AQ29uY2VybnMoIFJldHVybkNhY2hlZFZhbHVlT25FeGNlcHRpb25Db25jZXJuLmNsYXNzICkKLUBTaWRlRWZmZWN0cyggeyBDYWNoZUludm9jYXRpb25SZXN1bHRTaWRlRWZmZWN0LmNsYXNzLCBJbnZhbGlkYXRlQ2FjaGVPblNldHRlcnNTaWRlRWZmZWN0LmNsYXNzIH0gKQotcHVibGljIGludGVyZmFjZSBJbnZvY2F0aW9uQ2FjaGVBYnN0cmFjdENvbXBvc2l0ZQotewotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9SZXR1cm5DYWNoZWRWYWx1ZUNvbmNlcm4uamF2YSBiL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvUmV0dXJuQ2FjaGVkVmFsdWVDb25jZXJuLmphdmEKaW5kZXggOGMwZDJkMi4uOWFkMGQzZiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9SZXR1cm5DYWNoZWRWYWx1ZUNvbmNlcm4uamF2YQorKysgYi9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL1JldHVybkNhY2hlZFZhbHVlQ29uY2Vybi5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5BcHBsaWVzVG87CitpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5PcHRpb25hbDsKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uY2Vybi5Db25jZXJuT2Y7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5JbnZvY2F0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKQEAgLTMzLDM0ICszNCwyOSBAQAogICAgIGV4dGVuZHMgQ29uY2Vybk9mPEludm9jYXRpb25IYW5kbGVyPgogICAgIGltcGxlbWVudHMgSW52b2NhdGlvbkhhbmRsZXIKIHsKLSAgICBAVGhpcworICAgIEBUaGlzIEBPcHRpb25hbAogICAgIHByaXZhdGUgSW52b2NhdGlvbkNhY2hlIGNhY2hlOwotICAgIEBJbnZvY2F0aW9uCi0gICAgcHJpdmF0ZSBNZXRob2QgbWV0aG9kOwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIE9iamVjdCBpbnZva2UoIE9iamVjdCBwcm94eSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0W10gYXJncyApCiAgICAgICAgIHRocm93cyBUaHJvd2FibGUKICAgICB7Ci0gICAgICAgIC8vIFRyeSBjYWNoZQotICAgICAgICBTdHJpbmcgY2FjaGVOYW1lID0gbWV0aG9kLmdldE5hbWUoKTsKLSAgICAgICAgaWYoIGFyZ3MgIT0gbnVsbCApCisgICAgICAgIGJvb2xlYW4gdm9pZFJldHVyblR5cGUgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpLmVxdWFscyggVm9pZC5UWVBFICk7CisgICAgICAgIGlmKCBjYWNoZSAhPSBudWxsIHx8IHZvaWRSZXR1cm5UeXBlICkKICAgICAgICAgewotICAgICAgICAgICAgY2FjaGVOYW1lICs9IEFycmF5cy5hc0xpc3QoIGFyZ3MgKTsKLSAgICAgICAgfQotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FjaGUuY2FjaGVkVmFsdWUoIGNhY2hlTmFtZSApOwotICAgICAgICBpZiggcmVzdWx0ICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiggcmVzdWx0ID09IFZvaWQuVFlQRSApCisgICAgICAgICAgICAvLyBUcnkgY2FjaGUKKyAgICAgICAgICAgIFN0cmluZyBjYWNoZU5hbWUgPSBtZXRob2QuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYoIGFyZ3MgIT0gbnVsbCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgY2FjaGVOYW1lICs9IEFycmF5cy5hc0xpc3QoIGFyZ3MgKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBjYWNoZS5jYWNoZWRWYWx1ZSggY2FjaGVOYW1lICk7CisgICAgICAgICAgICBpZiggcmVzdWx0ICE9IG51bGwgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgLy8gTm8gY2FjaGVkIHZhbHVlIGZvdW5kIC0gY2FsbCBtZXRob2QKKyAgICAgICAgLy8gTm8gY2FjaGVkIHZhbHVlIGZvdW5kIG9yIG5vIEludm9jYXRpb25DYWNoZSBkZWZpbmVkIC0gY2FsbCBtZXRob2QKICAgICAgICAgcmV0dXJuIG5leHQuaW52b2tlKCBwcm94eSwgbWV0aG9kLCBhcmdzICk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9SZXR1cm5DYWNoZWRWYWx1ZU9uRXhjZXB0aW9uQ29uY2Vybi5qYXZhIGIvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9SZXR1cm5DYWNoZWRWYWx1ZU9uRXhjZXB0aW9uQ29uY2Vybi5qYXZhCmluZGV4IDQwMGJhZjUuLjEyODdiMzkgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvUmV0dXJuQ2FjaGVkVmFsdWVPbkV4Y2VwdGlvbkNvbmNlcm4uamF2YQorKysgYi9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL1JldHVybkNhY2hlZFZhbHVlT25FeGNlcHRpb25Db25jZXJuLmphdmEKQEAgLTQyLDMyICs0MiwyOSBAQAogICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKCBPYmplY3QgcHJveHksIE1ldGhvZCBtZXRob2QsIE9iamVjdFtdIGFyZ3MgKQogICAgICAgICB0aHJvd3MgVGhyb3dhYmxlCiAgICAgewotICAgICAgICB0cnkKKyAgICAgICAgYm9vbGVhbiB2b2lkUmV0dXJuVHlwZSA9IG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZXF1YWxzKCBWb2lkLlRZUEUgKTsKKyAgICAgICAgaWYoIGNhY2hlICE9IG51bGwgfHwgdm9pZFJldHVyblR5cGUgKSAvLyBTa2lwIGlmIHZvaWQgcmV0dXJuIHR5cGUgb3Igbm8gSW52b2NhdGlvbkNhY2hlIGhhcyBiZWVuIGRlZmluZWQuCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEludm9rZSBtZXRob2QKLSAgICAgICAgICAgIHJldHVybiBuZXh0Lmludm9rZSggcHJveHksIG1ldGhvZCwgYXJncyApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRyeSBjYWNoZQogICAgICAgICAgICAgU3RyaW5nIGNhY2hlTmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7CiAgICAgICAgICAgICBpZiggYXJncyAhPSBudWxsICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjYWNoZU5hbWUgKz0gQXJyYXlzLmFzTGlzdCggYXJncyApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhY2hlLmNhY2hlZFZhbHVlKCBjYWNoZU5hbWUgKTsKLSAgICAgICAgICAgIGlmKCByZXN1bHQgIT0gbnVsbCApCisgICAgICAgICAgICB0cnkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiggcmVzdWx0ID09IFZvaWQuVFlQRSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gSW52b2tlIG1ldGhvZAorICAgICAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBuZXh0Lmludm9rZSggcHJveHksIG1ldGhvZCwgYXJncyApOworICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBjYWNoZQorICAgICAgICAgICAgICAgIGNhY2hlLnNldENhY2hlZFZhbHVlKCBjYWNoZU5hbWUsIHJlc3VsdCApOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUcnkgY2FjaGUKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGUuY2FjaGVkVmFsdWUoIGNhY2hlTmFtZSApOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIC8vIGlmIG5vIEludm9jYXRpb25DYWNoZSBpcyBwcmVzZW50LgorICAgICAgICByZXR1cm4gbmV4dC5pbnZva2UoIHByb3h5LCBtZXRob2QsIGFyZ3MgKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL0ludm9jYXRpb25DYWNoZU1peGluLmphdmEgYi9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL1NpbXBsZUludm9jYXRpb25DYWNoZU1peGluLmphdmEKc2ltaWxhcml0eSBpbmRleCA3NSUKcmVuYW1lIGZyb20gbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9JbnZvY2F0aW9uQ2FjaGVNaXhpbi5qYXZhCnJlbmFtZSB0byBsaWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL1NpbXBsZUludm9jYXRpb25DYWNoZU1peGluLmphdmEKaW5kZXggYjQ1YTRhMy4uNTg5NzQxMiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9JbnZvY2F0aW9uQ2FjaGVNaXhpbi5qYXZhCisrKyBiL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvU2ltcGxlSW52b2NhdGlvbkNhY2hlTWl4aW4uamF2YQpAQCAtMjEsOSArMjEsMTggQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50SGFzaE1hcDsKIAogLyoqCi0gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIEludm9jYXRpb25DYWNoZS4KKyAqIFNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBJbnZvY2F0aW9uQ2FjaGUuCisgKiA8cD4KKyAqIFRoaXMge0BsaW5rIEludm9jYXRpb25DYWNoZX0gc2hvdWxkIHR5cGljYWxseSBub3QgYmUgdXNlZCBhdCBhbGwsIGFuZCBvbmx5IHNlcnZlcyBhcyBhbgorICogZXhhbXBsZS4gVGhlIEB7Y29kZSBjYWNoZWRWYWx1ZXN9IG1lbWJlciBpcyBuZXZlciBlbXB0aWVkLCBzbyBpdCBjb25zdGl0dXRlcyBhIG1lbW9yeSBsZWFrCisgKiBpZiB0aGUgbWV0aG9kIGFyZ3VtZW50cyBrZWVwIGNoYW5naW5nLgorICogPC9wPgorICogPHA+CisgKiA8Yj5JTVBPUlRBTlQ6IE9ubHkgdXNlIHRoaXMgaXMgeW91IGtub3cgdGhhdCBvbmx5IGEgc21hbGwgc2V0IG9mIGFyZ3VtZW50cyBhcmUgdXNlZCBpbnRvIHlvdXIKKyAqIG1ldGhvZChzKS48L2I+CisgKiA8L3A+CiAgKi8KLXB1YmxpYyBjbGFzcyBJbnZvY2F0aW9uQ2FjaGVNaXhpbgorcHVibGljIGNsYXNzIFNpbXBsZUludm9jYXRpb25DYWNoZU1peGluCiAgICAgaW1wbGVtZW50cyBJbnZvY2F0aW9uQ2FjaGUKIHsKICAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY2FjaGVkVmFsdWVzID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPD4oKTsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9pbnZvY2F0aW9uLWNhY2hlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9pbnZvY2F0aW9uY2FjaGUvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9wYWNrYWdlLmh0bWwKaW5kZXggNDEwOTg4NC4uMDlmMGE0OCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkludm9jYXRpb24gQ2FjaGUgTGlicmFyeS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhIGIvbGlicmFyaWVzL2ludm9jYXRpb24tY2FjaGUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2ludm9jYXRpb25jYWNoZS9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MmNlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJyYXJpZXMvaW52b2NhdGlvbi1jYWNoZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvaW52b2NhdGlvbmNhY2hlL0RvY3VtZW50YXRpb25TdXBwb3J0LmphdmEKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5pbnZvY2F0aW9uY2FjaGU7CisKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkxheWVyQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5sYXllcmVkLk1vZHVsZUFzc2VtYmxlcjsKKworcHVibGljIGNsYXNzIERvY3VtZW50YXRpb25TdXBwb3J0Cit7CisvLyBTVEFSVCBTTklQUEVUOiBjb21wb3NpdGUKKyAgICBwdWJsaWMgaW50ZXJmYWNlIEV4cGVuc2l2ZU9wZXJhdGlvbgorICAgIHsKKyAgICAgICAgQENhY2hlZAorICAgICAgICBkb3VibGUgY29tcHV0ZSggZG91YmxlLi4uIGFyZ3VtZW50cyApOworICAgIH0KKy8vIEVORCBTTklQUEVUOiBjb21wb3NpdGUKKworLy8gU1RBUlQgU05JUFBFVDogYXNzZW1ibHkKKyAgICBwdWJsaWMgY2xhc3MgRXhwZW5zaXZlTW9kdWxlQXNzZW1ibGVyCisgICAgICAgIGltcGxlbWVudHMgTW9kdWxlQXNzZW1ibGVyeworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgTW9kdWxlQXNzZW1ibHkgYXNzZW1ibGUoIExheWVyQXNzZW1ibHkgbGF5ZXIsIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCisgICAgICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICAgICAgeworICAgICAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBFeHBlbnNpdmVPcGVyYXRpb24uY2xhc3MgKQorICAgICAgICAgICAgICAgIC53aXRoTWl4aW5zKCBTaW1wbGVJbnZvY2F0aW9uQ2FjaGVNaXhpbi5jbGFzcyApCisgICAgICAgICAgICAgICAgLndpdGhDb25jZXJucyggUmV0dXJuQ2FjaGVkVmFsdWVDb25jZXJuLmNsYXNzICk7CisgICAgICAgICAgICByZXR1cm4gbW9kdWxlOworICAgICAgICB9CisgICAgfQorLy8gRU5EIFNOSVBQRVQ6IGFzc2VtYmx5Cit9CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvam14L2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9qbXgvYnVpbGQuZ3JhZGxlCmluZGV4IDMyMTYwNjEuLjc5MTkzZGEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9qbXgvYnVpbGQuZ3JhZGxlCisrKyBiL2xpYnJhcmllcy9qbXgvYnVpbGQuZ3JhZGxlCkBAIC0xLDkgKzEsMjkgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogSk1YIExpYnJhcnkgcHJvdmlkZXMgSmF2YSBNYW5hZ2VtZW50IEV4dGVuc2lvbiAoSk1YKSBpbnRlZ3JhdGlvbiBmb3IgUWk0aiBhcHBsaWNhdGlvbnMuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIEpNWCIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIEpNWCBMaWJyYXJ5IHByb3ZpZGVzIEphdmEgTWFuYWdlbWVudCBFeHRlbnNpb24gKEpNWCkgaW50ZWdyYXRpb24gZm9yIEFwYWNoZSBaZXN04oSiIGFwcGxpY2F0aW9ucy4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gSk1YIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCisgIGNvbXBpbGUgbGlicmFyaWVzLnNsZjRqX2FwaQogCiAgIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiKSkKIApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2pteC9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9qbXgvZGV2LXN0YXR1cy54bWwKaW5kZXggNjcyZWMzYi4uZjU0OWM5OSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2pteC9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvam14L2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2pteC9zcmMvZG9jcy9qbXgudHh0IGIvbGlicmFyaWVzL2pteC9zcmMvZG9jcy9qbXgudHh0CmluZGV4IGZjNWYxZjAuLmI4NDIxYTQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9qbXgvc3JjL2RvY3Mvam14LnR4dAorKysgYi9saWJyYXJpZXMvam14L3NyYy9kb2NzL2pteC50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbbGlicmFyeS1qbXgsIEpNWCBMaWJyYXJ5XV0KID0gSk1YID0KIApAQCAtNiw3ICsyNSw3IEBACiBzb3VyY2U9bGlicmFyaWVzL2pteC9kZXYtc3RhdHVzLnhtbAogLS0tLS0tLS0tLS0tLS0KIAotVGhlIEpNWCBsaWJyYXJ5IHByb3ZpZGVzIGEgc2VydmljZSB0aGF0IGV4cG9zZXMgYSBRaTRqIGFwcCBpbgorVGhlIEpNWCBsaWJyYXJ5IHByb3ZpZGVzIGEgc2VydmljZSB0aGF0IGV4cG9zZXMgYSBaZXN04oSiIGFwcCBpbgogSk1YIGF1dG9tYXRpY2FsbHksIGdpdmluZyB5b3UgYW4gb3Bwb3J0dW5pdHkgdG8gaW5zcGVjdCB0aGUgYXBwIG11Y2ggYXMKIHlvdSB3b3VsZCB3aXRoIHRoZSA8PHRvb2xzLWVudmlzYWdlPj4gdG9vbC4KIApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2pteC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvam14L0FwcGxpY2F0aW9uTWFuYWdlclNlcnZpY2UuamF2YSBiL2xpYnJhcmllcy9qbXgvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2pteC9BcHBsaWNhdGlvbk1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggNTgwNjJmOC4uMWMzMTI1NSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2pteC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvam14L0FwcGxpY2F0aW9uTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9saWJyYXJpZXMvam14L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9qbXgvQXBwbGljYXRpb25NYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0zMywyOSArMzMsMjkgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VEZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UucXVhbGlmaWVyLlNlcnZpY2VRdWFsaWZpZXI7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5BcHBsaWNhdGlvbjsKIGltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkxheWVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTGF5ZXJEZXNjcmlwdG9yOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlRGVzY3JpcHRvcjsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkhpZXJhcmNoaWNhbFZpc2l0b3JBZGFwdGVyOwotaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuSXRlcmFibGVzOwogCitpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmFwaS5zZXJ2aWNlLnF1YWxpZmllci5TZXJ2aWNlUXVhbGlmaWVyLndpdGhJZDsKK2ltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMuZmlsdGVyOwogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5mdW5jdGlvbmFsLkl0ZXJhYmxlcy5maXJzdDsKIAogLyoqCi0gKiBFeHBvc2UgdGhlIFFpNGogYXBwIGFzIGEgInRyZWUiIG9mIE1CZWFucy4KKyAqIEV4cG9zZSB0aGUgWmVzdCBhcHAgYXMgYSAidHJlZSIgb2YgTUJlYW5zLgogICoKICAqIE90aGVyIHNlcnZpY2VzIHNob3VsZCByZXVzZSB0aGUgb2JqZWN0IG5hbWVzIGFuZCBjcmVhdGUKICAqIG5vZGVzIHVuZGVyIHRoZSBvbmVzIGNyZWF0ZWQgaGVyZS4gRm9yIGV4YW1wbGU6CiAgKiA8cHJlPgotICogUWk0ajphcHBsaWNhdGlvbj1NeUFwcCxsYXllcj1BcHBsaWNhdGlvbixtb2R1bGU9TXlNb2R1bGUsY2xhc3M9U2VydmljZSxzZXJ2aWNlPU15U2VydmljZQorICogWmVzdDphcHBsaWNhdGlvbj1NeUFwcCxsYXllcj1BcHBsaWNhdGlvbixtb2R1bGU9TXlNb2R1bGUsY2xhc3M9U2VydmljZSxzZXJ2aWNlPU15U2VydmljZQogICogPC9wcmU+CiAgKiBpcyBleHBvcnRlZCBieSB0aGlzIHNlcnZpY2UsIHNvIGFub3RoZXIgZXhwb3J0ZXIgc2hvd2luZyBzb21lIGFzcGVjdCByZWxhdGVkIHRvIHRoaXMgc2VydmljZSBzaG91bGQKICAqIHVzZSB0aGlzIGFzIGJhc2UgZm9yIHRoZSBPYmplY3ROYW1lLCBhbmQgYWRkIHRoZWlyIG93biBwcm9wZXJ0aWVzLiBFeGFtcGxlOgogICogPHByZT4KLSAqIFFpNGo6YXBwbGljYXRpb249TXlBcHAsbGF5ZXI9QXBwbGljYXRpb24sbW9kdWxlPU15TW9kdWxlLGNsYXNzPVNlcnZpY2Usc2VydmljZT1NeVNlcnZpY2UsbmFtZT1Db25maWd1cmF0aW9uCisgKiBaZXN0OmFwcGxpY2F0aW9uPU15QXBwLGxheWVyPUFwcGxpY2F0aW9uLG1vZHVsZT1NeU1vZHVsZSxjbGFzcz1TZXJ2aWNlLHNlcnZpY2U9TXlTZXJ2aWNlLG5hbWU9Q29uZmlndXJhdGlvbgogICogPC9wcmU+CiAgKiBVc2UgdGhlIGZvbGxvd2luZyBzbmlwcGV0IHRvIGZpbmQgdGhlIE9iamVjdE5hbWUgb2YgYSBzZXJ2aWNlIHdpdGggYSBnaXZlbiBpZGVudGl0eToKICAqIDxwcmU+CkBAIC02OSwzMiArNjksMzEgQEAKIHsKIAogICAgIHZvaWQgZXhwb3J0QXBwbGljYXRpb25TdHJ1Y3R1cmUoKQotICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAogICAgIHZvaWQgdW5leHBvcnRBcHBsaWNhdGlvblN0cnVjdHVyZSgpCi0gICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOworICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCi0gICAgc3RhdGljIGNsYXNzIEFjdGl2YXRvcgotICAgICAgICAgICAgZXh0ZW5kcyBBY3RpdmF0b3JBZGFwdGVyPFNlcnZpY2VSZWZlcmVuY2U8QXBwbGljYXRpb25NYW5hZ2VyU2VydmljZT4+CisgICAgY2xhc3MgQWN0aXZhdG9yCisgICAgICAgIGV4dGVuZHMgQWN0aXZhdG9yQWRhcHRlcjxTZXJ2aWNlUmVmZXJlbmNlPEFwcGxpY2F0aW9uTWFuYWdlclNlcnZpY2U+PgogICAgIHsKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgYWZ0ZXJBY3RpdmF0aW9uKCBTZXJ2aWNlUmVmZXJlbmNlPEFwcGxpY2F0aW9uTWFuYWdlclNlcnZpY2U+IGFjdGl2YXRlZCApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgICAgICB7CiAgICAgICAgICAgICBhY3RpdmF0ZWQuZ2V0KCkuZXhwb3J0QXBwbGljYXRpb25TdHJ1Y3R1cmUoKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBiZWZvcmVQYXNzaXZhdGlvbiggU2VydmljZVJlZmVyZW5jZTxBcHBsaWNhdGlvbk1hbmFnZXJTZXJ2aWNlPiBwYXNzaXZhdGluZyApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgICAgICB7CiAgICAgICAgICAgICBwYXNzaXZhdGluZy5nZXQoKS51bmV4cG9ydEFwcGxpY2F0aW9uU3RydWN0dXJlKCk7CiAgICAgICAgIH0KLQogICAgIH0KIAotICAgIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBNaXhpbgorICAgIGFic3RyYWN0IGNsYXNzIE1peGluCiAgICAgICAgIGltcGxlbWVudHMgQXBwbGljYXRpb25NYW5hZ2VyU2VydmljZQogICAgIHsKICAgICAgICAgQFNlcnZpY2UKQEAgLTEwMyw3ICsxMDIsNyBAQAogICAgICAgICBAU3RydWN0dXJlCiAgICAgICAgIHB1YmxpYyBBcHBsaWNhdGlvbiBhcHBsaWNhdGlvbjsKIAotICAgICAgICBwcml2YXRlIExpc3Q8T2JqZWN0TmFtZT4gbWJlYW5zID0gbmV3IEFycmF5TGlzdDxPYmplY3ROYW1lPigpOworICAgICAgICBwcml2YXRlIExpc3Q8T2JqZWN0TmFtZT4gbWJlYW5zID0gbmV3IEFycmF5TGlzdDw+KCk7CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIGV4cG9ydEFwcGxpY2F0aW9uU3RydWN0dXJlKCkKQEAgLTExMyw3ICsxMTIsNyBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIExheWVyIGxheWVyOwogICAgICAgICAgICAgICAgIE1vZHVsZSBtb2R1bGU7Ci0gICAgICAgICAgICAgICAgU3RhY2s8T2JqZWN0TmFtZT4gbmFtZXMgPSBuZXcgU3RhY2s8T2JqZWN0TmFtZT4oKTsKKyAgICAgICAgICAgICAgICBTdGFjazxPYmplY3ROYW1lPiBuYW1lcyA9IG5ldyBTdGFjazw+KCk7CiAKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiB2aXNpdEVudGVyKCBPYmplY3QgdmlzaXRlZCApCkBAIC0xMjUsMTcgKzEyNCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBhcHBsaWNhdGlvbi5maW5kTGF5ZXIoIGxheWVyRGVzY3JpcHRvci5uYW1lKCkgKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXJCZWFuIGxheWVyQmVhbiA9IG5ldyBMYXllckJlYW4oIGxheWVyLCBsYXllckRlc2NyaXB0b3IgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA9IG5ldyBPYmplY3ROYW1lKCAiUWk0ajphcHBsaWNhdGlvbj0iICsgYXBwbGljYXRpb24ubmFtZSgpICsgIixsYXllcj0iICsgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA9IG5ldyBPYmplY3ROYW1lKCAiWmVzdDphcHBsaWNhdGlvbj0iICsgYXBwbGljYXRpb24ubmFtZSgpICsgIixsYXllcj0iICsgbGF5ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubmFtZSgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKCBvYmplY3ROYW1lICk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkTW9kZWxNQmVhbiBtYmVhbiA9IG5ldyBNb2RlbE1CZWFuQnVpbGRlciggb2JqZWN0TmFtZSwgbGF5ZXJEZXNjcmlwdG9yLm5hbWUoKSwgTGF5ZXJCZWFuLmNsYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldE5hbWUoKSApLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSggInVzZXMiLCAiTGF5ZXIgdXNhZ2VzIiwgU3RyaW5nLmNsYXNzLmdldE5hbWUoKSwgIk90aGVyIGxheWVycyB0aGF0IHRoaXMgbGF5ZXIgdXNlcyIsICJnZXRVc2VzIiwgbnVsbCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24oICJyZXN0YXJ0IiwgIlJlc3RhcnQgbGF5ZXIiLCBTdHJpbmcuY2xhc3MuZ2V0TmFtZSgpLCBNQmVhbk9wZXJhdGlvbkluZm8uQUNUSU9OX0lORk8gKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TW9kZWxNQmVhbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vcGVyYXRpb24oICJyZXN0YXJ0IiwgIlJlc3RhcnQgbGF5ZXIiLCBTdHJpbmcuY2xhc3MuZ2V0TmFtZSgpLCBNQmVhbk9wZXJhdGlvbkluZm8uQUNUSU9OX0lORk8gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5uZXdNb2RlbE1CZWFuKCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWFuLnNldE1hbmFnZWRSZXNvdXJjZSggbGF5ZXJCZWFuLCAiT2JqZWN0UmVmZXJlbmNlIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnJlZ2lzdGVyTUJlYW4oIG1iZWFuLCBvYmplY3ROYW1lICk7CkBAIC0xNjQsNyArMTYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VEZXNjcmlwdG9yIHNlcnZpY2VEZXNjcmlwdG9yID0gKFNlcnZpY2VEZXNjcmlwdG9yKSB2aXNpdGVkOwogICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0TmFtZSBvYmplY3ROYW1lID0gbmV3IE9iamVjdE5hbWUoIG5hbWVzLnBlZWsoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKSArICIsY2xhc3M9U2VydmljZSxzZXJ2aWNlPSIgKyBzZXJ2aWNlRGVzY3JpcHRvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pZGVudGl0eSgpICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pZGVudGl0eSgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZE1vZGVsTUJlYW4gbWJlYW4gPSBuZXcgTW9kZWxNQmVhbkJ1aWxkZXIoIG9iamVjdE5hbWUsIHNlcnZpY2VEZXNjcmlwdG9yLmlkZW50aXR5KCksIFNlcnZpY2VCZWFuLmNsYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldE5hbWUoKSApLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSggIklkIiwgIlNlcnZpY2UgaWQiLCBTdHJpbmcuY2xhc3MuZ2V0TmFtZSgpLCAiSWQgb2Ygc2VydmljZSIsICJnZXRJZCIsIG51bGwgKS4KQEAgLTE5MCw3ICsxODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgSW1wb3J0ZWRTZXJ2aWNlRGVzY3JpcHRvciBpbXBvcnRlZFNlcnZpY2VEZXNjcmlwdG9yID0gKEltcG9ydGVkU2VydmljZURlc2NyaXB0b3IpIHZpc2l0ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3ROYW1lIG9iamVjdE5hbWUgPSBuZXcgT2JqZWN0TmFtZSggbmFtZXMucGVlaygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpICsgIixjbGFzcz1JbXBvcnRlZCBzZXJ2aWNlLGltcG9ydGVkc2VydmljZT0iICsgaW1wb3J0ZWRTZXJ2aWNlRGVzY3JpcHRvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pZGVudGl0eSgpICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pZGVudGl0eSgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZE1vZGVsTUJlYW4gbWJlYW4gPSBuZXcgTW9kZWxNQmVhbkJ1aWxkZXIoIG9iamVjdE5hbWUsIGltcG9ydGVkU2VydmljZURlc2NyaXB0b3IuaWRlbnRpdHkoKSwgSW1wb3J0ZWRTZXJ2aWNlQmVhbi5jbGFzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXROYW1lKCkgKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUoICJJZCIsICJTZXJ2aWNlIGlkIiwgU3RyaW5nLmNsYXNzLmdldE5hbWUoKSwgIklkIG9mIHNlcnZpY2UiLCAiZ2V0SWQiLCBudWxsICkuCkBAIC0yMzQsNyArMjMxLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTGF5ZXJCZWFuCisgICAgY2xhc3MgTGF5ZXJCZWFuCiAgICAgewogICAgICAgICBwcml2YXRlIGZpbmFsIExheWVyIGxheWVyOwogICAgICAgICBwcml2YXRlIGZpbmFsIExheWVyRGVzY3JpcHRvciBsYXllckRlc2NyaXB0b3I7CkBAIC0yNzMsNyArMjcwLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU2VydmljZUJlYW4KKyAgICBjbGFzcyBTZXJ2aWNlQmVhbgogICAgIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTZXJ2aWNlRGVzY3JpcHRvciBzZXJ2aWNlRGVzY3JpcHRvcjsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBNb2R1bGUgbW9kdWxlOwpAQCAtMjk2LDI3ICsyOTMsMzggQEAKIAogICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmlyc3QoIHNlcnZpY2VEZXNjcmlwdG9yLnR5cGVzKCkgKS5nZXROYW1lKCk7CisgICAgICAgICAgICBDbGFzczw/PiBmaXJzdCA9IGZpcnN0KCBzZXJ2aWNlRGVzY3JpcHRvci50eXBlcygpICk7CisgICAgICAgICAgICBpZiggZmlyc3QgPT0gbnVsbCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmlyc3QuZ2V0TmFtZSgpOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIGJvb2xlYW4gaXNBY3RpdmUoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSXRlcmFibGVzLmZpcnN0KCBJdGVyYWJsZXMuZmlsdGVyKCBTZXJ2aWNlUXVhbGlmaWVyLndpdGhJZCggc2VydmljZURlc2NyaXB0b3IuaWRlbnRpdHkoKSApLCBtb2R1bGUuZmluZFNlcnZpY2VzKCBmaXJzdCggc2VydmljZURlc2NyaXB0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGVzKCkgKSApICkgKQotICAgICAgICAgICAgICAgIC5pc0FjdGl2ZSgpOworICAgICAgICAgICAgQ2xhc3M8Pz4gbWFpblR5cGUgPSBmaXJzdCggc2VydmljZURlc2NyaXB0b3IudHlwZXMoKSApOworICAgICAgICAgICAgU2VydmljZVJlZmVyZW5jZTw/PiBmaXJzdCA9IGZpcnN0KCBmaWx0ZXIoIHdpdGhJZCggc2VydmljZURlc2NyaXB0b3IuaWRlbnRpdHkoKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5maW5kU2VydmljZXMoIG1haW5UeXBlICkgKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiBmaXJzdCAhPSBudWxsICYmIGZpcnN0LmlzQWN0aXZlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0F2YWlsYWJsZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBJdGVyYWJsZXMuZmlyc3QoIEl0ZXJhYmxlcy5maWx0ZXIoIFNlcnZpY2VRdWFsaWZpZXIud2l0aElkKCBzZXJ2aWNlRGVzY3JpcHRvci5pZGVudGl0eSgpICksIG1vZHVsZS5maW5kU2VydmljZXMoIGZpcnN0KCBzZXJ2aWNlRGVzY3JpcHRvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZXMoKSApICkgKSApCi0gICAgICAgICAgICAgICAgLmlzQXZhaWxhYmxlKCk7CisgICAgICAgICAgICBDbGFzczw/PiBtYWluVHlwZSA9IGZpcnN0KCBzZXJ2aWNlRGVzY3JpcHRvci50eXBlcygpICk7CisgICAgICAgICAgICBTZXJ2aWNlUmVmZXJlbmNlPD8+IGZpcnN0ID0gZmlyc3QoIGZpbHRlciggd2l0aElkKCBzZXJ2aWNlRGVzY3JpcHRvci5pZGVudGl0eSgpICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmZpbmRTZXJ2aWNlcyggbWFpblR5cGUgKSApCisgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIGZpcnN0ICE9IG51bGwgJiYgZmlyc3QuaXNBdmFpbGFibGUoKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgcmVzdGFydCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEl0ZXJhYmxlIHNlcnZpY2VzID0gbW9kdWxlLmZpbmRTZXJ2aWNlcyggZmlyc3QoIHNlcnZpY2VEZXNjcmlwdG9yLnR5cGVzKCkgKSApOwotICAgICAgICAgICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmID0gKCBTZXJ2aWNlUmVmZXJlbmNlICkgSXRlcmFibGVzLmZpcnN0KCBJdGVyYWJsZXMuZmlsdGVyKCBTZXJ2aWNlUXVhbGlmaWVyLndpdGhJZCggc2VydmljZURlc2NyaXB0b3IuaWRlbnRpdHkoKSApLCBzZXJ2aWNlcyApICk7CisgICAgICAgICAgICBJdGVyYWJsZTw/PiBzZXJ2aWNlcyA9IG1vZHVsZS5maW5kU2VydmljZXMoIGZpcnN0KCBzZXJ2aWNlRGVzY3JpcHRvci50eXBlcygpICkgKTsKKyAgICAgICAgICAgIFNlcnZpY2VSZWZlcmVuY2U8Pz4gc2VydmljZVJlZiA9IChTZXJ2aWNlUmVmZXJlbmNlKSBmaXJzdCggZmlsdGVyKCB3aXRoSWQoIHNlcnZpY2VEZXNjcmlwdG9yLmlkZW50aXR5KCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlcyApCisgICAgICAgICAgICApOwogICAgICAgICAgICAgaWYoIHNlcnZpY2VSZWYgIT0gbnVsbCApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdHJ5CkBAIC0zMzcsNyArMzQ1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wb3J0ZWRTZXJ2aWNlQmVhbgorICAgIGNsYXNzIEltcG9ydGVkU2VydmljZUJlYW4KICAgICB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgSW1wb3J0ZWRTZXJ2aWNlRGVzY3JpcHRvciBzZXJ2aWNlRGVzY3JpcHRvcjsKIApAQCAtMzU4LDcgKzM2NiwxMiBAQAogCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmaXJzdCggc2VydmljZURlc2NyaXB0b3IudHlwZXMoKSApLmdldE5hbWUoKTsKKyAgICAgICAgICAgIENsYXNzPD8+IG1haW5UeXBlID0gZmlyc3QoIHNlcnZpY2VEZXNjcmlwdG9yLnR5cGVzKCkgKTsKKyAgICAgICAgICAgIGlmKCBtYWluVHlwZSA9PSBudWxsICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYWluVHlwZS5nZXROYW1lKCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvam14L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9qbXgvTUJlYW5UcmFja2VyLmphdmEgYi9saWJyYXJpZXMvam14L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9qbXgvTUJlYW5UcmFja2VyLmphdmEKaW5kZXggYjY2NWE2Ni4uNWZlNjY3YyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2pteC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvam14L01CZWFuVHJhY2tlci5qYXZhCisrKyBiL2xpYnJhcmllcy9qbXgvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2pteC9NQmVhblRyYWNrZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmpteDsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvam14L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9qbXgvUWk0ak1CZWFucy5qYXZhIGIvbGlicmFyaWVzL2pteC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvam14L1FpNGpNQmVhbnMuamF2YQppbmRleCA5ZWMwZTk1Li5mZDcxYTQ1IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvam14L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9qbXgvUWk0ak1CZWFucy5qYXZhCisrKyBiL2xpYnJhcmllcy9qbXgvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2pteC9RaTRqTUJlYW5zLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLlNwZWNpZmljYXRpb247CiAKIC8qKgotICogSGVscGVyIGZvciB3b3JraW5nIHdpdGggUWk0aiBNQmVhbnMuCisgKiBIZWxwZXIgZm9yIHdvcmtpbmcgd2l0aCBaZXN0IE1CZWFucy4KICAqLwogcHVibGljIGNsYXNzIFFpNGpNQmVhbnMKIHsKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRLZXlQcm9wZXJ0eUxpc3QoKS5zaXplKCkgPT0gNTsKICAgICAgICAgICAgIH0KIAotICAgICAgICB9LCBzZXJ2ZXIucXVlcnlOYW1lcyggbmV3IE9iamVjdE5hbWUoICJRaTRqOmFwcGxpY2F0aW9uPSIgKyBhcHBsaWNhdGlvbk5hbWUgKyAiLCosc2VydmljZT0iICsgc2VydmljZUlkICksIG51bGwgKSApICk7CisgICAgICAgIH0sIHNlcnZlci5xdWVyeU5hbWVzKCBuZXcgT2JqZWN0TmFtZSggIlplc3Q6YXBwbGljYXRpb249IiArIGFwcGxpY2F0aW9uTmFtZSArICIsKixzZXJ2aWNlPSIgKyBzZXJ2aWNlSWQgKSwgbnVsbCApICkgKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9qbXgvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2pteC9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvam14L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9qbXgvcGFja2FnZS5odG1sCmluZGV4IDcxNDcwNmIuLjQ3NGU4NGIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9qbXgvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2pteC9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2pteC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvam14L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+Sk1YIExpYnJhcnkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9SRUFETUUudHh0IGIvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlZTYxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9SRUFETUUudHh0CkBAIC0wLDAgKzEsMTAgQEAKKworQmVhblNoZWxsIGlzIGxpY2Vuc2VkIHVuZGVyIExHUEwsIGFuZCBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorZG9lc24ndCBhbGxvdyB0aGUgdXNlIG9mIExHUEwgaW4gQXBhY2hlIHByb2plY3RzLgorCitUaGVyZWZvciwgQXBhY2hlIFplc3TihKIgaGFkIHRvIGRyb3AgdGhpcyBsaWJyYXJ5IGNvbXBvbmVudCwgYnV0CitpdCBpcyBzdGlsbCBhdmFpbGFibGUgZm9yIHNlcGFyYXRlIGRvd25sb2FkIGF0CisKK2h0dHBzOi8vZ2l0aHViLmNvbS9RaTRqL3FpNGotc2RrCisKK2luIHRoZSBsaWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9idWlsZC5ncmFkbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZWIzYmEuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL2J1aWxkLmdyYWRsZQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogQmVhblNoZWxsIExpYnJhcnkgYWxsb3dzIGZvciBNaXhpbnMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gQmVhblNoZWxsIChKYXZhKSBzY3JpcHRzIGluc3RlYWQgb2YgZGlyZWN0bHkgaW4gY29tcGlsZWQgSmF2YS4iCi0KLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBTY3JpcHRpbmcgLSBCZWFuU2hlbGwiIH19Ci0KLWRlcGVuZGVuY2llcyB7Ci0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKLSAgY29tcGlsZSggcHJvamVjdCggJzpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5zY3JpcHRpbmcnICkpCi0gIGNvbXBpbGUobGlicmFyaWVzLmJlYW5zaGVsbCkKLQotICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikpCi0KLSAgdGVzdFJ1bnRpbWUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lIikpCi0gIHRlc3RSdW50aW1lKGxpYnJhcmllcy5sb2diYWNrKQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL2Rldi1zdGF0dXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTRkM2FhLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9kZXYtc3RhdHVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgotICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQotICAgICAgICBodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEvZGV2LXN0YXR1cy54c2QiPgotICA8c3RhdHVzPgotICAgIDwhLS1ub25lLGVhcmx5LGJldGEsc3RhYmxlLG1hdHVyZS0tPgotICAgIDxjb2RlYmFzZT5iZXRhPC9jb2RlYmFzZT4KLQotICAgIDwhLS0gbm9uZSwgYnJpZWYsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDxkb2N1bWVudGF0aW9uPm5vbmU8L2RvY3VtZW50YXRpb24+Ci0KLSAgICA8IS0tIG5vbmUsIHNvbWUsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDx1bml0dGVzdHM+c29tZTwvdW5pdHRlc3RzPgotICA8L3N0YXR1cz4KLSAgPGxpY2Vuc2VzPgotICAgIDxsaWNlbnNlPkFMdjI8L2xpY2Vuc2U+Ci0gIDwvbGljZW5zZXM+Ci08L21vZHVsZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvbGljZW5zZXMvbGdwbC5saWNlbnNlIGIvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL2xpY2Vuc2VzL2xncGwubGljZW5zZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg4ZThhNi4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvbGljZW5zZXMvbGdwbC5saWNlbnNlCisrKyAvZGV2L251bGwKQEAgLTEsMzIxICswLDAgQEAKLVRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgotCi0wLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIgcHJvZ3JhbQotd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQKLXBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGVzc2VyIEdlbmVyYWwKLVB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzCi0ieW91Ii4KLQotQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YSBwcmVwYXJlZAotc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zICh3aGljaCB1c2Ugc29tZQotb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgotCi1UaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yayB3aGljaAotaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuIEEgIndvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkiCi1tZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0Ci1pcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyCi12ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgc3RyYWlnaHRmb3J3YXJkbHkgaW50bwotYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24KLWluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKLQotIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nCi1tb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlCi1zb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlCi1kZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQKLWluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQotQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKLWNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdCBvZiBydW5uaW5nIGEKLXByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEKLXByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKLUxpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvciB3cml0aW5nIGl0KS4KLVdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtCi10aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KLQotMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzIGNvbXBsZXRlCi1zb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKLWNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKLWNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcwotdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kCi1kaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgTGlicmFyeS4KLQotWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdQotbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgotCi0yLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uIG9mIGl0LAotdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaAotbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQKLXlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6Ci0KLSAgICAqIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KLSAgICAqIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KLSAgICAqIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UKLSAgICAgICAgIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCi0gICAgKiBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKLSAgICAgICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKLSAgICAgICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKLSAgICAgICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZQotICAgICAgICAgdGhhdCwgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uCi0gICAgICAgICBvciB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydAotICAgICAgICAgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgotCi0gICAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcyBhCi0gICAgICBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4KLSAgICAgIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueSBhcHBsaWNhdGlvbi1zdXBwbGllZAotICAgICAgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3B0aW9uYWw6IGlmIHRoZQotICAgICAgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbAotICAgICAgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQotCi1UaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYgaWRlbnRpZmlhYmxlCi1zZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksIGFuZCBjYW4gYmUKLXJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbgotdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UKLWRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUKLXNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHRoZQotZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHdob3NlCi1wZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0bwotZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KLQotVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIKLXJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UKLXRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzCi1iYXNlZCBvbiB0aGUgTGlicmFyeS4KLQotSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQotd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mIGEKLXN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUKLXNjb3BlIG9mIHRoaXMgTGljZW5zZS4KLQotMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiBUbyBkbwotdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbyB0aGF0Ci10aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBpbnN0ZWFkCi1vZiB0byB0aGlzIExpY2Vuc2UuIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdOVQotR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5IHRoYXQgdmVyc2lvbgotaW5zdGVhZCBpZiB5b3Ugd2lzaC4pIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4gdGhlc2Ugbm90aWNlcy4KLQotT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvciB0aGF0Ci1jb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwgc3Vic2VxdWVudAotY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCi0KLVRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZiB0aGUKLUxpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgotCi00LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mCi1pdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCi1TZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZQotY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkCi11bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvcgotc29mdHdhcmUgaW50ZXJjaGFuZ2UuCi0KLUlmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYQotZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZQotZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvIGRpc3RyaWJ1dGUgdGhlIHNvdXJjZQotY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcKLXdpdGggdGhlIG9iamVjdCBjb2RlLgotCi01LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBMaWJyYXJ5LAotYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvciBsaW5rZWQgd2l0aAotaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuIFN1Y2ggYSB3b3JrLCBpbiBpc29sYXRpb24sCi1pcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZCB0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUKLXNjb3BlIG9mIHRoaXMgTGljZW5zZS4KLQotSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSBjcmVhdGVzCi1hbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0IGNvbnRhaW5zCi1wb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlCi1leGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4gU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcwotZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgotCi1XaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0Ci1pcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhIGRlcml2YXRpdmUKLXdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4gV2hldGhlciB0aGlzIGlzCi10cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlIGxpbmtlZCB3aXRob3V0IHRoZQotTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gVGhlIHRocmVzaG9sZCBmb3IgdGhpcyB0byBiZQotdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgotCi1JZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1cmUKLWxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lIGZ1bmN0aW9ucyAodGVuCi1saW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0IGZpbGUgaXMgdW5yZXN0cmljdGVkLAotcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlIHdvcmsuIChFeGVjdXRhYmxlcwotY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgd2lsbCBzdGlsbCBmYWxsCi11bmRlciBTZWN0aW9uIDYuKQotCi1PdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heSBkaXN0cmlidXRlCi10aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuIEFueSBleGVjdXRhYmxlcwotY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwgd2hldGhlciBvciBub3QgdGhleSBhcmUKLWxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KLQotNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IgbGluayBhCi0id29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhIHdvcmsgY29udGFpbmluZwotcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyCi1jaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdCBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZQotY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaAotbW9kaWZpY2F0aW9ucy4KLQotWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlIExpYnJhcnkKLWlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcwotTGljZW5zZS4gWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIElmIHRoZSB3b3JrIGR1cmluZwotZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQKLW5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlCi11c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gQWxzbywgeW91IG11c3QgZG8gb25lIG9mIHRoZXNlIHRoaW5nczoKLQotICAgICogYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS0KLSAgICAgICAgIHJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIgY2hhbmdlcwotICAgICAgICAgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIFNlY3Rpb25zIDEKLSAgICAgICAgIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZCB3aXRoIHRoZQotICAgICAgICAgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0IHVzZXMgdGhlCi0gICAgICAgICBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbgotICAgICAgICAgbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKLSAgICAgICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gKEl0IGlzIHVuZGVyc3Rvb2QKLSAgICAgICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluCi0gICAgICAgICB0aGUgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUKLSAgICAgICAgIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQotICAgICogYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCi0gICAgICAgICBMaWJyYXJ5LiBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCi0gICAgICAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyCi0gICAgICAgICBzeXN0ZW0sIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUKLSAgICAgICAgIGV4ZWN1dGFibGUsIGFuZCAoMikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZAotICAgICAgICAgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZQotICAgICAgICAgbW9kaWZpZWQgdmVyc2lvbiBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQKLSAgICAgICAgIHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCi0gICAgKiBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQotICAgICAgICAgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzIHNwZWNpZmllZCBpbgotICAgICAgICAgU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YKLSAgICAgICAgIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCi0gICAgKiBkKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQotICAgICAgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCi0gICAgICAgICBhYm92ZSBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCi0gICAgKiBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKLSAgICAgICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgotCi1Gb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIKLW11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZQotZXhlY3V0YWJsZSBmcm9tIGl0LiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgbWF0ZXJpYWxzIHRvIGJlCi1kaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluCi1laXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLAotYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MKLXRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KLQotSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UgcmVzdHJpY3Rpb25zCi1vZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkgYWNjb21wYW55IHRoZQotb3BlcmF0aW5nIHN5c3RlbS4gU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdCB1c2UgYm90aCB0aGVtIGFuZAotdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdSBkaXN0cmlidXRlLgotCi03LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkKLXNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzCi1ub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5LAotcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5Ci1hbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UgcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQKLXRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6Ci0KLSAgICAqIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrIGJhc2VkCi0gICAgICAgICBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMuCi0gICAgICAgICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBTZWN0aW9ucyBhYm92ZS4KLSAgICAqIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgIHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZQotICAgICAgICAgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgotCi04LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUKLUxpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0Ci1vdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlCi1MaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMKLUxpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91Ci11bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAotcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgotCi05LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkCi1pdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZQotdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3Ci1pZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZwotdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIKLWFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IKLWNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCi0KLTEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCi1MaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbAotbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeSBzdWJqZWN0IHRvCi10aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbgotdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90Ci1yZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KLQotMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKLWluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCi1jb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCi1vdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90Ci1leGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUKLXNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kCi1hbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QKLWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QKLXBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlCi1jb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkCi1zYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KLQotSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQotcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LAotYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KLQotSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQotcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaAotY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mCi10aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYwotbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZQotd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uCi1jb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvCi1kZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlcgotc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuCi0KLVRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhCi1jb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCi0KLTEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluCi1jb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsCi1jb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4KLWV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLAotc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCi1leGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCi13cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KLQotMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCi1vZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zCi13aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbAotdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCi0KLUVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgTGlicmFyeQotc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCi0iYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCi1jb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZQotRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZQotdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi1Tb2Z0d2FyZSBGb3VuZGF0aW9uLgotCi0xNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCi1wcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlCi10byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZQotc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28KLWdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZQotc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgotCi1OTyBXQVJSQU5UWQotCi0xNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKLUZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOCi1PVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCi1QUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAotT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUwotVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUJSQVJZIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFCi1MSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKLVJFUEFJUiBPUiBDT1JSRUNUSU9OLgotCi0xNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCi1XSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCi1SRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAotSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVAotTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUwotU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFCi1XSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4KLUFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvbGljZW5zZXMvc3BsLmxpY2Vuc2UgYi9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvbGljZW5zZXMvc3BsLmxpY2Vuc2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMGRmYTkuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL2xpY2Vuc2VzL3NwbC5saWNlbnNlCisrKyAvZGV2L251bGwKQEAgLTEsNDcyICswLDAgQEAKLSBTVU4gUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAxLjAKLQotMS4gRGVmaW5pdGlvbnMuCi0KLQkxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKLQlDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCi0KLQkxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCi0JdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCi0KLQkxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsCi0JcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlCi0JYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgotCi0JMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQotCWNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UKLQlpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZiBhbmQgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uIHJlbGVhc2VkCi0Jd2l0aCB0aGUgc291cmNlIGNvZGUuCi0KLQkxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQotCWFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCi0JdHJhbnNmZXIgb2YgZGF0YS4KLQotCTEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQotCUNvZGUuCi0KLQkxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMKLQl0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCi0KLQkxLjcuICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvcgotCXBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgotCi0JMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KLQotCTEuOC4xLiAiTGljZW5zYWJsZSIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KLQlleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3IKLQlzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgotCi0JMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlCi0Jc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCi0JTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKLQlNb2RpZmljYXRpb24gaXM6Ci0KLQlBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKLQlPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCi0KLQlCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvcgotCXByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCi0KLQkxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQotCXdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcwotCU9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcwotCUxpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KLQotCTEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvcgotCWhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQKLQlhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KLQotCTEuMTEuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yCi0JbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cwotCWFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQKLQl0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlCi0JY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IKLQlhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MKLQljaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sCi0JcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzCi0Jd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgotCi0JMS4xMi4gIllvdSIgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQotCWV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcwotCUxpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgotCUZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMKLQljb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mCi0JdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0bwotCWNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdAotCW9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUKLQlvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLTIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCi0KLTIuMSBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCi0KLQlUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCi0Jbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQotCWNsYWltczoKLQotCShhKSAgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKLQl0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKLQlkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvcgotCXBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhCi0JTGFyZ2VyIFdvcms7IGFuZAotCi0JKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YKLQlPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3IKLQlzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zCi0JdGhlcmVvZikuCi0KLQkoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUKLQlvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyCi0JdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KLQotCShkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCi0JZ3JhbnRlZDogMSkgCWZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKQotCXNlcGFyYXRlIGZyb20gdGhlIAlPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6Ci0JaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZQotCU9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgotCi0yLjIuIENvbnRyaWJ1dG9yIEdyYW50LgotCi0JU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yCi0JaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQotCi0JKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCi0JdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgIG1vZGlmeSwKLQlkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQKLQlieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZAotCWJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhCi0JTGFyZ2VyIFdvcms7IGFuZAotCi0JKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mCi0JTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbgotCWNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2gKLQljb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yCi0Jb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvcgotCXBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieQotCXRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaAotCWNvbWJpbmF0aW9uKS4KLQotCShjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlCi0Jb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQKLQlDb2RlLgotCi0JKGQpICBub3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCi0JZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUKLQlDb250cmlidXRvciBWZXJzaW9uOyAyKSAgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMykgZm9yCi0JaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IKLQlWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKLQlDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IKLQlWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieQotCUNvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KLQotMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgotCi0zLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCi0KLQlUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQotCWdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLQlTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZQotCWRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uCi0Jb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhCi0JY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKLQlkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQotCXZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcwotCUxpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZQotCWFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbgotCVNlY3Rpb24gMy41LgotCi0zLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KLQotCUFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlCi0JbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCi0JZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQKLQlFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4KLQlFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMKLQlEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpCi0JbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXgKLQkoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24KLQloYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yCi0JZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZQotCUVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCi0KLTMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KLQotCVlvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhCi0JZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kCi0JdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAotCXRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbAotCUNvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCi0JSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCi0JRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlCi0Jb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgotCi0zLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgotCi0JKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KLQotCUlmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzCi0JaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzCi0JZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yCi0JbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQKLQkiTEVHQUwnJyB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbgotCXN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYKLQlDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZQotCWF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5Ci0JbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlCi0JdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUKLQltYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvCi0JcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCi0KLQkoYikgQ29udHJpYnV0b3IgQVBJcy4KLQotCUlmIENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCi0JaW50ZXJmYWNlICgiQVBJIikgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzCi0Jd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdAotCWFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgotCi0JKGMpIFJlcHJlc2VudGF0aW9ucy4KLQotCUNvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uCi0JMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucwotCWFyZSBDb250cmlidXRvcidzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMKLQlzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KLQotMy41LiBSZXF1aXJlZCBOb3RpY2VzLgotCi0JWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCi0JQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlCi0JQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYQotCWxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5Ci0JdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKQotCVlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCi0JRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24KLQlmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgb3Igb3duZXJzaGlwCi0JcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bwotCWNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5Ci0Jb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdQotCW1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwKLQlEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbgotCWFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMKLQlvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsCi0JRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUKLQlJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LAotCXN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgotCi0zLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgotCi0JWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUKLQlyZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAotCWFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YKLQl0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAotCWluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQotCW9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZAotCWluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKLQljb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlCi0JQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkCi0JQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5Ci0JY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbgotCWNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUKLQlFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MKLQlyaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzCi0JTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudAotCWxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlcgotCWZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCi0JRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlCi0JSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5Ci0JdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKLQl0ZXJtcyBZb3Ugb2ZmZXIuCi0KLTMuNy4gTGFyZ2VyIFdvcmtzLgotCi0JWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZQotCW5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKLQlXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCi0JcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgotCi00LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCi0KLQlJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCi0JTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8KLQlzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGgKLQl0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKQotCWRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24KLQltdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdAotCWJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlCi0JZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUKLQlzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KLQl1bmRlcnN0YW5kIGl0LgotCi01LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLQlUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKLQlhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCi0KLTYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgotCi02LjEuIE5ldyBWZXJzaW9ucy4KLQotCVN1biBNaWNyb3N5c3RlbXMsIEluYy4gKCJTdW4iKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKLQlvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYQotCWRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgotCi02LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCi0KLQlPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlCi0JTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0Ci0JdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zCi0Jb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3VuLiBObyBvbmUKLQlvdGhlciB0aGFuIFN1biBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkCi0JQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KLQotNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgotCi0JSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heQotCW9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUKLQlnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdDogKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdAotCXRoZSBwaHJhc2VzICJTdW4sIiAiU3VuIFB1YmxpYyBMaWNlbnNlLCIgb3IgIlNQTCIgb3IgYW55IGNvbmZ1c2luZ2x5Ci0Jc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91cgotCWxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhcgotCXRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZQotCVN1biBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLAotCU9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBCi0Jc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcwotCUxpY2Vuc2UuKQotCi03LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgotCi0JQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMnJyBCQVNJUywKLQlXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKLQlXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YKLQlERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuCi0JVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFCi0JSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwKLQlZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFCi0JQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUgotCU9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GCi0JQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgotCi04LiBURVJNSU5BVElPTi4KLQotCTguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCi0JYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZQotCXN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAotCXN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwKLQlzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCi0JbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKLQlzaGFsbCBzdXJ2aXZlLgotCi0JOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50Ci0JY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyCi0Jb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbQotCVlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpICBhbGxlZ2luZyB0aGF0OgotCi0JKGEpIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkKLQlpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoCi0JUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZQotCXNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksCi0JdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKQotCWFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUKLQlyb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gKLQlQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvCi0JdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiAgSWYgd2l0aGluIDYwIGRheXMKLQlvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QKLQltdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltCi0JaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgotCVNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mCi0JdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KLQotCShiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzCi0JQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbgotCWFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikKLQlhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwKLQlzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0Ci0JUGFydGljaXBhbnQuCi0KLQk4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQKLQlhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yCi0JaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzCi0JYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQKLQlpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMKLQlncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbgotCWludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yCi0JbGljZW5zZS4KLQotCTguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsICBhbGwKLQllbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykKLQl3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyCi0JcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KLQotOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCi0KLQlVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAotCShJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwKLQlERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwKLQlPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SCi0JQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZCi0JQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLAotCVdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSCi0JQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTgotCUlORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgotCUxJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKLQlSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXCi0JUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUKLQlFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08KLQlUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KLQotMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCi0KLQlUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4Ci0JQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIgotCWFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUKLQl1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuCi0JMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbAotCVUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cwotCXNldCBmb3J0aCBoZXJlaW4uCi0KLTExLiBNSVNDRUxMQU5FT1VTLgotCi0JVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QKLQltYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCi0JdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50Ci0JbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieQotCUNhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZgotCWFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4KLQlXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwKLQlvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZAotCVN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKLQlzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybgotCURpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAotCUNhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZwotCXdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZAotCWV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KLQlDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgotCUFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0Ci0Jc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMKLQlMaWNlbnNlLgotCi0xMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KLQotCUFzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMKLQlyZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCi0Jb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8KLQl3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2gKLQlyZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCi0Jc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCi0KLTEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgotCi0JSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzCi0JIk11bHRpcGxlLUxpY2Vuc2VkIi4gIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsCi0JRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlcgotCVlvdXIgY2hvaWNlIG9mIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlCi0JSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KLQotRXhoaWJpdCBBIC1TdW4gUHVibGljIExpY2Vuc2UgTm90aWNlLgotCi0JVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU3VuIFB1YmxpYyBMaWNlbnNlCi0JVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgotCWNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGF2YWlsYWJsZSBhdAotCWh0dHA6Ly93d3cuc3VuLmNvbS8KLQotCVRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlCi0JT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fXy4gUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX18gYXJlIENvcHlyaWdodAotCShDKV9fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLQotCUNvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KLQotCUFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCi0Jb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAgIltfX19dIExpY2Vuc2UiKSwgaW4gd2hpY2ggY2FzZSB0aGUKLQlwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuCi0JSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUKLQl0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKLQl2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgU1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nCi0JdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlcgotCXByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQotCXByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgotCWVpdGhlciB0aGUgU1BMIG9yIHRoZSBbX19fXSBMaWNlbnNlLiIKLQotCVtOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YKLQl0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQKLQl1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlCi0JT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KLQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL3NyYy9kb2NzL2xhbmctYmVhbnNoZWxsLnR4dCBiL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9zcmMvZG9jcy9sYW5nLWJlYW5zaGVsbC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NzBiZGYuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL3NyYy9kb2NzL2xhbmctYmVhbnNoZWxsLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLVtbbGlicmFyeS1zY3JpcHQtYmVhbnNoZWxsLCBCZWFuc2hlbGwgU2NyaXB0aW5nIExpYnJhcnldXQotPSBCZWFuc2hlbGwgU2NyaXB0aW5nID0KLQotW2RldnN0YXR1c10KLS0tLS0tLS0tLS0tLS0tCi1zb3VyY2U9bGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL2Rldi1zdGF0dXMueG1sCi0tLS0tLS0tLS0tLS0tLQotCi1CZWFuc2hlbGwgU2NyaXB0aW5nIExpYnJhcnkKLQotTk9URTogVGhpcyBMaWJyYXJ5IGhhcyBubyBkb2N1bWVudGF0aW9uIHlldC4gTGVhcm4gaG93IHRvIGNvbnRyaWJ1dGUgaW4gPDxjb21tdW5pdHktZG9jcz4+LgotCi1pbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGFuZy9iZWFuc2hlbGwvQmVhblNoZWxsTWl4aW4uamF2YSBiL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvYmVhbnNoZWxsL0JlYW5TaGVsbE1peGluLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNzY2MDUuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGFuZy9iZWFuc2hlbGwvQmVhblNoZWxsTWl4aW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDggTmljbGFzIEhlZGhtYW4KLSAqIENvcHlyaWdodCAyMDA3LTIwMDggUmlja2FyZCDDlmJlcmcKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotcGFja2FnZSBvcmcucWk0ai5sYW5nLmJlYW5zaGVsbDsKLQotaW1wb3J0IGJzaC5Cc2hDbGFzc01hbmFnZXI7Ci1pbXBvcnQgYnNoLkV2YWxFcnJvcjsKLWltcG9ydCBic2guSW50ZXJwcmV0ZXI7Ci1pbXBvcnQgYnNoLk5hbWVTcGFjZTsKLWltcG9ydCBic2guY2xhc3NwYXRoLkJzaENsYXNzUGF0aDsKLWltcG9ydCBic2guY2xhc3NwYXRoLkNsYXNzTWFuYWdlckltcGw7Ci1pbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLkFwcGxpZXNUbzsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLkFwcGxpZXNUb0ZpbHRlcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlRyYW5zaWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKLWltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrRmFjdG9yeTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNjcmlwdGluZy5TY3JpcHRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zY3JpcHRpbmcuU2NyaXB0UmVsb2FkYWJsZTsKLQotLyoqCi0gKiBHZW5lcmljIG1peGluIHRoYXQgaW1wbGVtZW50cyBpbnRlcmZhY2VzIGJ5IGRlbGVnYXRpbmcgdG8gQmVhblNoZWxsIG1ldGhvZHMKLSAqIEVhY2ggbWV0aG9kIGluIGFuIGludGVyZmFjZSBpcyBkZWNsYXJlZCBieSBhIEJlYW5TaGVsbCBtZXRob2QKLSAqIGluIGEgZmlsZSBsb2NhdGVkIGluIGNsYXNzcGF0aCB3aXRoIHRoZSBuYW1lICImbHQ7aW50ZXJmYWNlJmd0Oy5ic2giLAotICogd2hlcmUgdGhlIGludGVyZmFjZSBuYW1lIGluY2x1ZGVzIHRoZSBwYWNrYWdlLCBhbmQgaGFzICIuIiByZXBsYWNlZCB3aXRoICIvIi4KLSAqIDxwPgotICogRXhhbXBsZToKLSAqIDwvcD4KLSAqIDxwPgotICogb3JnL3FpNGovc2FtcGxlcy9oZWxsby9kb21haW4vSGVsbG9Xb3JsZFNwZWFrZXIuYnNoCi0gKiA8L3A+Ci0gKi8KLUBBcHBsaWVzVG8oIEJlYW5TaGVsbE1peGluLkFwcGxpZXNUby5jbGFzcyApCi1wdWJsaWMgY2xhc3MgQmVhblNoZWxsTWl4aW4KLSAgICBpbXBsZW1lbnRzIEludm9jYXRpb25IYW5kbGVyLCBTY3JpcHRSZWxvYWRhYmxlCi17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcDxNb2R1bGUsIEludGVycHJldGVyPiBydW50aW1lczsKLQotICAgIEBUaGlzIHByaXZhdGUgQ29tcG9zaXRlIG1lOwotICAgIEBTdHJ1Y3R1cmUgcHJpdmF0ZSBNb2R1bGUgbW9kdWxlOwotICAgIEBTdHJ1Y3R1cmUgcHJpdmF0ZSBUcmFuc2llbnRCdWlsZGVyRmFjdG9yeSBjb21wb3NpdGVCdWlsZGVyRmFjdG9yeTsKLSAgICBAU3RydWN0dXJlIHByaXZhdGUgVW5pdE9mV29ya0ZhY3RvcnkgdW93RmFjdG9yeTsKLSAgICBwcml2YXRlIE1hcDxDbGFzcywgT2JqZWN0PiBtaXhpbnM7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEFwcGxpZXNUbwotICAgICAgICBpbXBsZW1lbnRzIEFwcGxpZXNUb0ZpbHRlcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgSW50ZXJwcmV0ZXIgcnVudGltZSA9IG5ldyBJbnRlcnByZXRlcigpOwotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBhcHBsaWVzVG8oIE1ldGhvZCBtZXRob2QsIENsYXNzIG1peGluLCBDbGFzcyBjb21wb3NpdGVUeXBlLCBDbGFzcyBtb2RlbENsYXNzICkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTmVlZCBvcHRpbWl6YXRpb25zIHNvIHRoYXQgdGhpcyBtZXRob2Qgb25seSBidWlsZCB0aGUgbmFtZXNwYWNlIGFuZCBleHRyYWN0IHRoZSBtaXhpbnMKLSAgICAgICAgICAgIC8vIG9uY2UgcGVyIGNvbXBvc2l0ZS4KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotCi0gICAgICAgICAgICAgICAgTmFtZVNwYWNlIG5hbWVzcGFjZSA9IGJ1aWxkTmFtZXNwYWNlKCBjb21wb3NpdGVUeXBlLCBydW50aW1lICk7Ci0gICAgICAgICAgICAgICAgaWYoIG5hbWVzcGFjZSA9PSBudWxsICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcnVudGltZS5zZXROYW1lU3BhY2UoIG5hbWVzcGFjZSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2goIElPRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAvL1RPRE86IEF1dG8tZ2VuZXJhdGVkLCBuZWVkIGF0dGVudGlvbi4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE1hcDxDbGFzcywgT2JqZWN0PiBtaXhpbnMgPSBleHRyYWN0TWl4aW5zKCBydW50aW1lLmdldENsYXNzTWFuYWdlcigpICk7Ci0gICAgICAgICAgICByZXR1cm4gbWl4aW5zLmNvbnRhaW5zS2V5KCBtZXRob2QuZ2V0RGVjbGFyaW5nQ2xhc3MoKSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljCi0gICAgewotICAgICAgICBydW50aW1lcyA9IG5ldyBIYXNoTWFwPE1vZHVsZSwgSW50ZXJwcmV0ZXI+KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBpbnZva2UoIE9iamVjdCBwcm94eSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0W10gYXJncyApCi0gICAgICAgIHRocm93cyBUaHJvd2FibGUKLSAgICB7Ci0gICAgICAgIEludGVycHJldGVyIHJ1bnRpbWU7Ci0gICAgICAgIHN5bmNocm9uaXplZCggQmVhblNoZWxsTWl4aW4uY2xhc3MgKQotICAgICAgICB7Ci0gICAgICAgICAgICBydW50aW1lID0gcnVudGltZXMuZ2V0KCBtb2R1bGUgKTsKLSAgICAgICAgfQotICAgICAgICBpZiggcnVudGltZSA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgcnVudGltZSA9IG5ldyBJbnRlcnByZXRlcigpOwotICAgICAgICAgICAgQnNoQ2xhc3NNYW5hZ2VyLmNyZWF0ZUNsYXNzTWFuYWdlciggcnVudGltZSApOwotICAgICAgICAgICAgQ2xhc3MgY29tcG9zaXRlVHlwZSA9IG1lLmdldENsYXNzKCkuZ2V0SW50ZXJmYWNlcygpWyAwIF07Ci0gICAgICAgICAgICBOYW1lU3BhY2UgbmFtZXNwYWNlID0gYnVpbGROYW1lc3BhY2UoIGNvbXBvc2l0ZVR5cGUsIHJ1bnRpbWUgKTsKLSAgICAgICAgICAgIHJ1bnRpbWUuc2V0TmFtZVNwYWNlKCBuYW1lc3BhY2UgKTsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCggQmVhblNoZWxsTWl4aW4uY2xhc3MgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJ1bnRpbWVzLnB1dCggbW9kdWxlLCBydW50aW1lICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBydW50aW1lLnNldCggImNvbXBvc2l0ZUJ1aWxkZXJGYWN0b3J5IiwgY29tcG9zaXRlQnVpbGRlckZhY3RvcnkgKTsKLSAgICAgICAgICAgIHJ1bnRpbWUuc2V0KCAidW5pdE9mV29ya0ZhY3RvcnkiLCB1b3dGYWN0b3J5ICk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoIG1peGlucyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgbWl4aW5zID0gZXh0cmFjdE1peGlucyggcnVudGltZS5nZXRDbGFzc01hbmFnZXIoKSApOwotICAgICAgICB9Ci0gICAgICAgIE9iamVjdCBpbnN0YW5jZSA9IG1peGlucy5nZXQoIG1ldGhvZC5nZXREZWNsYXJpbmdDbGFzcygpICk7Ci0gICAgICAgIHJldHVybiBtZXRob2QuaW52b2tlKCBpbnN0YW5jZSwgYXJncyApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIE5hbWVTcGFjZSBidWlsZE5hbWVzcGFjZSggQ2xhc3MgY29tcG9zaXRlVHlwZSwgSW50ZXJwcmV0ZXIgcnVudGltZSApCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgQ2xhc3NMb2FkZXIgbG9hZGVyID0gY29tcG9zaXRlVHlwZS5nZXRDbGFzc0xvYWRlcigpOwotICAgICAgICBCc2hDbGFzc01hbmFnZXIgY2xhc3NNYW5hZ2VyID0gQnNoQ2xhc3NNYW5hZ2VyLmNyZWF0ZUNsYXNzTWFuYWdlciggcnVudGltZSApOwotICAgICAgICBjbGFzc01hbmFnZXIuc2V0Q2xhc3NMb2FkZXIoIGxvYWRlciApOwotICAgICAgICBOYW1lU3BhY2UgbmFtZXNwYWNlID0gbmV3IE5hbWVTcGFjZSggY2xhc3NNYW5hZ2VyLCBjb21wb3NpdGVUeXBlLmdldE5hbWUoKSApOwotCi0gICAgICAgIFVSTCBzY3JpcHRVcmwgPSBnZXRGdW5jdGlvblJlc291cmNlKCBjb21wb3NpdGVUeXBlICk7Ci0gICAgICAgIGlmKCBzY3JpcHRVcmwgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIFJlYWRlciBzb3VyY2UgPSBnZXRTb3VyY2UoIGNvbXBvc2l0ZVR5cGUsIHNjcmlwdFVybCApOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcnVudGltZS5ldmFsKCBzb3VyY2UsIG5hbWVzcGFjZSwgc2NyaXB0VXJsLnRvU3RyaW5nKCkgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXZhbEVycm9yIGV2YWxFcnJvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV2YWxFcnJvci5wcmludFN0YWNrVHJhY2UoKTsgIC8vVE9ETzogQXV0by1nZW5lcmF0ZWQsIG5lZWQgYXR0ZW50aW9uLgotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuYW1lc3BhY2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPENsYXNzLCBPYmplY3Q+IGV4dHJhY3RNaXhpbnMoIEJzaENsYXNzTWFuYWdlciBjbGFzc01hbmFnZXIgKQotICAgIHsKLSAgICAgICAgQ2xhc3MgbWl4aW5JbXBsID0gbnVsbDsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEZpZWxkIGZpZWxkID0gQ2xhc3NNYW5hZ2VySW1wbC5jbGFzcy5nZXREZWNsYXJlZEZpZWxkKCAiYmFzZUNsYXNzUGF0aCIgKTsKLSAgICAgICAgICAgIGZpZWxkLnNldEFjY2Vzc2libGUoIHRydWUgKTsKLSAgICAgICAgICAgIEJzaENsYXNzUGF0aCBjbGFzc3BhdGggPSAoQnNoQ2xhc3NQYXRoKSBmaWVsZC5nZXQoIGNsYXNzTWFuYWdlciApOwotICAgICAgICAgICAgU3RyaW5nW10gc2NyaXB0ZWRNaXhpbk5hbWVzID0gY2xhc3NwYXRoLmdldEFsbE5hbWVzKCk7Ci0gICAgICAgICAgICBNYXA8Q2xhc3MsIE9iamVjdD4gbWl4aW5UeXBlcyA9IG5ldyBIYXNoTWFwPENsYXNzLCBPYmplY3Q+KCk7Ci0gICAgICAgICAgICBmb3IoIFN0cmluZyBtaXhpbk5hbWUgOiBzY3JpcHRlZE1peGluTmFtZXMgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1peGluSW1wbCA9IGNsYXNzTWFuYWdlci5jbGFzc0Zvck5hbWUoIG1peGluTmFtZSApOwotICAgICAgICAgICAgICAgIENsYXNzW10gaW50ZXJmYWNlcyA9IG1peGluSW1wbC5nZXRJbnRlcmZhY2VzKCk7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IG1peGluSW5zdGFuY2UgPSBtaXhpbkltcGwubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgICAgICBmb3IoIENsYXNzIG1peGluVHlwZSA6IGludGVyZmFjZXMgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWl4aW5UeXBlcy5wdXQoIG1peGluVHlwZSwgbWl4aW5JbnN0YW5jZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtaXhpblR5cGVzOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDYW4gbm90IGhhcHBlbi4gQWNjZXNzaWJsZSBpcyBzZXQgdG8gdHJ1ZSwgYW5kIGEgU2VjdXJpdHlFeGNlcHRpb24gd2lsbCBiZSB0aHJvd24KLSAgICAgICAgICAgIC8vIGlmIHRoZSBzZWN1cml0eSBkb2Vzbid0IGFsbG93IGRpcmVjdCBpbnNwZWN0aW9uLgotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIE5vU3VjaEZpZWxkRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvciggIkJlYW5TaGVsbCB2ZXJzaW9uIGhhcyBiZWVuIHVwZGF0ZWQgYW5kIGlzIG5vIGxvbmdlciBjb21wYXRpYmxlIHdpdGggdGhpcyBRaTRqIHZlcnNpb24uIiApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2NyaXB0RXhjZXB0aW9uKCAiVW5hYmxlIHRvIGluc3RhbnRpYXRlIEJlYW5TaGVsbCBjbGFzczogIiArIG1peGluSW1wbCApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBSZWFkZXIgZ2V0U291cmNlKCBDbGFzcyBjb21wb3NpdGVUeXBlLCBVUkwgc2NyaXB0VXJsICkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiggc2NyaXB0VXJsID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oICJObyBzY3JpcHQgZm91bmQgZm9yIG1ldGhvZCAiICsgY29tcG9zaXRlVHlwZS5nZXROYW1lKCkgKTsKLSAgICAgICAgfQotICAgICAgICBJbnB1dFN0cmVhbSBpbiA9IHNjcmlwdFVybC5vcGVuU3RyZWFtKCk7Ci0gICAgICAgIHJldHVybiBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBJbnB1dFN0cmVhbVJlYWRlciggaW4gKSApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFVSTCBnZXRGdW5jdGlvblJlc291cmNlKCBDbGFzcyBjb21wb3NpdGVUeXBlICkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBzY3JpcHROYW1lID0gZ2V0U2NyaXB0TmFtZSggY29tcG9zaXRlVHlwZSApOwotICAgICAgICBDbGFzc0xvYWRlciBsb2FkZXIgPSBjb21wb3NpdGVUeXBlLmdldENsYXNzTG9hZGVyKCk7Ci0gICAgICAgIHJldHVybiBsb2FkZXIuZ2V0UmVzb3VyY2UoIHNjcmlwdE5hbWUgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U2NyaXB0TmFtZSggQ2xhc3MgY29tcG9zaXRlVHlwZSApCi0gICAgewotICAgICAgICBTdHJpbmcgY2xhc3NuYW1lID0gY29tcG9zaXRlVHlwZS5nZXROYW1lKCk7Ci0gICAgICAgIHJldHVybiBjbGFzc25hbWUucmVwbGFjZSggJy4nLCAnLycgKSArICIuYnNoIjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZWxvYWRTY3JpcHRzKCkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCggQmVhblNoZWxsTWl4aW4uY2xhc3MgKQotICAgICAgICB7Ci0gICAgICAgICAgICBydW50aW1lcy5yZW1vdmUoIG1vZHVsZSApOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvYmVhbnNoZWxsL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvYmVhbnNoZWxsL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3MDE3ZS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sYW5nL2JlYW5zaGVsbC9wYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPgotICAgIDxib2R5PgotICAgICAgICA8aDI+QmVhblNoZWxsIExhbmd1YWdlIFN1cHBvcnQgTGlicmFyeS48L2gyPgotICAgIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2JlYW5zaGVsbC9CZWFuU2hlbGxDb21wb3NpdGUuamF2YSBiL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xhbmcvYmVhbnNoZWxsL0JlYW5TaGVsbENvbXBvc2l0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjU0YmU0Li4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xhbmcvYmVhbnNoZWxsL0JlYW5TaGVsbENvbXBvc2l0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA4IE5pY2xhcyBIZWRobWFuCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGFuZy5iZWFuc2hlbGw7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlRyYW5zaWVudENvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwotCi0vKioKLSAqIEpBVkFET0MKLSAqLwotQE1peGlucyggQmVhblNoZWxsTWl4aW4uY2xhc3MgKQotcHVibGljIGludGVyZmFjZSBCZWFuU2hlbGxDb21wb3NpdGUgZXh0ZW5kcyBNaXhpbjEsIFRyYW5zaWVudENvbXBvc2l0ZQotewotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLWJlYW5zaGVsbC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xhbmcvYmVhbnNoZWxsL0JlYW5TaGVsbE1peGluVGVzdC5qYXZhIGIvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9iZWFuc2hlbGwvQmVhblNoZWxsTWl4aW5UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MTY4MTEuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9iZWFuc2hlbGwvQmVhblNoZWxsTWl4aW5UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDctMjAwOCBOaWNsYXMgSGVkaG1hbgotICogQ29weXJpZ2h0IDIwMDctMjAwOCBSaWNrYXJkIMOWYmVyZwotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi1wYWNrYWdlIG9yZy5xaTRqLmxhbmcuYmVhbnNoZWxsOwotCi1pbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwotaW1wb3J0IG9yZy5xaTRqLnRlc3QuQWJzdHJhY3RRaTRqVGVzdDsKLQotcHVibGljIGNsYXNzIEJlYW5TaGVsbE1peGluVGVzdAotICAgIGV4dGVuZHMgQWJzdHJhY3RRaTRqVGVzdAotewotICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQotICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIG1vZHVsZS50cmFuc2llbnRzKCBCZWFuU2hlbGxDb21wb3NpdGUuY2xhc3MgKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RJbnZva2UoKSB0aHJvd3MgVGhyb3dhYmxlCi0gICAgewotICAgICAgICBCZWFuU2hlbGxDb21wb3NpdGUgZG9tYWluMSA9IG1vZHVsZS5uZXdUcmFuc2llbnQoIEJlYW5TaGVsbENvbXBvc2l0ZS5jbGFzcyApOwotICAgICAgICBCZWFuU2hlbGxDb21wb3NpdGUgZG9tYWluMiA9IG1vZHVsZS5uZXdUcmFuc2llbnQoIEJlYW5TaGVsbENvbXBvc2l0ZS5jbGFzcyApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCAiZG8xKCkgaW4gQmVhbnNoZWxsOjEiLCBkb21haW4xLmRvMSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoICJkbzEoKSBpbiBCZWFuc2hlbGw6MiIsIGRvbWFpbjEuZG8xKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggImRvMSgpIGluIEJlYW5zaGVsbDozIiwgZG9tYWluMS5kbzEoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCAiZG8xKCkgaW4gQmVhbnNoZWxsOjQiLCBkb21haW4xLmRvMSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoICJkbzEoKSBpbiBCZWFuc2hlbGw6MSIsIGRvbWFpbjIuZG8xKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggImRvMSgpIGluIEJlYW5zaGVsbDoyIiwgZG9tYWluMi5kbzEoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCAiZG8xKCkgaW4gQmVhbnNoZWxsOjMiLCBkb21haW4yLmRvMSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoICJkbzEoKSBpbiBCZWFuc2hlbGw6NCIsIGRvbWFpbjIuZG8xKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggImRvMSgpIGluIEJlYW5zaGVsbDo1IiwgZG9tYWluMi5kbzEoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCAiZG8xKCkgaW4gQmVhbnNoZWxsOjYiLCBkb21haW4yLmRvMSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoICJkbzEoKSBpbiBCZWFuc2hlbGw6NSIsIGRvbWFpbjEuZG8xKCkgKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9iZWFuc2hlbGwvTWl4aW4xLmphdmEgYi9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2JlYW5zaGVsbC9NaXhpbjEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiNTE4YS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2JlYW5zaGVsbC9NaXhpbjEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5sYW5nLmJlYW5zaGVsbDsNCi0NCi1wdWJsaWMgaW50ZXJmYWNlIE1peGluMQ0KLXsNCi0gICAgU3RyaW5nIGRvMSgpOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvYmVhbnNoZWxsL0JlYW5TaGVsbENvbXBvc2l0ZS5ic2ggYi9saWJyYXJpZXMvbGFuZy1iZWFuc2hlbGwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvYmVhbnNoZWxsL0JlYW5TaGVsbENvbXBvc2l0ZS5ic2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNTViYWMuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9sYW5nL2JlYW5zaGVsbC9CZWFuU2hlbGxDb21wb3NpdGUuYnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotCi1pbXBvcnQgb3JnLnFpNGoubGFuZy5iZWFuc2hlbGwuTWl4aW4xOwotCi1wdWJsaWMgY2xhc3MgTWl4aW4xSW1wbAotICAgIGltcGxlbWVudHMgTWl4aW4xCi17Ci0gICAgcHJpdmF0ZSBpbnQgY291bnRlcjsKLQotICAgIHB1YmxpYyBTdHJpbmcgZG8xKCkKLSAgICB7Ci0gICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgcmV0dXJuICJkbzEoKSBpbiBCZWFuc2hlbGw6IiArIGNvdW50ZXI7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLWdyb292eS9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvYnVpbGQuZ3JhZGxlCmluZGV4IDNiMTRjNTEuLjEzZjI1NzggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLWdyb292eS9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L2J1aWxkLmdyYWRsZQpAQCAtMSw3ICsxLDI3IEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIEdyb292eSBMaWJyYXJ5IGFsbG93cyBmb3IgTWl4aW5zIHRvIGJlIGltcGxlbWVudGVkIGluIEdyb292eSBzY3JpcHRzIGluc3RlYWQgb2YgZGlyZWN0bHkgaW4gY29tcGlsZWQgSmF2YS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gU2NyaXB0aW5nIC0gR3Jvb3Z5IiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgR3Jvb3Z5IExpYnJhcnkgYWxsb3dzIGZvciBNaXhpbnMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gR3Jvb3Z5IHNjcmlwdHMgaW5zdGVhZCBvZiBkaXJlY3RseSBpbiBjb21waWxlZCBKYXZhLiIKIAoramFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIExpYnJhcnkgLSBTY3JpcHRpbmcgLSBHcm9vdnkiIH19CisKK2FwcGx5IHBsdWdpbjogJ2dyb292eScKIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L2Rldi1zdGF0dXMueG1sCmluZGV4IGNlZmM5OGEuLjJhMDI3MjUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLWdyb292eS9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCkBAIC04LDEwICsyNCwxMCBAQAogICAgIDxjb2RlYmFzZT5iZXRhPC9jb2RlYmFzZT4KIAogICAgIDwhLS0gbm9uZSwgYnJpZWYsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDxkb2N1bWVudGF0aW9uPmJyaWVmPC9kb2N1bWVudGF0aW9uPgorICAgIDxkb2N1bWVudGF0aW9uPmdvb2Q8L2RvY3VtZW50YXRpb24+CiAKICAgICA8IS0tIG5vbmUsIHNvbWUsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDx1bml0dGVzdHM+c29tZTwvdW5pdHRlc3RzPgorICAgIDx1bml0dGVzdHM+Z29vZDwvdW5pdHRlc3RzPgogICA8L3N0YXR1cz4KICAgPGxpY2Vuc2VzPgogICAgIDxsaWNlbnNlPkFMdjI8L2xpY2Vuc2U+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL2RvY3MvbGFuZy1ncm9vdnkudHh0IGIvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy9kb2NzL2xhbmctZ3Jvb3Z5LnR4dAppbmRleCA1OTczNzY1Li5lNWEwMDZhIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL2RvY3MvbGFuZy1ncm9vdnkudHh0CisrKyBiL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvZG9jcy9sYW5nLWdyb292eS50eHQKQEAgLTEsNCArMSwyMyBAQAotW1tsaWJyYXJ5LXNjcmlwdC1ncm9vdnksIEdyb292eSBTY3JpcHRpbmcgTGlicmFyeV1dCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworW1tsYW5nLWdyb292eSwgR3Jvb3Z5IFNjcmlwdGluZyBMaWJyYXJ5XV0KID0gR3Jvb3Z5IFNjcmlwdGluZyA9CiAKIFtkZXZzdGF0dXNdCkBAIC0xMCwyOCArMjksODEgQEAKIAogaW5jbHVkZTo6Li4vLi4vYnVpbGQvZG9jcy9idWlsZGluZm8vYXJ0aWZhY3QudHh0W10KIAotVGhlIEdyb292eSBTY3JpcHRpbmcgTGlicmFyeSBpcyBhIEdlbmVyaWMgbWl4aW4gdGhhdCBpbXBsZW1lbnRzIGludGVyZmFjZXMgCi1ieSBkZWxlZ2F0aW5nIHRvIEdyb292eSBmdW5jdGlvbnMgdXNpbmcgR3Jvb3Z5LiBFYWNoIG1ldGhvZCBpbiBhbiBpbnRlcmZhY2UgCi1pcyBkZWNsYXJlZCBieSBhIEdyb292eSBtZXRob2QgaW4gYSBmaWxlIGxvY2F0ZWQgaW4gY2xhc3NwYXRoIHdpdGggdGhlIG5hbWUKLSI8aW50ZXJmYWNlPi5ncm9vdnkiLCB3aGVyZSB0aGUgaW50ZXJmYWNlIG5hbWUgaW5jbHVkZXMgdGhlIHBhY2thZ2UsIGFuZCBoYXMgCi0iLiIgcmVwbGFjZWQgd2l0aCAiLyIuCitUaGUgR3Jvb3Z5IFNjcmlwdGluZyBMaWJyYXJ5IGlzIGEgR2VuZXJpYyBtaXhpbiB0aGF0IGltcGxlbWVudHMgaW50ZXJmYWNlcyBieSBkZWxlZ2F0aW5nIHRvIEdyb292eSBjb2RlIGZyb20gY2xhc3NwYXRoIHJlc291cmNlcy4KIAotRXhhbXBsZQorQnV0IGJlZm9yZSBsb29raW5nIGF0IGhvdyB0byB1c2UgdGhlIFNjcmlwdGluZyBsaWJyYXJ5IHdlJ2xsIHNlZSB0aGF0ICp5b3UgZG9uJ3QgbmVlZCB0aGlzIGxpYnJhcnkgYXQgYWxsIGlmIHlvdSBzaW1wbHkgbmVlZCB0byB1c2UgR3Jvb3Z5IGNsYXNzZXMgYXMgRnJhZ21lbnRzKi4KK1RoZW4gd2UnbGwgc2VlIGhvdyB0byB1c2UgR3Jvb3Z5IGNsYXNzIHNjcmlwdHMgYW5kIG1ldGhvZCBzY3JpcHRzLgogCi0gICAgb3JnL3FpNGovc2FtcGxlcy9oZWxsby9kb21haW4vSGVsbG9Xb3JsZFNwZWFrZXIuZ3Jvb3Z5Ci0gICAgb3JnL3FpNGovc2FtcGxlcy9oZWxsby9kb21haW4vSGVsbG9Xb3JsZFNwZWFrZXIuc2F5QWdhaW4uZ3Jvb3Z5Ci0KLVRoYXQgbWVhbnMgdGhhdCB0aGUgSGVsbG9Xb3JsZFNwZWFrZXIuZ3Jvb3Z5IGZpbGUgbWF5IGJlIGNvLWxvY2F0ZWQgd2l0aCB0aGUgCi1jbGFzcyBmaWxlcyBpbiB0aGUgc2FtZSBwYWNrYWdlLiBJdCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB0byBwbGFjZSAKLXRoZSBHcm9vdnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1peGluIGluIGEgZGlmZmVyZW50IHBhY2thZ2UgdGhhbiB0aGUgCi1pbnRlcmZhY2UgaXQgaW1wbGVtZW50cy4KLQotVG8gdXNlIEdyb292eSB0byBpbXBsZW1lbnQgdGhlIE1peGluIGZ1bmN0aW9uYWxpdHkgZm9yIGEgZ2l2ZW4gaW50ZXJmYWNlLCAKLXNpbXBseSBkZWNsYXJlIHRoZSArR3Jvb3Z5TWl4aW4rIGxpa2UgYW55IG90aGVyIG1peGluLCBlaXRoZXIgaW4gdGhlIGludGVyZmFjZSAKLW9yIGF0IGFzc2VtYmx5IHRpbWUuCitBbGwgZXhhbXBsZXMgYmVsb3cgYXJlIGJhc2VkIG9uIHRoaXMgdHlwZToKIAogW3NuaXBwZXQsamF2YV0KIC0tLS0KLXNvdXJjZT1saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXIuamF2YQotdGFnPW1peGluCitzb3VyY2U9bGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L2dyb292eS9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXIuamF2YQordGFnPXNwZWFrZXIKIC0tLS0KKworCis9PSBVc2luZyBjb21waWxlZCBHcm9vdnkgY2xhc3NlcyA9PQorCitUbyBkaXJlY3RseSB1c2UgY29tcGlsZWQgR3Jvb3Z5IGNsYXNzZXMgYXMgRnJhZ21lbnRzIHlvdSBkb24ndCBuZWVkIHRoaXMgbGlicmFyeSBhdCBhbGwuCisKK0hhdmluZyB0aGlzIEdyb292eSBjbGFzcyBjb21waWxlZCA7CisKKy5IZWxsb1NwZWFrZXJNaXhpbi5ncm9vdnkKK1tzbmlwcGV0LGdyb292eV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlck1peGluLmdyb292eQordGFnPWRpcmVjdAorLS0tLQorCithc3NlbWJsZSBpdCBkaXJlY3RseToKKworW3NuaXBwZXQsamF2YV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlclRlc3QuamF2YQordGFnPWRpcmVjdAorLS0tLQorCisKKz09IFVzaW5nIEdyb292eSBjbGFzcyBzY3JpcHRzID09CisKK0RlY2xhcmUgYSBHcm9vdnkgY2xhc3MgaW4gYSBjbGFzc3BhdGggcmVzb3VyY2UgZmlsZSBsb2NhdGVkIGluIHRoZSBzYW1lIHBhY2thZ2UgYXMgdGhlIGltcGxlbWVudGVkIHR5cGUgd2l0aCB0aGUgbmFtZSArPHR5cGU+Lmdyb292eSs6CisKKy5IZWxsb1NwZWFrZXIuZ3Jvb3Z5Citbc25pcHBldCxncm9vdnldCistLS0tCitzb3VyY2U9bGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXIuZ3Jvb3Z5Cit0YWc9c2NyaXB0CistLS0tCisKK1RoZW4gYXNzZW1ibGUgaXQgd2l0aCB0aGUgK0dyb292eU1peGluKzoKKworW3NuaXBwZXQsamF2YV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlclRlc3QuamF2YQordGFnPXNjcmlwdAorLS0tLQorCitHcm9vdnkgY2xhc3Mgc2NyaXB0cyBnZXQgK0BUaGlzKyBpbmplY3Rpb24gaW4gYSArVGhpcysgcHJvcGVydHkgaWYgcHJlc2VudC4KKworCis9PSBVc2luZyBHcm9vdnkgbWV0aG9kIHNjcmlwdHMgPT0KKworSW1wbGVtZW50IHNpbmdsZSBjb21wb3NpdGVzIG1ldGhvZHMsIGVhY2ggaW4gYSBjbGFzc3BhdGggcmVzb3VyY2UgZmlsZSBsb2NhdGVkIGluIHRoZSBzYW1lIHBhY2thZ2UgYXMgdGhlIGltcGxlbWVudGVkIHR5cGUgd2l0aCB0aGUgbmFtZSArPHR5cGU+LjxtZXRob2Q+Lmdyb292eSs6CisKKy5IZWxsb1NwZWFrZXIuc2F5SGVsbG8uZ3Jvb3Z5Citbc25pcHBldCxncm9vdnldCistLS0tCitzb3VyY2U9bGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXIuc2F5SGVsbG8uZ3Jvb3Z5Cit0YWc9c2NyaXB0CistLS0tCisKK1RoZW4gYXNzZW1ibGUgaXQgd2l0aCB0aGUgK0dyb292eU1peGluKzoKKworW3NuaXBwZXQsamF2YV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlclRlc3QuamF2YQordGFnPXNjcmlwdAorLS0tLQorCitHcm9vdnkgbWV0aG9kIHNjcmlwdHMgZ2V0ICtAVGhpcysgaW5qZWN0aW9uIGFzICtUaGlzKyBwcm9wZXJ0eSBhbmQgdGhlIG1ldGhvZHMgYXJndW1lbnRzIGFycmF5IGFzICthcmdzKy4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L3BhY2thZ2UuaHRtbAppbmRleCA3NjU2MjcwLi45NDI1MTgyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sYW5nL2dyb292eS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGFuZy9ncm9vdnkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5Hcm9vdnkgTGFuZ3VhZ2UgU3VwcG9ydCBMaWJyYXJ5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2dyb292eS9Hcm9vdnlDb21wb3NpdGUuamF2YSBiL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9ncm9vdnkvb3JnL3FpNGovbGFuZy9ncm9vdnkvR3Jvb3Z5Q29tcG9zaXRlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0dyb292eUNvbXBvc2l0ZS5qYXZhCnJlbmFtZSB0byBsaWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0dyb292eUNvbXBvc2l0ZS5qYXZhCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2dyb292eS9Hcm9vdnlNaXhpblRlc3QuamF2YSBiL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9ncm9vdnkvb3JnL3FpNGovbGFuZy9ncm9vdnkvR3Jvb3Z5TWl4aW5UZXN0LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0dyb292eU1peGluVGVzdC5qYXZhCnJlbmFtZSB0byBsaWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0dyb292eU1peGluVGVzdC5qYXZhCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qcnVieS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xhbmcvanJ1YnkvSGVsbG9TcGVha2VyLmphdmEgYi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFtZSBmcm9tIGxpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9qcnVieS9IZWxsb1NwZWFrZXIuamF2YQpyZW5hbWUgdG8gbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L2dyb292eS9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXIuamF2YQppbmRleCAxYWE5NjQxLi45ZGMwMzg4IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1qcnVieS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xhbmcvanJ1YnkvSGVsbG9TcGVha2VyLmphdmEKKysrIGIvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L2dyb292eS9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXIuamF2YQpAQCAtOSwxNiArOSwxMSBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGFuZy5qcnVieTsKK3BhY2thZ2Ugb3JnLnFpNGoubGFuZy5ncm9vdnk7CiAKLWltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwotCi0vLyBTVEFSVCBTTklQUEVUOiBtaXhpbgotaW1wb3J0IG9yZy5xaTRqLmxhbmcuanJ1YnkuSlJ1YnlNaXhpbjsKLQotQE1peGlucyhKUnVieU1peGluLmNsYXNzKQorLy8gU1RBUlQgU05JUFBFVDogc3BlYWtlcgogcHVibGljIGludGVyZmFjZSBIZWxsb1NwZWFrZXIKIHsKLSAgICB2b2lkIHNheUhlbGxvKCk7CisgICAgU3RyaW5nIHNheUhlbGxvKCBTdHJpbmcgbmFtZSApOwogfQotLy8gRU5EIFNOSVBQRVQ6IG1peGluCisvLyBFTkQgU05JUFBFVDogc3BlYWtlcgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL1VzZXIuamF2YSBiL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9ncm9vdnkvb3JnL3FpNGovbGFuZy9ncm9vdnkvSGVsbG9TcGVha2VyTWl4aW4uZ3Jvb3Z5CnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIGxpYnJhcmllcy9jeGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9Vc2VyLmphdmEKcmVuYW1lIHRvIGxpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9ncm9vdnkvb3JnL3FpNGovbGFuZy9ncm9vdnkvSGVsbG9TcGVha2VyTWl4aW4uZ3Jvb3Z5CmluZGV4IGZmM2M2ZDEuLmYxYmE3NTggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9jeGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2N4Zi9Vc2VyLmphdmEKKysrIGIvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L2dyb292eS9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXJNaXhpbi5ncm9vdnkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4uCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgdGhlIG9yaWdpbmFsIGF1dGhvciBvciBhdXRob3JzCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNSwyMCArMTUsMTIgQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCitwYWNrYWdlIG9yZy5xaTRqLmxhbmcuZ3Jvb3Z5OwogCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmOwotCi1wdWJsaWMgY2xhc3MgVXNlcgotewotICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lKCBTdHJpbmcgbmFtZSApCi0gICAgewotICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbmFtZTsKKy8vIFNUQVJUIFNOSVBQRVQ6IGRpcmVjdAorcHVibGljIGNsYXNzIEhlbGxvU3BlYWtlck1peGluIGltcGxlbWVudHMgSGVsbG9TcGVha2VyIHsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCBTdHJpbmcgbmFtZSApIHsKKyAgICAgICAgIkhlbGxvICRuYW1lISIKICAgICB9CiB9CisvLyBFTkQgU05JUFBFVDogZGlyZWN0CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlclRlc3QuamF2YSBiL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9ncm9vdnkvb3JnL3FpNGovbGFuZy9ncm9vdnkvSGVsbG9TcGVha2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZjkxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlclRlc3QuamF2YQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICogaW1wbGllZC4KKyAqCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5sYW5nLmdyb292eTsKKworaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKK2ltcG9ydCBvcmcucWk0ai50ZXN0LkFic3RyYWN0UWk0alRlc3Q7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLlNpbmdsZXRvbkFzc2VtYmxlcjsKKworcHVibGljIGNsYXNzIEhlbGxvU3BlYWtlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdFFpNGpUZXN0Cit7CisgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCisgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgbW9kdWxlLnRyYW5zaWVudHMoIEhlbGxvU3BlYWtlci5jbGFzcyApLndpdGhNaXhpbnMoIEdyb292eU1peGluLmNsYXNzICk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SGVsbG8oKQorICAgIHsKKyAgICAgICAgSGVsbG9TcGVha2VyIHNwZWFrZXIgPSBtb2R1bGUubmV3VHJhbnNpZW50KCBIZWxsb1NwZWFrZXIuY2xhc3MgKTsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggIkhlbGxvIFdvcmxkISIsIHNwZWFrZXIuc2F5SGVsbG8oICJXb3JsZCIgKSApOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEdyb292eVNjcmlwdFJlc291cmNlTWl4aW4oKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICAvLyBTVEFSVCBTTklQUEVUOiBzY3JpcHQKKyAgICAgICAgU2luZ2xldG9uQXNzZW1ibGVyIGFzc2VtYmxlciA9IG5ldyBTaW5nbGV0b25Bc3NlbWJsZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBhc3NlbWJseSApCisgICAgICAgICAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZW1ibHkudHJhbnNpZW50cyggSGVsbG9TcGVha2VyLmNsYXNzICkud2l0aE1peGlucyggR3Jvb3Z5TWl4aW4uY2xhc3MgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgSGVsbG9TcGVha2VyIHNwZWFrZXIgPSBhc3NlbWJsZXIubW9kdWxlKCkubmV3VHJhbnNpZW50KCBIZWxsb1NwZWFrZXIuY2xhc3MgKTsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggIkhlbGxvIFdvcmxkISIsIHNwZWFrZXIuc2F5SGVsbG8oICJXb3JsZCIgKSApOworICAgICAgICAvLyBFTkQgU05JUFBFVDogc2NyaXB0CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R3Jvb3Z5Q2xhc3NNaXhpbigpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIC8vIFNUQVJUIFNOSVBQRVQ6IGRpcmVjdAorICAgICAgICBTaW5nbGV0b25Bc3NlbWJsZXIgYXNzZW1ibGVyID0gbmV3IFNpbmdsZXRvbkFzc2VtYmxlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCisgICAgICAgICAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbW9kdWxlLnRyYW5zaWVudHMoIEhlbGxvU3BlYWtlci5jbGFzcyApLndpdGhNaXhpbnMoIEhlbGxvU3BlYWtlck1peGluLmNsYXNzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIEhlbGxvU3BlYWtlciBzcGVha2VyID0gYXNzZW1ibGVyLm1vZHVsZSgpLm5ld1RyYW5zaWVudCggSGVsbG9TcGVha2VyLmNsYXNzICk7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoICJIZWxsbyBXb3JsZCEiLCBzcGVha2VyLnNheUhlbGxvKCAiV29ybGQiICkgKTsKKyAgICAgICAgLy8gRU5EIFNOSVBQRVQ6IGRpcmVjdAorICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sIGIvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L2dyb292eS9vcmcvcWk0ai9sYW5nL2dyb292eS9NaXhpbjEuamF2YQpzaW1pbGFyaXR5IGluZGV4IDYwJQpjb3B5IGZyb20gbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLXBsdWdpbi54bWwKY29weSB0byBsaWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L01peGluMS5qYXZhCmluZGV4IGNjZjJjNDIuLjExODRhMzIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy1wbHVnaW4ueG1sCisrKyBiL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9ncm9vdnkvb3JnL3FpNGovbGFuZy9ncm9vdnkvTWl4aW4xLmphdmEKQEAgLTEsMzIgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQotLyoKLSAqICRJZDogcG9tLnhtbCA1NTkyMDYgMjAwNy0wNy0yNCAyMTowMToxOFogYXBldHJlbGxpICQKLSAqCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLS0tPgotCi08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgotCi08c3RydXRzPgotICA8YmVhbiB0eXBlPSJjb20ub3BlbnN5bXBob255Lnh3b3JrMi5jb25maWcuUGFja2FnZVByb3ZpZGVyIiBuYW1lPSJxaTRqIgotICAgICAgICBjbGFzcz0ib3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmNvZGViZWhpbmQuUWk0akNvZGViZWhpbmRQYWNrYWdlUHJvdmlkZXIiLz4KLTwvc3RydXRzPgorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2Ugb3JnLnFpNGoubGFuZy5ncm9vdnk7DQorDQorcHVibGljIGludGVyZmFjZSBNaXhpbjENCit7DQorICAgIFN0cmluZyBkbzEoKTsNCit9DQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9ncm9vdnkvSGVsbG9TcGVha2VyLmphdmEgYi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ1MjdmMC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBSaWNrYXJkIMOWYmVyZwotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotcGFja2FnZSBvcmcucWk0ai5sYW5nLmdyb292eTsKLQotaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7Ci0KLS8vIFNUQVJUIFNOSVBQRVQ6IG1peGluCi1pbXBvcnQgb3JnLnFpNGoubGFuZy5ncm9vdnkuR3Jvb3Z5TWl4aW47Ci0vLyBFTkQgU05JUFBFVDogbWl4aW4KLQotLy8gU1RBUlQgU05JUFBFVDogbWl4aW4KLUBNaXhpbnMoR3Jvb3Z5TWl4aW4uY2xhc3MpCi1wdWJsaWMgaW50ZXJmYWNlIEhlbGxvU3BlYWtlcgotewotICAgIHZvaWQgc2F5SGVsbG8oKTsKLX0KLS8vIEVORCBTTklQUEVUOiBtaXhpbgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9ncm9vdnkvTWl4aW4xLmphdmEgYi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2dyb292eS9NaXhpbjEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE3YzA4Mi4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2dyb292eS9NaXhpbjEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5sYW5nLmdyb292eTsNCi0NCi1wdWJsaWMgaW50ZXJmYWNlIE1peGluMQ0KLXsNCi0gICAgU3RyaW5nIGRvMSgpOw0KLX0NCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9EaXZpZGVuZHMuamF2YSBiL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGFuZy9ncm9vdnkvSGVsbG9TcGVha2VyLmdyb292eQpzaW1pbGFyaXR5IGluZGV4IDc0JQpjb3B5IGZyb20gbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvRGl2aWRlbmRzLmphdmEKY29weSB0byBsaWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlci5ncm9vdnkKaW5kZXggOWViOGE4OC4uZWFjMzcyNiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvRGl2aWRlbmRzLmphdmEKKysrIGIvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9sYW5nL2dyb292eS9IZWxsb1NwZWFrZXIuZ3Jvb3Z5CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDEwIE5pY2xhcyBIZWRobWFuLgorICogQ29weXJpZ2h0IChjKSAyMDE1IHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycwogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtMTUsMTIgKzE1LDExIEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuY3hmLmRpdnM7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgRGl2aWRlbmRzCi17Ci0gICAgUHJvcGVydHk8RGl2U3RyZWFtPiBkaXZTdHJlYW0oKTsKKy8vIFNUQVJUIFNOSVBQRVQ6IHNjcmlwdAorY2xhc3MgSGVsbG9TcGVha2VyIHsKKyAgZGVmIFRoaXMKKyAgZGVmIHNheUhlbGxvKCBuYW1lICkgeworICAgICJIZWxsbyAkbmFtZSEiLnRvU3RyaW5nKCkKKyAgfQogfQorLy8gRU5EIFNOSVBQRVQ6IHNjcmlwdApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvRGl2aWRlbmRzLmphdmEgYi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlci5zYXlIZWxsby5ncm9vdnkKc2ltaWxhcml0eSBpbmRleCA3NSUKcmVuYW1lIGZyb20gbGlicmFyaWVzL2N4Zi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvY3hmL2RpdnMvRGl2aWRlbmRzLmphdmEKcmVuYW1lIHRvIGxpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGFuZy9ncm9vdnkvSGVsbG9TcGVha2VyLnNheUhlbGxvLmdyb292eQppbmRleCA5ZWI4YTg4Li40OGE1MjVlIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvY3hmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9jeGYvZGl2cy9EaXZpZGVuZHMuamF2YQorKysgYi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L0hlbGxvU3BlYWtlci5zYXlIZWxsby5ncm9vdnkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTAgTmljbGFzIEhlZGhtYW4uCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgdGhlIG9yaWdpbmFsIGF1dGhvciBvciBhdXRob3JzCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNSwxMiArMTUsNiBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KLQotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmN4Zi5kaXZzOwotCi1pbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OwotCi1wdWJsaWMgaW50ZXJmYWNlIERpdmlkZW5kcwotewotICAgIFByb3BlcnR5PERpdlN0cmVhbT4gZGl2U3RyZWFtKCk7Ci19CisvLyBTVEFSVCBTTklQUEVUOiBzY3JpcHQKKyJIZWxsbyAke2FyZ3NbMF19ISIudG9TdHJpbmcoKQorLy8gRU5EIFNOSVBQRVQ6IHNjcmlwdApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9sYW5nL2dyb292eS9NaXhpbjEuZ3Jvb3Z5IGIvbGlicmFyaWVzL2xhbmctZ3Jvb3Z5L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9sYW5nL2dyb292eS9NaXhpbjEuZ3Jvb3Z5CmluZGV4IDYzN2UzOWQuLjI5NDI5Y2MgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGFuZy9ncm9vdnkvTWl4aW4xLmdyb292eQorKysgYi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvZ3Jvb3Z5L01peGluMS5ncm9vdnkKQEAgLTEsMyArMSwxNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IFJpY2thcmQgw5ZiZXJnCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KIHB1YmxpYyBjbGFzcyBNaXhpbjEKIHsKICAgICBkZWYgVGhpcwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctamF2YXNjcmlwdC9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvbGFuZy1qYXZhc2NyaXB0L2J1aWxkLmdyYWRsZQppbmRleCAyMDU5YjkzLi43NTAwYjM0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1qYXZhc2NyaXB0L2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvbGFuZy1qYXZhc2NyaXB0L2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIEphdmFTY3JpcHQgTGlicmFyeSBhbGxvd3MgZm9yIE1peGlucyB0byBiZSBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IGluc3RlYWQgb2YgZGlyZWN0bHkgaW4gY29tcGlsZWQgSmF2YS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gU2NyaXB0aW5nIC0gSmF2YVNjcmlwdCIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIEphdmFTY3JpcHQgTGlicmFyeSBhbGxvd3MgZm9yIE1peGlucyB0byBiZSBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IGluc3RlYWQgb2YgZGlyZWN0bHkgaW4gY29tcGlsZWQgSmF2YS4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gU2NyaXB0aW5nIC0gSmF2YVNjcmlwdCIgfX0KIAogCiBkZXBlbmRlbmNpZXMgewpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctamF2YXNjcmlwdC9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvZGV2LXN0YXR1cy54bWwKaW5kZXggY2VmYzk4YS4uNThmZGEwOSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xhbmctamF2YXNjcmlwdC9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvbGFuZy1qYXZhc2NyaXB0L2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctamF2YXNjcmlwdC9zcmMvZG9jcy9sYW5nLWphdmFzY3JpcHQudHh0IGIvbGlicmFyaWVzL2xhbmctamF2YXNjcmlwdC9zcmMvZG9jcy9sYW5nLWphdmFzY3JpcHQudHh0CmluZGV4IDM5NGE4ZjMuLmRkZDUyZTIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvc3JjL2RvY3MvbGFuZy1qYXZhc2NyaXB0LnR4dAorKysgYi9saWJyYXJpZXMvbGFuZy1qYXZhc2NyaXB0L3NyYy9kb2NzL2xhbmctamF2YXNjcmlwdC50eHQKQEAgLTEsNCArMSwyMyBAQAotW1tsaWJyYXJ5LXNjcmlwdC1qYXZhc2NyaXB0LCBKYXZhc2NyaXB0IFNjcmlwdGluZyBMaWJyYXJ5XV0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitbW2xhbmctamF2YXNjcmlwdCwgSmF2YXNjcmlwdCBTY3JpcHRpbmcgTGlicmFyeV1dCiA9IEphdmFzY3JpcHQgU2NyaXB0aW5nID0KIAogW2RldnN0YXR1c10KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sYW5nL2phdmFzY3JpcHQvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2xhbmctamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvamF2YXNjcmlwdC9wYWNrYWdlLmh0bWwKaW5kZXggZWFmOTRlYi4uMDgyNTQwNCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xhbmctamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvamF2YXNjcmlwdC9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2xhbmctamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvamF2YXNjcmlwdC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkphdmFTY3JpcHQgTGFuZ3VhZ2UgU3VwcG9ydCBMaWJyYXJ5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qYXZhc2NyaXB0L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9qYXZhc2NyaXB0L0RvbWFpblR5cGUuamF2YSBiL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2phdmFzY3JpcHQvRG9tYWluVHlwZS5qYXZhCmluZGV4IDUxZmJkNGEuLmZiYzU4ZDUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2phdmFzY3JpcHQvRG9tYWluVHlwZS5qYXZhCisrKyBiL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2phdmFzY3JpcHQvRG9tYWluVHlwZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCiBwYWNrYWdlIG9yZy5xaTRqLmxhbmcuamF2YXNjcmlwdDsNCiANCiBwdWJsaWMgaW50ZXJmYWNlIERvbWFpblR5cGUNCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qYXZhc2NyaXB0L3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9sYW5nL2phdmFzY3JpcHQvRG9tYWluVHlwZS5qcyBiL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvamF2YXNjcmlwdC9Eb21haW5UeXBlLmpzCmluZGV4IDkxYTdhNjIuLjg0OGViZmUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvamF2YXNjcmlwdC9Eb21haW5UeXBlLmpzCisrKyBiL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvamF2YXNjcmlwdC9Eb21haW5UeXBlLmpzCkBAIC0xLDMgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBSaWNrYXJkIMOWYmVyZworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogLy8gVGhpcyBpcyBhIGxpbmUgY29tbWVudC4KIAogLyogQSBibG9jayBjb21tZW50IHNob3VsZCBub3QgaW50ZXJmZXJlICovCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qcnVieS9OT1RJQ0UgYi9saWJyYXJpZXMvbGFuZy1qcnVieS9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDJhZTcuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctanJ1YnkvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMjE1MyArMCwwIEBACi1RaTRqIFNjcmlwdCBMaWJyYXJ5IC0gSlJ1YnkKLUNvcHlyaWdodCAyMDA3LTIwMDgsIFRoZSBRaTRqIERldmVsb3BtZW50IFRlYW0gb2YgaW5kaXZpZHVhbHMuCi0KLVNlZSBodHRwOi8vd3d3LnFpNGoub3JnL2NvbnRyaWJ1dG9ycy5odG1sIGZvciBsaXN0IG9mIG9mIGluZGl2aWR1YWxzLgotQWxzbyBzZWUgZWFjaCBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIENvcHlyaWdodCBjbGFpbXMuCi0KLVFpNGogaXMgYSBjb21tdW5pdHkgYWdncmVnYXRlZCB3b3JrcyB1bmRlciBDb3B5cmlnaHQgbGF3LgotQWxsIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCB3b3JrcyBhdCBRaTRqIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2UgdmVyIDIuMCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMKLQotQmVsb3cgZm9sbG93cyBhIGxpc3Qgb2YgYmluYXJ5IGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgbGljZW5zZXM7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgbW9kdWxlIGNvbnRhaW5zIEpSdWJ5LCBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQgaHR0cDovL2pydWJ5Lm9yZwotYW5kIGF2YWlhYmxlIHVuZGVyIENQTCwgR1BMIGFuZCBMR1BMLiBUaGUgdGV4dCBiZWxvdyBpcyBmcm9tCi1KUnVieSdzIENPUFlJTkcgaW5mb3JtYXRpb24uIEFkZGl0aW9uYWwgbGljZW5zZSBpbmZvcm1hdGlvbiBpcwotYXZhaWxhYmxlIGluIGxpY2Vuc2VzL2pydWJ5LmxpY2Vuc2UKLQotSlJ1YnkgaXMgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgVGhlIEpSdWJ5IHByb2plY3QsIGFuZCBpcyByZWxlYXNlZAotdW5kZXIgYSB0cmkgQ1BML0dQTC9MR1BMIGxpY2Vuc2UuIFlvdSBjYW4gdXNlIGl0LCByZWRpc3RyaWJ1dGUgaXQKLWFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZToKLQotICBDb21tb24gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMQotCi1saWIvcnVieS8xLjkvZHJiLyosIGJ1aWxkX2xpYi9ieXRlbGlzdC5qYXIKLShodHRwOi8vZ2l0aHViLmNvbS9qcnVieS9ieXRlbGlzdCksIGJ1aWxkX2xpYi9qcnVieS1lbWJlZC5qYXIKLShodHRwOi8va2VuYWkuY29tL3Byb2plY3RzL2pydWJ5LWVtYmVkKSBhbmQgYnVpbGRfbGliL3l5ZGVidWcuamFyCi0oaHR0cDovL3N2bi5jb2RlaGF1cy5vcmcvanJ1YnkvdHJ1bmsvamF5L3l5ZGVidWcpIGFyZSByZWxlYXNlZCB1bmRlcgotdGhlIHNhbWUgY29weXJpZ2h0L2xpY2Vuc2UuCi0KLVNvbWUgYWRkaXRpb25hbCBsaWJyYXJpZXMgZGlzdHJpYnV0ZWQgd2l0aCBKUnVieSBhcmUgbm90IGNvdmVyZWQgYnkKLUpSdWJ5J3MgbGljZW5jZS4gTW9zdCBvZiB0aGVzZSBsaWJyYXJpZXMgYW5kIHRoZWlyIGxpY2Vuc2VzIGFyZSBsaXN0ZWQKLWJlbG93LiBBbHNvIHNlZSBMSUNFTlNFLlJVQlkgZm9yIG1vc3QgZmlsZXMgZm91bmQgaW4gc3JjL2xpYi9ydWJ5LzEuOC4KLQotIGJlbmNoL3JhaWxzL3B1YmxpYy9qYXZhc2NyaXB0cy8qIGFyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUCi0gbGljZW5zZSwgYW5kIGhhdmUgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHRzOgotCi0gICBjb250cm9scy5qcyBpcyBDb3B5cmlnaHQ6Ci0gICAoYykgMjAwNS0yMDA4IFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cywgaHR0cDovL21pci5hY3Vsby51cykKLSAgIChjKSAyMDA1LTIwMDcgSXZhbiBLcnN0aWMgKGh0dHA6Ly9ibG9ncy5sYXcuaGFydmFyZC5lZHUvaXZhbikKLSAgIChjKSAyMDA1LTIwMDcgSm9uIFRpcnNlbiAoaHR0cDovL3d3dy50aXJzZW4uY29tKQotCi0gICBkcmFnZHJvcC5qcyBpcyBDb3B5cmlnaHQ6Ci0gICAoYykgMjAwNS0yMDA4IFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cywgaHR0cDovL21pci5hY3Vsby51cykKLSAgIChjKSAyMDA1LTIwMDcgU2FtbWkgV2lsbGlhbXMgKGh0dHA6Ly93d3cub3Jpb250cmFuc2Zlci5jby5ueiwgc2FtbWlAb3Jpb250cmFuc2Zlci5jby5ueikKLQotICAgZWZmZWN0LmpzIGlzIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IFRob21hcyBGdWNocy4KLQotICAgcHJvdG90eXBlLmpzIGlzIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBTdGVwaGVuc29uLgotCi0gYnVpbGRfbGliLyphc20qamFyIChodHRwOi8vYXNtLm9iamVjdHdlYi5vcmcpIGFyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UuCi0KLSBidWlsZF9saWIvYXB0LW1pcnJvci1hcGkuamFyLCBidWlsZF9saWIvYm5kLTAuMC4yNDkuamFyLAotIGJ1aWxkX2xpYi9jb21tb25zLWxvZ2dpbmctMS4xLjEuamFyLCBidWlsZF9saWIvam9kYS10aW1lLTEuNS4xLmphciwKLSBCU0YgYW5kIGFudCBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLAotIFZlcnNpb24gMS4xIChsaWNlbnNlIGZpbGUgaW5zaWRlIHRoZSBqYXJzKS4KLQotIGJ1aWxkX2xpYi9jb25zdGFudGluZS5qYXIgKGh0dHA6Ly9rZW5haS5jb20vcHJvamVjdHMvY29uc3RhbnRpbmUpLAotIGJ1aWxkX2xpYi9qY29kaW5ncy5qYXIgKGh0dHA6Ly9naXRodWIuY29tL2pydWJ5L2pjb2RpbmdzKSwKLSBidWlsZF9saWIvamFmZmwuamFyIChodHRwOi8vcHJvamVjdGtlbmFpLmNvbS9wcm9qZWN0cy9qYWZmbCkgYW5kCi0gYnVpbGRfbGliL2pvbmkuamFyIChodHRwOi8vZ2l0aHViLmNvbS9qcnVieS9qb25pKSBhcmUgZGlzdHJpYnV0ZWQKLSB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCi0KLSBidWlsZF9saWIvamFyamFyLTEuMHJjOC5qYXIgKGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9qYXJqYXIpLAotIGJ1aWxkX2xpYi9qb2RhLXRpbWUtMS41LjEuamFyIChodHRwOi8vam9kYS10aW1lLnNvdXJjZWZvcmdlLm5ldCksCi0gYnVpbGRfbGliL2R5bmFsYW5nLTAuMy5qYXIgKGh0dHA6Ly9keW5hbGFuZy5zb3VyY2Vmb3JnZS5uZXQpLAotIGJ1aWxkX2xpYi9uYWlsZ3VuLTAuNy4xLmphciBhbmQgdG9vbC9uYWlsZ3VuL25nLmV4ZQotIChodHRwOi8vbWFydGlhbnNvZnR3YXJlLmNvbS9uYWlsZ3VuKSBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlCi0gQXBhY2hlIExpY2Vuc2UgdmVyc2lvbiAyLjAuCi0KLSBidWlsZF9saWIvZW1tYSpqYXIgKGh0dHA6Ly9lbW1hLnNvdXJjZWZvcmdlLm5ldCkgYW5kCi0gYnVpbGRfbGliL2p1bml0LmphciAoaHR0cDovL3d3dy5qdW5pdC5vcmcpIGFyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUKLSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMC4KLQotIGJ1aWxkX2xpYi9qZmZpKmphciAoaHR0cDovL2tlbmFpLmNvbS9wcm9qZWN0cy9qZmZpKSBhbmQKLSBidWlsZF9saWIvamdyYXBodC1qZGsxLjUuamFyIChodHRwOi8vamdyYXBodC5zb3VyY2Vmb3JnZS5uZXQpIGFyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHUEwgdjMuCi0KLSBidWlsZF9saWIvamxpbmUtMC45LjkzIChodHRwOi8vamxpbmUuc291cmNlZm9yZ2UubmV0KSBpcyBkaXN0cmlidXRlZAotIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKLQotICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgotICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCi0gICBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aAotICAgdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgTmVpdGhlciB0aGUgbmFtZSBvZiBKTGluZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLSAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLAotICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQotICAgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTwotICAgRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gICBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAgIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORwotICAgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAgIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIGJ1aWxkX2xpYi9qbmEqamFyIChodHRwOi8vam5hLmRldi5qYXZhLm5ldCkgYXJlIGRpc3RyaWJ1dGVkCi0gdW5kZXIgdGhlIExHUEwtMi4xKyBsaWNlbnNlLgotCi0gYnVpbGRfbGliL2ludm9rZWR5bmFtaWMuamFyIGFuZCBidWlsZF9saWIvanNyMjkyLW1vY2suamFyCi0gKGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9qdm0tbGFuZ3VhZ2UtcnVudGltZSkgYXJlIGRpc3RyaWJ1dGVkCi0gdW5kZXIgdGhlIExHUEwgbGljZW5zZS4KLQotIEJvdW5jeWNhc3RsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIGFuZCBpcyBDb3B5cmlnaHQgKGMpCi0gMjAwMCAtIDIwMDYgVGhlIExlZ2lvbiBPZiBUaGUgQm91bmN5IENhc3RsZS4KLQotIEp5dmFtbCBhbmQgcmJ5YW1sIGFyZSByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIGFuZCBhcmUKLSBDb3B5cmlnaHQgKGMpIDIwMDYgT2xhIEJpbmkuCi0KLVRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgaXMgYXMgZm9sbG93czoKLQotICBDb21tb24gUHVibGljIExpY2Vuc2UgLSB2IDEuMAotCi0gIFRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDT01NT04KLSAgUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRgotICBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgotCi0gIDEuIERFRklOSVRJT05TCi0KLSAgIkNvbnRyaWJ1dGlvbiIgbWVhbnM6Ci0KLSAgYSkgaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kCi0gICAgZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCi0KLSAgYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOgotCi0gIGkpIGNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZAotCi0gIGlpKSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07Ci0KLSAgd2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlCi0gIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEKLSAgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZQotICBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaAotICBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi0gIFByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbgotICBjb25qdW5jdGlvbiB3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwKLSAgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgotCi0gICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KLQotICAiTGljZW5zZWQgUGF0ZW50cyAiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3IKLSAgd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbgotICBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCi0KLSAgIlByb2dyYW0iIG1lYW5zIHRoZSBDb250cmlidXRpb25zIGRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC4KLQotICAiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMKLSAgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KLQotICAyLiBHUkFOVCBPRiBSSUdIVFMKLQotICBhKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvcgotICBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCi0gIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotICBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24KLSAgb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZQotICBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KLQotICBiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvcgotICBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCi0gIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0bwotICBzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLSAgQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50Ci0gIGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZQotICBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwKLSAgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlCi0gIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLSAgYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlcgotICBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCi0KLSAgYykgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMKLSAgdGhlIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlCi0gIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZQotICBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoCi0gIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkKLSAgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cwotICBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMKLSAgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLSAgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IKLSAgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdwotICBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkKLSAgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KLQotICBkKSBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcwotICBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUKLSAgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgotCi0gIDMuIFJFUVVJUkVNRU5UUwotCi0gIEEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0KLSAgdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKLQotICBhKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsKLSAgICBhbmQKLQotICBiKSBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6Ci0KLSAgaSkgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbAotICB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcwotICBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yCi0gIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsKLQotICBpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsCi0gIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwKLSAgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7Ci0KLSAgaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudAotICBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKLQotICBpdikgc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tCi0gIHN1Y2ggQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEKLSAgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZQotICBleGNoYW5nZS4KLQotICBXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06Ci0KLSAgYSkgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kCi0KLSAgYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YKLSAgdGhlIFByb2dyYW0uCi0KLSAgQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQKLSAgd2l0aGluIHRoZSBQcm9ncmFtLgotCi0gIEVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzCi0gIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQKLSAgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgotCi0gIDQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCi0KLSAgQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluCi0gIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZQotICBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLSAgb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYQotICBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90Ci0gIGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYQotICBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywKLSAgc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZAotICBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKQotICBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcKLSAgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eQotICBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cwotICBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMKLSAgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUKLSAgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotICByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci0gIGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkKLSAgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwKLSAgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aAotICB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQKLSAgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoCi0gIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KLQotICBGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotICBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwKLSAgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi0gIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlCi0gIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkKLSAgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0bwotICBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlCi0gIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IG90aGVyCi0gIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLSAgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KLQotICA1LiBOTyBXQVJSQU5UWQotCi0gIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUwotICBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZCi0gIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZCi0gIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLSAgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCi0gIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cwotICBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUKLSAgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQKLSAgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCi0KLSAgNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKLQotICBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SCi0gIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORwotICBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKLSAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLSAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUgotICBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRAotICBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotCi0gIDcuIEdFTkVSQUwKLQotICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotICBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YKLSAgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIKLSAgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi0gIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KLQotICBJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aAotICByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yCi0gIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0Ci0gIENvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50IHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcwotICBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluIGFkZGl0aW9uLCBpZiBSZWNpcGllbnQKLSAgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0KLSAgaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IKLSAgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudCdzCi0gIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaAotICBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gIEFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0Ci0gIGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzCi0gIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZgotICB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi0gIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlCi0gIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5Ci0gIHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQKLSAgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsCi0gIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgotCi0gIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwKLSAgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcyBjb3B5cmlnaHRlZCBhbmQKLSAgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQgU3Rld2FyZAotICByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi0gIHRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50Ci0gIFN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIElCTSBpcyB0aGUgaW5pdGlhbAotICBBZ3JlZW1lbnQgU3Rld2FyZC4gSUJNIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzIHRoZQotICBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbiBvZgotICB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlCi0gIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8KLSAgdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLAotICBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkKLSAgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlcgotICB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikKLSAgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbAotICBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LAotICBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotICBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCi0KLSAgVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZAotICB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8KLSAgcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIEFncmVlbWVudAotICBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLSBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCi0KLVRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiBpcyBhcyBmb2xsb3dzOgotCi0gICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKLSAgICAgICAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwotICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCi0KLSAgICAgICAgICAgIFByZWFtYmxlCi0KLSAgICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCi0gIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQotICBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzCi0gIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCi0gIEZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KLSAgdXNpbmcgaXQuIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Ci0gIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSBZb3UgY2FuIGFwcGx5IGl0IHRvCi0gIHlvdXIgcHJvZ3JhbXMsIHRvby4KLQotICAgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKLSAgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91Ci0gIGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKLSAgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0Ci0gIGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0Ci0gIGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KLQotICAgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKLSAgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgotICBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQotICBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCi0KLSAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCi0gIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAotICB5b3UgaGF2ZS4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCi0gIHNvdXJjZSBjb2RlLiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgotICByaWdodHMuCi0KLSAgICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCi0gICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCi0gIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCi0KLSAgICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgotICB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQotICBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQotICB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwotICB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAotICBhdXRob3JzJyByZXB1dGF0aW9ucy4KLQotICAgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCi0gIHBhdGVudHMuIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQotICBwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCi0gIHByb2dyYW0gcHJvcHJpZXRhcnkuIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55Ci0gIHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCi0KLSAgICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAotICBtb2RpZmljYXRpb24gZm9sbG93LgotCi0gICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKLSAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi0KLSAgICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCi0gIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCi0gIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAotICByZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKLSAgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKLSAgdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKLSAgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKLSAgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCi0gIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCi0KLSAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKLSAgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mCi0gIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KLSAgaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKLSAgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KLSAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCi0KLSAgICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKLSAgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Ci0gIGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKLSAgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQotICBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7Ci0gIGFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KLQotICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKLSAgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KLQotICAgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KLSAgb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAotICBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKLSAgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKLQotICAgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgotCi0gICAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KLSAgICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQotICAgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKLSAgICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KLQotICAgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQotICAgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAotICAgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgotICAgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCi0gICAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKLSAgICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKLSAgICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCi0gICAgICBMaWNlbnNlLiAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0Ci0gICAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCi0gICAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKLQotICBUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYKLSAgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKLSAgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCi0gIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKLSAgc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UKLSAgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCi0gIG9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgotICB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQotICBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCi0KLSAgVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Ci0gIHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwotICBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKLSAgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KLQotICBJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCi0gIHdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgotICBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgotICB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCi0gIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgotICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKLSAgICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucwotICAgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCi0KLSAgICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCi0gICAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgotICAgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQotICAgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQotICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KLSAgICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKLQotICAgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKLSAgICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMKLSAgICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91Ci0gICAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCi0gICAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKLQotICBUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCi0gIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKLSAgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKLSAgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCi0gIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93ZXZlciwgYXMgYQotICBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKLSAgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKLSAgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKLSAgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKLSAgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgotCi0gIElmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKLSAgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAotICBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKLSAgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Ci0gIGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCi0KLSAgICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLSAgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0Ci0gIG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwotICB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCi0gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCi0gIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCi0gIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KLQotICAgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAotICBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCi0gIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlCi0gIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieQotICBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLSAgUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKLSAgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwotICB0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KLQotICAgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLSAgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKLSAgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwotICB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCi0gIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KLSAgWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KLSAgdGhpcyBMaWNlbnNlLgotCi0gICAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAotICBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAotICBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCi0gIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKLSAgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdAotICBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi0gIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKLSAgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50Ci0gIGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKLSAgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCi0gIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KLSAgcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KLQotICBJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKLSAgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bwotICBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgotICBjaXJjdW1zdGFuY2VzLgotCi0gIEl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKLSAgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKLSAgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQotICBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKLSAgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUKLSAgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAotICB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAotICBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCi0gIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAotICBpbXBvc2UgdGhhdCBjaG9pY2UuCi0KLSAgVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCi0gIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KLSAgY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCi0gIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKLSAgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCi0gIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKLSAgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKLSAgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucwotICBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAotICBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KLSAgYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCi0KLSAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBQcm9ncmFtCi0gIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55Ci0gIGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCi0gIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLSAgRm91bmRhdGlvbi4KLQotICAgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKLSAgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgotICB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQotICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKLSAgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscwotICBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCi0gIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgotCi0gICAgICAgICAgICBOTyBXQVJSQU5UWQotCi0gICAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCi0gIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOCi0gIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKLSAgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKLSAgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTCi0gIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRQotICBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKLSAgUkVQQUlSIE9SIENPUlJFQ1RJT04uCi0KLSAgICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCi0gIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKLSAgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKLSAgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCi0gIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKLSAgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCi0gIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCi0gIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQotICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCi0KLSAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLVRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgMi4xIGlzIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0gICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKLQotICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgotCi0gIFtUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiBJdCBhbHNvIGNvdW50cwotICAgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKLSAgIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQotCi0gICAgICAgICAgICBQcmVhbWJsZQotCi0gICAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgotICBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gIExpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKLSAgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgotCi0gICAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQotICBzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCi0gIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gWW91Ci0gIGNhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIKLSAgdGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIKLSAgc3RyYXRlZ3kgdG8gdXNlIGluIGFueSBwYXJ0aWN1bGFyIGNhc2UsIGJhc2VkIG9uIHRoZSBleHBsYW5hdGlvbnMgYmVsb3cuCi0KLSAgICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCi0gIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdAotICB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlCi0gIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKLSAgaXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mCi0gIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3UgYXJlIGluZm9ybWVkIHRoYXQgeW91IGNhbiBkbwotICB0aGVzZSB0aGluZ3MuCi0KLSAgICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCi0gIGRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKLSAgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IKLSAgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSBvciBpZiB5b3UgbW9kaWZ5IGl0LgotCi0gICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKLSAgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQotICB5b3UuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKLSAgY29kZS4gSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCi0gIGNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQotICB3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZwotICBpdC4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgotCi0gICAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQotICBsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAotICBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KLQotICAgIFRvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdAotICB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGZyZWUgbGlicmFyeS4gQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKLSAgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93Ci0gIHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAotICBhdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKLSAgaW50cm9kdWNlZCBieSBvdGhlcnMuCi0KLSAgICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgotICBhbnkgZnJlZSBwcm9ncmFtLiBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKLSAgZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCi0gIHJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQKLSAgYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQotICBjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KLQotICAgIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCi0gIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGVzc2VyCi0gIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbiBkZXNpZ25hdGVkIGxpYnJhcmllcywgYW5kCi0gIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBXZSB1c2UKLSAgdGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQotICBsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KLQotICAgIFdoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nCi0gIGEgc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYQotICBjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuIFRoZSBvcmRpbmFyeQotICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQotICBlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gVGhlIExlc3NlciBHZW5lcmFsCi0gIFB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCi0gIHRoZSBsaWJyYXJ5LgotCi0gICAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdAotICBkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbAotICBQdWJsaWMgTGljZW5zZS4gSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwotICBvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuIFRoZXNlIGRpc2FkdmFudGFnZXMKLSAgYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55Ci0gIGxpYnJhcmllcy4gSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgotICBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCi0KLSAgICBGb3IgZXhhbXBsZSwgb24gcmFyZSBvY2Nhc2lvbnMsIHRoZXJlIG1heSBiZSBhIHNwZWNpYWwgbmVlZCB0bwotICBlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcwotICBhIGRlLWZhY3RvIHN0YW5kYXJkLiBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKLSAgYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCi0gIGxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiBJbiB0aGlzCi0gIGNhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZQotICBzb2Z0d2FyZSBvbmx5LCBzbyB3ZSB1c2UgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotCi0gICAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCi0gIHByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgotICBmcmVlIHNvZnR3YXJlLiBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4KLSAgbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VCi0gIG9wZXJhdGluZyBzeXN0ZW0sIGFzIHdlbGwgYXMgaXRzIHZhcmlhbnQsIHRoZSBHTlUvTGludXggb3BlcmF0aW5nCi0gIHN5c3RlbS4KLQotICAgIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCi0gIHVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCi0gIGxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgotICB0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgotCi0gICAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKLSAgbW9kaWZpY2F0aW9uIGZvbGxvdy4gUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKLSAgIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuIFRoZQotICBmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0Ci0gIGJlIGNvbWJpbmVkIHdpdGggdGhlIGxpYnJhcnkgaW4gb3JkZXIgdG8gcnVuLgotCi0gICAgICAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KLQotICAgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgotICBwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgotICBvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCi0gIHRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KLSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCi0KLSAgICBBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhCi0gIHByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcwotICAod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgotCi0gICAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKLSAgd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuIEEgIndvcmsgYmFzZWQgb24gdGhlCi0gIExpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyCi0gIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCi0gIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKLSAgc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCi0gIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCi0KLSAgICAiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgotICBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKLSAgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKLSAgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCi0gIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0KLSAgICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAotICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YKLSAgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQotICBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCi0gIG9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKLSAgd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCi0gIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgotCi0gICAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCi0gIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Ci0gIHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCi0gIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0Ci0gIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Ci0gIHdhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCi0gIExpYnJhcnkuCi0KLSAgICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAotICBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCi0gIGZlZS4KLQotICAgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KLSAgb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAotICBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKLSAgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKLQotICAgICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgotCi0gICAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKLSAgICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCi0KLSAgICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubwotICAgICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQotICAgICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcwotICAgICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQotICAgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCi0gICAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKLSAgICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCi0gICAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCi0KLSAgICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCi0gICAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCi0gICAgICBhcHBsaWNhdGlvbi4gVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55Ci0gICAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAotICAgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKLSAgICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCi0KLSAgVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmCi0gIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCi0gIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgotICB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCi0gIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91Ci0gIGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAotICBvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKLSAgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKLSAgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCi0gIGl0LgotCi0gIFRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAotICB5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KLSAgZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCi0gIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCi0KLSAgSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQotICB3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKLSAgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKLSAgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KLQotICAgIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCi0gIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiBUbyBkbwotICB0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCi0gIHRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKLSAgaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCi0gIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKLSAgdGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCi0gIHRoZXNlIG5vdGljZXMuCi0KLSAgICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCi0gIHRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCi0gIHN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCi0KLSAgICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YKLSAgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgotCi0gICAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKLSAgZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KLSAgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Ci0gIGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKLSAgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCi0gIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KLQotICAgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Ci0gIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCi0gIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bwotICBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Ci0gIGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCi0KLSAgICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQotICBMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCi0gIGxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiBTdWNoIGEKLSAgd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAotICB0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQotICBjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKLSAgY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUKLSAgbGlicmFyeSIuIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KLSAgU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCi0KLSAgICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQotICB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKLSAgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuCi0gIFdoZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCi0gIGxpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiBUaGUKLSAgdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KLQotICAgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCi0gIHN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZQotICBmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0Ci0gIGZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKLSAgd29yay4gKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQotICBMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQotCi0gICAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkKLSAgZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCi0gIEFueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAotICB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCi0KLSAgICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvcgotICBsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYQotICB3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Ci0gIG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZQotICBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KLQotICAgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQotICBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKLSAgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIHdvcmsKLSAgZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKLSAgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQotICBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKLSAgb2YgdGhlc2UgdGhpbmdzOgotCi0gICAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZwotICAgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCi0gICAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgotICAgICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKLSAgICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAotICAgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKLSAgICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCi0gICAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuIChJdCBpcyB1bmRlcnN0b29kCi0gICAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKLSAgICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCi0gICAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKLQotICAgICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCi0gICAgICBMaWJyYXJ5LiBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCi0gICAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKLSAgICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQotICAgICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgotICAgICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCi0gICAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KLQotICAgICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKLSAgICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscwotICAgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQotICAgICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgotCi0gICAgICBkKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQotICAgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCi0gICAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCi0KLSAgICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQotICAgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCi0KLSAgICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKLSAgTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKLSAgcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKLSAgdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKLSAgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCi0gIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KLSAgd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwotICB0aGUgZXhlY3V0YWJsZS4KLQotICAgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCi0gIHJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKLSAgYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Ci0gIHVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKLSAgZGlzdHJpYnV0ZS4KLQotICAgIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKLSAgTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKLSAgZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAotICBsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KLSAgdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCi0gIHBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6Ci0KLSAgICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCi0gICAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5Ci0gICAgICBmYWNpbGl0aWVzLiBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICAgICAgU2VjdGlvbnMgYWJvdmUuCi0KLSAgICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0Ci0gICAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZwotICAgICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgotCi0gICAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKLSAgdGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueQotICBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKLSAgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCi0gIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAotICBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCi0gIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KLQotICAgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAotICBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCi0gIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlCi0gIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieQotICBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLSAgTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKLSAgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwotICB0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KLQotICAgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCi0gIExpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCi0gIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKLSAgc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCi0gIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KLSAgWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAotICB0aGlzIExpY2Vuc2UuCi0KLSAgICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAotICBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAotICBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCi0gIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKLSAgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdAotICBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi0gIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKLSAgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50Ci0gIGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKLSAgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCi0gIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KLSAgcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KLQotICBJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55Ci0gIHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKLSAgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KLQotICBJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55Ci0gIHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Ci0gIHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKLSAgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKLSAgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUKLSAgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAotICB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAotICBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCi0gIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAotICBpbXBvc2UgdGhhdCBjaG9pY2UuCi0KLSAgVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCi0gIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCi0gIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQotICBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQKLSAgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCi0gIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cwotICBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCi0gIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Ci0gIHZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KLSAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLAotICBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCi0KLSAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaWJyYXJ5Ci0gIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAotICAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCi0gIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCi0gIGxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0KLSAgICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCi0gIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKLSAgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcwotICBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQotICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIKLSAgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cwotICBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZwotICBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgotCi0gICAgICAgICAgICBOTyBXQVJSQU5UWQotCi0gICAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCi0gIFdBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCi0gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCi0gIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKLSAgTElCUkFSWSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQotICBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCi0KLSAgICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgotICBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQotICBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQotICBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCi0gIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCi0gIExJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKLSAgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKLSAgRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgotICBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gIERBTUFHRVMuCi0KLSAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLSAgICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCi0KLSAgICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Ci0gIHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAotICBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZwotICByZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCi0KLSAgICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gSXQgaXMKLSAgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLSAgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCi0gICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCi0KLSAgICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+Ci0gICAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiA8bmFtZSBvZiBhdXRob3I+Ci0KLSAgICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKLSAgICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0KLSAgQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCi0KLSAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKLSAgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKLSAgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6Ci0KLSAgICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQotICAgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCi0KLSAgICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKLSAgICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQotCi0gIFRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCi0KLVRoZSBmb2xsb3dpbmcgbGljZW5zZXMgY292ZXIgY29kZSBvdGhlciB0aGFuIEpSdWJ5IHdoaWNoIGlzIGluY2x1ZGVkIHdpdGggSlJ1YnkuCi0KLUxpY2Vuc2VzIGxpc3RlZCBiZWxvdyBpbmNsdWRlOgotCi0qIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwotKiBBcGFjaGUgMi4wIExpY2Vuc2UKLSogQlNEIExpY2Vuc2UKLSogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgVmVyc2lvbiAxLjEKLSogTUlUIExpY2Vuc2UKLQotVGhlIGNvbXBsZXRlIHRleHQgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyBpcyBhcyBmb2xsb3dzOgotCi0gICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKLSAgICAgICAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNwotCi0gICBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+Ci0gICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgotCi0gICAgICAgICAgICBQcmVhbWJsZQotCi0gICAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3IKLSAgc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLgotCi0gICAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCi0gIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuIEJ5IGNvbnRyYXN0LAotICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bwotICBzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKLSAgc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCi0gIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCi0gIGFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiBZb3UgY2FuIGFwcGx5IGl0IHRvCi0gIHlvdXIgcHJvZ3JhbXMsIHRvby4KLQotICAgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKLSAgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91Ci0gIGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKLSAgdGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKLSAgd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKLSAgZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCi0KLSAgICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKLSAgdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXJlZm9yZSwgeW91IGhhdmUKLSAgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmCi0gIHlvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCi0KLSAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCi0gIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKLSAgZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZQotICBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5Ci0gIGtub3cgdGhlaXIgcmlnaHRzLgotCi0gICAgRGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOgotICAoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQotICBnaXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0LgotCi0gICAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCi0gIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gRm9yIGJvdGggdXNlcnMnIGFuZAotICBhdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzCi0gIGNoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bwotICBhdXRob3JzIG9mIHByZXZpb3VzIHZlcnNpb25zLgotCi0gICAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgotICBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKLSAgY2FuIGRvIHNvLiBUaGlzIGlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGFpbSBvZgotICBwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuIFRoZSBzeXN0ZW1hdGljCi0gIHBhdHRlcm4gb2Ygc3VjaCBhYnVzZSBvY2N1cnMgaW4gdGhlIGFyZWEgb2YgcHJvZHVjdHMgZm9yIGluZGl2aWR1YWxzIHRvCi0gIHVzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiBUaGVyZWZvcmUsIHdlCi0gIGhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQotICBwcm9kdWN0cy4gSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluIG90aGVyIGRvbWFpbnMsIHdlCi0gIHN0YW5kIHJlYWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZSBkb21haW5zIGluIGZ1dHVyZSB2ZXJzaW9ucwotICBvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KLQotICAgIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuCi0gIFN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgotICBzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwotICBhdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKLSAgbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdAotICBwYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgcHJvZ3JhbSBub24tZnJlZS4KLQotICAgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCi0gIG1vZGlmaWNhdGlvbiBmb2xsb3cuCi0KLSAgICAgICAgICAgICBURVJNUyBBTkQgQ09ORElUSU9OUwotCi0gICAgMC4gRGVmaW5pdGlvbnMuCi0KLSAgICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLQotICAgICJDb3B5cmlnaHQiIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mCi0gIHdvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCi0KLSAgICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKLSAgTGljZW5zZS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICJMaWNlbnNlZXMiIGFuZAotICAicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCi0KLSAgICBUbyAibW9kaWZ5IiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCi0gIGluIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbgotICBleGFjdCBjb3B5LiBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQotICBlYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KLQotICAgIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkCi0gIG9uIHRoZSBQcm9ncmFtLgotCi0gICAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAotICBwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yCi0gIGluZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQotICBjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsCi0gIGRpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCi0gIHB1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KLQotICAgIFRvICJjb252ZXkiIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKLSAgcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2gKLSAgYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90IGNvbnZleWluZy4KLQotICAgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgotICB0byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlCi0gIGZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQotICB0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQotICBleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlCi0gIHdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYKLSAgdGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEKLSAgbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KLQotICAgIDEuIFNvdXJjZSBDb2RlLgotCi0gICAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKLSAgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCi0gIGZvcm0gb2YgYSB3b3JrLgotCi0gICAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKLSAgc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgotICBpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAotICBpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KLQotICAgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCi0gIHRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mCi0gIHBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IKLSAgQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0Ci0gIE1ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbgotICBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiBBCi0gICJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAotICAoa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCi0gIChpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCi0gIHByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgotCi0gICAgVGhlICJDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbAotICB0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCi0gIHdvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8KLSAgY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKLSAgU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQotICBwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKLSAgd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UKLSAgaW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IKLSAgdGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5Ci0gIGxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLAotICBzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZQotICBzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCi0KLSAgICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCi0gIGNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwotICBTb3VyY2UuCi0KLSAgICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQKLSAgc2FtZSB3b3JrLgotCi0gICAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCi0KLSAgICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgotICBjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZAotICBjb25kaXRpb25zIGFyZSBtZXQuIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQKLSAgcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQotICBjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMKLSAgY29udGVudCwgY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgotICByaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KLQotICAgIFlvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QKLSAgY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKLSAgaW4gZm9yY2UuIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCi0gIG9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQotICB3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCi0gIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCi0gIG5vdCBjb250cm9sIGNvcHlyaWdodC4gVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcwotICBmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uCi0gIGFuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgotICB5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgotCi0gICAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKLSAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAKLSAgbWFrZXMgaXQgdW5uZWNlc3NhcnkuCi0KLSAgICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgotCi0gICAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCi0gIG1lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQotICAxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKLSAgc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaAotICBtZWFzdXJlcy4KLQotICAgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKLSAgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uCi0gIGlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8KLSAgdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgotICBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncwotICB1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YKLSAgdGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KLQotICAgIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCi0KLSAgICBZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UKLSAgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKLSAgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwotICBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbnkKLSAgbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwotICBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbAotICByZWNpcGllbnRzIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KLQotICAgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKLSAgYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KLQotICAgIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCi0KLSAgICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCi0gIHByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlCi0gIHRlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgotCi0gICAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKLSAgICAgIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KLQotICAgICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKLSAgICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgotICAgICAgNy4gVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvCi0gICAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgotCi0gICAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwotICAgICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuIFRoaXMKLSAgICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3Ci0gICAgICBhZGRpdGlvbmFsIHRlcm1zLCB0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLAotICAgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuIFRoaXMgTGljZW5zZSBnaXZlcyBubwotICAgICAgcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdAotICAgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KLQotICAgICAgZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkKLSAgICAgIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZQotICAgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKLSAgICAgIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgotCi0gICAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAotICB3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAotICBhbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAotICBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCi0gICJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAotICB1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCi0gIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCi0gIGluIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyCi0gIHBhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCi0KLSAgICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KLQotICAgIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zCi0gIG9mIHNlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZQotICBtYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCi0gIGluIG9uZSBvZiB0aGVzZSB3YXlzOgotCi0gICAgICBhKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0Ci0gICAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQotICAgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bQotICAgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCi0KLSAgICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKLSAgICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQotICAgICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKLSAgICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAotICAgICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQotICAgICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCi0gICAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAotICAgICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwotICAgICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCi0gICAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCi0gICAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgotCi0gICAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZQotICAgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gVGhpcwotICAgICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKLSAgICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAotICAgICAgd2l0aCBzdWJzZWN0aW9uIDZiLgotCi0gICAgICBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZAotICAgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCi0gICAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubwotICAgICAgZnVydGhlciBjaGFyZ2UuIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKLSAgICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiBJZiB0aGUgcGxhY2UgdG8KLSAgICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQotICAgICAgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpCi0gICAgICB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4KLSAgICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCi0gICAgICBDb3JyZXNwb25kaW5nIFNvdXJjZS4gUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUKLSAgICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcwotICAgICAgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4KLQotICAgICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZAotICAgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKLSAgICAgIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8KLSAgICAgIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLgotCi0gICAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCi0gIGZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCi0gIGluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KLQotICAgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Ci0gIHRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksCi0gIG9yIGhvdXNlaG9sZCBwdXJwb3Nlcywgb3IgKDIpIGFueXRoaW5nIGRlc2lnbmVkIG9yIHNvbGQgZm9yIGluY29ycG9yYXRpb24KLSAgaW50byBhIGR3ZWxsaW5nLiBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCi0gIGRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiBGb3IgYSBwYXJ0aWN1bGFyCi0gIHByb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1c2VkIiByZWZlcnMgdG8gYQotICB0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMKLSAgb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKLSAgYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiBBIHByb2R1Y3QKLSAgaXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKLSAgY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQKLSAgdGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCi0KLSAgICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCi0gIHByb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbAotICBhbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tCi0gIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuIFRoZSBpbmZvcm1hdGlvbiBtdXN0Ci0gIHN1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0Ci0gIGNvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCi0gIG1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgotCi0gICAgSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3IKLSAgc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKLSAgcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlCi0gIFVzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEKLSAgZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKLSAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQKLSAgYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKLSAgaWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwKLSAgbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcwotICBiZWVuIGluc3RhbGxlZCBpbiBST00pLgotCi0gICAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQotICByZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMKLSAgZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKLSAgdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuIEFjY2VzcyB0byBhCi0gIG5ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCi0gIGFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZAotICBwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLgotCi0gICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCi0gIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkKLSAgZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4KLSAgc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCi0gIHVucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgotCi0gICAgNy4gQWRkaXRpb25hbCBUZXJtcy4KLQotICAgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCi0gIExpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4KLSAgQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbAotICBiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Ci0gIHRoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKLSAgYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQotICB1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5Ci0gIHRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KLQotICAgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KLSAgcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mCi0gIGl0LiAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgotICByZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgWW91IG1heSBwbGFjZQotICBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCi0gIGZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4KLQotICAgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQotICBhZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCi0gIHRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgotCi0gICAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUKLSAgICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0KLSAgICAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcgotICAgICAgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbAotICAgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKLQotICAgICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgotICAgICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KLSAgICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKLQotICAgICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgotICAgICAgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCi0KLSAgICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKLSAgICAgIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgotCi0gICAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0Ci0gICAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgotICAgICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgotICAgICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgotICAgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgotCi0gICAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXIKLSAgcmVzdHJpY3Rpb25zIiB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gSWYgdGhlIFByb2dyYW0gYXMgeW91Ci0gIHJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCi0gIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgotICByZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMKLSAgYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzCi0gIExpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcwotICBvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcwotICBub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KLQotICAgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKLSAgbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCi0gIGFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwotICB3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgotCi0gICAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUKLSAgZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsKLSAgdGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgotCi0gICAgOC4gVGVybWluYXRpb24uCi0KLSAgICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKLSAgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCi0gIG1vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlcgotICB0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCi0gIHBhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KLQotICAgIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCi0gIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQotICBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCi0gIGZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKLSAgaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKLSAgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgotCi0gICAgTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCi0gIHJlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQotICB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCi0gIHJlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAotICBjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCi0gIHlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgotCi0gICAgVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKLSAgbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCi0gIHRoaXMgTGljZW5zZS4gSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQotICByZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCi0gIG1hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCi0KLSAgICA5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4KLQotICAgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgotICBydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsKLSAgb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KLSAgdG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiBIb3dldmVyLAotICBub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKLSAgbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwotICBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQotICBjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLgotCi0gICAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgotCi0gICAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQotICByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQKLSAgcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCi0gIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgotCi0gICAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgotICBvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuCi0gIG9yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKLSAgd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKLSAgdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCi0gIGxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAotICBnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQotICBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKLSAgdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgotCi0gICAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCi0gIHJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGV4YW1wbGUsIHlvdSBtYXkKLSAgbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCi0gIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KLSAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKLSAgYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCi0gIHNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KLQotICAgIDExLiBQYXRlbnRzLgotCi0gICAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcwotICBMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gVGhlCi0gIHdvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLgotCi0gICAgQSBjb250cmlidXRvcidzICJlc3NlbnRpYWwgcGF0ZW50IGNsYWltcyIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zCi0gIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKLSAgaGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkCi0gIGJ5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwKLSAgYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKLSAgY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uIEZvcgotICBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKLSAgcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCi0gIHRoaXMgTGljZW5zZS4KLQotICAgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCi0gIHBhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bwotICBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQKLSAgcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KLQotICAgIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCi0gIGFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAotICAoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCi0gIHN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuIFRvICJncmFudCIgc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGEKLSAgcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKLSAgcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgotCi0gICAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKLSAgYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKLSAgdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQotICBwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAotICB0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCi0gIGF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKLSAgcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKLSAgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAotICBsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gIktub3dpbmdseSByZWx5aW5nIiBtZWFucyB5b3UgaGF2ZQotICBhY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKLSAgY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yawotICBpbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQKLSAgY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KLQotICAgIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKLSAgYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQotICBjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKLSAgcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Ci0gIG9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKLSAgeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKLSAgd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCi0KLSAgICBBIHBhdGVudCBsaWNlbnNlIGlzICJkaXNjcmltaW5hdG9yeSIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4KLSAgdGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKLSAgY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlCi0gIHNwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAotICB3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwotICBpbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50Ci0gIHRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCi0gIHRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQotICBwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKLSAgcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawotICBjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQotICBmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdAotICBjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCi0gIG9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCi0KLSAgICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nCi0gIGFueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5Ci0gIG90aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KLQotICAgIDEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLgotCi0gICAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgotICBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90Ci0gIGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgY29udmV5IGEKLSAgY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi0gIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5Ci0gIG5vdCBjb252ZXkgaXQgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91Ci0gIHRvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleQotICB0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMKLSAgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgotCi0gICAgMTMuIFVzZSB3aXRoIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0KLSAgICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCi0gIHBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKLSAgdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQotICBjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gVGhlIHRlcm1zIG9mIHRoaXMKLSAgTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCi0gIGJ1dCB0aGUgc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAgc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQotICBjb21iaW5hdGlvbiBhcyBzdWNoLgotCi0gICAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKLSAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCi0gIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwotICBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KLQotICAgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUKLSAgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKLSAgUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKLSAgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKLSAgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLSAgRm91bmRhdGlvbi4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQotICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQKLSAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLQotICAgIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKLSAgdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKLSAgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQotICB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KLQotICAgIExhdGVyIGxpY2Vuc2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50Ci0gIHBlcm1pc3Npb25zLiBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQotICBhdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCi0gIGxhdGVyIHZlcnNpb24uCi0KLSAgICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KLQotICAgIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkKLSAgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCi0gIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkKLSAgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQotICBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRgotICBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCi0KLSAgICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCi0KLSAgICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKLSAgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUwotICBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKLSAgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFCi0gIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKLSAgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKLSAgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksCi0gIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAgU1VDSCBEQU1BR0VTLgotCi0gICAgMTcuIEludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi4KLQotICAgIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAotICBhYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKLSAgcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCi0gIGFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKLSAgUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQotICBjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCi0KLSAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLSAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCi0KLSAgICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Ci0gIHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKLSAgZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCi0KLSAgICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gSXQgaXMgc2FmZXN0Ci0gIHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLSAgc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAotICB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KLQotICAgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KLSAgICAgIENvcHlyaWdodCAoQykgPHllYXI+IDxuYW1lIG9mIGF1dGhvcj4KLQotICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotICBBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotICAgIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKLSAgbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgotCi0gICAgICA8cHJvZ3JhbT4gQ29weXJpZ2h0IChDKSA8eWVhcj4gPG5hbWUgb2YgYXV0aG9yPgotICAgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KLSAgICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKLSAgICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KLQotICBUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKLSAgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMKLSAgbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLgotCi0gICAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKLSAgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KLSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKLSAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0gICAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbQotICBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQotICBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKLSAgdGhlIGxpYnJhcnkuIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKLSAgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQKLSAgPGh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L3doeS1ub3QtbGdwbC5odG1sPi4KLQotVGhlIGNvbXBsZXRlIHRleHQgb2YgdGhlIEFwYWNoZSAyLjAgTGljZW5zZSBpcyBhcyBmb2xsb3dzOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgotCi0gIDEuIERlZmluaXRpb25zLgotCi0gICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgotCi0gICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCi0gICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCi0gICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgotCi0gICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKLSAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCi0gICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCi0KLSAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKLSAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKLSAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KLSAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCi0gICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKLSAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50Ci0gICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCi0gICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKLQotICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCi0KLSAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgotCi0gIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKLSAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQotICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0Ci0gICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLQotICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKLSAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCi0KLSAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCi0gICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgotICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAotICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQotICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAotICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCi0gICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAotICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCi0gICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKLSAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAotICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCi0gICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgotCi0gIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKLSAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKLSAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwotICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKLSAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKLSAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAotICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCi0gICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgotCi0gIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKLSAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKLSAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgotICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCi0KLSAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKLSAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgotICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQotICAgICB0aGUgYnJhY2tldHMhKSBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQotICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCi0gICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgotICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCi0KLSAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCi0KLSAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLVRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoZSBCU0QgbGljZW5zZSBjYW4gYmUgaXMgYXMgZm9sbG93czoKLQotICBDb3B5cmlnaHQgKGMpIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICBhcmUgbWV0OgotICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi0gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gIFNVQ0ggREFNQUdFLgotCi1UaGUgY29tcGxldGUgdGV4dCBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgVmVyc2lvbiAxLjEgaXMgYXMgZm9sbG93czoKLQotIC8qCi0gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAqIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICoKLSAgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uIEFsbAotICAqIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKLSAgKiBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gICoKLSAgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgKgotICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gICogdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICAqIGRpc3RyaWJ1dGlvbi4KLSAgKgotICAqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZgotICAqIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICJUaGlzIHByb2R1Y3QKLSAgKiBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gICogKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5Ci0gICogYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5Ci0gICogYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSAgKgotICAqIDQuIFRoZSBuYW1lcyAiQW50IiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IG5vdCBiZQotICAqIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICogd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZQotICAqIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0gICoKLSAgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIiwKLSAgKiBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSAgKiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAgKgotICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSAgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OCi0gICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWQotICAqIE9GIFNVQ0ggREFNQUdFLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSAgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBGb3IgbW9yZQotICAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQotICAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSAgKgotICAqLwotCi1UaGUgY29tcGxldGUgdGV4dCBvZiB0aGUgTUlUIGxpY2Vuc2UgaXMgYXMgZm9sbG93czoKLQotICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgotICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgotICBmaWxlcyAodGhlINJTb2Z0d2FyZdMpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0Ci0gIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAotICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKLSAgY29uZGl0aW9uczoKLQotICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg0kFTIElT0ywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCi0gIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCi0gIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAotICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0KLQotRU5EIE9GIE5PVElDRQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLWpydWJ5L1JFQURNRS50eHQgYi9saWJyYXJpZXMvbGFuZy1qcnVieS9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmRjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJyYXJpZXMvbGFuZy1qcnVieS9SRUFETUUudHh0CkBAIC0wLDAgKzEsMTAgQEAKKworSlJ1YnkgaXMgbGljZW5zZWQgdW5kZXIgTEdQTCwgYW5kIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkb2Vzbid0IGFsbG93IHRoZSB1c2Ugb2YgTEdQTCBpbiBBcGFjaGUgcHJvamVjdHMuCisKK1RoZXJlZm9yLCBBcGFjaGUgWmVzdJkgaGFkIHRvIGRyb3AgdGhpcyBsaWJyYXJ5IGNvbXBvbmVudCwgYnV0CitpdCBpcyBzdGlsbCBhdmFpbGFibGUgZm9yIHNlcGFyYXRlIGRvd25sb2FkIGF0CisKK2h0dHBzOi8vZ2l0aHViLmNvbS9RaTRqL3FpNGotc2RrCisKK2luIHRoZSBsaWJyYXJpZXMvbGFuZy1qcnVieSBkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qcnVieS9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvbGFuZy1qcnVieS9idWlsZC5ncmFkbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMWVjYmIuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctanJ1YnkvYnVpbGQuZ3JhZGxlCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBKUnVieSBMaWJyYXJ5IGFsbG93cyBmb3IgTWl4aW5zIHRvIGJlIGltcGxlbWVudGVkIGluIEpSdWJ5IHNjcmlwdHMgaW5zdGVhZCBvZiBkaXJlY3RseSBpbiBjb21waWxlZCBKYXZhLiIKLQotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFNjcmlwdGluZyAtIEpSdWJ5IiB9fQotCi0KLWRlcGVuZGVuY2llcyB7Ci0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKLSAgY29tcGlsZSggcHJvamVjdCggJzpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5zY3JpcHRpbmcnICkpCi0gIGNvbXBpbGUobGlicmFyaWVzLmpydWJ5KQotCi0gIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiKSkKLQotICB0ZXN0UnVudGltZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiKSkKLSAgdGVzdFJ1bnRpbWUobGlicmFyaWVzLmxvZ2JhY2spCi19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qcnVieS9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9sYW5nLWpydWJ5L2Rldi1zdGF0dXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWZjOThhLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9sYW5nLWpydWJ5L2Rldi1zdGF0dXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCi0gICAgICAgIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZCI+Ci0gIDxzdGF0dXM+Ci0gICAgPCEtLW5vbmUsZWFybHksYmV0YSxzdGFibGUsbWF0dXJlLS0+Ci0gICAgPGNvZGViYXNlPmJldGE8L2NvZGViYXNlPgotCi0gICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPGRvY3VtZW50YXRpb24+YnJpZWY8L2RvY3VtZW50YXRpb24+Ci0KLSAgICA8IS0tIG5vbmUsIHNvbWUsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDx1bml0dGVzdHM+c29tZTwvdW5pdHRlc3RzPgotICA8L3N0YXR1cz4KLSAgPGxpY2Vuc2VzPgotICAgIDxsaWNlbnNlPkFMdjI8L2xpY2Vuc2U+Ci0gIDwvbGljZW5zZXM+Ci08L21vZHVsZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qcnVieS9saWNlbnNlcy9qcnVieS5saWNlbnNlIGIvbGlicmFyaWVzL2xhbmctanJ1YnkvbGljZW5zZXMvanJ1YnkubGljZW5zZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRiOTUxMS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvbGFuZy1qcnVieS9saWNlbnNlcy9qcnVieS5saWNlbnNlCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotSlJ1YnkgZGlzdHJpYnV0ZXMgc29tZSBydWJ5IG1vZHVsZXMgd2hpY2ggYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIFJ1YnkKLWxpY2Vuc2U6Ci0KLVJ1YnkgaXMgY29weXJpZ2h0ZWQgZnJlZSBzb2Z0d2FyZSBieSBZdWtpaGlybyBNYXRzdW1vdG8gPG1hdHpAbmV0bGFiLmpwPi4KLVlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgZWl0aGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMCi0oc2VlIHRoZSBmaWxlIEdQTCksIG9yIHRoZSBjb25kaXRpb25zIGJlbG93OgotCi0gIDEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlCi0gICAgIHNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlCi0gICAgIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgotCi0gIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGUgc29mdHdhcmUgaW4gYW55IHdheSwgcHJvdmlkZWQgdGhhdAotICAgICB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgICBhKSBwbGFjZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4gb3Igb3RoZXJ3aXNlCi0gICAgICAgICAgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkCi1tb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvciBhbiBlcXVpdmFsZW50IG1lZGl1bSwgb3IgYnkgYWxsb3dpbmcKLXRoZSBhdXRob3IgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvZnR3YXJlLgotCi0gICAgICAgYikgdXNlIHRoZSBtb2RpZmllZCBzb2Z0d2FyZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yCi0gICAgICAgICAgb3JnYW5pemF0aW9uLgotCi0gICAgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgYmluYXJpZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCB3aXRoCi0gICAgICAgICAgaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgc29mdHdhcmUgZGlzdHJpYnV0aW9uLgotCi0gICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvci4KLQotICAzLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIGluIG9iamVjdCBjb2RlIG9yIGJpbmFyeSBmb3JtLAotICAgICBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKLQotICAgICAgIGEpIGRpc3RyaWJ1dGUgdGhlIGJpbmFyaWVzIGFuZCBsaWJyYXJ5IGZpbGVzIG9mIHRoZSBzb2Z0d2FyZSwKLXRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkKLW9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgZGlzdHJpYnV0aW9uLgotCi0gICAgICAgYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YKLXRoZSBzb2Z0d2FyZS4KLQotICAgICAgIGMpIGdpdmUgbm9uLXN0YW5kYXJkIGJpbmFyaWVzIG5vbi1zdGFuZGFyZCBuYW1lcywgd2l0aAotICAgICAgICAgIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIG9yaWdpbmFsIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbi4KLQotICAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuCi0KLSAgNC4gWW91IG1heSBtb2RpZnkgYW5kIGluY2x1ZGUgdGhlIHBhcnQgb2YgdGhlIHNvZnR3YXJlIGludG8gYW55IG90aGVyCi0gICAgIHNvZnR3YXJlIChwb3NzaWJseSBjb21tZXJjaWFsKS4gQnV0IHNvbWUgZmlsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbgotICAgICBhcmUgbm90IHdyaXR0ZW4gYnkgdGhlIGF1dGhvciwgc28gdGhhdCB0aGV5IGFyZSBub3QgdW5kZXIgdGhlc2UgdGVybXMuCi0KLSAgICAgRm9yIHRoZSBsaXN0IG9mIHRob3NlIGZpbGVzIGFuZCB0aGVpciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUKLSAgICAgZmlsZSBMRUdBTC4KLQotICA1LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcwotICAgICBvdXRwdXQgZnJvbSB0aGUgc29mdHdhcmUgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUKLSAgICAgY29weXJpZ2h0IG9mIHRoZSBzb2Z0d2FyZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwKLSAgICAgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcwotICAgICBzb2Z0d2FyZS4KLQotICA2LiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAgICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAgICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICAgICBQVVJQT1NFLgotCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qcnVieS9zcmMvZG9jcy9sYW5nLWpydWJ5LnR4dCBiL2xpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy9kb2NzL2xhbmctanJ1YnkudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzExM2MyLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy9kb2NzL2xhbmctanJ1YnkudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotW1tsaWJyYXJ5LXNjcmlwdC1qcnVieSwgSlJ1YnkgU2NyaXB0aW5nIExpYnJhcnldXQotPSBKUnVieSBTY3JpcHRpbmcgPQotCi1bZGV2c3RhdHVzXQotLS0tLS0tLS0tLS0tLS0KLXNvdXJjZT1saWJyYXJpZXMvbGFuZy1qcnVieS9kZXYtc3RhdHVzLnhtbAotLS0tLS0tLS0tLS0tLS0KLQotVGhlIEpSdWJ5IFNjcmlwdGluZyBMaWJyYXJ5IGFsbG93cyBNaXhpbiBtZXRob2RzIHRvIGJlIGltcGxlbWVudGVkIGluIFJ1YnkgYW5kIGxvYWRlZCBkeW5hbWljYWxseSBvbiBmaXJzdCB1c2UuCi0KLWluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCi0KLVRoZSBKUnVieSBTY3JpcHRpbmcgTGlicmFyeSBpcyBhIEdlbmVyaWMgbWl4aW4gdGhhdCBpbXBsZW1lbnRzIGludGVyZmFjZXMgYnkgZGVsZWdhdGluZyB0byBSdWJ5IGZ1bmN0aW9ucyB1c2luZyBKUnVieS4gRWFjaCBtZXRob2QgaW4gYW4gaW50ZXJmYWNlIGlzIGRlY2xhcmVkIGJ5IGEgUnVieSBtZXRob2QgaW4gYSBmaWxlIGxvY2F0ZWQgaW4gY2xhc3NwYXRoIHdpdGggdGhlIG5hbWUgIjxpbnRlcmZhY2U+LnJiIiwgd2hlcmUgdGhlIGludGVyZmFjZSBuYW1lIGluY2x1ZGVzIHRoZSBwYWNrYWdlLCBhbmQgaGFzICIuIiByZXBsYWNlZCB3aXRoICIvIi4KLQotRXhhbXBsZTogCi0KLSAgICBvcmcvcWk0ai9zYW1wbGVzL2hlbGxvL2RvbWFpbi9IZWxsb1dvcmxkU3BlYWtlci5yYgotCi1UaGF0IG1lYW5zIHRoYXQgdGhlIEhlbGxvV29ybGRTcGVha2VyLnJiIGZpbGUgbWF5IGJlIGNvLWxvY2F0ZWQgd2l0aCB0aGUgY2xhc3MgZmlsZXMgaW4gdGhlIHNhbWUgcGFja2FnZS4gSXQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdG8gcGxhY2UgdGhlIEpSdWJ5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBtaXhpbiBpbiBhIGRpZmZlcmVudCBwYWNrYWdlIHRoYW4gdGhlIGludGVyZmFjZSBpdCBpbXBsZW1lbnRzLgotCi1UbyB1c2UgSlJ1YnkgdG8gaW1wbGVtZW50IHRoZSBNaXhpbiBmdW5jdGlvbmFsaXR5IGZvciBhIGdpdmVuIGludGVyZmFjZSwgCi1zaW1wbHkgZGVjbGFyZSB0aGUgK0pSdWJ5TWl4aW4rIGxpa2UgYW55IG90aGVyIG1peGluLCBlaXRoZXIgaW4gdGhlIGludGVyZmFjZSAKLW9yIGF0IGFzc2VtYmx5IHRpbWUuCi0KLVtzbmlwcGV0LGphdmFdCi0tLS0tCi1zb3VyY2U9bGlicmFyaWVzL2xhbmctanJ1Ynkvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sYW5nL2pydWJ5L0hlbGxvU3BlYWtlci5qYXZhCi10YWc9bWl4aW4KLS0tLS0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGFuZy9qcnVieS9KUnVieU1peGluLmphdmEgYi9saWJyYXJpZXMvbGFuZy1qcnVieS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvanJ1YnkvSlJ1YnlNaXhpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDRiZDAxLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGFuZy9qcnVieS9KUnVieU1peGluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IFJpY2thcmQgw5ZiZXJnCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGFuZy5qcnVieTsKLQotaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uSGFuZGxlcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgb3JnLmpydWJ5Lio7Ci1pbXBvcnQgb3JnLmpydWJ5LmV4Y2VwdGlvbnMuUmFpc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmpydWJ5LmludGVybmFsLnJ1bnRpbWUubWV0aG9kcy5DYWxsQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuanJ1YnkuaW50ZXJuYWwucnVudGltZS5tZXRob2RzLkR5bmFtaWNNZXRob2Q7Ci1pbXBvcnQgb3JnLmpydWJ5LmphdmFzdXBwb3J0LkphdmFFbWJlZFV0aWxzOwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLkJsb2NrOwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLlRocmVhZENvbnRleHQ7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuVmlzaWJpbGl0eTsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5idWlsdGluLklSdWJ5T2JqZWN0OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uQXBwbGllc1RvOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uQXBwbGllc1RvRmlsdGVyOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TZXJ2aWNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKLWltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zY3JpcHRpbmcuU2NyaXB0UmVsb2FkYWJsZTsKLQotLyoqCi0gKiBHZW5lcmljIG1peGluIHRoYXQgaW1wbGVtZW50cyBpbnRlcmZhY2VzIGJ5IGRlbGVnYXRpbmcgdG8gUnVieSBmdW5jdGlvbnMKLSAqIHVzaW5nIEpSdWJ5LiBFYWNoIG1ldGhvZCBpbiBhbiBpbnRlcmZhY2UgaXMgZGVjbGFyZWQgYnkgYSBSdWJ5IG1ldGhvZAotICogaW4gYSBmaWxlIGxvY2F0ZWQgaW4gY2xhc3NwYXRoIHdpdGggdGhlIG5hbWUgIiZsdDtpbnRlcmZhY2UmZ3Q7LnJiIiwKLSAqIHdoZXJlIHRoZSBpbnRlcmZhY2UgbmFtZSBpbmNsdWRlcyB0aGUgcGFja2FnZSwgYW5kIGhhcyAiLiIgcmVwbGFjZWQgd2l0aCAiLyIuCi0gKiA8cD4KLSAqIEV4YW1wbGU6Ci0gKiA8L3A+Ci0gKiA8cHJlPjxjb2RlPgotICogb3JnL3FpNGovc2FtcGxlcy9oZWxsby9kb21haW4vSGVsbG9Xb3JsZFNwZWFrZXIucmIKLSAqIDwvY29kZT48L3ByZT4KLSAqLwotQEFwcGxpZXNUbyggSlJ1YnlNaXhpbi5BcHBsaWVzVG8uY2xhc3MgKQotcHVibGljIGNsYXNzIEpSdWJ5TWl4aW4KLSAgICBpbXBsZW1lbnRzIEludm9jYXRpb25IYW5kbGVyLCBTY3JpcHRSZWxvYWRhYmxlCi17Ci0gICAgQFRoaXMgcHJpdmF0ZSBDb21wb3NpdGUgbWU7Ci0KLSAgICBAU2VydmljZSBwcml2YXRlIFJ1YnkgcnVudGltZTsKLQotICAgIHByaXZhdGUgTWFwPENsYXNzLCBJUnVieU9iamVjdD4gcnVieU9iamVjdHMgPSBuZXcgSGFzaE1hcDxDbGFzcywgSVJ1YnlPYmplY3Q+KCk7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEFwcGxpZXNUbwotICAgICAgICBpbXBsZW1lbnRzIEFwcGxpZXNUb0ZpbHRlcgotICAgIHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gYXBwbGllc1RvKCBNZXRob2QgbWV0aG9kLCBDbGFzcyBjb21wb3NpdGVUeXBlLCBDbGFzcyBtaXhpbiwgQ2xhc3MgbW9kZWxDbGFzcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRGdW5jdGlvblJlc291cmUoIG1ldGhvZCApICE9IG51bGw7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIEBTdHJ1Y3R1cmUgVHJhbnNpZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKCBPYmplY3QgcHJveHksIE1ldGhvZCBtZXRob2QsIE9iamVjdFtdIGFyZ3MgKSB0aHJvd3MgVGhyb3dhYmxlCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0IFJ1Ynkgb2JqZWN0IGZvciBkZWNsYXJpbmcgY2xhc3Mgb2YgdGhlIG1ldGhvZAotICAgICAgICAgICAgQ2xhc3MgZGVjbGFyaW5nQ2xhc3MgPSBtZXRob2QuZ2V0RGVjbGFyaW5nQ2xhc3MoKTsKLSAgICAgICAgICAgIElSdWJ5T2JqZWN0IHJ1YnlPYmplY3QgPSBydWJ5T2JqZWN0cy5nZXQoIGRlY2xhcmluZ0NsYXNzICk7Ci0KLSAgICAgICAgICAgIC8vIElmIG5vdCB5ZXQgY3JlYXRlZCwgY3JlYXRlIG9uZQotICAgICAgICAgICAgaWYoIHJ1YnlPYmplY3QgPT0gbnVsbCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIG9iamVjdCBpbnN0YW5jZQotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcnVieU9iamVjdCA9IHJ1bnRpbWUuZXZhbFNjcmlwdGxldCggZGVjbGFyaW5nQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi5uZXcoKSIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2goIFJhaXNlRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYoIGUuZ2V0RXhjZXB0aW9uKCkgaW5zdGFuY2VvZiBSdWJ5TmFtZUVycm9yICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBSdWJ5IGNsYXNzCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2NyaXB0ID0gZ2V0RnVuY3Rpb24oIG1ldGhvZCApOwotICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5ldmFsU2NyaXB0bGV0KCBzY3JpcHQgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IGNyZWF0aW5nIGEgUnVieSBpbnN0YW5jZSBhZ2FpbgotICAgICAgICAgICAgICAgICAgICAgICAgcnVieU9iamVjdCA9IHJ1bnRpbWUuZXZhbFNjcmlwdGxldCggZGVjbGFyaW5nQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi5uZXcoKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBTZXQgQHRoaXMgdmFyaWFibGUgdG8gQ29tcG9zaXRlCi0gICAgICAgICAgICAgICAgSVJ1YnlPYmplY3QgbWVSdWJ5ID0gSmF2YUVtYmVkVXRpbHMuamF2YVRvUnVieSggcnVudGltZSwgbWUgKTsKLSAgICAgICAgICAgICAgICBSdWJ5Q2xhc3MgcnVieUNsYXNzID0gbWVSdWJ5LmdldE1ldGFDbGFzcygpOwotICAgICAgICAgICAgICAgIGlmKCAhcnVieUNsYXNzLmlzRnJvemVuKCkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU2V0dGVyRHluYW1pY01ldGhvZCBzZXR0ZXIgPSBuZXcgU2V0dGVyRHluYW1pY01ldGhvZCggcnVudGltZS5nZXRPYmplY3RTcGFjZU1vZHVsZSgpLCBWaXNpYmlsaXR5LlBVQkxJQywgbnVsbCApOwotICAgICAgICAgICAgICAgICAgICBHZXR0ZXJEeW5hbWljTWV0aG9kIGdldHRlciA9IG5ldyBHZXR0ZXJEeW5hbWljTWV0aG9kKCBydW50aW1lLmdldE9iamVjdFNwYWNlTW9kdWxlKCksIFZpc2liaWxpdHkuUFVCTElDLCBudWxsICk7Ci0gICAgICAgICAgICAgICAgICAgIE1ldGhvZFtdIGNvbXBvc2l0ZU1ldGhvZHMgPSBtZS5nZXRDbGFzcygpLmdldEludGVyZmFjZXMoKVsgMCBdLmdldE1ldGhvZHMoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKCBNZXRob2QgY29tcG9zaXRlTWV0aG9kIDogY29tcG9zaXRlTWV0aG9kcyApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBQcm9wZXJ0eS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCBjb21wb3NpdGVNZXRob2QuZ2V0UmV0dXJuVHlwZSgpICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVieUNsYXNzLmFkZE1ldGhvZCggY29tcG9zaXRlTWV0aG9kLmdldE5hbWUoKSArICI9Iiwgc2V0dGVyICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVieUNsYXNzLmFkZE1ldGhvZCggY29tcG9zaXRlTWV0aG9kLmdldE5hbWUoKSwgZ2V0dGVyICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnVieUNsYXNzLmZyZWV6ZSggVGhyZWFkQ29udGV4dC5uZXdDb250ZXh0KCBydW50aW1lICkgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBSdWJ5T2JqZWN0QWRhcHRlciBydWJ5T2JqZWN0QWRhcHRlciA9IEphdmFFbWJlZFV0aWxzLm5ld09iamVjdEFkYXB0ZXIoKTsKLSAgICAgICAgICAgICAgICBydWJ5T2JqZWN0QWRhcHRlci5zZXRJbnN0YW5jZVZhcmlhYmxlKCBydWJ5T2JqZWN0LCAiQHRoaXMiLCBtZVJ1YnkgKTsKLSAgICAgICAgICAgICAgICBydWJ5T2JqZWN0cy5wdXQoIGRlY2xhcmluZ0NsYXNzLCBydWJ5T2JqZWN0ICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENvbnZlcnQgbWV0aG9kIGFyZ3VtZW50cyBhbmQgaW52b2tlIHRoZSBtZXRob2QKLSAgICAgICAgICAgIElSdWJ5T2JqZWN0IHJ1YnlSZXN1bHQ7Ci0gICAgICAgICAgICBpZiggYXJncyAhPSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJUnVieU9iamVjdFtdIHJ1YnlBcmdzID0gbmV3IElSdWJ5T2JqZWN0W2FyZ3MubGVuZ3RoXTsKLSAgICAgICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGFyZyA9IGFyZ3NbIGkgXTsKLSAgICAgICAgICAgICAgICAgICAgcnVieUFyZ3NbIGkgXSA9IEphdmFFbWJlZFV0aWxzLmphdmFUb1J1YnkoIHJ1bnRpbWUsIGFyZyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBydWJ5UmVzdWx0ID0gcnVieU9iamVjdC5jYWxsTWV0aG9kKCBydW50aW1lLmdldEN1cnJlbnRDb250ZXh0KCksIG1ldGhvZC5nZXROYW1lKCksIHJ1YnlBcmdzICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcnVieVJlc3VsdCA9IHJ1YnlPYmplY3QuY2FsbE1ldGhvZCggcnVudGltZS5nZXRDdXJyZW50Q29udGV4dCgpLCBtZXRob2QuZ2V0TmFtZSgpICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENvbnZlcnQgcmVzdWx0IHRvIEphdmEKLSAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBKYXZhRW1iZWRVdGlscy5ydWJ5VG9KYXZhKCBydW50aW1lLCBydWJ5UmVzdWx0LCBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpICk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVsb2FkU2NyaXB0cygpCi0gICAgewotICAgICAgICBydWJ5T2JqZWN0cy5jbGVhcigpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0RnVuY3Rpb24oIE1ldGhvZCBhTWV0aG9kICkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBVUkwgc2NyaXB0VXJsID0gZ2V0RnVuY3Rpb25SZXNvdXJlKCBhTWV0aG9kICk7Ci0KLSAgICAgICAgaWYoIHNjcmlwdFVybCA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCAiTm8gc2NyaXB0IGZvdW5kIGZvciBtZXRob2QgIiArIGFNZXRob2QuZ2V0TmFtZSgpICk7Ci0gICAgICAgIH0KLQotICAgICAgICBJbnB1dFN0cmVhbSBpbiA9IHNjcmlwdFVybC5vcGVuU3RyZWFtKCk7Ci0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHNjcmlwdFJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IElucHV0U3RyZWFtUmVhZGVyKCBpbiApICk7Ci0gICAgICAgIFN0cmluZyBsaW5lOwotICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgd2hpbGUoICggbGluZSA9IHNjcmlwdFJlYWRlci5yZWFkTGluZSgpICkgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNiLmFwcGVuZCggbGluZSApLmFwcGVuZCggIlxuIiApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgVVJMIGdldEZ1bmN0aW9uUmVzb3VyZSggTWV0aG9kIG1ldGhvZCApCi0gICAgewotICAgICAgICBDbGFzczw/PiBkZWNsYXJpbmdDbGFzcyA9IG1ldGhvZC5nZXREZWNsYXJpbmdDbGFzcygpOwotICAgICAgICBTdHJpbmcgY2xhc3NuYW1lID0gZGVjbGFyaW5nQ2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICBTdHJpbmcgc2NyaXB0RmlsZSA9IGNsYXNzbmFtZS5yZXBsYWNlKCAnLicsIEZpbGUuc2VwYXJhdG9yQ2hhciApICsgIi5yYiI7Ci0gICAgICAgIENsYXNzTG9hZGVyIGxvYWRlciA9IGRlY2xhcmluZ0NsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0gICAgICAgIFVSTCBzY3JpcHRVcmwgPSBsb2FkZXIuZ2V0UmVzb3VyY2UoIHNjcmlwdEZpbGUgKTsKLSAgICAgICAgcmV0dXJuIHNjcmlwdFVybDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTZXR0ZXJEeW5hbWljTWV0aG9kCi0gICAgICAgIGV4dGVuZHMgRHluYW1pY01ldGhvZAotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBTZXR0ZXJEeW5hbWljTWV0aG9kKCBSdWJ5TW9kdWxlIHJ1YnlNb2R1bGUsIFZpc2liaWxpdHkgdmlzaWJpbGl0eSwgQ2FsbENvbmZpZ3VyYXRpb24gY2FsbENvbmZpZ3VyYXRpb24gKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdXBlciggcnVieU1vZHVsZSwgdmlzaWJpbGl0eSwgY2FsbENvbmZpZ3VyYXRpb24gKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgSVJ1YnlPYmplY3QgY2FsbCggVGhyZWFkQ29udGV4dCB0aHJlYWRDb250ZXh0LCBJUnVieU9iamVjdCBpUnVieU9iamVjdCwgUnVieU1vZHVsZSBydWJ5TW9kdWxlLCBTdHJpbmcgbWV0aG9kTmFtZSwgSVJ1YnlPYmplY3RbXSBpUnVieU9iamVjdHMsIEJsb2NrIGJsb2NrICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IG1ldGhvZE5hbWUuc3Vic3RyaW5nKCAwLCBtZXRob2ROYW1lLmxlbmd0aCgpIC0gMSApOwotICAgICAgICAgICAgSVJ1YnlPYmplY3QgcHJvcCA9IGlSdWJ5T2JqZWN0LmNhbGxNZXRob2QoIHRocmVhZENvbnRleHQsIHByb3BlcnR5TmFtZSApOwotICAgICAgICAgICAgcHJvcC5jYWxsTWV0aG9kKCB0aHJlYWRDb250ZXh0LCAic2V0IiwgaVJ1YnlPYmplY3RzICk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRHluYW1pY01ldGhvZCBkdXAoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgR2V0dGVyRHluYW1pY01ldGhvZAotICAgICAgICBleHRlbmRzIER5bmFtaWNNZXRob2QKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgR2V0dGVyRHluYW1pY01ldGhvZCggUnVieU1vZHVsZSBydWJ5TW9kdWxlLCBWaXNpYmlsaXR5IHZpc2liaWxpdHksIENhbGxDb25maWd1cmF0aW9uIGNhbGxDb25maWd1cmF0aW9uICkKLSAgICAgICAgewotICAgICAgICAgICAgc3VwZXIoIHJ1YnlNb2R1bGUsIHZpc2liaWxpdHksIGNhbGxDb25maWd1cmF0aW9uICk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIElSdWJ5T2JqZWN0IGNhbGwoIFRocmVhZENvbnRleHQgdGhyZWFkQ29udGV4dCwgSVJ1YnlPYmplY3QgaVJ1YnlPYmplY3QsIFJ1YnlNb2R1bGUgcnVieU1vZHVsZSwgU3RyaW5nIG1ldGhvZE5hbWUsIElSdWJ5T2JqZWN0W10gaVJ1YnlPYmplY3RzLCBCbG9jayBibG9jayApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBtZXRob2ROYW1lOwotICAgICAgICAgICAgICAgIE9iamVjdCB0aGlzQ29tcG9zaXRlID0gSmF2YUVtYmVkVXRpbHMucnVieVRvSmF2YSggaVJ1YnlPYmplY3QuZ2V0UnVudGltZSgpLCBpUnVieU9iamVjdCwgT2JqZWN0LmNsYXNzICk7Ci0gICAgICAgICAgICAgICAgTWV0aG9kIHByb3BlcnR5TWV0aG9kID0gdGhpc0NvbXBvc2l0ZS5nZXRDbGFzcygpLmdldE1ldGhvZCggcHJvcGVydHlOYW1lICk7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSAoUHJvcGVydHkpIHByb3BlcnR5TWV0aG9kLmludm9rZSggdGhpc0NvbXBvc2l0ZSApOwotICAgICAgICAgICAgICAgIE9iamVjdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgSVJ1YnlPYmplY3QgcHJvcCA9IEphdmFFbWJlZFV0aWxzLmphdmFUb1J1YnkoIGlSdWJ5T2JqZWN0LmdldFJ1bnRpbWUoKSwgcHJvcGVydHlWYWx1ZSApOwotICAgICAgICAgICAgICAgIHJldHVybiBwcm9wOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFpc2VFeGNlcHRpb24oIG5ldyBSdWJ5TmFtZUVycm9yKCBpUnVieU9iamVjdC5nZXRSdW50aW1lKCksIGlSdWJ5T2JqZWN0LmdldE1ldGFDbGFzcygpLCAiQ291bGQgbm90IGZpbmQgcHJvcGVydHkgIiArIG1ldGhvZE5hbWUgKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBEeW5hbWljTWV0aG9kIGR1cCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctanJ1Ynkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sYW5nL2pydWJ5L3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGFuZy9qcnVieS9wYWNrYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MmY3ZTMuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctanJ1Ynkvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sYW5nL2pydWJ5L3BhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+Ci0gICAgPGJvZHk+Ci0gICAgICAgIDxoMj5SdWJ5IExhbmd1YWdlIFN1cHBvcnQgTGlicmFyeS48L2gyPgotICAgIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qcnVieS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xhbmcvanJ1YnkvSlJ1YnlNaXhpblRlc3QuamF2YSBiL2xpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9qcnVieS9KUnVieU1peGluVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzNkNjJmLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9qcnVieS9KUnVieU1peGluVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5sYW5nLmpydWJ5OwotLyoKLSAqIENvcHlyaWdodCAyMDA3IFJpY2thcmQgw5ZiZXJnCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCi0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLWltcG9ydCBvcmcuanJ1YnkuUnVieTsKLWltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLmltcG9ydGVyLkluc3RhbmNlSW1wb3J0ZXI7Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKLWltcG9ydCBvcmcucWk0ai50ZXN0LkFic3RyYWN0UWk0alRlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBKUnVieU1peGluVGVzdCBleHRlbmRzIEFic3RyYWN0UWk0alRlc3QKLXsKLSAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKLSAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCi0gICAgewotICAgICAgICBtb2R1bGUudHJhbnNpZW50cyggTXlEb21haW5UeXBlLmNsYXNzICkud2l0aE1peGlucyggSlJ1YnlNaXhpbi5jbGFzcyApOwotCi0gICAgICAgIFJ1YnkgcnVieSA9IFJ1YnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgbW9kdWxlLmltcG9ydGVkU2VydmljZXMoIFJ1YnkuY2xhc3MgKS5pbXBvcnRlZEJ5KCBJbnN0YW5jZUltcG9ydGVyLmNsYXNzICkuc2V0TWV0YUluZm8oIHJ1YnkgKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RJbnZva2UoKQotICAgICAgICB0aHJvd3MgVGhyb3dhYmxlCi0gICAgewotICAgICAgICBNeURvbWFpblR5cGUgZG9tYWluID0gbW9kdWxlLm5ld1RyYW5zaWVudEJ1aWxkZXIoIE15RG9tYWluVHlwZS5jbGFzcyApLm5ld0luc3RhbmNlKCk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggImRvMSgpIGluIFJ1YnkgbWl4aW4uIiwgZG9tYWluLmRvMSgpICk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9qcnVieS9NeURvbWFpblR5cGUuamF2YSBiL2xpYnJhcmllcy9sYW5nLWpydWJ5L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGFuZy9qcnVieS9NeURvbWFpblR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0ZDM2Yy4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvbGFuZy1qcnVieS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xhbmcvanJ1YnkvTXlEb21haW5UeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGFuZy5qcnVieTsNCi0NCi1wdWJsaWMgaW50ZXJmYWNlIE15RG9tYWluVHlwZQ0KLXsNCi0gICAgU3RyaW5nIGRvMSgpOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1qcnVieS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGFuZy9qcnVieS9NeURvbWFpblR5cGUucmIgYi9saWJyYXJpZXMvbGFuZy1qcnVieS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGFuZy9qcnVieS9NeURvbWFpblR5cGUucmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNDA1YzkuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL2xhbmctanJ1Ynkvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xhbmcvanJ1YnkvTXlEb21haW5UeXBlLnJiCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1jbGFzcyBNeURvbWFpblR5cGUKLSAgICBkZWYgZG8xCi0gICAgICAgIHJldHVybiAiZG8xKCkgaW4gUnVieSBtaXhpbi4iCi0gICAgZW5kCi1lbmQKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL2J1aWxkLmdyYWRsZQppbmRleCBhZGY3NzA4Li45Y2EyNTI3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL2xhbmctc2NhbGEvYnVpbGQuZ3JhZGxlCkBAIC0xLDE0ICsxLDQ0IEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIEJlYW5TaGVsbCBMaWJyYXJ5IGFsbG93cyBmb3IgTWl4aW5zIHRvIGJlIGltcGxlbWVudGVkIGluIEJlYW5TaGVsbCAoSmF2YSkgc2NyaXB0cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IGluIGNvbXBpbGVkIEphdmEuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFNjcmlwdGluZyAtIEJlYW5TaGVsbCIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIFNjYWxhIExpYnJhcnkgYWxsb3dzIGZvciBNaXhpbnMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gU2NhbGEuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIFNjcmlwdGluZyAtIFNjYWxhIiB9fQorCithcHBseSBwbHVnaW46ICdzY2FsYScKKwordGFza3Mud2l0aFR5cGUoU2NhbGFDb21waWxlKSB7CisgICAgc2NhbGFDb21waWxlT3B0aW9ucy51c2VBbnQgPSB0cnVlCisgICAgc2NhbGFDb21waWxlT3B0aW9ucy5mb3JrID0gdHJ1ZQorICAgIGNvbmZpZ3VyZSggc2NhbGFDb21waWxlT3B0aW9ucy5mb3JrT3B0aW9ucyApIHsKKyAgICAgICAgbWVtb3J5TWF4aW11bVNpemUgPSAnMWcnCisgICAgICAgIGp2bUFyZ3MgPSBbICctWFg6TWF4UGVybVNpemU9NTEybScgXQorICAgIH0KK30KIAogZGVwZW5kZW5jaWVzIHsKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQotICBjb21waWxlKGxpYnJhcmllcy5zY2FsYSkKKyAgY29tcGlsZSBwcm9qZWN0KCAnOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAnICkKKyAgY29tcGlsZSBsaWJyYXJpZXMuc2NhbGEKIAotICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikpCi0gIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi5pbmRleGluZy1yZGYiKSkKKyAgdGVzdENvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQnICkKKyAgdGVzdENvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi5pbmRleGluZy1yZGYnICkKIAotICB0ZXN0UnVudGltZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiKSkKLSAgdGVzdFJ1bnRpbWUobGlicmFyaWVzLmxvZ2JhY2spCisgIHRlc3RSdW50aW1lIHByb2plY3QoICc6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUnICkKKyAgdGVzdFJ1bnRpbWUgbGlicmFyaWVzLnNsZjRqX3NpbXBsZQogfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctc2NhbGEvZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9kZXYtc3RhdHVzLnhtbAppbmRleCA2NTRkM2FhLi41OGZkYTA5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKQEAgLTgsNyArMjQsNyBAQAogICAgIDxjb2RlYmFzZT5iZXRhPC9jb2RlYmFzZT4KIAogICAgIDwhLS0gbm9uZSwgYnJpZWYsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDxkb2N1bWVudGF0aW9uPm5vbmU8L2RvY3VtZW50YXRpb24+CisgICAgPGRvY3VtZW50YXRpb24+YnJpZWY8L2RvY3VtZW50YXRpb24+CiAKICAgICA8IS0tIG5vbmUsIHNvbWUsIGdvb2QsIGNvbXBsZXRlIC0tPgogICAgIDx1bml0dGVzdHM+c29tZTwvdW5pdHRlc3RzPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL2RvY3MvbGFuZy1zY2FsYS50eHQgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvZG9jcy9sYW5nLXNjYWxhLnR4dAppbmRleCA2NTkxZDc0Li5jNGIzYThmIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvZG9jcy9sYW5nLXNjYWxhLnR4dAorKysgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvZG9jcy9sYW5nLXNjYWxhLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsYW5nLXNjYWxhLCBTY2FsYSBMaWJyYXJ5XV0KID0gU2NhbGEgU3VwcG9ydCA9CiAKQEAgLTYsNCArMjUsOTMgQEAKIHNvdXJjZT1saWJyYXJpZXMvbGFuZy1zY2FsYS9kZXYtc3RhdHVzLnhtbAogLS0tLS0tLS0tLS0tLS0KIAorVGhlIFNjYWxhIFN1cHBvcnQgTGlicmFyeSBhbGxvd3MgRnJhZ21lbnRzIGFuZCBDb21wb3NpdGVzIHRvIGJlIHdyaXR0ZW4gYXMgU2NhbGEgdHJhaXRzLgorCiBpbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQorCitUaGUgU2NhbGEgU3VwcG9ydCBMaWJyYXJ5IGlzIGEgR2VuZXJpYyBtaXhpbiBjbGFzcyB0aGF0IGltcGxlbWVudHMgIENvbXBvc2l0ZXMgYnkgZGVsZWdhdGluZyB0byBTY2FsYSB0cmFpdHMuCisKKworPT0gQ29tcG9zaXRpb24gPT0KKworRXhhbXBsZSBtaXhpbiBkZWNsYXJhdGlvbjoKK1tzbmlwcGV0LHNjYWxhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1dvcmxkTWl4aW4yLnNjYWxhCit0YWc9bWl4aW4KKy0tLS0KKworRXhhbXBsZSBjb21wb3NpdGUgZGVjbGFyYXRpb246Citbc25pcHBldCxzY2FsYV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZENvbXBvc2l0ZS5zY2FsYQordGFnPWNvbXBvc2l0ZQorLS0tLQorCitFeGFtcGxlIHR5cGVkIGNvbmNlcm46Citbc25pcHBldCxzY2FsYV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9UaGVyZUNvbmNlcm4uc2NhbGEKK3RhZz10eXBlZGNvbmNlcm4KKy0tLS0KKworRXhhbXBsZSBnZW5lcmljIGNvbmNlcm4gd2l0aCBmaWx0ZXI6Citbc25pcHBldCxzY2FsYV0KKy0tLS0KK3NvdXJjZT1saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvRXhjbGFtYXRpb25HZW5lcmljQ29uY2Vybi5zY2FsYQordGFnPWdlbmVyaWNjb25jZXJuCistLS0tCisKK0FuZCB0aGUgYXNzZW1ibHkgY29kZS4KK05vdGUgdGhhdCB0aGUgYFNjYWxhVHJhaXRNaXhpbmAgbXVzdCBiZSBhZGRlZC4KK1tzbmlwcGV0LGphdmFdCistLS0tCitzb3VyY2U9bGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRDb21wb3NpdGVUZXN0LmphdmEKK3RhZz1jb21wb3NpdGUKKy0tLS0KKworVGhhdCBwcmV0dHkgbXVjaCBjb3ZlcnMgdGhlIGRvbWFpbiBtb2RlbCBwYXJ0LgorVXNhZ2UgZnJvbSBKYXZhIGlzIHRyYW5zcGFyZW50LCBzaW5jZSBpdCBsb29rcyBqdXN0IGxpa2UgaW50ZXJmYWNlcyBhbmQgY2xhc3Nlcy4KKworCis9PSBFbnRpdHkgY29tcG9zaXRlcyA9PQorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2VwYXJhdGUgYmV0d2VlbiBjb21tYW5kIGludGVyZmFjZSAoc3VnZ2VzdGlvbnMgdG8gY2hhbmdlKSwgZXZlbnRzIChhZnRlciB0aGUgZmFjdCksIGFuZCBkYXRhLCBzbyB0aGV5IGFyZSBpbiB0aHJlZSBzZXBhcmF0ZSB0cmFpdHMgYmVsb3cuCitPbmx5IGNvbW1hbmRzIGFyZSBjYWxsZWQgYnkgY2xpZW50IGNvZGUuCisKK1tzbmlwcGV0LHNjYWxhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9UZXN0RW50aXR5LnNjYWxhCit0YWc9ZW50aXR5CistLS0tCisKK1RoZSBgc2VsZmAgb3BlcmF0b3IgdGhpbmcgc29sdmVzIHRoZSBgQFRoaXNgIGluamVjdGlvbiByZXF1aXJlbWVudHMsIGFsdGhvdWdoIGl0IGRvZXNuJ3QgZG8gcHJpdmF0ZSBpbmplY3Rpb25zIChpLmUuIHRoZSBFbnRpdHkgKmhhcyogdG8gZXh0ZW5kIEV2ZW50cyBhbmQgRGF0YSBmb3IgaXQgdG8gd29yaykuCisKK0V2ZXJ5dGhpbmcgaXMgc3RhdGljYWxseSB0eXBlZC4KKworQW5kIHRoZSBjb3JyZXNwb25kaW5nIGFzc2VtYmx5IGNvZGU6CisKK1tzbmlwcGV0LGphdmFdCistLS0tCitzb3VyY2U9bGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRDb21wb3NpdGVUZXN0LmphdmEKK3RhZz1lbnRpdHkKKy0tLS0KKworCis9PSBTZXJ2aWNlcyBjb21wb3NpdGVzID09CisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBpcyBhIHByZXR0eSBzaW1wbGUgc2VydmljZSB3cml0dGVuIGFzIGEgU2NhbGEgdHJhaXQ6CisKK1tzbmlwcGV0LHNjYWxhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9UZXN0U2VydmljZS5zY2FsYQordGFnPXNlcnZpY2UKKy0tLS0KKworQW5kIHRoZSBjb3JyZXNwb25kaW5nIGFzc2VtYmx5IGNvZGU6CisKK1tzbmlwcGV0LGphdmFdCistLS0tCitzb3VyY2U9bGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRDb21wb3NpdGVUZXN0LmphdmEKK3RhZz1zZXJ2aWNlCistLS0tCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvc2NhbGEvU2NhbGFUcmFpdE1peGluLmphdmEgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvc2NhbGEvU2NhbGFUcmFpdE1peGluLmphdmEKaW5kZXggMDRjNDA0OC4uNjU5MTJkOSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sYW5nL3NjYWxhL1NjYWxhVHJhaXRNaXhpbi5qYXZhCisrKyBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGFuZy9zY2FsYS9TY2FsYVRyYWl0TWl4aW4uamF2YQpAQCAtNDEsMjQgKzQxLDIzIEBACiAvKioKICAqIEdlbmVyaWMgbWl4aW4gdGhhdCBoYW5kbGVzIGRlbGVnYXRpb24gdG8gU2NhbGEgdHJhaXQgaW1wbGVtZW50YXRpb25zLgogICovCi1AQXBwbGllc1RvKFNjYWxhVHJhaXRNaXhpbi5UcmFpdEZpbHRlci5jbGFzcykKK0BBcHBsaWVzVG8oIFNjYWxhVHJhaXRNaXhpbi5UcmFpdEZpbHRlci5jbGFzcyApCiBwdWJsaWMgY2xhc3MgU2NhbGFUcmFpdE1peGluCiAgICAgaW1wbGVtZW50cyBJbnZvY2F0aW9uSGFuZGxlcgogewotICAgIHByaXZhdGUgc3RhdGljIE1hcDxDbGFzczw/PiwgTWFwPE1ldGhvZCwgSW52b2NhdGlvbkhhbmRsZXI+PiBtZXRob2RzID0gbmV3IEhhc2hNYXA8Q2xhc3M8Pz4sIE1hcDxNZXRob2QsIEludm9jYXRpb25IYW5kbGVyPj4oKTsKKyAgICBwcml2YXRlIHN0YXRpYyBNYXA8Q2xhc3M8Pz4sIE1hcDxNZXRob2QsIEludm9jYXRpb25IYW5kbGVyPj4gbWV0aG9kcyA9IG5ldyBIYXNoTWFwPD4oKTsKIAogICAgIHByaXZhdGUgQ2xhc3M8Pz4gY29tcG9zaXRlVHlwZTsKIAogICAgIHB1YmxpYyBTY2FsYVRyYWl0TWl4aW4oIEBUaGlzIENvbXBvc2l0ZSBjb21wb3NpdGUgKQogICAgIHsKLSAgICAgICAgY29tcG9zaXRlVHlwZSA9IFFpNGouRlVOQ1RJT05fREVTQ1JJUFRPUl9GT1IubWFwKCBjb21wb3NpdGUpLnByaW1hcnlUeXBlKCk7CisgICAgICAgIGNvbXBvc2l0ZVR5cGUgPSBRaTRqLkZVTkNUSU9OX0RFU0NSSVBUT1JfRk9SLm1hcCggY29tcG9zaXRlICkucHJpbWFyeVR5cGUoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgT2JqZWN0IGludm9rZSggT2JqZWN0IGNvbXBvc2l0ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0W10gYXJncyApIHRocm93cyBUaHJvd2FibGUKICAgICB7CiAgICAgICAgIEludm9jYXRpb25IYW5kbGVyIGhhbmRsZXIgPSBtZXRob2RzLmdldCggY29tcG9zaXRlVHlwZSApLmdldCggbWV0aG9kICk7Ci0KICAgICAgICAgcmV0dXJuIGhhbmRsZXIuaW52b2tlKCBjb21wb3NpdGUsIG1ldGhvZCwgYXJncyApOwogICAgIH0KIApAQCAtNjgsMzUgKzY3LDM3IEBACiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgYm9vbGVhbiBhcHBsaWVzVG8oIE1ldGhvZCBtZXRob2QsIENsYXNzPD8+IG1peGluLCBDbGFzczw/PiBjb21wb3NpdGVUeXBlLCBDbGFzczw/PiBmcmFnbWVudENsYXNzICkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzU2NhbGFUcmFpdChtZXRob2QuZ2V0RGVjbGFyaW5nQ2xhc3MoKSkpCisgICAgICAgICAgICBpZiggaXNTY2FsYVRyYWl0KCBtZXRob2QuZ2V0RGVjbGFyaW5nQ2xhc3MoKSApICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBTZXJ2aWNlIGluamVjdGlvbgotICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0QW5ub3RhdGlvbiggU2VydmljZS5jbGFzcyApICE9IG51bGwpCisgICAgICAgICAgICAgICAgaWYoIG1ldGhvZC5nZXRBbm5vdGF0aW9uKCBTZXJ2aWNlLmNsYXNzICkgIT0gbnVsbCApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmdldFJldHVyblR5cGUoKS5lcXVhbHMoIFNlcnZpY2VSZWZlcmVuY2UuY2xhc3MgKSkKKyAgICAgICAgICAgICAgICAgICAgaWYoIG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZXF1YWxzKCBTZXJ2aWNlUmVmZXJlbmNlLmNsYXNzICkgKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBJbnZvY2F0aW9uSGFuZGxlciBoYW5kbGVyID0gbmV3IEludm9jYXRpb25IYW5kbGVyKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IGludm9rZSggT2JqZWN0IGNvbXBvc2l0ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0W10gb2JqZWN0cyApIHRocm93cyBUaHJvd2FibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKENvbXBvc2l0ZUluc3RhbmNlKVByb3h5LmdldEludm9jYXRpb25IYW5kbGVyKCBjb21wb3NpdGUgKSkubW9kdWxlKCkuZmluZFNlcnZpY2UoIG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SGFuZGxlcnMoIGNvbXBvc2l0ZVR5cGUgKS5wdXQoIG1ldGhvZCwgaGFuZGxlciApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgSW52b2NhdGlvbkhhbmRsZXIgaGFuZGxlciA9IG5ldyBJbnZvY2F0aW9uSGFuZGxlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIE9iamVjdCBpbnZva2UoIE9iamVjdCBjb21wb3NpdGUsIE1ldGhvZCBtZXRob2QsIE9iamVjdFtdIG9iamVjdHMgKSB0aHJvd3MgVGhyb3dhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChDb21wb3NpdGVJbnN0YW5jZSlQcm94eS5nZXRJbnZvY2F0aW9uSGFuZGxlciggY29tcG9zaXRlICkpLm1vZHVsZSgpLmZpbmRTZXJ2aWNlKCBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpICkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIChDb21wb3NpdGVJbnN0YW5jZSkgUHJveHkuZ2V0SW52b2NhdGlvbkhhbmRsZXIoIGNvbXBvc2l0ZSApICkubW9kdWxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kU2VydmljZSggbWV0aG9kLmdldFJldHVyblR5cGUoKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRIYW5kbGVycyggY29tcG9zaXRlVHlwZSApLnB1dCggbWV0aG9kLCBoYW5kbGVyICk7CiAgICAgICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEludm9jYXRpb25IYW5kbGVyIGhhbmRsZXIgPSBuZXcgSW52b2NhdGlvbkhhbmRsZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKCBPYmplY3QgY29tcG9zaXRlLCBNZXRob2QgbWV0aG9kLCBPYmplY3RbXSBvYmplY3RzICkgdGhyb3dzIFRocm93YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggKENvbXBvc2l0ZUluc3RhbmNlKSBQcm94eS5nZXRJbnZvY2F0aW9uSGFuZGxlciggY29tcG9zaXRlICkgKS5tb2R1bGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmRTZXJ2aWNlKCBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpICkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldEhhbmRsZXJzKCBjb21wb3NpdGVUeXBlICkucHV0KCBtZXRob2QsIGhhbmRsZXIgKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTEwOSwxNyArMTEwLDIyIEBACiAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgICAgICBwdWJsaWMgQ2xhc3MgbWFwKCBDbGFzcyBhQ2xhc3MgKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlY2xhcmluZ0NsYXNzLmlzQXNzaWduYWJsZUZyb20oYUNsYXNzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBkZWNsYXJpbmdDbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCBhQ2xhc3MgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoIGFDbGFzcy5nZXROYW1lKCkrIiRjbGFzcyIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNsYXNzLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKCBhQ2xhc3MuZ2V0TmFtZSgpICsgIiRjbGFzcyIgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggY3VycmVudCA9PSBudWxsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGFDbGFzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmlzQXNzaWduYWJsZUZyb20oIGFDbGFzcyApID8gYUNsYXNzIDogY3VycmVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIC0gbm8gdHJhaXQgaW1wbGVtZW50YXRpb24gZm91bmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMjksMTQgKzEzNSwxNiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSwgSXRlcmFibGVzLm1hcCggQ2xhc3Nlcy5SQVdfQ0xBU1MsIGludGVyZmFjZXNPZiggY29tcG9zaXRlVHlwZSApICkgKSApOwogCi0gICAgICAgICAgICAgICAgaWYgKHRyYWl0Q2xhc3MgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBpZiggdHJhaXRDbGFzcyA9PSBudWxsICkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENsYXNzIHRyYWl0TWl4aW4gPSB0cmFpdENsYXNzLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKCB0cmFpdENsYXNzLmdldE5hbWUoKSsiJGNsYXNzIiApOworICAgICAgICAgICAgICAgICAgICBDbGFzcyB0cmFpdE1peGluID0gdHJhaXRDbGFzcy5nZXRDbGFzc0xvYWRlcigpLmxvYWRDbGFzcyggdHJhaXRDbGFzcy5nZXROYW1lKCkgKyAiJGNsYXNzIiApOwogICAgICAgICAgICAgICAgICAgICBDbGFzczw/PltdIG1ldGhvZFBhcmFtZXRlclR5cGVzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVyVHlwZXMgPSBuZXcgQ2xhc3NbMSsgbWV0aG9kUGFyYW1ldGVyVHlwZXMubGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJUeXBlcyA9IG5ldyBDbGFzc1sxICsgbWV0aG9kUGFyYW1ldGVyVHlwZXMubGVuZ3RoXTsKICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyVHlwZXNbMF0gPSB0cmFpdENsYXNzOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KCBtZXRob2RQYXJhbWV0ZXJUeXBlcywgMCwgcGFyYW1ldGVyVHlwZXMsIDEsIG1ldGhvZFBhcmFtZXRlclR5cGVzLmxlbmd0aCApOwogICAgICAgICAgICAgICAgICAgICBmaW5hbCBNZXRob2QgdHJhaXRNZXRob2QgPSB0cmFpdE1peGluLmdldE1ldGhvZCggbWV0aG9kLmdldE5hbWUoKSwgcGFyYW1ldGVyVHlwZXMgKTsKQEAgLTE0OCw3ICsxNTYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IGludm9rZSggT2JqZWN0IGNvbXBvc2l0ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0W10gYXJncyApIHRocm93cyBUaHJvd2FibGUKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBhcmdzICE9IG51bGwgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gcGFyYW1zID0gbmV3IE9iamVjdFthcmdzLmxlbmd0aCArIDFdOwpAQCAtMTU2LDIwICsxNjMsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggYXJncywgMCwgcGFyYW1zLCAxLCBhcmdzLmxlbmd0aCApOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFpdE1ldGhvZC5pbnZva2UoIG51bGwsIHBhcmFtcyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhaXRNZXRob2QuaW52b2tlKCBudWxsLCBjb21wb3NpdGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gKTsKIAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoKCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gY2F0Y2goIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlICkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2goIENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgY2F0Y2goIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtMTc5LDcgKzE5Miw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciggQW5ub3RhdGlvbiBhbm5vdGF0aW9uIDogZGVjbGFyaW5nQ2xhc3MuZ2V0QW5ub3RhdGlvbnMoKSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb24uYW5ub3RhdGlvblR5cGUoKS5nZXRTaW1wbGVOYW1lKCkuZXF1YWxzKCAiU2NhbGFTaWduYXR1cmUiICkpCisgICAgICAgICAgICAgICAgaWYoIGFubm90YXRpb24uYW5ub3RhdGlvblR5cGUoKS5nZXRTaW1wbGVOYW1lKCkuZXF1YWxzKCAiU2NhbGFTaWduYXR1cmUiICkgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTg3LDE1ICsyMDAsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgTWFwPE1ldGhvZCwgSW52b2NhdGlvbkhhbmRsZXI+IGdldEhhbmRsZXJzKENsYXNzPD8+IGNvbXBvc2l0ZVR5cGUpCisgICAgICAgIHByaXZhdGUgTWFwPE1ldGhvZCwgSW52b2NhdGlvbkhhbmRsZXI+IGdldEhhbmRsZXJzKCBDbGFzczw/PiBjb21wb3NpdGVUeXBlICkKICAgICAgICAgewogICAgICAgICAgICAgTWFwPE1ldGhvZCxJbnZvY2F0aW9uSGFuZGxlcj4gaGFuZGxlck1hcCA9IG1ldGhvZHMuZ2V0KCBjb21wb3NpdGVUeXBlICk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlck1hcCA9PSBudWxsKQorICAgICAgICAgICAgaWYoIGhhbmRsZXJNYXAgPT0gbnVsbCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlck1hcCA9IG5ldyBIYXNoTWFwPE1ldGhvZCwgSW52b2NhdGlvbkhhbmRsZXI+KCk7CisgICAgICAgICAgICAgICAgaGFuZGxlck1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgICAgICAgICBtZXRob2RzLnB1dCggY29tcG9zaXRlVHlwZSwgaGFuZGxlck1hcCApOwogICAgICAgICAgICAgfQotCiAgICAgICAgICAgICByZXR1cm4gaGFuZGxlck1hcDsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGFuZy9zY2FsYS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xhbmcvc2NhbGEvcGFja2FnZS5odG1sCmluZGV4IDhkMTRmNGMuLmJmYmE5NDcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGFuZy9zY2FsYS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sYW5nL3NjYWxhL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U2NhbGEgTGFuZ3VhZ2UgU3VwcG9ydCBMaWJyYXJ5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvRXhjbGFtYXRpb25HZW5lcmljQ29uY2Vybi5zY2FsYSBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9FeGNsYW1hdGlvbkdlbmVyaWNDb25jZXJuLnNjYWxhCmluZGV4IDI5YjcxZmYuLmE4N2M5MWQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9FeGNsYW1hdGlvbkdlbmVyaWNDb25jZXJuLnNjYWxhCisrKyBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9FeGNsYW1hdGlvbkdlbmVyaWNDb25jZXJuLnNjYWxhCkBAIC0xLDMgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBSaWNrYXJkIMOWYmVyZworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZS5zY2FsYQogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kCkBAIC03LDcgKzE4LDcgQEAKIC8qKgogICogQWRkIGFuIGV4Y2xhbWF0aW9uIG1hcmsgdG8gdGhlIHJldHVybmVkIHN0cmluZwogICovCi0KKy8vIFNUQVJUIFNOSVBQRVQ6IGdlbmVyaWNjb25jZXJuCiBAQXBwbGllc1RvKEFycmF5KGNsYXNzT2ZbIFN0cmluZ0ZpbHRlciBdKSkKIGNsYXNzIEV4Y2xhbWF0aW9uR2VuZXJpY0NvbmNlcm4KICAgZXh0ZW5kcyBHZW5lcmljQ29uY2VybgpAQCAtMjIsMyArMzMsNCBAQAogICAgIC5nZXRSZXR1cm5UeXBlCiAgICAgLmVxdWFscyhjbGFzc09mWyBTdHJpbmcgXSkKIH0KKy8vIEVORCBTTklQUEVUOiBnZW5lcmljY29uY2VybgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvVGhlcmVDb25jZXJuLnNjYWxhIGIvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvVGhlcmVDb25jZXJuLnNjYWxhCmluZGV4IDVjNTBiN2IuLjMzZTc5ODEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1RoZXJlQ29uY2Vybi5zY2FsYQorKysgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9UaGVyZUNvbmNlcm4uc2NhbGEKQEAgLTEsMTIgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBSaWNrYXJkIMOWYmVyZworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZS5zY2FsYQogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbmNlcm4uQ29uY2Vybk9mCiAKLS8qKgotICogVE9ETwotICovCisvLyBTVEFSVCBTTklQUEVUOiB0eXBlZGNvbmNlcm4KIGNsYXNzIEhlbGxvVGhlcmVDb25jZXJuCiAgIGV4dGVuZHMgQ29uY2Vybk9mWyBIZWxsb1dvcmxkTWl4aW4yIF0gd2l0aCBIZWxsb1dvcmxkTWl4aW4yCiB7CiAgIG92ZXJyaWRlIGRlZiBzYXlIZWxsbyhuYW1lOiBTdHJpbmcgKSA9IG5leHQuc2F5SGVsbG8oInRoZXJlICIgKyBuYW1lKQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KKy8vIEVORCBTTklQUEVUOiB0eXBlZGNvbmNlcm4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1dvcmxkQ29tcG9zaXRlLnNjYWxhIGIvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRDb21wb3NpdGUuc2NhbGEKaW5kZXggNjRiYTY1Mi4uMGEyMDlkOCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRDb21wb3NpdGUuc2NhbGEKKysrIGIvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRDb21wb3NpdGUuc2NhbGEKQEAgLTEsOCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDExIFJpY2thcmQgw5ZiZXJnCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlLnNjYWxhCiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlRyYW5zaWVudENvbXBvc2l0ZQogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25jZXJuLkNvbmNlcm5zCiAKKy8vIFNUQVJUIFNOSVBQRVQ6IGNvbXBvc2l0ZQogQENvbmNlcm5zKEFycmF5KGNsYXNzT2ZbIEhlbGxvVGhlcmVDb25jZXJuIF0pKQogdHJhaXQgSGVsbG9Xb3JsZENvbXBvc2l0ZQogICBleHRlbmRzIFRyYW5zaWVudENvbXBvc2l0ZSB3aXRoIEhlbGxvV29ybGRNaXhpbiB3aXRoIEhlbGxvV29ybGRNaXhpbjIKKy8vIEVORCBTTklQUEVUOiBjb21wb3NpdGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1dvcmxkQ29tcG9zaXRlMi5zY2FsYSBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1dvcmxkQ29tcG9zaXRlMi5zY2FsYQppbmRleCBhODZjMWNjLi42MjExNDNjIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZENvbXBvc2l0ZTIuc2NhbGEKKysrIGIvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRDb21wb3NpdGUyLnNjYWxhCkBAIC0xLDMgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBSaWNrYXJkIMOWYmVyZworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZS5zY2FsYQogCiB0cmFpdCBIZWxsb1dvcmxkQ29tcG9zaXRlMgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRDb21wb3NpdGVUZXN0LmphdmEgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZENvbXBvc2l0ZVRlc3QuamF2YQppbmRleCBlYmM0YWFlLi5lNDE4YmRkIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZENvbXBvc2l0ZVRlc3QuamF2YQorKysgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZENvbXBvc2l0ZVRlc3QuamF2YQpAQCAtMSwxMSArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDExIFJpY2thcmQgw5ZiZXJnCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlLnNjYWxhOwogCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25zdHJhaW50LkNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29yazsKLWltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrQ29tcGxldGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwogaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5TaW5nbGV0b25Bc3NlbWJsZXI7CkBAIC0yNCw2ICszMyw3IEBACiB7CiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q29tcG9zaXRlKCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgU2luZ2xldG9uQXNzZW1ibGVyIGFzc2VtYmxlciA9IG5ldyBTaW5nbGV0b25Bc3NlbWJsZXIoKQogICAgICAgICB7CkBAIC0zMSw5ICs0MSwxMSBAQAogICAgICAgICAgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCiAgICAgICAgICAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gU1RBUlQgU05JUFBFVDogY29tcG9zaXRlCiAgICAgICAgICAgICAgICAgbW9kdWxlLnRyYW5zaWVudHMoIEhlbGxvV29ybGRDb21wb3NpdGUuY2xhc3MsIEhlbGxvV29ybGRDb21wb3NpdGUyLmNsYXNzICkuCiAgICAgICAgICAgICAgICAgICAgIHdpdGhNaXhpbnMoIFNjYWxhVHJhaXRNaXhpbi5jbGFzcyApLgogICAgICAgICAgICAgICAgICAgICB3aXRoQ29uY2VybnMoIEV4Y2xhbWF0aW9uR2VuZXJpY0NvbmNlcm4uY2xhc3MgKTsKKyAgICAgICAgICAgICAgICAvLyBFTkQgU05JUFBFVDogY29tcG9zaXRlCiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKQEAgLTU2LDcgKzY4LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEVudGl0eSgpCi0gICAgICAgIHRocm93cyBVbml0T2ZXb3JrQ29tcGxldGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgU2luZ2xldG9uQXNzZW1ibGVyIGFzc2VtYmxlciA9IG5ldyBTaW5nbGV0b25Bc3NlbWJsZXIoKQogICAgICAgICB7CkBAIC02NCw4ICs3NiwxMiBAQAogICAgICAgICAgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCiAgICAgICAgICAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gU1RBUlQgU05JUFBFVDogZW50aXR5CiAgICAgICAgICAgICAgICAgbW9kdWxlLmVudGl0aWVzKCBUZXN0RW50aXR5LmNsYXNzICkud2l0aE1peGlucyggU2NhbGFUcmFpdE1peGluLmNsYXNzICk7CisgICAgICAgICAgICAgICAgLy8gRU5EIFNOSVBQRVQ6IGVudGl0eQorICAgICAgICAgICAgICAgIC8vIFNUQVJUIFNOSVBQRVQ6IHNlcnZpY2UKICAgICAgICAgICAgICAgICBtb2R1bGUuc2VydmljZXMoIFRlc3RTZXJ2aWNlLmNsYXNzICkud2l0aE1peGlucyggU2NhbGFUcmFpdE1peGluLmNsYXNzICk7CisgICAgICAgICAgICAgICAgLy8gRU5EIFNOSVBQRVQ6IHNlcnZpY2UKIAogICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlUZXN0QXNzZW1ibGVyKCkuYXNzZW1ibGUoIG1vZHVsZSApOwogICAgICAgICAgICAgICAgIG5ldyBSZGZNZW1vcnlTdG9yZUFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1dvcmxkTWl4aW4uc2NhbGEgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZE1peGluLnNjYWxhCmluZGV4IDFhMmEyYjAuLmU2MzBmOTkgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1dvcmxkTWl4aW4uc2NhbGEKKysrIGIvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRNaXhpbi5zY2FsYQpAQCAtMSwzICsxLDE0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgUmlja2FyZCDDlmJlcmcKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGUuc2NhbGEKIAogdHJhaXQgSGVsbG9Xb3JsZE1peGluCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZE1peGluMi5zY2FsYSBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1dvcmxkTWl4aW4yLnNjYWxhCmluZGV4IDQ1ZDdlMGIuLmFlYjgyNTAgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1dvcmxkTWl4aW4yLnNjYWxhCisrKyBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9IZWxsb1dvcmxkTWl4aW4yLnNjYWxhCkBAIC0xLDggKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBSaWNrYXJkIMOWYmVyZworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZS5zY2FsYQogCiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50cy5hbm5vdGF0aW9uLk1heExlbmd0aAogCisvLyBTVEFSVCBTTklQUEVUOiBtaXhpbgogdHJhaXQgSGVsbG9Xb3JsZE1peGluMgogewogICBkZWYgc2F5SGVsbG8oQE1heExlbmd0aCgxMCkgbmFtZTogU3RyaW5nICk6IFN0cmluZyA9ICJIZWxsbyAiICsgbmFtZQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KKy8vIEVORCBTTklQUEVUOiBtaXhpbgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL0hlbGxvV29ybGRNaXhpbjMuc2NhbGEgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZE1peGluMy5zY2FsYQppbmRleCBjYzYxMDMwLi41YjUwNGJjIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZE1peGluMy5zY2FsYQorKysgYi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvSGVsbG9Xb3JsZE1peGluMy5zY2FsYQpAQCAtMSwzICsxLDE0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgUmlja2FyZCDDlmJlcmcKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGUuc2NhbGEKIAogLyoqCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvVGVzdEVudGl0eS5zY2FsYSBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9UZXN0RW50aXR5LnNjYWxhCmluZGV4IDYxMWNhMzMuLjE0NDBjOGQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9UZXN0RW50aXR5LnNjYWxhCisrKyBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9UZXN0RW50aXR5LnNjYWxhCkBAIC0xLDMgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBSaWNrYXJkIMOWYmVyZworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZS5zY2FsYQogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlDb21wb3NpdGUKQEAgLTgsNiArMTksNyBAQAogLyoqCiAgKiBUZXN0IGVudGl0eQogICovCisgLy8gU1RBUlQgU05JUFBFVDogZW50aXR5CiB0cmFpdCBUZXN0RW50aXR5CiAgIGV4dGVuZHMgRW50aXR5Q29tcG9zaXRlIHdpdGggQ29tbWFuZHMgd2l0aCBFdmVudHMgd2l0aCBEYXRhCiAKQEAgLTQ2LDQgKzU4LDUgQEAKICAgICAvLyBSZWdpc3RlciBjaGFuZ2UgYnkgbW9kaWZ5aW5nIHN0YXRlCiAgICAgZm9vID0gbmV3VmFsdWUKICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KKy8vIEVORCBTTklQUEVUOiBlbnRpdHkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9UZXN0U2VydmljZS5zY2FsYSBiL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy90ZXN0L3NjYWxhL29yZy9xaTRqL3NhbXBsZS9zY2FsYS9UZXN0U2VydmljZS5zY2FsYQppbmRleCA5YzA5Njc0Li45Yzc3MTExIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvdGVzdC9zY2FsYS9vcmcvcWk0ai9zYW1wbGUvc2NhbGEvVGVzdFNlcnZpY2Uuc2NhbGEKKysrIGIvbGlicmFyaWVzL2xhbmctc2NhbGEvc3JjL3Rlc3Qvc2NhbGEvb3JnL3FpNGovc2FtcGxlL3NjYWxhL1Rlc3RTZXJ2aWNlLnNjYWxhCkBAIC0xLDMgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBSaWNrYXJkIMOWYmVyZworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZS5zY2FsYQogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZUNvbXBvc2l0ZQpAQCAtNSw4ICsxNiwxMCBAQAogLyoqCiAgKiBUZXN0IHNlcnZpY2UgdGhhdCByZXBlYXRzIGdpdmVuIHN0cmluZwogICovCisgLy8gU1RBUlQgU05JUFBFVDogc2VydmljZQogdHJhaXQgVGVzdFNlcnZpY2UKICAgZXh0ZW5kcyBTZXJ2aWNlQ29tcG9zaXRlCiB7CiAgIGRlZiByZXBlYXQoaW5wdXQ6IFN0cmluZyApOiBTdHJpbmcgPSBpbnB1dCArIGlucHV0Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQorLy8gRU5EIFNOSVBQRVQ6IHNlcnZpY2UKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sb2NraW5nL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9sb2NraW5nL2J1aWxkLmdyYWRsZQppbmRleCA4NjFmYzI3Li5iMzFjMmE0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbG9ja2luZy9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL2xvY2tpbmcvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogTG9ja2luZyBMaWJyYXJ5IHByb3ZpZGVzIGxvY2sgbWFuYWdlbWVudCBmb3IgbWV0aG9kcy4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gTG9ja2luZyIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIExvY2tpbmcgTGlicmFyeSBwcm92aWRlcyBsb2NrIG1hbmFnZW1lbnQgZm9yIG1ldGhvZHMuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIExvY2tpbmciIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5hcGkiKSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sb2NraW5nL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL2xvY2tpbmcvZGV2LXN0YXR1cy54bWwKaW5kZXggZDM4MTgzMS4uZjU0OWM5OSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvY2tpbmcvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL2xvY2tpbmcvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCkBAIC04LDcgKzI0LDcgQEAKICAgICA8Y29kZWJhc2U+c3RhYmxlPC9jb2RlYmFzZT4KIAogICAgIDwhLS0gbm9uZSwgYnJpZWYsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDxkb2N1bWVudGF0aW9uPm5vbmU8L2RvY3VtZW50YXRpb24+CisgICAgPGRvY3VtZW50YXRpb24+YnJpZWY8L2RvY3VtZW50YXRpb24+CiAKICAgICA8IS0tIG5vbmUsIHNvbWUsIGdvb2QsIGNvbXBsZXRlIC0tPgogICAgIDx1bml0dGVzdHM+c29tZTwvdW5pdHRlc3RzPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xvY2tpbmcvc3JjL2RvY3MvbG9ja2luZy50eHQgYi9saWJyYXJpZXMvbG9ja2luZy9zcmMvZG9jcy9sb2NraW5nLnR4dAppbmRleCA1MzFiNDNhLi42ZjFmOWVlIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbG9ja2luZy9zcmMvZG9jcy9sb2NraW5nLnR4dAorKysgYi9saWJyYXJpZXMvbG9ja2luZy9zcmMvZG9jcy9sb2NraW5nLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LWxvY2tpbmcsIExvY2tpbmcgTGlicmFyeV1dCiA9IExvY2tpbmcgPQogCkBAIC02LDggKzI1LDQzIEBACiBzb3VyY2U9bGlicmFyaWVzL2xvY2tpbmcvZGV2LXN0YXR1cy54bWwKIC0tLS0tLS0tLS0tLS0tCiAKLUxvY2tpbmcgTGlicmFyeQorVGhlIExvY2tpbmcgTGlicmFyeSBpcyBhIHNpbXBsZSB3YXkgdG8gbWFyayBtZXRob2Qgd2l0aCBSZWFkIG9yIFdyaXRlIGxvY2tzLCBhbmQgdGhlIGRldGFpbHMgaXMgaGFuZGxlZCBieSB0aGlzCitsaWJyYXJ5LgogCi1OT1RFOiBUaGlzIExpYnJhcnkgaGFzIG5vIGRvY3VtZW50YXRpb24geWV0LiBMZWFybiBob3cgdG8gY29udHJpYnV0ZSBpbiA8PGNvbW11bml0eS1kb2NzPj4uCitUaGlzIGxpYnJhcnkgaXMgaGVhdmlseSB1c2VkIGluIEVudGl0eVN0b3JlIGltcGxlbWVudGF0aW9ucy4KKwogCiBpbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQorCitUaGUgbGlicmFyeSBjcmVhdGVzIGEgK2phdmEudXRpbC5jb25jdXJyZW50LlJlZW50cmFudFJlYWRXcml0ZUxvY2srIHdoaWNoIGlzIHNoYXJlZCBmb3IgYWxsIG1ldGhvZHMgd2l0aGluIHRoZQorY29tcG9zaXRlLiBJdCB0aGVuIGFjcXVpcmVzIHRoZSByZWFkIG9yIHdyaXRlIGxvY2sgaW4gYSBjb25jZXJuIHRoYXQgaXMgYXBwbGllZCB0byB0aGUgbWV0aG9kcyBvZiB0aGUgY29tcG9zaXRlLCB3aGljaAoraGF2ZSB0aGUgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9ucy4KKworPT0gK0BSZWFkTG9jaysgPT0KK1RoaXMgYW5ub3RhdGlvbiB3aWxsIGFwcGx5IHRoZSArUmVhZExvY2tDb25jZXJuKyB0byB0aGUgbWV0aG9kLCBhbmQgYWNxdWlyZSB0aGUgK2xvY2sucmVhZExvY2soKSsgb24gZW50cnkgYW5kIHJlbGFzZQoraXQgb24gZXhpdCBvZiB0aGUgbWV0aG9kLiBTZWUgdGhlICtSZWVudHJhbnRSZWFkV3JpdGVMb2NrKyBmb3IgZGV0YWlscyBvbiBob3cvd2hlbiB0byB1c2UgaXQgYW5kIHRoZSBleGFjdCBzZW1hbnRpY3MuCisKKz09ICtAV3JpdGVMb2NrKyA9PQorVGhpcyBhbm5vdGF0aW9uIHdpbGwgYXBwbHkgdGhlICtXcml0ZUxvY2tDb25jZXJuKyB0byB0aGUgbWV0aG9kLCBhbmQgYWNxdWlyZSB0aGUgK2xvY2sud3JpdGVMb2NrKCkrIG9uIGVudHJ5IGFuZCByZWxhc2UKK2l0IG9uIGV4aXQgb2YgdGhlIG1ldGhvZC4gU2VlIHRoZSArUmVlbnRyYW50UmVhZFdyaXRlTG9jaysgZm9yIGRldGFpbHMgb24gaG93L3doZW4gdG8gdXNlIGl0IGFuZCB0aGUgZXhhY3Qgc2VtYW50aWNzLgorCis9PSArTG9ja2luZ0Fic3RyYWN0Q29tcG9zaXRlKyA9PQorVGhpcyBjb21wb3NpdGUgdHlwZSBpcyB0aGUgZWFzaWVzdCB3YXkgdG8gdXNlIHRoaXMgbGlicmFyeS4gU2ltcGxlIGV4dGVuZCB5b3UgY29tcG9zaXRlIHR5cGUgaW50ZXJmYWNlIHdpdGggdGhpcworaW50ZXJmYWNlIGFuZCBzdGFydCBtYXJraW5nIHRoZSBtZXRob2RzIHdpdGggdGhlIGFib3ZlIGFubm90YXRpb25zLiBObyBvdGhlciBjb21wbGV4IGFzc2VtYmx5IGlzIHJlcXVpcmVkLgorCitbc291cmNlLGphdmFdCistLS0tCitwdWJsaWMgaW50ZXJmYWNlIFNvbWVTZXJ2aWNlCisgICAgZXh0ZW5kcyBTZXJ2aWNlQ29tcG9zaXRlLCBMb2NraW5nQWJzdHJhY3RDb21wb3NpdGUKK3sKK30KKy0tLS0KKworb3IgYXBwbHkgaXQgZHVyaW5nIGFzc2VtYmx5LCBpbiBjYXNlIHRoYXQgaXMgdGhlIG9ubHkgY2hvaWNlIChzdWNoIGFzIGV4aXN0aW5nL2V4dGVybmFsIGludGVyZmFjZXMpCisKK1tzbmlwcGV0LGphdmFdCistLS0tCitzb3VyY2U9bGlicmFyaWVzL2xvY2tpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2xvY2tpbmcvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQordGFnPWFzc2VtYmx5CistLS0tCisKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sb2NraW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9sb2NraW5nL1JlYWRMb2NrQ29uY2Vybi5qYXZhIGIvbGlicmFyaWVzL2xvY2tpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2xvY2tpbmcvUmVhZExvY2tDb25jZXJuLmphdmEKaW5kZXggNTVjOTZhMy4uMzllOGE4MCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvY2tpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2xvY2tpbmcvUmVhZExvY2tDb25jZXJuLmphdmEKKysrIGIvbGlicmFyaWVzL2xvY2tpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2xvY2tpbmcvUmVhZExvY2tDb25jZXJuLmphdmEKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgKiBGaXggZm9yIHRoaXMgYnVnOgogICAgICAqIGh0dHA6Ly9idWdzLnN1bi5jb20vYnVnZGF0YWJhc2Uvdmlld19idWcuZG8/YnVnX2lkPTY4MjIzNzAKICAgICAgKgotICAgICAqIEBwYXJhbSBsb2NrCisgICAgICogQHBhcmFtIGxvY2sgdGhlIGxvY2sgdG8gYmUgYWNxdWlyZWQuCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgbG9jayggTG9jayBsb2NrICkKICAgICB7CkBAIC03NCw3ICs3NCw4IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlKCAhKGxvY2sudHJ5TG9jaygpIHx8IGxvY2sudHJ5TG9jayggMTAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTICkpICkKKyAgICAgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBTdGF0ZW1lbnRXaXRoRW1wdHlCb2R5CisgICAgICAgICAgICAgICAgd2hpbGUoICFsb2NrLnRyeUxvY2soIDEwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyApICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE9uIHRpbWVvdXQsIHRyeSBhZ2FpbgogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sb2NraW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9sb2NraW5nL1dyaXRlTG9ja0NvbmNlcm4uamF2YSBiL2xpYnJhcmllcy9sb2NraW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9sb2NraW5nL1dyaXRlTG9ja0NvbmNlcm4uamF2YQppbmRleCAwNDQ0MDg0Li5mMzkxNjY3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbG9ja2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbG9ja2luZy9Xcml0ZUxvY2tDb25jZXJuLmphdmEKKysrIGIvbGlicmFyaWVzL2xvY2tpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2xvY2tpbmcvV3JpdGVMb2NrQ29uY2Vybi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkubG9ja2luZzsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwpAQCAtMjYsNyArNDQsNiBAQAogICAgICAgICB0aHJvd3MgVGhyb3dhYmxlCiAgICAgewogICAgICAgICBMb2NrIHdyaXRlTG9jayA9IGxvY2sud3JpdGVMb2NrKCk7Ci0KICAgICAgICAgbG9jayh3cml0ZUxvY2spOwogICAgICAgICB0cnkKICAgICAgICAgewpAQCAtMzQsMTQgKzUxLDcgQEAKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5CiAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlTG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlTG9jay51bmxvY2soKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTUsNyArNjUsOCBAQAogICAgICAgICB7CiAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3aGlsZSggIShsb2NrLnRyeUxvY2soKSB8fCBsb2NrLnRyeUxvY2soIDEwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyApKSApCisgICAgICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gU3RhdGVtZW50V2l0aEVtcHR5Qm9keQorICAgICAgICAgICAgICAgIHdoaWxlKCAhbG9jay50cnlMb2NrKCAxMDAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMgKSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBPbiB0aW1lb3V0LCB0cnkgYWdhaW4KICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9ja2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbG9ja2luZy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbG9ja2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbG9ja2luZy9wYWNrYWdlLmh0bWwKaW5kZXggZGJkNmVlYi4uODA4NGRjYSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvY2tpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L2xvY2tpbmcvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9sb2NraW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9sb2NraW5nL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+TG9ja2luZyBMaWJyYXJ5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9ja2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbG9ja2luZy9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhIGIvbGlicmFyaWVzL2xvY2tpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2xvY2tpbmcvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjI3YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicmFyaWVzL2xvY2tpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L2xvY2tpbmcvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQpAQCAtMCwwICsxLDQyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LmxvY2tpbmc7CisKK2ltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkxheWVyQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5sYXllcmVkLk1vZHVsZUFzc2VtYmxlcjsKKworcHVibGljIGNsYXNzIERvY3VtZW50YXRpb25TdXBwb3J0Cit7CisvLyBTVEFSVCBTTklQUEVUOiBhc3NlbWJseQorICAgIHB1YmxpYyBjbGFzcyBNeU1vZHVsZUFzc2VtYmxlcgorICAgICAgICBpbXBsZW1lbnRzIE1vZHVsZUFzc2VtYmxlcnsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIE1vZHVsZUFzc2VtYmx5IGFzc2VtYmxlKCBMYXllckFzc2VtYmx5IGxheWVyLCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQorICAgICAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggTXlTZXJ2aWNlLmNsYXNzICkud2l0aFR5cGVzKCBMb2NraW5nQWJzdHJhY3RDb21wb3NpdGUuY2xhc3MgKTsKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGU7CisgICAgICAgIH0KKyAgICB9CisvLyBFTkQgU05JUFBFVDogYXNzZW1ibHkKKyAgICBwdWJsaWMgaW50ZXJmYWNlIE15U2VydmljZSB7fQorfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xvZ2dpbmcvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL2xvZ2dpbmcvYnVpbGQuZ3JhZGxlCmluZGV4IGNkMGE4NmUuLmYyZGRlN2UgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sb2dnaW5nL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvbG9nZ2luZy9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBMb2dnaW5nIExpYnJhcnkgcHJvdmlkZXMgYW4gYWR2YW5jZWQgbG9nZ2luZyBmcmFtZXdvcmsgd2hpY2ggc2VwYXJhdGVzIHRyYWNlLCBkZWJ1ZyBhbmQgbG9nIHN5c3RlbXMuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIExvZ2dpbmciIH19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBMb2dnaW5nIExpYnJhcnkgcHJvdmlkZXMgYW4gYWR2YW5jZWQgbG9nZ2luZyBmcmFtZXdvcmsgd2hpY2ggc2VwYXJhdGVzIHRyYWNlLCBkZWJ1ZyBhbmQgbG9nIHN5c3RlbXMuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIExvZ2dpbmciIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sb2dnaW5nL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL2xvZ2dpbmcvZGV2LXN0YXR1cy54bWwKaW5kZXggYTBjOWZiYi4uYmRmMDBlNyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL2xvZ2dpbmcvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvZG9jcy9sb2dnaW5nLnR4dCBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9kb2NzL2xvZ2dpbmcudHh0CmluZGV4IDA2ZDgyM2EuLmVkN2Y2YjYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9kb2NzL2xvZ2dpbmcudHh0CisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9kb2NzL2xvZ2dpbmcudHh0CkBAIC0yMSw3ICsyMSw3IEBACiBzb3VyY2U9bGlicmFyaWVzL2xvZ2dpbmcvZGV2LXN0YXR1cy54bWwKIC0tLS0tLS0tLS0tLS0tCiAKLUZpcnN0IG9mIGFsbCwgUWk0aiBpcyB0YWtpbmcgYSBmcmVzaCBsb29rIGF0IGFsbCB0aGluZ3MgdGhhdCB3ZSB0YWtlIGZvciBncmFudGVkLiBMb2dnaW5nIGlzIG9uZSBzdWNoIHRoaW5nLgorRmlyc3Qgb2YgYWxsLCBaZXN04oSiIGlzIHRha2luZyBhIGZyZXNoIGxvb2sgYXQgYWxsIHRoaW5ncyB0aGF0IHdlIHRha2UgZm9yIGdyYW50ZWQuIExvZ2dpbmcgaXMgb25lIHN1Y2ggdGhpbmcuCiAKIEl0IHNob3VsZCAoYnV0IGlzIG5vdCkgb2J2aW91cyB0aGF0IExvZ2dpbmcgYXJlIHVzZWQgZm9yIHRocmVlIHZlcnkgZGlzdGluY3QgcHVycG9zZXMsIGFuZCBpbiBvdXIgb3BpbmlvbiB0aGUgY29uY2VwdHMKIGFyZSBub3QgcmVsYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBhYnN0cmFjdGVkIGluIHRoZSBzYW1lIGZhc2hpb24sIGFzIGhhcyBiZWVuIHRoZSBub3JtIGluIExvZzRqLCBKREsgbG9nZ2luZywgQ29tbW9ucwpAQCAtODAsNyArODAsNyBAQAogPT0gVHJhY2luZyA9PQogCiBUcmFjaW5nIGlzIHRoZSBwcm9jZXNzIG9mIHRyYWNraW5nIGFsbCB0aGUgbWV0aG9kcyB0aGF0IGhhcyBiZWVuIGNhbGxlZC4gVGhlcmUgYXJlIHR3byBsZXZlbHMgb2YgdHJhY2luZyBhdmFpbGFibGUgaW4KLVFpNGouIEVpdGhlciBUcmFjZSBBbGwgb3IgdHJhY2Ugd2hlcmUgYSBhbm5vdGF0aW9uIGhhcyBiZWVuIGdpdmVuLgorWmVzdC4gRWl0aGVyIFRyYWNlIEFsbCBvciB0cmFjZSB3aGVyZSBhIGFubm90YXRpb24gaGFzIGJlZW4gZ2l2ZW4uCiAKIElmIHRoZSBUcmFjZUFsbENvbmNlcm4gaXMgYWRkZWQgdG8gYSBjb21wb3NpdGUsIGFuZCB0aGVyZSBpcyBhIFRyYWNlU2VydmljZSB2aXNpYmxlLCB0aGVuIGFsbCBtZXRob2QgY2FsbHMgaW50byB0aGF0CiBjb21wb3NpdGUgaXMgdHJhY2VkLgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2RlYnVnL0RlYnVnQ29uY2Vybi5qYXZhIGIvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2RlYnVnL0RlYnVnQ29uY2Vybi5qYXZhCmluZGV4IDQ4MjMyNDguLjgxNThkMDggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9EZWJ1Z0NvbmNlcm4uamF2YQorKysgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvZGVidWcvRGVidWdDb25jZXJuLmphdmEKQEAgLTMzLDExICszMyw2IEBACiAgICAgQE9wdGlvbmFsIEBTZXJ2aWNlIHByaXZhdGUgRGVidWdnaW5nU2VydmljZSBsb2dnaW5nU2VydmljZTsKICAgICBAVGhpcyBwcml2YXRlIENvbXBvc2l0ZSBjb21wb3NpdGU7CiAKLSAgICBwdWJsaWMgRGVidWdDb25jZXJuKCkKLSAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkRlYnVnQ29uY2VybiBjcmVhdGVkLiIgKTsKLSAgICB9Ci0KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgSW50ZWdlciBkZWJ1Z0xldmVsKCkKICAgICB7CkBAIC01MSw3ICs0Niw2IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZGVidWcoIGludCBwcmlvcml0eSwgU3RyaW5nIG1lc3NhZ2UgKQogICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiTDoiICsgY29tcG9zaXRlICk7CiAgICAgICAgIGlmKCBsb2dnaW5nU2VydmljZSA9PSBudWxsICkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2RlYnVnL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9wYWNrYWdlLmh0bWwKaW5kZXggNTNjMTZkYS4uZTA5MDI1NSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2RlYnVnL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvZGVidWcvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5EZWJ1ZyBMb2dnaW5nLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvZGVidWcvcmVjb3Jkcy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvZGVidWcvcmVjb3Jkcy9wYWNrYWdlLmh0bWwKaW5kZXggNjFjYjUwZi4uNjU4OGI1MiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2RlYnVnL3JlY29yZHMvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9yZWNvcmRzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RGVidWcgTG9nZ2luZyBSZWNvcmRzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvZGVidWcvc2VydmljZS9EZWJ1Z09uQ29uc29sZVNpZGVFZmZlY3QuamF2YSBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL0RlYnVnT25Db25zb2xlU2lkZUVmZmVjdC5qYXZhCmluZGV4IDE0ZmEzZTQuLjhkMzY5YWEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL0RlYnVnT25Db25zb2xlU2lkZUVmZmVjdC5qYXZhCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL0RlYnVnT25Db25zb2xlU2lkZUVmZmVjdC5qYXZhCkBAIC02Miw3ICs2Miw3IEBACiAKICAgICBwcml2YXRlIFN0cmluZyBnZXRDb21wb3NpdGVOYW1lKCBDb21wb3NpdGUgY29tcG9zaXRlICkKICAgICB7Ci0gICAgICAgIHJldHVybiBmaXJzdChRaTRqLkZVTkNUSU9OX0RFU0NSSVBUT1JfRk9SLm1hcCggY29tcG9zaXRlICkudHlwZXMoKSkuZ2V0TmFtZSgpOworICAgICAgICByZXR1cm4gZmlyc3QoIFFpNGouRlVOQ1RJT05fREVTQ1JJUFRPUl9GT1IubWFwKCBjb21wb3NpdGUgKS50eXBlcygpKS5nZXROYW1lKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvZGVidWcvc2VydmljZS9EZWJ1Z2dpbmdTZXJ2aWNlTWl4aW4uamF2YSBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL0RlYnVnZ2luZ1NlcnZpY2VNaXhpbi5qYXZhCmluZGV4IGE3NzMwN2UuLmIyZmQwNGYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL0RlYnVnZ2luZ1NlcnZpY2VNaXhpbi5qYXZhCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL0RlYnVnZ2luZ1NlcnZpY2VNaXhpbi5qYXZhCkBAIC0xNzUsNiArMTc1LDYgQEAKIAogICAgIHByaXZhdGUgU3RyaW5nIGdldENvbXBvc2l0ZU5hbWUoIENvbXBvc2l0ZSBjb21wb3NpdGUgKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZpcnN0KFFpNGouRlVOQ1RJT05fREVTQ1JJUFRPUl9GT1IubWFwKCBjb21wb3NpdGUgKS50eXBlcygpKS5nZXROYW1lKCk7CisgICAgICAgIHJldHVybiBmaXJzdCggUWk0ai5GVU5DVElPTl9ERVNDUklQVE9SX0ZPUi5tYXAoIGNvbXBvc2l0ZSApLnR5cGVzKCkpLmdldE5hbWUoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvZGVidWcvc2VydmljZS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvZGVidWcvc2VydmljZS9wYWNrYWdlLmh0bWwKaW5kZXggZDI3ZTllZC4uNjY3YzRjYSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2RlYnVnL3NlcnZpY2UvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RGVidWcgTG9nZ2luZyBTZXJ2aWNlLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvbG9nL2Fzc2VtYmxpZXMvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2xvZy9hc3NlbWJsaWVzL3BhY2thZ2UuaHRtbAppbmRleCBmNWQ3YjU2Li5iMmVkMGYxIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvbG9nL2Fzc2VtYmxpZXMvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9sb2cvYXNzZW1ibGllcy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkxvZ2dpbmcgQXNzZW1ibHkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9sb2cvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2xvZy9wYWNrYWdlLmh0bWwKaW5kZXggNDM5ZDI1Yi4uZjZmZmI0YyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2xvZy9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2xvZy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkxvZ2dpbmcuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9sb2cvcmVjb3Jkcy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvbG9nL3JlY29yZHMvcGFja2FnZS5odG1sCmluZGV4IGFlYjg4ZDkuLjRlNWZkYzcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9sb2cvcmVjb3Jkcy9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2xvZy9yZWNvcmRzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+TG9nZ2luZyBSZWNvcmRzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvbG9nL3NlcnZpY2UvTG9nZ2luZ1NlcnZpY2VNaXhpbi5qYXZhIGIvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2xvZy9zZXJ2aWNlL0xvZ2dpbmdTZXJ2aWNlTWl4aW4uamF2YQppbmRleCA5Mzc0OTEzLi40MzYwNDY3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvbG9nL3NlcnZpY2UvTG9nZ2luZ1NlcnZpY2VNaXhpbi5qYXZhCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9sb2cvc2VydmljZS9Mb2dnaW5nU2VydmljZU1peGluLmphdmEKQEAgLTE2Niw2ICsxNjYsNiBAQAogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9zaXRlTmFtZSggQ29tcG9zaXRlIGNvbXBvc2l0ZSApCiAgICAgewotICAgICAgICByZXR1cm4gZmlyc3QoUWk0ai5GVU5DVElPTl9ERVNDUklQVE9SX0ZPUi5tYXAoIGNvbXBvc2l0ZSApLnR5cGVzKCkpLmdldE5hbWUoKTsKKyAgICAgICAgcmV0dXJuIGZpcnN0KCBRaTRqLkZVTkNUSU9OX0RFU0NSSVBUT1JfRk9SLm1hcCggY29tcG9zaXRlICkudHlwZXMoKSkuZ2V0TmFtZSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9sb2cvc2VydmljZS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvbG9nL3NlcnZpY2UvcGFja2FnZS5odG1sCmluZGV4IGJlZmFhZDMuLjJmM2Q2OWEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy9sb2cvc2VydmljZS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL2xvZy9zZXJ2aWNlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+TG9nZ2luZyBTZXJ2aWNlLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvdHJhY2UvYXNzZW1ibGllcy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvdHJhY2UvYXNzZW1ibGllcy9wYWNrYWdlLmh0bWwKaW5kZXggMzFiOTAyNi4uYmEyZTZlOCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL3RyYWNlL2Fzc2VtYmxpZXMvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy90cmFjZS9hc3NlbWJsaWVzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+VHJhY2UgTG9nZ2luZyBBc3NlbWJseS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL3RyYWNlL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy90cmFjZS9wYWNrYWdlLmh0bWwKaW5kZXggOGFlNmU1OS4uMDYwNzFjNiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL3RyYWNlL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvdHJhY2UvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5UcmFjZSBMb2dnaW5nLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvdHJhY2UvcmVjb3Jkcy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvdHJhY2UvcmVjb3Jkcy9wYWNrYWdlLmh0bWwKaW5kZXggZTNlMzc2Ny4uODQyN2Q3YyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL3RyYWNlL3JlY29yZHMvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy90cmFjZS9yZWNvcmRzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+VHJhY2UgTG9nZ2luZyBSZWNvcmRzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvdHJhY2Uvc2VydmljZS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvdHJhY2Uvc2VydmljZS9wYWNrYWdlLmh0bWwKaW5kZXggMjlhNjM4ZS4uZWY4NjkxOCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL3RyYWNlL3NlcnZpY2UvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy90cmFjZS9zZXJ2aWNlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+VHJhY2UgTG9nZ2luZyBTZXJ2aWNlLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvdmlldy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvdmlldy9wYWNrYWdlLmh0bWwKaW5kZXggNDE3MjQ0Ni4uYmE1MTNhYiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9sb2dnaW5nL3ZpZXcvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9sb2dnaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbG9nZ2luZy92aWV3L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+TG9nIFZpZXdlcnMuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbG9nZ2luZy9kb2NzdXBwb3J0L0xvZ2dpbmdEb2NzLmphdmEgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xvZ2dpbmcvZG9jc3VwcG9ydC9Mb2dnaW5nRG9jcy5qYXZhCmluZGV4IGNkY2Q3NTMuLmEzOWYxZjIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9sb2dnaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbG9nZ2luZy9kb2NzdXBwb3J0L0xvZ2dpbmdEb2NzLmphdmEKKysrIGIvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9sb2dnaW5nL2RvY3N1cHBvcnQvTG9nZ2luZ0RvY3MuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5sb2dnaW5nLmRvY3N1cHBvcnQ7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLk9wdGlvbmFsOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL2xvZ2dpbmcvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xvZ2dpbmcvZGVidWcvc2VydmljZS9EZWJ1Z2dpbmdTZXJ2aWNlQ29tcG9zaXRlLnByb3BlcnRpZXMgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL0RlYnVnZ2luZ1NlcnZpY2VDb21wb3NpdGUucHJvcGVydGllcwppbmRleCBjOGJmNzI5Li4xZDhhNTc5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbG9nZ2luZy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL0RlYnVnZ2luZ1NlcnZpY2VDb21wb3NpdGUucHJvcGVydGllcworKysgYi9saWJyYXJpZXMvbG9nZ2luZy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbG9nZ2luZy9kZWJ1Zy9zZXJ2aWNlL0RlYnVnZ2luZ1NlcnZpY2VDb21wb3NpdGUucHJvcGVydGllcwpAQCAtMSArMSwxNiBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogZGVidWdMZXZlbD0xMDAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9tZXRyaWNzL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9tZXRyaWNzL2J1aWxkLmdyYWRsZQppbmRleCAzOGVhN2U1Li43YzFhYzA5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvbWV0cmljcy9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL21ldHJpY3MvYnVpbGQuZ3JhZGxlCkBAIC0xNCw5ICsxNCw5IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1kZXNjcmlwdGlvbiA9ICJRaTRqIExvY2tpbmcgTGlicmFyeSBwcm92aWRlcyBsb2NrIG1hbmFnZW1lbnQgZm9yIG1ldGhvZHMuIgorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgTWV0cmljcyBMaWJyYXJ5LiIKIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIExvY2tpbmciIH19CitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIE1ldHJpY3MiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9tZXRyaWNzL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL21ldHJpY3MvZGV2LXN0YXR1cy54bWwKaW5kZXggZDNmZDg0OC4uMDRkNzhkMCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL21ldHJpY3MvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL21ldHJpY3MvZGV2LXN0YXR1cy54bWwKQEAgLTIxLDEzICsyMSwxMyBAQAogICAgICAgICBodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEvZGV2LXN0YXR1cy54c2QiPgogICA8c3RhdHVzPgogICAgIDwhLS1ub25lLGVhcmx5LGJldGEsc3RhYmxlLG1hdHVyZS0tPgotICAgIDxjb2RlYmFzZT5lYXJseTwvY29kZWJhc2U+CisgICAgPGNvZGViYXNlPmJldGE8L2NvZGViYXNlPgogCiAgICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPGRvY3VtZW50YXRpb24+bm9uZTwvZG9jdW1lbnRhdGlvbj4KKyAgICA8ZG9jdW1lbnRhdGlvbj5icmllZjwvZG9jdW1lbnRhdGlvbj4KIAogICAgIDwhLS0gbm9uZSwgc29tZSwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPHVuaXR0ZXN0cz5ub25lPC91bml0dGVzdHM+CisgICAgPHVuaXR0ZXN0cz5zb21lPC91bml0dGVzdHM+CiAgIDwvc3RhdHVzPgogICA8bGljZW5zZXM+CiAgICAgPGxpY2Vuc2U+QUx2MjwvbGljZW5zZT4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9tZXRyaWNzL3NyYy9kb2NzL21ldHJpY3MudHh0IGIvbGlicmFyaWVzL21ldHJpY3Mvc3JjL2RvY3MvbWV0cmljcy50eHQKaW5kZXggMzA3Mjk5Mi4uODU3Yzk5YSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL21ldHJpY3Mvc3JjL2RvY3MvbWV0cmljcy50eHQKKysrIGIvbGlicmFyaWVzL21ldHJpY3Mvc3JjL2RvY3MvbWV0cmljcy50eHQKQEAgLTE0LDcgKzE0LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogW1tsaWJyYXJ5LW1ldHJpY3MsTWV0cmljcyBMaWJyYXJ5XV0KLT0gTWV0cmljcyBMaWJyYXJ5PQorPSBNZXRyaWNzIExpYnJhcnkgPQogCiBUaGUgTWV0cmljcyBsaWJyYXJ5IGlzIGF2YWlsYWJsZSB0byBhcHBsaWNhdGlvbiBjb2RlIHRvIGdldCBwcm9kdWN0aW9uIG1ldHJpY3MgZnJvbSB0aGVpciBhcHBsaWNhdGlvbnMuIEl0IGFsbG93cwogYXBwbGljYXRpb25zIHRvIGVhc2lseSBtYXJrIGNyaXRpY2FsIHNlY3Rpb24gZm9yIG1ldHJpY3MgZ2F0aGVyaW5nLCB3aXRob3V0IGhhbmRsaW5nIHRoZSBkZXRhaWxzIHdpdGggdGhlIE1ldHJpY3MKQEAgLTI1LDggKzI1LDggQEAKID09IFVzYWdlID09CiBUaGVyZSBhcmUgY3VycmVudGx5IHRoZSBmb2xsb3dpbmcgcG9zc2liaWxpdGllcyBhdmFpbGFibGU7CiAKLSAgICAqIEBUaW1pbmdDYXB0dXJlCi0gICAgKiBAQ291bnRpbmcKKyAgICAqIEBUaW1pbmdDYXB0dXJlIC0gY2FwdHVyZSB0aW1pbmcgb24gYSBzaW5nbGUgbWV0aG9kCisgICAgKiBUaW1pbmdDYXB0dXJlQWxsIC0gY2FwdHVyZSB0aW1pbmcgb24gYWxsIG1ldGhvZHMgb2YgYSBjb21wb3NpdGUKIAogQmVmb3JlIGxvb2tpbmcgYXQgdGhlIGRldGFpbHMgb2YgdGhlc2UsIHdlIG5lZWQgdG8gcG9pbnQgb3V0IHRoYXQgdGhlcmUgYXJlIHNvbWUgcHJlLWNvbmRpdGlvbnMgZm9yIE1ldHJpY3MgdG8gYmUKIHdvcmtpbmcuIEZpcnN0IG9mIGFsbCwgeW91IG5lZWQgdG8gaW5zdGFsbCBhIE1ldHJpY3MgRXh0ZW5zaW9ucywgbW9zdCBsaWtlbHkgdGhlCkBAIC0zOSwzICszOSwyNSBAQAogVGhlcmUgaXMgYSBUaW1pbmdDYXB0dXJlQWxsQ29uY2Vybiwgd2hpY2ggd2hlbiBhZGRlZCB0byBhIGNvbXBvc2l0ZSB3aWxsIGluc3RhbGwgYSBfVGltZXJfIGZvciBldmVyeSBtZXRob2QgY2FsbAogaW4gdGhlIGNvbXBvc2l0ZS4KIAorPT0gQFRpbWluZ0NhcHR1cmUgPT0KK1RoZSArQFRpbWluZ0NhcHR1cmUrIGFubm90YXRpb24gY2FuIGJlIHBsYWNlZCBvbiBhbnkgbWV0aG9kIG9mIHRoZSBjb21wb3NpdGUsIHRvIGluZGljYXRlIHRoYXQKK2EgVGltZXIgaXMgd2FudGVkIG9uIHRoYXQgbWV0aG9kLgorCitFeGFtcGxlOworCitbc25pcHBldCxqYXZhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9tZXRyaWNzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9tZXRyaWNzL0RvY3VtZW50YXRpb25TdXBwb3J0LmphdmEKK3RhZz1jYXB0dXJlCistLS0tCisKKz09IFdoaWNoIG1ldGhvZD8gPT0KK0l0IGlzIHZhbGlkIHRvIGFubm90YXRlIGVpdGhlciB0aGUgY29tcG9zaXRlIGludGVyZmFjZSBtZXRob2RzIG9yIHRoZSBtaXhpbiBpbXBsZW1lbnRhdGlvbiBtZXRob2RzLgorQW55IG9mIHRoZSBtZXRob2QgZGVjbGFyYXRpb25zIHNob3VsZCB3b3JrLiBGcm9tIHRoZSB0ZXN0Y2FzZXMgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGV4YW1wbGU7CisKK1tzbmlwcGV0LGphdmFdCistLS0tCitzb3VyY2U9bGlicmFyaWVzL21ldHJpY3Mvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L21ldHJpY3MvTWV0cmljc1Rlc3QuamF2YQordGFnPWNvbXBsZXgtY2FwdHVyZQorLS0tLQorCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbWV0cmljcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbWV0cmljcy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvbWV0cmljcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbWV0cmljcy9wYWNrYWdlLmh0bWwKaW5kZXggMTcyZTUwMS4uNWY5MWEzOCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL21ldHJpY3Mvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L21ldHJpY3MvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9tZXRyaWNzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9tZXRyaWNzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+TWV0cmljcyBMaWJyYXJ5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbWV0cmljcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbWV0cmljcy9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhIGIvbGlicmFyaWVzL21ldHJpY3Mvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L21ldHJpY3MvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDVkYzRlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicmFyaWVzL21ldHJpY3Mvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L21ldHJpY3MvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQpAQCAtMCwwICsxLDc5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5Lm1ldHJpY3M7CisKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJsZXI7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKKworcHVibGljIGNsYXNzIERvY3VtZW50YXRpb25TdXBwb3J0Cit7CisvLyBTVEFSVCBTTklQUEVUOiBjYXB0dXJlCisgICAgcHVibGljIGludGVyZmFjZSBSb3V0ZXIKKyAgICB7CisgICAgICAgIEBUaW1pbmdDYXB0dXJlCisgICAgICAgIExpc3Q8Q29vcmRpbmF0ZT4gcm91dGUoIFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZXN0aW5hdGlvbiApOworICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBSb3V0ZXJBbGdvcml0aG0xCisgICAgICAgIGltcGxlbWVudHMgUm91dGVyCisgICAgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIExpc3Q8Q29vcmRpbmF0ZT4gcm91dGUoIFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZXN0aW5hdGlvbiApCisgICAgICAgIHsKKy8vIEVORCBTTklQUEVUOiBjYXB0dXJlCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKy8vIFNUQVJUIFNOSVBQRVQ6IGNhcHR1cmUKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBSb3V0ZXJBbGdvcml0aG0yCisgICAgICAgIGltcGxlbWVudHMgUm91dGVyCisgICAgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIExpc3Q8Q29vcmRpbmF0ZT4gcm91dGUoIFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZXN0aW5hdGlvbiApCisgICAgICAgIHsKKy8vIEVORCBTTklQUEVUOiBjYXB0dXJlCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKy8vIFNUQVJUIFNOSVBQRVQ6IGNhcHR1cmUKKyAgICAgICAgfQorCisvLyBFTkQgU05JUFBFVDogY2FwdHVyZQorICAgICAgICBwdWJsaWMgY2xhc3MgTXlBc2VtYmxlciBpbXBsZW1lbnRzIEFzc2VtYmxlcgorICAgICAgICB7CisvLyBTVEFSVCBTTklQUEVUOiBjYXB0dXJlCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQorICAgICAgICAgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1vZHVsZS5hZGRTZXJ2aWNlcyggUm91dGVyLmNsYXNzICkuaWRlbnRpZmllZEJ5KCAicm91dGVyMSIgKS53aXRoTWl4aW5zKCBSb3V0ZXJBbGdvcml0aG0xLmNsYXNzICk7CisgICAgICAgICAgICAgICAgbW9kdWxlLmFkZFNlcnZpY2VzKCBSb3V0ZXIuY2xhc3MgKS5pZGVudGlmaWVkQnkoICJyb3V0ZXIyIiApLndpdGhNaXhpbnMoIFJvdXRlckFsZ29yaXRobTIuY2xhc3MgKTsKKy8vIEVORCBTTklQUEVUOiBjYXB0dXJlCisvLyBTVEFSVCBTTklQUEVUOiBjYXB0dXJlCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisvLyBFTkQgU05JUFBFVDogY2FwdHVyZQorCisgICAgcHVibGljIGNsYXNzIENvb3JkaW5hdGUKKyAgICB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL21ldHJpY3Mvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L21ldHJpY3MvTWV0cmljc1Rlc3QuamF2YSBiL2xpYnJhcmllcy9tZXRyaWNzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9tZXRyaWNzL01ldHJpY3NUZXN0LmphdmEKaW5kZXggYTM0YjJhYi4uMmVjMDhiZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL21ldHJpY3Mvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L21ldHJpY3MvTWV0cmljc1Rlc3QuamF2YQorKysgYi9saWJyYXJpZXMvbWV0cmljcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbWV0cmljcy9NZXRyaWNzVGVzdC5qYXZhCkBAIC03OCw2ICs3OCw3IEBACiAgICAgewogICAgICAgICBDb3VudHJ5IHVuZGVyVGVzdCA9IG1vZHVsZS5uZXdUcmFuc2llbnQoIENvdW50cnkxLmNsYXNzICk7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBydW5UZXN0KCB1bmRlclRlc3QgKTsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoICJcciIsICIiICk7CiAgICAgICAgIGFzc2VydFRydWUoIGxhc3RMaW5lKCByZXN1bHQsIDEgKS5jb250YWlucyggIj09PT09PT09PT09PT09PT09PT09PSIgKSApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICItLS1FTkQgVEVTVC0tLSIgKTsKICAgICB9CkBAIC04Nyw2ICs4OCw3IEBACiAgICAgewogICAgICAgICBDb3VudHJ5IHVuZGVyVGVzdCA9IG1vZHVsZS5uZXdUcmFuc2llbnQoIENvdW50cnkyLmNsYXNzICk7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBydW5UZXN0KCB1bmRlclRlc3QgKTsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoICJcciIsICIiICk7CiAgICAgICAgIGFzc2VydFRoYXQoIGxhc3RMaW5lKCByZXN1bHQsIDM0ICksIGVxdWFsVG8oICJvcmcucWk0ai5saWJyYXJ5Lm1ldHJpY3MuQ291bnRyeS5Tb21lQXBwbGljYXRpb246IiApICk7CiAgICAgICAgIGFzc2VydFRoYXQoIGxhc3RMaW5lKCByZXN1bHQsIDMzICkudHJpbSgpLCBlcXVhbFRvKCAibmFtZSgpIFtUaW1pbmdDYXB0dXJlXToiICkgKTsKICAgICAgICAgYXNzZXJ0VGhhdCggbGFzdExpbmUoIHJlc3VsdCwgMTYgKS50cmltKCksIGVxdWFsVG8oICJ1cGRhdGVOYW1lKCkgW1RpbWluZ0NhcHR1cmVdOiIgKSApOwpAQCAtMTAzLDcgKzEwNSw3IEBACiAgICAgewogICAgICAgICBDb3VudHJ5IHVuZGVyVGVzdCA9IG1vZHVsZS5uZXdUcmFuc2llbnQoIENvdW50cnkzLmNsYXNzICk7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBydW5UZXN0KCB1bmRlclRlc3QgKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCByZXN1bHQgKTsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoICJcciIsICIiICk7CiAgICAgICAgIGFzc2VydFRoYXQoIGxhc3RMaW5lKCByZXN1bHQsIDE3ICksIGVxdWFsVG8oICJvcmcucWk0ai5saWJyYXJ5Lm1ldHJpY3MuQ291bnRyeS5Tb21lQXBwbGljYXRpb246IiApICk7CiAgICAgICAgIGFzc2VydFRoYXQoIGxhc3RMaW5lKCByZXN1bHQsIDE2ICkudHJpbSgpLCBlcXVhbFRvKCAidXBkYXRlTmFtZSgpIFtUaW1pbmdDYXB0dXJlXToiICkgKTsKICAgICAgICAgYXNzZXJ0VHJ1ZSggbGFzdExpbmUoIHJlc3VsdCwgNSApLmNvbnRhaW5zKCAiNzUlIDw9IiApICk7CkBAIC0xMzEsNiArMTMzLDcgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgIH0KIAorLy8gU1RBUlQgU05JUFBFVDogY29tcGxleC1jYXB0dXJlCiAgICAgcHVibGljIGludGVyZmFjZSBDb3VudHJ5IGV4dGVuZHMgVHJhbnNpZW50Q29tcG9zaXRlCiAgICAgewogICAgICAgICBAT3B0aW9uYWwKQEAgLTE4MSw3ICsxODQsNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ291bnRyeTNNaXhpbgogICAgICAgICBpbXBsZW1lbnRzIENvdW50cnkzCiAgICAgewotCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBAVGltaW5nQ2FwdHVyZQogICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVOYW1lKCBTdHJpbmcgbmV3TmFtZSApCkBAIC0xODksNCArMTkxLDUgQEAKICAgICAgICAgICAgIG5hbWUoKS5zZXQoIG5ld05hbWUgKTsKICAgICAgICAgfQogICAgIH0KKy8vIEVORCBTTklQUEVUOiBjb21wbGV4LWNhcHR1cmUKIH0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9uZW80ai9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvbmVvNGovYnVpbGQuZ3JhZGxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODE5ZjdiLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9uZW80ai9idWlsZC5ncmFkbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIE5lbzRqIExpYnJhcnkgcHJvdmlkZXMgYSBzZXJ2aWNlIHdyYXBwZXIgZm9yIHRoZSBOZW80aiBHcmFwaCBEYXRhYmFzZSIKLQotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIE5lbzRqIiB9fQotCi1kZXBlbmRlbmNpZXMgewotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuc3BpIikpCi0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LmZpbGVjb25maWciKSkKLSAgY29tcGlsZShsaWJyYXJpZXMubmVvNGopCi0KLSAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQotCi0gIHRlc3RSdW50aW1lKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpKQotICB0ZXN0UnVudGltZShsaWJyYXJpZXMubG9nYmFjaykKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbmVvNGovZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvbmVvNGovZGV2LXN0YXR1cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YTEyMDQuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL25lbzRqL2Rldi1zdGF0dXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCi0gICAgICAgIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZCI+Ci0gICAgPHN0YXR1cz4KLSAgICAgICAgPCEtLW5vbmUsZWFybHksYmV0YSxzdGFibGUsbWF0dXJlLS0+Ci0gICAgICAgIDxjb2RlYmFzZT5iZXRhPC9jb2RlYmFzZT4KLQotICAgICAgICA8IS0tIG5vbmUsIGJyaWVmLCBnb29kLCBjb21wbGV0ZSAtLT4KLSAgICAgICAgPGRvY3VtZW50YXRpb24+YnJpZWY8L2RvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgPCEtLSBub25lLCBzb21lLCBnb29kLCBjb21wbGV0ZSAtLT4KLSAgICAgICAgPHVuaXR0ZXN0cz5zb21lPC91bml0dGVzdHM+Ci0gICAgPC9zdGF0dXM+Ci0gICAgPGxpY2Vuc2VzPgotICAgICAgICA8bGljZW5zZT5BTHYyPC9saWNlbnNlPgotICAgIDwvbGljZW5zZXM+Ci08L21vZHVsZT4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9uZW80ai9zcmMvZG9jcy9uZW80ai50eHQgYi9saWJyYXJpZXMvbmVvNGovc3JjL2RvY3MvbmVvNGoudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTEzNDE0Li4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9uZW80ai9zcmMvZG9jcy9uZW80ai50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1bW2xpYnJhcnktbmVvNGosIE5lbzRqIExpYnJhcnldXQotPSBOZW80aiA9Ci0KLVtkZXZzdGF0dXNdCi0tLS0tLS0tLS0tLS0tLQotc291cmNlPWxpYnJhcmllcy9uZW80ai9kZXYtc3RhdHVzLnhtbAotLS0tLS0tLS0tLS0tLS0KLQotVGhlIE5lbzRKIExpYnJhcnkgcHJvdmlkZXMgYSBOZW80SiBlbWJlZGRlZCBkYXRhYmFzZSBhcyBhIFFpNGogU2VydmljZS4KLQotaW5jbHVkZTo6Li4vLi4vYnVpbGQvZG9jcy9idWlsZGluZm8vYXJ0aWZhY3QudHh0W10KLQotPT0gQXNzZW1ibHkgPT0KLQotU2ltcGx5IGFzc2VtYmxlIHRoZSBTZXJ2aWNlOgotCi1bc25pcHBldCxqYXZhXQotLS0tLQotc291cmNlPWxpYnJhcmllcy9uZW80ai9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbmVvNGovRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQotdGFnPWFzc2VtYmx5Ci0tLS0tCi0KLT09IFVzYWdlID09Ci0KLVRoZSBlbWJlZGRlZCBOZW80SiBkYXRhYmFzZSBmaWxlcyBhcmUgc3RvcmVkIGluIHRoZSBgZGF0YWAgZGlyZWN0b3J5IGRlZmluZWQgdXNpbmcgdGhlIDw8bGlicmFyeS1maWxlY29uZmlnPj4uCi0KLVtzbmlwcGV0LGphdmFdCi0tLS0tCi1zb3VyY2U9bGlicmFyaWVzL25lbzRqL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9uZW80ai9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhCi10YWc9bmVvNGoKLS0tLS0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbmVvNGovRW1iZWRkZWREYXRhYmFzZVNlcnZpY2UuamF2YSBiL2xpYnJhcmllcy9uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbmVvNGovRW1iZWRkZWREYXRhYmFzZVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VjZDA4Yi4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L25lbzRqL0VtYmVkZGVkRGF0YWJhc2VTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExLCBSaWNrYXJkIMOWYmVyZy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5Lm5lbzRqOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IG9yZy5uZW80ai5ncmFwaGRiLkdyYXBoRGF0YWJhc2VTZXJ2aWNlOwotaW1wb3J0IG9yZy5uZW80ai5rZXJuZWwuRW1iZWRkZWRHcmFwaERhdGFiYXNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRvckFkYXB0ZXI7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmFjdGl2YXRpb24uQWN0aXZhdG9yczsKLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5Vc2VzOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnNlcnZpY2UuU2VydmljZUNvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZmlsZWNvbmZpZy5GaWxlQ29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBUT0RPCi0gKi8KLUBNaXhpbnMoRW1iZWRkZWREYXRhYmFzZVNlcnZpY2UuTWl4aW4uY2xhc3MpCi1AQWN0aXZhdG9ycyggRW1iZWRkZWREYXRhYmFzZVNlcnZpY2UuQWN0aXZhdG9yLmNsYXNzICkKLXB1YmxpYyBpbnRlcmZhY2UgRW1iZWRkZWREYXRhYmFzZVNlcnZpY2UKLSAgICBleHRlbmRzIFNlcnZpY2VDb21wb3NpdGUKLXsKLSAgICB2b2lkIHN0YXJ0RGF0YWJhc2UoKQotICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKLSAgICAKLSAgICB2b2lkIHN0b3BEYXRhYmFzZSgpCi0gICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwotICAgIAotICAgIEdyYXBoRGF0YWJhc2VTZXJ2aWNlIGRhdGFiYXNlKCk7Ci0gICAgCi0gICAgY2xhc3MgQWN0aXZhdG9yCi0gICAgICAgICAgICBleHRlbmRzIEFjdGl2YXRvckFkYXB0ZXI8U2VydmljZVJlZmVyZW5jZTxFbWJlZGRlZERhdGFiYXNlU2VydmljZT4+Ci0gICAgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBhZnRlckFjdGl2YXRpb24oIFNlcnZpY2VSZWZlcmVuY2U8RW1iZWRkZWREYXRhYmFzZVNlcnZpY2U+IGFjdGl2YXRlZCApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBhY3RpdmF0ZWQuZ2V0KCkuc3RhcnREYXRhYmFzZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGJlZm9yZVBhc3NpdmF0aW9uKCBTZXJ2aWNlUmVmZXJlbmNlPEVtYmVkZGVkRGF0YWJhc2VTZXJ2aWNlPiBwYXNzaXZhdGluZyApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBwYXNzaXZhdGluZy5nZXQoKS5zdG9wRGF0YWJhc2UoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICB9Ci0KLSAgICBhYnN0cmFjdCBjbGFzcyBNaXhpbgotICAgICAgICBpbXBsZW1lbnRzIEVtYmVkZGVkRGF0YWJhc2VTZXJ2aWNlCi0gICAgewotICAgICAgICBAU2VydmljZQotICAgICAgICBGaWxlQ29uZmlndXJhdGlvbiBjb25maWc7Ci0KLSAgICAgICAgQFVzZXMKLSAgICAgICAgU2VydmljZURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLQotICAgICAgICBFbWJlZGRlZEdyYXBoRGF0YWJhc2UgZGI7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RGF0YWJhc2UoKQotICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcGF0aCA9IG5ldyBGaWxlKCBjb25maWcuZGF0YURpcmVjdG9yeSgpLCBpZGVudGl0eSgpLmdldCgpICkuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgICAgICBkYiA9IG5ldyBFbWJlZGRlZEdyYXBoRGF0YWJhc2UoIHBhdGggKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzdG9wRGF0YWJhc2UoKQotICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBkYi5zaHV0ZG93bigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEdyYXBoRGF0YWJhc2VTZXJ2aWNlIGRhdGFiYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRiOwotICAgICAgICB9Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvbmVvNGovc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L25lbzRqL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbmVvNGovcGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDgzYjBjLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9uZW80ai9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbmVvNGovcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD4KLSAgICA8Ym9keT4KLSAgICAgICAgPGgyPk5lbzRqIExpYnJhcnkuPC9oMj4KLSAgICA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL25lbzRqL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9uZW80ai9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhIGIvbGlicmFyaWVzL25lbzRqL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9uZW80ai9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTdkYjFmLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9uZW80ai9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbmVvNGovRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIFBhdWwgTWVybGluLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKgotICovCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkubmVvNGo7Ci0KLWltcG9ydCBvcmcubmVvNGouZ3JhcGhkYi5HcmFwaERhdGFiYXNlU2VydmljZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmxlcjsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwotCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRhdGlvblN1cHBvcnQKLSAgICAgICAgaW1wbGVtZW50cyBBc3NlbWJsZXIKLXsKLQotICAgIC8vIFNUQVJUIFNOSVBQRVQ6IGFzc2VtYmx5Ci0gICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCi0gICAgICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggRW1iZWRkZWREYXRhYmFzZVNlcnZpY2UuY2xhc3MgKTsKLSAgICB9Ci0gICAgLy8gRU5EIFNOSVBQRVQ6IGFzc2VtYmx5Ci0KLSAgICAvLyBTVEFSVCBTTklQUEVUOiBuZW80agotICAgIEBTZXJ2aWNlIEVtYmVkZGVkRGF0YWJhc2VTZXJ2aWNlIG5lbzRqU2VydmljZTsKLQotICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nKCkKLSAgICB7Ci0gICAgICAgIEdyYXBoRGF0YWJhc2VTZXJ2aWNlIGRiID0gbmVvNGpTZXJ2aWNlLmRhdGFiYXNlKCk7Ci0gICAgICAgIC8vIEVORCBTTklQUEVUOiBuZW80agotICAgICAgICAvLyBTVEFSVCBTTklQUEVUOiBuZW80agotICAgIH0KLSAgICAvLyBFTkQgU05JUFBFVDogbmVvNGoKLQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL25lbzRqL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9uZW80ai9FbWJlZGRlZERhdGFiYXNlU2VydmljZVRlc3QuamF2YSBiL2xpYnJhcmllcy9uZW80ai9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvbmVvNGovRW1iZWRkZWREYXRhYmFzZVNlcnZpY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNjhjZGIuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL25lbzRqL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9uZW80ai9FbWJlZGRlZERhdGFiYXNlU2VydmljZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIFJpY2thcmQgw5ZiZXJnLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKgotICovCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkubmVvNGo7Ci0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcubmVvNGouZ3JhcGhkYi5HcmFwaERhdGFiYXNlU2VydmljZTsKLWltcG9ydCBvcmcubmVvNGouZ3JhcGhkYi5Ob2RlOwotaW1wb3J0IG9yZy5uZW80ai5ncmFwaGRiLlJlbGF0aW9uc2hpcFR5cGU7Ci1pbXBvcnQgb3JnLm5lbzRqLmdyYXBoZGIuVHJhbnNhY3Rpb247Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmZpbGVjb25maWcuRmlsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlOwotaW1wb3J0IG9yZy5xaTRqLnRlc3QuQWJzdHJhY3RRaTRqVGVzdDsKLQotLyoqCi0gKiBUT0RPCi0gKi8KLXB1YmxpYyBjbGFzcyBFbWJlZGRlZERhdGFiYXNlU2VydmljZVRlc3QKLSAgICBleHRlbmRzIEFic3RyYWN0UWk0alRlc3QKLXsKLSAgICBlbnVtIFRlc3RSZWxhdGlvbnNoaXBzIGltcGxlbWVudHMgUmVsYXRpb25zaGlwVHlwZQotICAgIHsKLSAgICAgICAgS05PV1MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKLSAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCi0gICAgewotICAgICAgICBtb2R1bGUuc2VydmljZXMoIEZpbGVDb25maWd1cmF0aW9uU2VydmljZS5jbGFzcyApOwotICAgICAgICBtb2R1bGUuc2VydmljZXMoIEVtYmVkZGVkRGF0YWJhc2VTZXJ2aWNlLmNsYXNzICk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RGF0YWJhc2UoKQotICAgIHsKLSAgICAgICAgR3JhcGhEYXRhYmFzZVNlcnZpY2UgZGF0YWJhc2UgPSBtb2R1bGUuZmluZFNlcnZpY2UoIEVtYmVkZGVkRGF0YWJhc2VTZXJ2aWNlLmNsYXNzICkuZ2V0KCkuZGF0YWJhc2UoKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBUcmFuc2FjdGlvbiB0eCA9IGRhdGFiYXNlLmJlZ2luVHgoKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTm9kZSByaWNrYXJkID0gZGF0YWJhc2UuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgICAgIHJpY2thcmQuc2V0UHJvcGVydHkoICJuYW1lIiwgIlJpY2thcmQiICk7Ci0KLSAgICAgICAgICAgICAgICBOb2RlIG5pY2xhcyA9IGRhdGFiYXNlLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgICAgICBuaWNsYXMuc2V0UHJvcGVydHkoICJuYW1lIiwgIk5pY2xhcyIgKTsKLQotICAgICAgICAgICAgICAgIHJpY2thcmQuY3JlYXRlUmVsYXRpb25zaGlwVG8oIG5pY2xhcywgVGVzdFJlbGF0aW9uc2hpcHMuS05PV1MgKTsKLQotICAgICAgICAgICAgICAgIHR4LnN1Y2Nlc3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0eC5maW5pc2goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9vc2dpL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9vc2dpL2J1aWxkLmdyYWRsZQppbmRleCAzNDczYmI2Li44ODdmNDcwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvb3NnaS9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL29zZ2kvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogT1NHaSBMaWJyYXJ5IHByb3ZpZGVzIGludGVncmF0aW9uIG9mIE9TR2kgYW5kIFFpNGosIHNvIHRoYXQgc2VydmljZXMgaW4gZWFjaCBzeXN0ZW0gY2FuIGJlIHNoYXJlZC4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gT1NHaSBJbnRlZ3JhdGlvbiIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIE9TR2kgTGlicmFyeSBwcm92aWRlcyBpbnRlZ3JhdGlvbiBvZiBPU0dpIGFuZCBBcGFjaGUgWmVzdOKEoiwgc28gdGhhdCBzZXJ2aWNlcyBpbiBlYWNoIHN5c3RlbSBjYW4gYmUgc2hhcmVkLiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIExpYnJhcnkgLSBPU0dpIEludGVncmF0aW9uIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYXBpIikpCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvb3NnaS9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9vc2dpL2Rldi1zdGF0dXMueG1sCmluZGV4IDg5ZTdmYTEuLjUxNTI5MWEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9vc2dpL2Rldi1zdGF0dXMueG1sCisrKyBiL2xpYnJhcmllcy9vc2dpL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL29zZ2kvc3JjL2RvY3Mvb3NnaS50eHQgYi9saWJyYXJpZXMvb3NnaS9zcmMvZG9jcy9vc2dpLnR4dAppbmRleCBmMGViNTUyLi45NTdiYmZjIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvb3NnaS9zcmMvZG9jcy9vc2dpLnR4dAorKysgYi9saWJyYXJpZXMvb3NnaS9zcmMvZG9jcy9vc2dpLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LW9zZ2ksIE9TR2kgTGlicmFyeV1dCiA9IE9TR2kgPQogCkBAIC02LDEyICsyNSwxMiBAQAogc291cmNlPWxpYnJhcmllcy9vc2dpL2Rldi1zdGF0dXMueG1sCiAtLS0tLS0tLS0tLS0tLQogCi1PU0dpIExpYnJhcnkgYWxsb3dzIHlvdSB0byBpbXBvcnQgT1NHaSBzZXJ2aWNlcyBhcyBRaTRqIFNlcnZpY2VzIGFuZCB0byBleHBvcnQgUWk0aiBTZXJ2aWNlcyBhcyBPU0dpIFNlcnZpY2VzIGJvdGgKLWxldmVyYWdpbmcgdGhlIFFpNGogQXZhaWxhYmlsaXR5IGFuZCBPU0dpIEZhbGxiYWNrU3RyYXRlZ3kgbWVjaGFuaXNtcy4KK09TR2kgTGlicmFyeSBhbGxvd3MgeW91IHRvIGltcG9ydCBPU0dpIHNlcnZpY2VzIGFzIFplc3TihKIgU2VydmljZXMgYW5kIHRvIGV4cG9ydCBaZXN04oSiIFNlcnZpY2VzIGFzIE9TR2kgU2VydmljZXMgYm90aAorbGV2ZXJhZ2luZyB0aGUgWmVzdOKEoiBBdmFpbGFiaWxpdHkgYW5kIE9TR2kgRmFsbGJhY2tTdHJhdGVneSBtZWNoYW5pc21zLgogCiBpbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQogCi09PSBFeHBvcnQgUWk0aiBzZXJ2aWNlcyB0byBhbiBPU0dpIEJ1bmRsZSA9PQorPT0gRXhwb3J0IFplc3TihKIgc2VydmljZXMgdG8gYW4gT1NHaSBCdW5kbGUgPT0KIAogW3NuaXBwZXQsamF2YV0KIC0tLS0KQEAgLTIwLDcgKzM5LDcgQEAKIC0tLS0KIAogCi09PSBJbXBvcnQgT1NHaSBzZXJ2aWNlcyBpbiBhIFFpNGogTW9kdWxlID09Cis9PSBJbXBvcnQgT1NHaSBzZXJ2aWNlcyBpbiBhIFplc3TihKIgTW9kdWxlID09CiAKIFtzbmlwcGV0LGphdmFdCiAtLS0tCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9GYWxsYmFja1N0cmF0ZWd5LmphdmEgYi9saWJyYXJpZXMvb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9GYWxsYmFja1N0cmF0ZWd5LmphdmEKaW5kZXggYTcyNWRiMi4uN2NjZTY4OCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL29zZ2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvRmFsbGJhY2tTdHJhdGVneS5qYXZhCisrKyBiL2xpYnJhcmllcy9vc2dpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9vc2dpL0ZhbGxiYWNrU3RyYXRlZ3kuamF2YQpAQCAtMSw5ICsxLDIwIEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDEwIE1vcmdhbiBTdGFubGV5ICYgQ28uIEluY29ycG9yYXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqIFVucHVibGlzaGVkIGNvcHlyaWdodC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIG1hdGVyaWFsIGNvbnRhaW5zCi0gKiBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbiB0aGF0IHNoYWxsIGJlIHVzZWQgb3IgY29waWVkIG9ubHkgd2l0aGluCi0gKiBNb3JnYW4gU3RhbmxleSwgZXhjZXB0IHdpdGggd3JpdHRlbiBwZXJtaXNzaW9uIG9mIE1vcmdhbiBTdGFubGV5LgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkub3NnaTsKIApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL29zZ2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvT1NHaUVuYWJsZWRTZXJ2aWNlLmphdmEgYi9saWJyYXJpZXMvb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9PU0dpRW5hYmxlZFNlcnZpY2UuamF2YQppbmRleCA0YTRiNTY1Li5lZmU4ZTljIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9PU0dpRW5hYmxlZFNlcnZpY2UuamF2YQorKysgYi9saWJyYXJpZXMvb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9PU0dpRW5hYmxlZFNlcnZpY2UuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5Lm9zZ2k7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5UeXBlOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL29zZ2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvT1NHaUltcG9ydEluZm8uamF2YSBiL2xpYnJhcmllcy9vc2dpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9vc2dpL09TR2lJbXBvcnRJbmZvLmphdmEKaW5kZXggNmVjYTQ3YS4uOGYyODNiZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL29zZ2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvT1NHaUltcG9ydEluZm8uamF2YQorKysgYi9saWJyYXJpZXMvb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9PU0dpSW1wb3J0SW5mby5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkub3NnaTsKIAogaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL29zZ2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvT1NHaVNlcnZpY2VFeHBvcnRlci5qYXZhIGIvbGlicmFyaWVzL29zZ2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvT1NHaVNlcnZpY2VFeHBvcnRlci5qYXZhCmluZGV4IGQ4YzMzMGEuLjBmM2VlN2QgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9vc2dpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9vc2dpL09TR2lTZXJ2aWNlRXhwb3J0ZXIuamF2YQorKysgYi9saWJyYXJpZXMvb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9PU0dpU2VydmljZUV4cG9ydGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5vc2dpOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKQEAgLTE3LDcgKzM1LDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGouYXBpLnV0aWwuQ2xhc3Nlcy5pbnRlcmZhY2VzT2Y7CiAKIC8qKgotICogRXhwb3J0IFFpNGogc2VydmljZXMgdG8gYW4gT1NHaSBCdW5kbGUuCisgKiBFeHBvcnQgWmVzdCBzZXJ2aWNlcyB0byBhbiBPU0dpIEJ1bmRsZS4KICAqLwogQE1peGlucyggT1NHaVNlcnZpY2VFeHBvcnRlci5PU0dpU2VydmljZUV4cG9ydGVyTWl4aW4uY2xhc3MgKQogQEFjdGl2YXRvcnMoIE9TR2lTZXJ2aWNlRXhwb3J0ZXIuQWN0aXZhdG9yLmNsYXNzICkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9vc2dpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9vc2dpL09TR2lTZXJ2aWNlSW1wb3J0ZXIuamF2YSBiL2xpYnJhcmllcy9vc2dpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9vc2dpL09TR2lTZXJ2aWNlSW1wb3J0ZXIuamF2YQppbmRleCBlZjc1OWYwLi4zZjMwMmY2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9PU0dpU2VydmljZUltcG9ydGVyLmphdmEKKysrIGIvbGlicmFyaWVzL29zZ2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvT1NHaVNlcnZpY2VJbXBvcnRlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkub3NnaTsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwpAQCAtMTIsNyArMzAsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbjsKIAogLyoqCi0gKiBJbXBvcnQgT1NHaSBzZXJ2aWNlcyBpbiBhIFFpNGogTW9kdWxlLgorICogSW1wb3J0IE9TR2kgc2VydmljZXMgaW4gYSBaZXN0IE1vZHVsZS4KICAqLwogcHVibGljIGNsYXNzIE9TR2lTZXJ2aWNlSW1wb3J0ZXIKICAgICBpbXBsZW1lbnRzIFNlcnZpY2VJbXBvcnRlcgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL29zZ2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL29zZ2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvcGFja2FnZS5odG1sCmluZGV4IDQxNWVkNzUuLjdkOWI0N2IgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9vc2dpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9vc2dpL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPk9TR2kgTGlicmFyeS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL29zZ2kvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YSBiL2xpYnJhcmllcy9vc2dpL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9vc2dpL0RvY3VtZW50YXRpb25TdXBwb3J0LmphdmEKaW5kZXggNWNiNzYyNy4uOWVjY2FlZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL29zZ2kvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQorKysgYi9saWJyYXJpZXMvb3NnaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9Eb2N1bWVudGF0aW9uU3VwcG9ydC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkub3NnaTsKIAogaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL29zZ2kvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L29zZ2kvT1NHaVNlcnZpY2VUZXN0LmphdmEgYi9saWJyYXJpZXMvb3NnaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9PU0dpU2VydmljZVRlc3QuamF2YQppbmRleCBhOWEyNTg5Li5iY2M1YmE2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvb3NnaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9PU0dpU2VydmljZVRlc3QuamF2YQorKysgYi9saWJyYXJpZXMvb3NnaS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvb3NnaS9PU0dpU2VydmljZVRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5Lm9zZ2k7CiAKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZGYvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL3JkZi9idWlsZC5ncmFkbGUKaW5kZXggMTM1YTgzYi4uZGZmNTViNSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3JkZi9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL3JkZi9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBSREYgTGlicmFyeSBwcm92aWRlcyBjb21tb25hbGl0aWVzIG9mIHZhcmlvdXMgUkRGIGJhc2VkIHNlcnZpY2VzIGluIFFpNGosIHN1Y2ggYXMgUkRGIEluZGV4aW5nLiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBSREYiIH19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBSREYgTGlicmFyeSBwcm92aWRlcyBjb21tb25hbGl0aWVzIG9mIHZhcmlvdXMgUkRGIGJhc2VkIHNlcnZpY2VzIGluIEFwYWNoZSBaZXN04oSiLCBzdWNoIGFzIFJERiBJbmRleGluZy4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gUkRGIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuc3BpIikpCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmRmL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL3JkZi9kZXYtc3RhdHVzLnhtbAppbmRleCBkMzgxODMxLi5mODY2OWIxIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmRmL2Rldi1zdGF0dXMueG1sCisrKyBiL2xpYnJhcmllcy9yZGYvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmRmL3NyYy9kb2NzL3JkZi50eHQgYi9saWJyYXJpZXMvcmRmL3NyYy9kb2NzL3JkZi50eHQKaW5kZXggOGViYjU1Yi4uYjJiZjJjMyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3JkZi9zcmMvZG9jcy9yZGYudHh0CisrKyBiL2xpYnJhcmllcy9yZGYvc3JjL2RvY3MvcmRmLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LXJkZiwgUkRGIExpYnJhcnldXQogPSBSREYgPQogCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvUWk0akVudGl0eS5qYXZhIGIvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL1FpNGpFbnRpdHkuamF2YQppbmRleCBlMDIxYjU1Li5mNmQzNTdjIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvUWk0akVudGl0eS5qYXZhCisrKyBiL2xpYnJhcmllcy9yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9RaTRqRW50aXR5LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIAogCiAvKioKLSAqIFRoaXMgaXMgdGhlIFJERiB2b2NhYnVsYXJ5IGZvciBRaTRqIEVudGl0eSBkYXRhLgorICogVGhpcyBpcyB0aGUgUkRGIHZvY2FidWxhcnkgZm9yIFplc3QgRW50aXR5IGRhdGEuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUWk0akVudGl0eQogewpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL1FpNGpFbnRpdHlUeXBlLmphdmEgYi9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvUWk0akVudGl0eVR5cGUuamF2YQppbmRleCA5NmQxMzY3Li41YTE2ZTI1IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvUWk0akVudGl0eVR5cGUuamF2YQorKysgYi9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvUWk0akVudGl0eVR5cGUuamF2YQpAQCAtMTksNyArMTksNyBAQAogCiAKIC8qKgotICogVGhpcyBpcyB0aGUgUkRGIHZvY2FidWxhcnkgZm9yIFFpNGogRW50aXR5VHlwZSBkYXRhLgorICogVGhpcyBpcyB0aGUgUkRGIHZvY2FidWxhcnkgZm9yIFplc3QgRW50aXR5VHlwZSBkYXRhLgogICovCiBwdWJsaWMgaW50ZXJmYWNlIFFpNGpFbnRpdHlUeXBlCiB7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvUWk0alJkZi5qYXZhIGIvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL1FpNGpSZGYuamF2YQppbmRleCAyNmVjOGI0Li45OGZkMTIwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvUWk0alJkZi5qYXZhCisrKyBiL2xpYnJhcmllcy9yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9RaTRqUmRmLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIAogCiAvKioKLSAqIFRoaXMgaXMgdGhlIFJERiB2b2NhYnVsYXJ5IGZvciBRaTRqLgorICogVGhpcyBpcyB0aGUgUkRGIHZvY2FidWxhcnkgZm9yIFplc3QuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUWk0alJkZgogewpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL2VudGl0eS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvZW50aXR5L3BhY2thZ2UuaHRtbAppbmRleCA2ODY2YTY4Li5iNjM4ZDgyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvZW50aXR5L3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvZW50aXR5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+UkRGIEVudGl0eSBTZXJpYWxpemVyLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvbW9kZWwvTW9kZWwyWE1MLmphdmEgYi9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvbW9kZWwvTW9kZWwyWE1MLmphdmEKaW5kZXggNjE1YmM5MC4uYWU4MzIwNCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL21vZGVsL01vZGVsMlhNTC5qYXZhCisrKyBiL2xpYnJhcmllcy9yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9tb2RlbC9Nb2RlbDJYTUwuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnJkZi5tb2RlbDsKIAogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL21vZGVsL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9tb2RlbC9wYWNrYWdlLmh0bWwKaW5kZXggNjFkOWRhMC4uMGYxN2Y5NCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL21vZGVsL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvbW9kZWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SREYgQXBwbGljYXRpb24gTW9kZWwgU2VyaWFsaXplci48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9wYWNrYWdlLmh0bWwKaW5kZXggN2IyNTA3ZS4uOWIyMjY2OSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SREYgTGlicmFyeS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL3JlcG9zaXRvcnkvTmF0aXZlUmVwb3NpdG9yeVNlcnZpY2UuamF2YSBiL2xpYnJhcmllcy9yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9yZXBvc2l0b3J5L05hdGl2ZVJlcG9zaXRvcnlTZXJ2aWNlLmphdmEKaW5kZXggYzA5OGZiOC4uOTRlNjQ4NiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL3JlcG9zaXRvcnkvTmF0aXZlUmVwb3NpdG9yeVNlcnZpY2UuamF2YQorKysgYi9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9OYXRpdmVSZXBvc2l0b3J5U2VydmljZS5qYXZhCkBAIC0zMiwxODMgKzMyLDE5MCBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VSZWZlcmVuY2U7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5maWxlY29uZmlnLkZpbGVDb25maWd1cmF0aW9uOwogCi1ATWl4aW5zKHtOYXRpdmVSZXBvc2l0b3J5U2VydmljZS5OYXRpdmVSZXBvc2l0b3J5TWl4aW4uY2xhc3N9KQorQE1peGlucyggeyBOYXRpdmVSZXBvc2l0b3J5U2VydmljZS5OYXRpdmVSZXBvc2l0b3J5TWl4aW4uY2xhc3MgfSApCiBAQWN0aXZhdG9ycyggTmF0aXZlUmVwb3NpdG9yeVNlcnZpY2UuQWN0aXZhdG9yLmNsYXNzICkKIHB1YmxpYyBpbnRlcmZhY2UgTmF0aXZlUmVwb3NpdG9yeVNlcnZpY2UgZXh0ZW5kcyBSZXBvc2l0b3J5LCBTZXJ2aWNlQ29tcG9zaXRlLCBBdmFpbGFiaWxpdHkKIHsKICAgICBAT3ZlcnJpZGUKICAgICB2b2lkIGluaXRpYWxpemUoKQotICAgICAgICAgICAgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb247CisgICAgICAgIHRocm93cyBSZXBvc2l0b3J5RXhjZXB0aW9uOwogCiAgICAgQE92ZXJyaWRlCiAgICAgdm9pZCBzaHV0RG93bigpCi0gICAgICAgICAgICB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbjsKKyAgICAgICAgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb247CiAKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEFjdGl2YXRvcgotICAgICAgICAgICAgZXh0ZW5kcyBBY3RpdmF0b3JBZGFwdGVyPFNlcnZpY2VSZWZlcmVuY2U8TmF0aXZlUmVwb3NpdG9yeVNlcnZpY2U+PgorICAgICAgICBleHRlbmRzIEFjdGl2YXRvckFkYXB0ZXI8U2VydmljZVJlZmVyZW5jZTxOYXRpdmVSZXBvc2l0b3J5U2VydmljZT4+CiAgICAgewogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBhZnRlckFjdGl2YXRpb24oIFNlcnZpY2VSZWZlcmVuY2U8TmF0aXZlUmVwb3NpdG9yeVNlcnZpY2U+IGFjdGl2YXRlZCApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgICAgICB7CiAgICAgICAgICAgICBhY3RpdmF0ZWQuZ2V0KCkuaW5pdGlhbGl6ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIGJlZm9yZVBhc3NpdmF0aW9uKCBTZXJ2aWNlUmVmZXJlbmNlPE5hdGl2ZVJlcG9zaXRvcnlTZXJ2aWNlPiBwYXNzaXZhdGluZyApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgICAgICB7CiAgICAgICAgICAgICBwYXNzaXZhdGluZy5nZXQoKS5zaHV0RG93bigpOwogICAgICAgICB9Ci0KICAgICB9CiAKLQogICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgTmF0aXZlUmVwb3NpdG9yeU1peGluCi0gICAgICAgICAgIGltcGxlbWVudHMgTmF0aXZlUmVwb3NpdG9yeVNlcnZpY2UsIFJlc2V0YWJsZVJlcG9zaXRvcnkKLSAgIHsKLSAgICAgIEBPcHRpb25hbAotICAgICAgQFNlcnZpY2UKLSAgICAgIEZpbGVDb25maWd1cmF0aW9uIGZpbGVDb25maWd1cmF0aW9uOworICAgICAgICBpbXBsZW1lbnRzIE5hdGl2ZVJlcG9zaXRvcnlTZXJ2aWNlLCBSZXNldGFibGVSZXBvc2l0b3J5CisgICAgeworICAgICAgICBAT3B0aW9uYWwKKyAgICAgICAgQFNlcnZpY2UKKyAgICAgICAgRmlsZUNvbmZpZ3VyYXRpb24gZmlsZUNvbmZpZ3VyYXRpb247CiAKLSAgICAgIEBUaGlzCi0gICAgICBwcml2YXRlIENvbmZpZ3VyYXRpb248TmF0aXZlQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbjsKKyAgICAgICAgQFRoaXMKKyAgICAgICAgcHJpdmF0ZSBDb25maWd1cmF0aW9uPE5hdGl2ZUNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb247CiAKLSAgICAgIHByaXZhdGUgU2FpbFJlcG9zaXRvcnkgcmVwbzsKLSAgICAgIHByaXZhdGUgYm9vbGVhbiBpc05vdEluaXRpYWxpemVkOworICAgICAgICBwcml2YXRlIFNhaWxSZXBvc2l0b3J5IHJlcG87CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc05vdEluaXRpYWxpemVkOwogCi0gICAgICBwdWJsaWMgTmF0aXZlUmVwb3NpdG9yeU1peGluKCkKLSAgICAgIHsKLSAgICAgICAgIGlzTm90SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAgcmVwbyA9IG5ldyBTYWlsUmVwb3NpdG9yeShuZXcgTmF0aXZlU3RvcmUoKSk7Ci0gICAgICB9CisgICAgICAgIHB1YmxpYyBOYXRpdmVSZXBvc2l0b3J5TWl4aW4oKQorICAgICAgICB7CisgICAgICAgICAgICBpc05vdEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlcG8gPSBuZXcgU2FpbFJlcG9zaXRvcnkoIG5ldyBOYXRpdmVTdG9yZSgpICk7CisgICAgICAgIH0KIAotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBzZXREYXRhRGlyKEZpbGUgZGF0YURpcikKLSAgICAgIHsKLSAgICAgICAgIHJlcG8uc2V0RGF0YURpcihkYXRhRGlyKTsKLSAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldERhdGFEaXIoIEZpbGUgZGF0YURpciApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcG8uc2V0RGF0YURpciggZGF0YURpciApOworICAgICAgICB9CiAKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIEZpbGUgZ2V0RGF0YURpcigpCi0gICAgICB7Ci0gICAgICAgICByZXR1cm4gcmVwby5nZXREYXRhRGlyKCk7Ci0gICAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgRmlsZSBnZXREYXRhRGlyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJlcG8uZ2V0RGF0YURpcigpOworICAgICAgICB9CiAKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpCi0gICAgICAgICAgICAgIHRocm93cyBSZXBvc2l0b3J5RXhjZXB0aW9uCi0gICAgICB7Ci0gICAgICAgICBTdHJpbmcgZGF0YURpciA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkuZGF0YURpcmVjdG9yeSgpLmdldCgpOwotICAgICAgICAgaWYgKGRhdGFEaXIgPT0gbnVsbCB8fCAiIi5lcXVhbHMoZGF0YURpcikpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZmlsZUNvbmZpZ3VyYXRpb24gIT0gbnVsbCkKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKQorICAgICAgICAgICAgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb24KKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGRhdGFEaXIgPSBjb25maWd1cmF0aW9uLmdldCgpLmRhdGFEaXJlY3RvcnkoKS5nZXQoKTsKKyAgICAgICAgICAgIEZpbGUgZGF0YURpcmVjdG9yeTsKKyAgICAgICAgICAgIGlmKCBkYXRhRGlyID09IG51bGwgfHwgIiIuZXF1YWxzKCBkYXRhRGlyICkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgZGF0YURpciA9IG5ldyBGaWxlKGZpbGVDb25maWd1cmF0aW9uLmRhdGFEaXJlY3RvcnkoKSwgY29uZmlndXJhdGlvbi5nZXQoKS5pZGVudGl0eSgpLmdldCgpKS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgU3RyaW5nIGlkID0gY29uZmlndXJhdGlvbi5nZXQoKS5pZGVudGl0eSgpLmdldCgpOwotICAgICAgICAgICAgICAgaWYgKGlkID09IG51bGwgfHwgIiIuZXF1YWxzKGlkKSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGRhdGFEaXIgPSAiLi9yZGYvcmVwb3NpdG9yaWVzL3FpNGoiOwotICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBkYXRhRGlyID0gIi4vcmRmL3JlcG9zaXRvcmllcy8iICsgaWQ7Ci0gICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VJZGVudGl0eSA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkuaWRlbnRpdHkoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiggZmlsZUNvbmZpZ3VyYXRpb24gIT0gbnVsbCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkYXRhRGlyID0gbmV3IEZpbGUoIGZpbGVDb25maWd1cmF0aW9uLmRhdGFEaXJlY3RvcnkoKSwgc2VydmljZUlkZW50aXR5ICkuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCBzZXJ2aWNlSWRlbnRpdHkgPT0gbnVsbCB8fCAiIi5lcXVhbHMoIHNlcnZpY2VJZGVudGl0eSApICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YURpciA9ICIuL3JkZi9yZXBvc2l0b3JpZXMvcWk0aiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhRGlyID0gIi4vcmRmL3JlcG9zaXRvcmllcy8iICsgc2VydmljZUlkZW50aXR5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkuZGF0YURpcmVjdG9yeSgpLnNldCggZGF0YURpciApOworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uc2F2ZSgpOworICAgICAgICAgICAgICAgIGRhdGFEaXJlY3RvcnkgPSBuZXcgRmlsZSggZGF0YURpciApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uZmlndXJhdGlvbi5nZXQoKS5kYXRhRGlyZWN0b3J5KCkuc2V0KGRhdGFEaXIpOwotICAgICAgICAgICAgY29uZmlndXJhdGlvbi5zYXZlKCk7Ci0gICAgICAgICB9Ci0gICAgICAgICBpbml0aWFsaXplUmVwb3NpdG9yeShuZXcgRmlsZShkYXRhRGlyKSk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpCi0gICAgICB7Ci0gICAgICAgICByZXR1cm4gIWlzTm90SW5pdGlhbGl6ZWQ7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2h1dERvd24oKQotICAgICAgICAgICAgICB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbgotICAgICAgewotICAgICAgICAgIHJlcG8uc2h1dERvd24oKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBpc1dyaXRhYmxlKCkKLSAgICAgICAgICAgICAgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb24KLSAgICAgIHsKLSAgICAgICAgIHJldHVybiByZXBvLmlzV3JpdGFibGUoKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgUmVwb3NpdG9yeUNvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpCi0gICAgICAgICAgICAgIHRocm93cyBSZXBvc2l0b3J5RXhjZXB0aW9uCi0gICAgICB7Ci0gICAgICAgICBpZiAoaXNOb3RJbml0aWFsaXplZCkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgfQotICAgICAgICAgcmV0dXJuIHJlcG8uZ2V0Q29ubmVjdGlvbigpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBWYWx1ZUZhY3RvcnkgZ2V0VmFsdWVGYWN0b3J5KCkKLSAgICAgIHsKLSAgICAgICAgIHJldHVybiByZXBvLmdldFZhbHVlRmFjdG9yeSgpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIGRpc2NhcmRFbnRpcmVSZXBvc2l0b3J5KCkKLSAgICAgICAgICAgICAgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb24KLSAgICAgIHsKLSAgICAgICAgIEZpbGUgZGF0YURpciA9IHJlcG8uZ2V0RGF0YURpcigpOwotICAgICAgICAgcmVwby5zaHV0RG93bigpOwotICAgICAgICAgZGVsZXRlKGRhdGFEaXIpOwotICAgICAgICAgaW5pdGlhbGl6ZVJlcG9zaXRvcnkoZGF0YURpcik7Ci0gICAgICB9Ci0KLSAgICAgIHByaXZhdGUgdm9pZCBkZWxldGUoRmlsZSBkYXRhRGlyKQotICAgICAgewotICAgICAgICAgRmlsZVtdIGNoaWxkcmVuID0gZGF0YURpci5saXN0RmlsZXMoKTsKLSAgICAgICAgIGZvciAoRmlsZSBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNoaWxkLmlzRGlyZWN0b3J5KCkpCisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBkZWxldGUoY2hpbGQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBSZXN1bHRPZk1ldGhvZENhbGxJZ25vcmVkCi0gICAgICAgICAgICAgICBjaGlsZC5kZWxldGUoKTsKKyAgICAgICAgICAgICAgICBkYXRhRGlyZWN0b3J5ID0gbmV3IEZpbGUoIGRhdGFEaXIgKS5nZXRBYnNvbHV0ZUZpbGUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgIH0KKyAgICAgICAgICAgIGluaXRpYWxpemVSZXBvc2l0b3J5KCBkYXRhRGlyZWN0b3J5ICk7CisgICAgICAgIH0KIAotICAgICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVSZXBvc2l0b3J5KEZpbGUgZGF0YURpcikKLSAgICAgICAgICAgICAgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb24KLSAgICAgIHsKLSAgICAgICAgIFN0cmluZyB0cmlwbGVJbmRleGVzID0gY29uZmlndXJhdGlvbi5nZXQoKS50cmlwbGVJbmRleGVzKCkuZ2V0KCk7Ci0gICAgICAgICBpZiAodHJpcGxlSW5kZXhlcyA9PSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICAgdHJpcGxlSW5kZXhlcyA9ICIiOwotICAgICAgICAgICAgY29uZmlndXJhdGlvbi5nZXQoKS50cmlwbGVJbmRleGVzKCkuc2V0KHRyaXBsZUluZGV4ZXMpOwotICAgICAgICAgfQotICAgICAgICAgYm9vbGVhbiBmb3JjZVN5bmMgPSBjb25maWd1cmF0aW9uLmdldCgpLmZvcmNlU3luYygpLmdldCgpOworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhaXNOb3RJbml0aWFsaXplZDsKKyAgICAgICAgfQogCi0gICAgICAgICBOYXRpdmVTdG9yZSBzdG9yZSA9IChOYXRpdmVTdG9yZSkgcmVwby5nZXRTYWlsKCk7Ci0gICAgICAgICBzdG9yZS5zZXREYXRhRGlyKGRhdGFEaXIpOwotICAgICAgICAgc3RvcmUuc2V0VHJpcGxlSW5kZXhlcyh0cmlwbGVJbmRleGVzKTsKLSAgICAgICAgIHN0b3JlLnNldEZvcmNlU3luYyhmb3JjZVN5bmMpOwotICAgICAgICAgcmVwby5pbml0aWFsaXplKCk7Ci0gICAgICAgICBpc05vdEluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzaHV0RG93bigpCisgICAgICAgICAgICB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbgorICAgICAgICB7CisgICAgICAgICAgICByZXBvLnNodXREb3duKCk7CisgICAgICAgIH0KIAotICAgICAgIEBPdmVycmlkZQotICAgICAgIHB1YmxpYyBib29sZWFuIGlzQXZhaWxhYmxlKCkKLSAgICAgICB7Ci0gICAgICAgICAgIHJldHVybiAhaXNOb3RJbml0aWFsaXplZDsKLSAgICAgICB9Ci0gICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1dyaXRhYmxlKCkKKyAgICAgICAgICAgIHRocm93cyBSZXBvc2l0b3J5RXhjZXB0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZXBvLmlzV3JpdGFibGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgUmVwb3NpdG9yeUNvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpCisgICAgICAgICAgICB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpZiggaXNOb3RJbml0aWFsaXplZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVwby5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFZhbHVlRmFjdG9yeSBnZXRWYWx1ZUZhY3RvcnkoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVwby5nZXRWYWx1ZUZhY3RvcnkoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBkaXNjYXJkRW50aXJlUmVwb3NpdG9yeSgpCisgICAgICAgICAgICB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBGaWxlIGRhdGFEaXIgPSByZXBvLmdldERhdGFEaXIoKTsKKyAgICAgICAgICAgIHJlcG8uc2h1dERvd24oKTsKKyAgICAgICAgICAgIGRlbGV0ZSggZGF0YURpciApOworICAgICAgICAgICAgaW5pdGlhbGl6ZVJlcG9zaXRvcnkoIGRhdGFEaXIgKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBkZWxldGUoIEZpbGUgZGF0YURpciApCisgICAgICAgIHsKKyAgICAgICAgICAgIEZpbGVbXSBjaGlsZHJlbiA9IGRhdGFEaXIubGlzdEZpbGVzKCk7CisgICAgICAgICAgICBmb3IoIEZpbGUgY2hpbGQgOiBjaGlsZHJlbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIGNoaWxkLmlzRGlyZWN0b3J5KCkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlKCBjaGlsZCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBSZXN1bHRPZk1ldGhvZENhbGxJZ25vcmVkCisgICAgICAgICAgICAgICAgICAgIGNoaWxkLmRlbGV0ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBpbml0aWFsaXplUmVwb3NpdG9yeSggRmlsZSBkYXRhRGlyICkKKyAgICAgICAgICAgIHRocm93cyBSZXBvc2l0b3J5RXhjZXB0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyB0cmlwbGVJbmRleGVzID0gY29uZmlndXJhdGlvbi5nZXQoKS50cmlwbGVJbmRleGVzKCkuZ2V0KCk7CisgICAgICAgICAgICBpZiggdHJpcGxlSW5kZXhlcyA9PSBudWxsICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cmlwbGVJbmRleGVzID0gIiI7CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5nZXQoKS50cmlwbGVJbmRleGVzKCkuc2V0KCB0cmlwbGVJbmRleGVzICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sZWFuIGZvcmNlU3luYyA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkuZm9yY2VTeW5jKCkuZ2V0KCk7CisKKyAgICAgICAgICAgIE5hdGl2ZVN0b3JlIHN0b3JlID0gKE5hdGl2ZVN0b3JlKSByZXBvLmdldFNhaWwoKTsKKyAgICAgICAgICAgIHN0b3JlLnNldERhdGFEaXIoIGRhdGFEaXIgKTsKKyAgICAgICAgICAgIHN0b3JlLnNldFRyaXBsZUluZGV4ZXMoIHRyaXBsZUluZGV4ZXMgKTsKKyAgICAgICAgICAgIHN0b3JlLnNldEZvcmNlU3luYyggZm9yY2VTeW5jICk7CisgICAgICAgICAgICByZXBvLmluaXRpYWxpemUoKTsKKyAgICAgICAgICAgIGlzTm90SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0F2YWlsYWJsZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhaXNOb3RJbml0aWFsaXplZDsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9yZXBvc2l0b3J5L3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9yZXBvc2l0b3J5L3BhY2thZ2UuaHRtbAppbmRleCAxMTMyY2RjLi4xMjlkOWE3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL3JlcG9zaXRvcnkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SREYgUmVwb3NpdG9yaWVzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvc2VyaWFsaXplci9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvcmRmL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvc2VyaWFsaXplci9wYWNrYWdlLmh0bWwKaW5kZXggNmIyNWEzYy4uZDFmYmY0MiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3JkZi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL3NlcmlhbGl6ZXIvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9yZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9zZXJpYWxpemVyL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+UkRGIFNlcmlhbGl6ZXIuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9Nb2RlbDJYTUxUZXN0LmphdmEgYi9saWJyYXJpZXMvcmRmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvTW9kZWwyWE1MVGVzdC5qYXZhCmluZGV4IGMxYTJmM2IuLmJkZmY1YWMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9Nb2RlbDJYTUxUZXN0LmphdmEKKysrIGIvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL01vZGVsMlhNTFRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnJkZjsKIAogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL2VudGl0eS9FbnRpdHlTZXJpYWxpemVyVGVzdC5qYXZhIGIvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL2VudGl0eS9FbnRpdHlTZXJpYWxpemVyVGVzdC5qYXZhCmluZGV4IGQ0MTQ2NmQuLmE4OWY1MTggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9lbnRpdHkvRW50aXR5U2VyaWFsaXplclRlc3QuamF2YQorKysgYi9saWJyYXJpZXMvcmRmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvZW50aXR5L0VudGl0eVNlcmlhbGl6ZXJUZXN0LmphdmEKQEAgLTI1LDE2ICsyNSwxNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVXNlczsKIGltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2U7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVzZWNhc2UuVXNlY2FzZUJ1aWxkZXI7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQnVpbGRlcjsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwotaW1wb3J0IG9yZy5xaTRqLmVudGl0eXN0b3JlLm1lbW9yeS5NZW1vcnlFbnRpdHlTdG9yZVNlcnZpY2U7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5yZGYuRGNSZGY7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5yZGYuUmRmczsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnJkZi5zZXJpYWxpemVyLlJkZlhtbFNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eS5FbnRpdHlTdGF0ZTsKIGltcG9ydCBvcmcucWk0ai5zcGkuZW50aXR5c3RvcmUuRW50aXR5U3RvcmU7CitpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlVW5pdE9mV29yazsKIGltcG9ydCBvcmcucWk0ai50ZXN0LkFic3RyYWN0UWk0alRlc3Q7CiBpbXBvcnQgb3JnLnFpNGoudGVzdC5FbnRpdHlUZXN0QXNzZW1ibGVyOwogaW1wb3J0IG9yZy5xaTRqLnZhbHVlc2VyaWFsaXphdGlvbi5vcmdqc29uLk9yZ0pzb25WYWx1ZVNlcmlhbGl6YXRpb25Bc3NlbWJsZXI7CkBAIC00NSwxMCArNDYsMTMgQEAKIHB1YmxpYyBjbGFzcyBFbnRpdHlTZXJpYWxpemVyVGVzdAogICAgIGV4dGVuZHMgQWJzdHJhY3RRaTRqVGVzdAogewotICAgIEBTZXJ2aWNlIEVudGl0eVN0b3JlIGVudGl0eVN0b3JlOwotICAgIEBVc2VzIEVudGl0eVN0YXRlU2VyaWFsaXplciBzZXJpYWxpemVyOworICAgIEBTZXJ2aWNlCisgICAgRW50aXR5U3RvcmUgZW50aXR5U3RvcmU7CisgICAgQFVzZXMKKyAgICBFbnRpdHlTdGF0ZVNlcmlhbGl6ZXIgc2VyaWFsaXplcjsKIAotICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKSB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KKyAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKKyAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCiAgICAgewogICAgICAgICBuZXcgRW50aXR5VGVzdEFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKICAgICAgICAgbmV3IE9yZ0pzb25WYWx1ZVNlcmlhbGl6YXRpb25Bc3NlbWJsZXIoKS5hc3NlbWJsZSggbW9kdWxlICk7CkBAIC01OCw4ICs2MiwxMCBAQAogICAgICAgICBtb2R1bGUub2JqZWN0cyggRW50aXR5U3RhdGVTZXJpYWxpemVyLmNsYXNzLCBFbnRpdHlTZXJpYWxpemVyVGVzdC5jbGFzcyApOwogICAgIH0KIAotICAgIEBPdmVycmlkZSBAQmVmb3JlCi0gICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgQE92ZXJyaWRlCisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgc3VwZXIuc2V0VXAoKTsKIApAQCAtNjksMjEgKzc1LDI1IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RW50aXR5U2VyaWFsaXplcigpIHRocm93cyBSREZIYW5kbGVyRXhjZXB0aW9uCisgICAgcHVibGljIHZvaWQgdGVzdEVudGl0eVNlcmlhbGl6ZXIoKQorICAgICAgICB0aHJvd3MgUkRGSGFuZGxlckV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgRW50aXR5UmVmZXJlbmNlIGVudGl0eVJlZmVyZW5jZSA9IG5ldyBFbnRpdHlSZWZlcmVuY2UoICJ0ZXN0MiIgKTsKLSAgICAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSBlbnRpdHlTdG9yZS5uZXdVbml0T2ZXb3JrKCBVc2VjYXNlQnVpbGRlci5uZXdVc2VjYXNlKCAiVGVzdCIgKSwgbW9kdWxlLCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSApLmVudGl0eVN0YXRlT2YoIGVudGl0eVJlZmVyZW5jZSApOworICAgICAgICBVc2VjYXNlIHVzZWNhc2UgPSBVc2VjYXNlQnVpbGRlci5uZXdVc2VjYXNlKCAiVGVzdCIgKTsKKyAgICAgICAgbG9uZyBjdXJyZW50VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBFbnRpdHlTdG9yZVVuaXRPZldvcmsgdW5pdE9mV29yayA9IGVudGl0eVN0b3JlLm5ld1VuaXRPZldvcmsoIHVzZWNhc2UsIG1vZHVsZSwgY3VycmVudFRpbWUgKTsKKyAgICAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSB1bml0T2ZXb3JrLmVudGl0eVN0YXRlT2YoIG1vZHVsZSwgZW50aXR5UmVmZXJlbmNlICk7CiAKICAgICAgICAgSXRlcmFibGU8U3RhdGVtZW50PiBncmFwaCA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKCBlbnRpdHlTdGF0ZSApOwogCiAgICAgICAgIFN0cmluZ1tdIHByZWZpeGVzID0gbmV3IFN0cmluZ1tdeyAicmRmIiwgImRjIiwgIiB2YyIgfTsKICAgICAgICAgU3RyaW5nW10gbmFtZXNwYWNlcyA9IG5ldyBTdHJpbmdbXXsgUmRmcy5SREYsIERjUmRmLk5BTUVTUEFDRSwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvdmNhcmQtcmRmLzMuMCMiIH07CiAKLQogICAgICAgICBuZXcgUmRmWG1sU2VyaWFsaXplcigpLnNlcmlhbGl6ZSggZ3JhcGgsIG5ldyBQcmludFdyaXRlciggU3lzdGVtLm91dCApLCBwcmVmaXhlcywgbmFtZXNwYWNlcyApOwogICAgIH0KIAotICAgIHZvaWQgY3JlYXRlRHVtbXlEYXRhKCkgdGhyb3dzIFVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uCisgICAgdm9pZCBjcmVhdGVEdW1teURhdGEoKQorICAgICAgICB0aHJvd3MgVW5pdE9mV29ya0NvbXBsZXRpb25FeGNlcHRpb24KICAgICB7CiAgICAgICAgIFVuaXRPZldvcmsgdW5pdE9mV29yayA9IG1vZHVsZS5uZXdVbml0T2ZXb3JrKCk7CiAgICAgICAgIHRyeQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL2VudGl0eS90ZXN0LnhtbCBiL2xpYnJhcmllcy9yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9lbnRpdHkvdGVzdC54bWwKaW5kZXggYzI1ZTAxNS4uYjJkZTMzZiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL2VudGl0eS90ZXN0LnhtbAorKysgYi9saWJyYXJpZXMvcmRmL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9yZGYvZW50aXR5L3Rlc3QueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8cmRmOlJERgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZGYvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9lbnRpdHkvdGVzdDIueG1sIGIvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL2VudGl0eS90ZXN0Mi54bWwKaW5kZXggMTFhNzM4Zi4uOTFmZjUzYiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL2VudGl0eS90ZXN0Mi54bWwKKysrIGIvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmRmL2VudGl0eS90ZXN0Mi54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxyZGY6UkRGCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9OYXRpdmVSZXBvc2l0b3J5U2VydmljZS5wcm9wZXJ0aWVzIGIvbGlicmFyaWVzL3JkZi9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9OYXRpdmVSZXBvc2l0b3J5U2VydmljZS5wcm9wZXJ0aWVzCmluZGV4IGI0MzRhY2YuLjVjNDJkZWYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZGYvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmRmL3JlcG9zaXRvcnkvTmF0aXZlUmVwb3NpdG9yeVNlcnZpY2UucHJvcGVydGllcworKysgYi9saWJyYXJpZXMvcmRmL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3JkZi9yZXBvc2l0b3J5L05hdGl2ZVJlcG9zaXRvcnlTZXJ2aWNlLnByb3BlcnRpZXMKQEAgLTEgKzEsMTYgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIHRyaXBsZUluZGV4ZXM9c3BvYwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3QtY2xpZW50L2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9idWlsZC5ncmFkbGUKaW5kZXggYWI5ZmExMi4uMDRiMWNlOSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3QtY2xpZW50L2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvcmVzdC1jbGllbnQvYnVpbGQuZ3JhZGxlCkBAIC0xLDEyICsxLDMyIEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIFJFU1QgQ2xpZW50IExpYnJhcnkgcHJvdmlkZXMgYSBjbGllbnQgbGlicmFyeSBmb3IgdGhlIFFpNGogUkVTVCBTZXJ2ZXIgbGlicmFyeSIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBSRVNUIENsaWVudCIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIFJFU1QgQ2xpZW50IExpYnJhcnkgcHJvdmlkZXMgYSBjbGllbnQgbGlicmFyeSBmb3IgdGhlIEFwYWNoZSBaZXN04oSiIFJFU1QgU2VydmVyIGxpYnJhcnkiCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gUkVTVCBDbGllbnQiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAKICAgICBjb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmFwaSIgKQogICAgIGNvbXBpbGUgcHJvamVjdCggIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5yZXN0LWNvbW1vbiIgKQogICAgIGNvbXBpbGUgbGlicmFyaWVzLnJlc3RsZXQKKyAgICBjb21waWxlIGxpYnJhcmllcy5zbGY0al9hcGkKIAogICAgIHRlc3RDb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IiApCiAgICAgdGVzdENvbXBpbGUgcHJvamVjdCggIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5yZXN0LXNlcnZlciIgKQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3QtY2xpZW50L2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL3Jlc3QtY2xpZW50L2Rldi1zdGF0dXMueG1sCmluZGV4IGYwZWU2ZTkuLmEyOTQ0ODEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvcmVzdC1jbGllbnQvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL2RvY3MvcHJpbWVyLnR4dCBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvZG9jcy9wcmltZXIudHh0CmluZGV4IDI1NDhmNjYuLjYyMjQ1YmQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvZG9jcy9wcmltZXIudHh0CisrKyBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvZG9jcy9wcmltZXIudHh0CkBAIC0xLDcgKzEsMjYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2xpYnJhcnktcmVzdC1jbGllbnQtcHJpbWVyLCBIQVRFT0FTIFByaW1lcl1dCiA9IFJlU1QgLSBIQVRFT0FTIFByaW1lcgogCi1UaGUgUWk0aiBSZVNUIENsaWVudCBpbXBsZW1lbnRzIEhBVEVPQVMgKEh5cGVybWVkaWEgQXMgVGhlIEVuZ2luZSBPZiBBcHBsaWNhdGlvbiBTdGF0ZSkgdG8gdGhlIGZ1bGwgZXh0ZW50IGludGVuZGVkCitUaGUgWmVzdOKEoiBSZVNUIENsaWVudCBpbXBsZW1lbnRzIEhBVEVPQVMgKEh5cGVybWVkaWEgQXMgVGhlIEVuZ2luZSBPZiBBcHBsaWNhdGlvbiBTdGF0ZSkgdG8gdGhlIGZ1bGwgZXh0ZW50IGludGVuZGVkCiBieSBSb3kgRmllbGRpbmcuIFRoZSBSZVNUIENsaWVudCBMaWJyYXJ5IGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIEhBVEVPQVMgYXBwbGljYXRpb25zIHRoYXQgYXJlIE5PVCB1c2luZyB0aGUgVVJMIHNwYWNlLAogYW5kIGl0IGlzIE5PVCBhYm91dCBkb2luZyBSUEMgY2FsbHMgb3ZlciBIVFRQIHVzaW5nIGEgY29tbW9uIGV4Y2hhbmdlIGZvcm1hdCAobGlrZSBKU09OKS4KIApAQCAtNjAsNyArNzksNyBAQAogSXQgYmVjb21lcyBwb3NzaWJsZSB0byBibGVuZCBnZW5lcmFsIGFwcGxpY2F0aW9uIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyB3aXRoIHVzZSBjYXNlIHNwZWNpZmljIGhhbmRsZXJzLgogCiBUaGF0J3MgYmFzaWNhbGx5IGl0LiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0byBnbyB3aXRoIHN1cHBvcnQgZm9yIFJFU1QsIGFzIGEgd2F5IHRvIHRydWx5IGxldmVyYWdlIHRoZSBSRVNUIGlkZWFzIGFuZAotbWFrZSBpdCB2ZXJ5IGVhc3kgdG8gZG8gUkVTVCBhcHBsaWNhdGlvbnMgKmFuZCogY2xpZW50cyBiYXNlZCBvbiBRaTRqLCBieSBrZWVwaW5nIHRoZSBhcHBsaWNhdGlvbiBsb2dpYyBvbiB0aGUgc2VydmVyLgorbWFrZSBpdCB2ZXJ5IGVhc3kgdG8gZG8gUkVTVCBhcHBsaWNhdGlvbnMgKmFuZCogY2xpZW50cyBiYXNlZCBvbiBaZXN0LCBieSBrZWVwaW5nIHRoZSBhcHBsaWNhdGlvbiBsb2dpYyBvbiB0aGUgc2VydmVyLgogSW4gdGhlIGxvbmcgcnVuIHRoZXJlIHdvdWxkIGFsc28gYmUgYSBKYXZhU2NyaXB0IHZlcnNpb24gb2YgdGhlIGNsaWVudCwgd2l0aCB0aGUgc2FtZSBjaGFyYWN0ZXJpc3RpY3MsIHNvIHRoYXQgeW91IGNhbgotZWFzaWx5IGJ1aWxkIGEgalF1ZXJ5IFVJIGZvciBRaTRqIFJFU1QgYXBwcy4KK2Vhc2lseSBidWlsZCBhIGpRdWVyeSBVSSBmb3IgWmVzdOKEoiBSRVNUIGFwcHMuCiAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvZG9jcy9yZXN0LWNsaWVudC50eHQgYi9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL2RvY3MvcmVzdC1jbGllbnQudHh0CmluZGV4IDA5MTRhZWYuLmRhZmQ2ZGIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvZG9jcy9yZXN0LWNsaWVudC50eHQKKysrIGIvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy9kb2NzL3Jlc3QtY2xpZW50LnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LXJlc3QtY2xpZW50LCBSZVNUIENsaWVudCBMaWJyYXJ5XV0KID0gUmVTVCBDbGllbnQgPQogCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L2FwaS9FcnJvckhhbmRsZXIuamF2YSBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvYXBpL0Vycm9ySGFuZGxlci5qYXZhCmluZGV4IGU3ZmZiNzMuLjBhZmJiZjQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvYXBpL0Vycm9ySGFuZGxlci5qYXZhCisrKyBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvYXBpL0Vycm9ySGFuZGxlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkucmVzdC5jbGllbnQuYXBpOwogCiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L2FwaS9IYW5kbGVyQ29tbWFuZC5qYXZhIGIvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9hcGkvSGFuZGxlckNvbW1hbmQuamF2YQppbmRleCAwZWNlNTJkLi5hZWQ0OGJiIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L2FwaS9IYW5kbGVyQ29tbWFuZC5qYXZhCisrKyBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvYXBpL0hhbmRsZXJDb21tYW5kLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5yZXN0LmNsaWVudC5hcGk7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5QYXJhbWV0ZXJpemVkVHlwZTsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvYXBpL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvYXBpL3BhY2thZ2UuaHRtbAppbmRleCA2YjhmNjU3Li5jN2NlZmY2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L2FwaS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9hcGkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SZVNUIENsaWVudCBBUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9wYWNrYWdlLmh0bWwKaW5kZXggNjE4ZjAyMi4uMGU1YTkzYSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJlU1QgQ2xpZW50IExpYnJhcnkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvcmVxdWVzdHdyaXRlci9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L3JlcXVlc3R3cml0ZXIvcGFja2FnZS5odG1sCmluZGV4IDJhNDkxZWYuLjc0Yjc0ODQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvcmVxdWVzdHdyaXRlci9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9yZXF1ZXN0d3JpdGVyL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+UmVTVCBDbGllbnQgUmVxdWVzdCBXcml0ZXJzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L3Jlc3BvbnNlcmVhZGVyL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvcmVzcG9uc2VyZWFkZXIvcGFja2FnZS5odG1sCmluZGV4IGI3NDIxZDEuLjRlNDE3ODkgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvcmVzcG9uc2VyZWFkZXIvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvcmVzcG9uc2VyZWFkZXIvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SZVNUIENsaWVudCBSZXNwb25zZSBSZWFkZXJzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L3NwaS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L3NwaS9wYWNrYWdlLmh0bWwKaW5kZXggNzliNzdlNS4uNDUyNWQ1ZiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9zcGkvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvc3BpL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+UmVTVCBDbGllbnQgU1BJLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvcmVzdC1jbGllbnQucHJvcGVydGllcyBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9yZXN0LWNsaWVudC5wcm9wZXJ0aWVzCmluZGV4IDYxY2M2OWUuLjRhMGFjMWQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9yZXN0LWNsaWVudC5wcm9wZXJ0aWVzCisrKyBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9yZXN0LWNsaWVudC5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKICNDbGllbnQKIHJlcXVlc3R3cml0ZXJzPW9yZy5xaTRqLmxpYnJhcnkucmVzdC5jbGllbnQucmVxdWVzdHdyaXRlci5Gb3JtUmVxdWVzdFdyaXRlcixcCiAgIG9yZy5xaTRqLmxpYnJhcnkucmVzdC5jbGllbnQucmVxdWVzdHdyaXRlci5WYWx1ZUNvbXBvc2l0ZVJlcXVlc3RXcml0ZXJcCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L0NvbnRleHRSZXNvdXJjZUNsaWVudEZhY3RvcnlUZXN0LmphdmEgYi9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L0NvbnRleHRSZXNvdXJjZUNsaWVudEZhY3RvcnlUZXN0LmphdmEKaW5kZXggZmQ5ZjI3NC4uNzE3NWI5ZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9Db250ZXh0UmVzb3VyY2VDbGllbnRGYWN0b3J5VGVzdC5qYXZhCisrKyBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvQ29udGV4dFJlc291cmNlQ2xpZW50RmFjdG9yeVRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnJlc3QuY2xpZW50OwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9Db250aW51b3VzSW50ZWdyYXRpb25UZXN0LmphdmEgYi9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L0NvbnRpbnVvdXNJbnRlZ3JhdGlvblRlc3QuamF2YQppbmRleCA0MzJiMjFkLi42Yjc1ZmU3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L0NvbnRpbnVvdXNJbnRlZ3JhdGlvblRlc3QuamF2YQorKysgYi9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L0NvbnRpbnVvdXNJbnRlZ3JhdGlvblRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnJlc3QuY2xpZW50OwogCiBpbXBvcnQgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVyczsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvUnNzUmVhZGVyVGVzdC5qYXZhIGIvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9Sc3NSZWFkZXJUZXN0LmphdmEKaW5kZXggZWE3MDM3Ni4uOTYxZWY1YiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9Sc3NSZWFkZXJUZXN0LmphdmEKKysrIGIvbGlicmFyaWVzL3Jlc3QtY2xpZW50L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NsaWVudC9Sc3NSZWFkZXJUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5yZXN0LmNsaWVudDsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC0zNiw3ICs1NCw3IEBACiAKIC8qKgogICogUmVhZHMgUWk0aiBHaXRodWIgY29tbWl0cyBvbiBkZXZlbG9wIEFUT00gZmVlZCBhbmQgcHJpbnRzIG91dCBhbGwgdGl0bGUgYW5kIGRldGFpbCB1cmwgZm9yIGVhY2ggZW50cnkuCi0gKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgUlNTIGNsaWVudCBmb3Igc29tZXRoaW5nIG1vcmUgZ2VuZXJpYyB0aGF0IHdhcyBub3QgcHJvZHVjZWQgYnkgUWk0aiBSRVNUIHNlcnZlcgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgdGhlIFJTUyBjbGllbnQgZm9yIHNvbWV0aGluZyBtb3JlIGdlbmVyaWMgdGhhdCB3YXMgbm90IHByb2R1Y2VkIGJ5IFplc3QgUkVTVCBzZXJ2ZXIKICAqIGxpYnJhcnkuCiAgKi8KIHB1YmxpYyBjbGFzcyBSc3NSZWFkZXJUZXN0CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1jbGllbnQvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY2xpZW50L2RvY3N1cHBvcnQvUmVzdFByaW1lckRvY3MuamF2YSBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvZG9jc3VwcG9ydC9SZXN0UHJpbWVyRG9jcy5qYXZhCmluZGV4IDI2OTE3ZGQuLmRlYTcyYWMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvZG9jc3VwcG9ydC9SZXN0UHJpbWVyRG9jcy5qYXZhCisrKyBiL2xpYnJhcmllcy9yZXN0LWNsaWVudC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jbGllbnQvZG9jc3VwcG9ydC9SZXN0UHJpbWVyRG9jcy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkucmVzdC5jbGllbnQuZG9jc3VwcG9ydDsKIAogaW1wb3J0IG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnM7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1jb21tb24vYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL3Jlc3QtY29tbW9uL2J1aWxkLmdyYWRsZQppbmRleCAxMDczMmI5Li5jZmU3NDEwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1jb21tb24vYnVpbGQuZ3JhZGxlCisrKyBiL2xpYnJhcmllcy9yZXN0LWNvbW1vbi9idWlsZC5ncmFkbGUKQEAgLTEsMjAgKzEsMjkgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogUkVTVCBMaWJyYXJ5IHByb3ZpZGVzIHZhcmlvdXMgUmVzdGxldCByZXNvdXJjZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBleHBvc2UgUWk0aiBlbnRpdGllcyBhbmQgaW5kZXhlcy4gTW9zdGx5IGZvciBkZWJ1Z2dpbmcuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFJFU1QiIH19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBSRVNUIExpYnJhcnkgcHJvdmlkZXMgdmFyaW91cyBSZXN0bGV0IHJlc291cmNlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGV4cG9zZSBBcGFjaGUgWmVzdOKEoiBlbnRpdGllcyBhbmQgaW5kZXhlcy4gTW9zdGx5IGZvciBkZWJ1Z2dpbmcuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIFJFU1QiIH19CiAKIGRlcGVuZGVuY2llcyB7Ci0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LnJkZiIpKQotLy8gICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkucmVzdC1jb21tb24iKSkKLSAgY29tcGlsZShwcm9qZWN0KCc6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24uaW5kZXhpbmctcmRmJykpCi0gIGNvbXBpbGUobGlicmFyaWVzLnJlc3RsZXQpCi0gIGNvbXBpbGUobGlicmFyaWVzLnZlbG9jaXR5KQotICBjb21waWxlKGxpYnJhcmllcy5zZXJ2bGV0X2FwaSkKLS8vICBjb21waWxlKCdvcmcub3BlbnJkZi5zZXNhbWU6c2VzYW1lLXF1ZXJ5cmVzdWx0aW8tc3BhcnFseG1sOicgKyByZGZWZXJzaW9uKQotLy8gIGNvbXBpbGUoJ29yZy5vcGVucmRmLnNlc2FtZTpzZXNhbWUtcXVlcnlyZXN1bHRpby1zcGFycWxqc29uOicgKyByZGZWZXJzaW9uKQotCi0gIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiKSkKLSAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5Lmh0dHAiKSkKLQotICB0ZXN0UnVudGltZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiKSkKLSAgdGVzdFJ1bnRpbWUobGlicmFyaWVzLmxvZ2JhY2spCisgIGNvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwJyApCisgIGNvbXBpbGUgbGlicmFyaWVzLnJlc3RsZXQKKyAgY29tcGlsZSBsaWJyYXJpZXMudmVsb2NpdHkKKyAgY29tcGlsZSBsaWJyYXJpZXMuc2VydmxldF9hcGkKIH0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LWNvbW1vbi9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9yZXN0LWNvbW1vbi9kZXYtc3RhdHVzLnhtbAppbmRleCA5YWYxMGMwLi4zN2Y5MDIwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1jb21tb24vZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL3Jlc3QtY29tbW9uL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3QtY29tbW9uL3NyYy9kb2NzL3Jlc3QtY29tbW9uLnR4dCBiL2xpYnJhcmllcy9yZXN0LWNvbW1vbi9zcmMvZG9jcy9yZXN0LWNvbW1vbi50eHQKaW5kZXggYWFlN2M0Yy4uZWUxYzQ0NSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3QtY29tbW9uL3NyYy9kb2NzL3Jlc3QtY29tbW9uLnR4dAorKysgYi9saWJyYXJpZXMvcmVzdC1jb21tb24vc3JjL2RvY3MvcmVzdC1jb21tb24udHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2xpYnJhcnktcmVzdC1jb21tb24sIFJlU1QgQ29tbW9uIExpYnJhcnldXQogPSBSZVNUIENvbW1vbiA9CiAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LWNvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jb21tb24vbGluay9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvcmVzdC1jb21tb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvY29tbW9uL2xpbmsvcGFja2FnZS5odG1sCmluZGV4IGZiZTk1NDYuLjdmYzNjZGEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LWNvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jb21tb24vbGluay9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3QtY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NvbW1vbi9saW5rL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+UmVTVCBMaW5rIFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LWNvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jb21tb24vcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3Jlc3QtY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NvbW1vbi9wYWNrYWdlLmh0bWwKaW5kZXggNzlmNjU4Ny4uNGQ0ZTA0MiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3QtY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NvbW1vbi9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3QtY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NvbW1vbi9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJlU1QgQ29tbW9uIExpYnJhcnkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LWNvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9jb21tb24vdGFibGUvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3Jlc3QtY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NvbW1vbi90YWJsZS9wYWNrYWdlLmh0bWwKaW5kZXggYTA0MzhkNi4uMzMxYWFiMCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3QtY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NvbW1vbi90YWJsZS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3QtY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2NvbW1vbi90YWJsZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJlU1QgVGFibGUgU3VwcG9ydC48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9idWlsZC5ncmFkbGUKaW5kZXggNGE4ZTA5My4uYjlkMTRjYiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvYnVpbGQuZ3JhZGxlCkBAIC0xLDExICsxLDMxIEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIFJFU1QgU2VydmVyIExpYnJhcnkgcHJvdmlkZXMgYSBzZXJ2ZXIgY29tcG9uZW50IGZvciBidWlsZGluZyBSRVNUIEFQSSdzIGJhc2VkIG9uIHVzZWNhc2VzIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFJFU1Qgc2VydmVyIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgUkVTVCBTZXJ2ZXIgTGlicmFyeSBwcm92aWRlcyBhIHNlcnZlciBjb21wb25lbnQgZm9yIGJ1aWxkaW5nIFJFU1QgQVBJJ3MgYmFzZWQgb24gdXNlY2FzZXMiCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gUkVTVCBzZXJ2ZXIiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5hcGkiKSkKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkucmVzdC1jb21tb24iKSkKICAgY29tcGlsZShsaWJyYXJpZXMuc2VydmxldF9hcGkpCisgIGNvbXBpbGUgbGlicmFyaWVzLnNsZjRqX2FwaQogICBjb21waWxlKGxpYnJhcmllcy52ZWxvY2l0eSkKICAgY29tcGlsZShsaWJyYXJpZXMucmVzdGxldCkKICAgY29tcGlsZShsaWJyYXJpZXMuZnJlZW1hcmtlcikKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9kZXYtc3RhdHVzLnhtbAppbmRleCA5YWYxMGMwLi4zN2Y5MDIwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9kb2NzL3Jlc3Qtc2VydmVyLnR4dCBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvZG9jcy9yZXN0LXNlcnZlci50eHQKaW5kZXggNTRmYmNiYS4uNGE3ZmM3MiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9kb2NzL3Jlc3Qtc2VydmVyLnR4dAorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL2RvY3MvcmVzdC1zZXJ2ZXIudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2xpYnJhcnktcmVzdC1zZXJ2ZXIsIFJlU1QgU2VydmVyIExpYnJhcnldXQogPSBSZVNUIFNlcnZlciA9CiAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvYXBpL0NvbnRleHRSZXNvdXJjZS5qYXZhIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvQ29udGV4dFJlc291cmNlLmphdmEKaW5kZXggMDU0YjhhYi4uYjcxOTFkMiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvQ29udGV4dFJlc291cmNlLmphdmEKKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvQ29udGV4dFJlc291cmNlLmphdmEKQEAgLTQ0OSwxNCArNDQ5LDE3IEBACiAKICAgICAvKioKICAgICAgKiBUcmFuc2Zvcm0gYSBKYXZhIG5hbWUgdG8gYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgYnkgcmVwbGFjaW5nIHVwcGVyY2FzZSBjaGFyYWN0ZXJzCi0gICAgICogd2l0aCBzcGFjZSt0b0xvd2VyQ2FzZShjaGFyKQorICAgICAqIHdpdGggc3BhY2UrdG9Mb3dlckNhc2UoY2hhcikuCisgICAgICogPHA+CiAgICAgICogRXhhbXBsZToKKyAgICAgKiA8cHJlPjxjb2RlPgogICAgICAqIGNoYW5nZURlc2NyaXB0aW9uIC0+IENoYW5nZSBkZXNjcmlwdGlvbgogICAgICAqIGRvU3R1ZmZOb3cgLT4gRG8gc3R1ZmYgbm93CisgICAgICogPC9jb2RlPjwvcHJlPgogICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBKYXZhIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4KKyAgICAgKiBAcmV0dXJuIEh1bWFuIHJlYWRhYmxlIG5hbWUKICAgICAgKi8KICAgICBwcml2YXRlIFN0cmluZyBodW1hblJlYWRhYmxlKCBTdHJpbmcgbmFtZSApCiAgICAgewpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvSW50ZXJhY3Rpb25Db25zdHJhaW50c0NvbmNlcm4uamF2YSBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvYXBpL0ludGVyYWN0aW9uQ29uc3RyYWludHNDb25jZXJuLmphdmEKaW5kZXggOGEzYjU4Ny4uNzUwN2RiMCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvSW50ZXJhY3Rpb25Db25zdHJhaW50c0NvbmNlcm4uamF2YQorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL2FwaS9JbnRlcmFjdGlvbkNvbnN0cmFpbnRzQ29uY2Vybi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkucmVzdC5zZXJ2ZXIuYXBpOwogCiBpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvYXBpL2NvbnN0cmFpbnQvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvY29uc3RyYWludC9wYWNrYWdlLmh0bWwKaW5kZXggMjEzNDZiMC4uZDg5NGFkYyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvY29uc3RyYWludC9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvY29uc3RyYWludC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJlU1QgU2VydmVyIENvbnN0cmFpbnRzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL2FwaS9kY2kvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvZGNpL3BhY2thZ2UuaHRtbAppbmRleCA1NWE4N2Q3Li4yMmI2ZTVkIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL2FwaS9kY2kvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvYXBpL2RjaS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJlU1QgU2VydmVyIERDSSBBUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvYXBpL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvYXBpL3BhY2thZ2UuaHRtbAppbmRleCA3ZThkYWM4Li5kOTAxODc0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL2FwaS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hcGkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SZVNUIFNlcnZlciBBUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvYXNzZW1ibGVyL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvYXNzZW1ibGVyL3BhY2thZ2UuaHRtbAppbmRleCBmNmJjZjU2Li5jNjZmM2FiIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL2Fzc2VtYmxlci9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9hc3NlbWJsZXIvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SZVNUIFNlcnZlciBBc3NlbWJseS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L0NvbnN0cmFpbnRWaW9sYXRpb25NZXNzYWdlcy5qYXZhIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L0NvbnN0cmFpbnRWaW9sYXRpb25NZXNzYWdlcy5qYXZhCmluZGV4IDlmMmVjNzYuLmQwMTZjMzUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9Db25zdHJhaW50VmlvbGF0aW9uTWVzc2FnZXMuamF2YQorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvQ29uc3RyYWludFZpb2xhdGlvbk1lc3NhZ2VzLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5yZXN0bGV0OwogCiBpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9mcmVlbWFya2VyL1ZhbHVlQ29tcG9zaXRlT2JqZWN0V3JhcHBlci5qYXZhIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L2ZyZWVtYXJrZXIvVmFsdWVDb21wb3NpdGVPYmplY3RXcmFwcGVyLmphdmEKaW5kZXggMDY0MzkzNC4uMGJlNzM4ZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L2ZyZWVtYXJrZXIvVmFsdWVDb21wb3NpdGVPYmplY3RXcmFwcGVyLmphdmEKKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L2ZyZWVtYXJrZXIvVmFsdWVDb21wb3NpdGVPYmplY3RXcmFwcGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5yZXN0bGV0LmZyZWVtYXJrZXI7CiAKIGltcG9ydCBmcmVlbWFya2VyLnRlbXBsYXRlLkRlZmF1bHRPYmplY3RXcmFwcGVyOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L2ZyZWVtYXJrZXIvVmFsdWVDb21wb3NpdGVUZW1wbGF0ZU1vZGVsLmphdmEgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvZnJlZW1hcmtlci9WYWx1ZUNvbXBvc2l0ZVRlbXBsYXRlTW9kZWwuamF2YQppbmRleCBiM2Y4MGFiLi5lNjUyNGMyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvZnJlZW1hcmtlci9WYWx1ZUNvbXBvc2l0ZVRlbXBsYXRlTW9kZWwuamF2YQorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvZnJlZW1hcmtlci9WYWx1ZUNvbXBvc2l0ZVRlbXBsYXRlTW9kZWwuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnJlc3Quc2VydmVyLnJlc3RsZXQuZnJlZW1hcmtlcjsKIAogaW1wb3J0IGZyZWVtYXJrZXIudGVtcGxhdGUuT2JqZWN0V3JhcHBlcjsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9mcmVlbWFya2VyL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9mcmVlbWFya2VyL3BhY2thZ2UuaHRtbAppbmRleCBhNGJiYjc2Li5iMDE4OTkyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvZnJlZW1hcmtlci9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L2ZyZWVtYXJrZXIvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SZXN0bGV0IFJlU1QgU2VydmVyIEZyZWVNYXJrZXIgVGVtcGxhdGluZy48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9wYWNrYWdlLmh0bWwKaW5kZXggNjZkNDdlOS4uMzg1NjkzMyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SZXN0bGV0IFJlU1QgU2VydmVyLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcmVxdWVzdHJlYWRlci9EZWZhdWx0UmVxdWVzdFJlYWRlci5qYXZhIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3JlcXVlc3RyZWFkZXIvRGVmYXVsdFJlcXVlc3RSZWFkZXIuamF2YQppbmRleCAwZGMwYmFkLi40OWQ2MjdiIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcmVxdWVzdHJlYWRlci9EZWZhdWx0UmVxdWVzdFJlYWRlci5qYXZhCisrKyBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9yZXF1ZXN0cmVhZGVyL0RlZmF1bHRSZXF1ZXN0UmVhZGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5yZXN0bGV0LnJlcXVlc3RyZWFkZXI7CiAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3JlcXVlc3RyZWFkZXIvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3JlcXVlc3RyZWFkZXIvcGFja2FnZS5odG1sCmluZGV4IDNiMjQ5MWIuLjBiOTJlMjkgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9yZXF1ZXN0cmVhZGVyL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcmVxdWVzdHJlYWRlci9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJlc3RsZXQgUmVTVCBTZXJ2ZXIgUmVxdWVzdCBSZWFkZXJzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcmVzcG9uc2V3cml0ZXIvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3Jlc3BvbnNld3JpdGVyL3BhY2thZ2UuaHRtbAppbmRleCAyYmJkMjQ4Li4zNjliMzI5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcmVzcG9uc2V3cml0ZXIvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9yZXNwb25zZXdyaXRlci9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlJlc3RsZXQgUmVTVCBTZXJ2ZXIgUmVzcG9uc2UgV3JpdGVycy48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9zcGkvQ29tbWFuZFJlc3VsdC5qYXZhIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9zcGkvQ29tbWFuZFJlc3VsdC5qYXZhCmluZGV4IDcyMTA3ZTEuLjU2NDU1NjYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvc3BpL0NvbW1hbmRSZXN1bHQuamF2YQorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3NwaS9Db21tYW5kUmVzdWx0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5zcGk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9zcGkvUmVxdWVzdFJlYWRlci5qYXZhIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9zcGkvUmVxdWVzdFJlYWRlci5qYXZhCmluZGV4IDlhMzA5NmQuLmQ3NTIyMzggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvc3BpL1JlcXVlc3RSZWFkZXIuamF2YQorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3NwaS9SZXF1ZXN0UmVhZGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5zcGk7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3NwaS9SZXNwb25zZVdyaXRlci5qYXZhIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9zcGkvUmVzcG9uc2VXcml0ZXIuamF2YQppbmRleCA2NDYzMzVmLi4wMWVmZWU3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3NwaS9SZXNwb25zZVdyaXRlci5qYXZhCisrKyBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvc3BpL1Jlc3BvbnNlV3JpdGVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5zcGk7CiAKIGltcG9ydCBvcmcucmVzdGxldC5SZXNwb25zZTsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvc3BpL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvc3BpL3BhY2thZ2UuaHRtbAppbmRleCA2NjVmYTUzLi42MWY4Nzc2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3NwaS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9zcGkvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SZVNUIFNlcnZlciBTUEkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0LXNlcnZlci5wcm9wZXJ0aWVzIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3Qtc2VydmVyLnByb3BlcnRpZXMKaW5kZXggNjYzMWM1Zi4uOGJjNjUxYyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3Qtc2VydmVyLnByb3BlcnRpZXMKKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3Qtc2VydmVyLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogI1NlcnZlcgogcmVzcG9uc2V3cml0ZXJzPW9yZy5xaTRqLmxpYnJhcnkucmVzdC5zZXJ2ZXIucmVzdGxldC5yZXNwb25zZXdyaXRlci5SZXNvdXJjZVRlbXBsYXRlUmVzcG9uc2VXcml0ZXIsXAogICAgIG9yZy5xaTRqLmxpYnJhcnkucmVzdC5zZXJ2ZXIucmVzdGxldC5yZXNwb25zZXdyaXRlci5EZWZhdWx0UmVzcG9uc2VXcml0ZXIsXApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcmVzcG9uc2V3cml0ZXIvc2VsZWN0cmVzb3VyY2UuaHRtIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcmVzcG9uc2V3cml0ZXIvc2VsZWN0cmVzb3VyY2UuaHRtCmluZGV4IGQ3NjgyODIuLmIzNThhMzAgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3Jlc3BvbnNld3JpdGVyL3NlbGVjdHJlc291cmNlLmh0bQorKysgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9yZXNwb25zZXdyaXRlci9zZWxlY3RyZXNvdXJjZS5odG0KQEAgLTEsMjIgKzEsMyBAQAotPCEtLQotCi0KLSAgICBDb3B5cmlnaHQgMjAwOS0yMDExIFJpY2thcmQgw5ZiZXJnCi0KLSAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS0tPgotCiA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8aGVhZD4KICAgICA8dGl0bGU+JHtuYW1lfTwvdGl0bGU+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9yZXNwb25zZXdyaXRlci90YWJsZS5odG0gYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9yZXNwb25zZXdyaXRlci90YWJsZS5odG0KaW5kZXggYWYyMzJiZC4uM2M1ODk5ZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcmVzcG9uc2V3cml0ZXIvdGFibGUuaHRtCisrKyBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3Jlc3BvbnNld3JpdGVyL3RhYmxlLmh0bQpAQCAtMSwyMiArMSwzIEBACi08IS0tCi0KLQotICAgIENvcHlyaWdodCAyMDA5LTIwMTEgUmlja2FyZCDDlmJlcmcKLQotICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLS0+Ci0KIDxodG1sPgogPGJvZHk+CiAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3Jlc3BvbnNld3JpdGVyL3ZhbHVlLmh0bSBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZXN0L3NlcnZlci9yZXN0bGV0L3Jlc3BvbnNld3JpdGVyL3ZhbHVlLmh0bQppbmRleCAyNmI3NDQ5Li40YmRjMzgwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9zZXJ2ZXIvcmVzdGxldC9yZXNwb25zZXdyaXRlci92YWx1ZS5odG0KKysrIGIvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3Jlc3Qvc2VydmVyL3Jlc3RsZXQvcmVzcG9uc2V3cml0ZXIvdmFsdWUuaHRtCkBAIC0xLDIwICsxLDMgQEAKLTwhLS0KLSAgICBDb3B5cmlnaHQgMjAwOS0yMDExIFJpY2thcmQgw5ZiZXJnCi0KLSAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS0tPgotCiA8aHRtbD4KIDxib2R5PgogCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL3ZlbG9jaXR5LnByb3BlcnRpZXMgYi9saWJyYXJpZXMvcmVzdC1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL3ZlbG9jaXR5LnByb3BlcnRpZXMKaW5kZXggYzQzOWQzNS4uZmI0ZWYxMCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy92ZWxvY2l0eS5wcm9wZXJ0aWVzCisrKyBiL2xpYnJhcmllcy9yZXN0LXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvdmVsb2NpdHkucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgUiBVIE4gVCBJIE0gRSAgTCBPIEcKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3QvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL3Jlc3QvYnVpbGQuZ3JhZGxlCmluZGV4IDZjNTQyMmIuLjJjOWZmMDIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9yZXN0L2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvcmVzdC9idWlsZC5ncmFkbGUKQEAgLTEsMTEgKzEsMjggQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogUkVTVCBMaWJyYXJ5IHByb3ZpZGVzIHZhcmlvdXMgUmVzdGxldCByZXNvdXJjZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBleHBvc2UgUWk0aiBlbnRpdGllcyBhbmQgaW5kZXhlcy4gTW9zdGx5IGZvciBkZWJ1Z2dpbmcuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFJFU1QiIH19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBSRVNUIExpYnJhcnkgcHJvdmlkZXMgdmFyaW91cyBSZXN0bGV0IHJlc291cmNlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGV4cG9zZSBBcGFjaGUgWmVzdOKEoiBlbnRpdGllcyBhbmQgaW5kZXhlcy4gTW9zdGx5IGZvciBkZWJ1Z2dpbmcuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIFJFU1QiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAKLSAgICBjb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmFwaSIgKQotICAgIGNvbXBpbGUgcHJvamVjdCggIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5yZGYiICkKICAgICBjb21waWxlIHByb2plY3QoICc6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24uaW5kZXhpbmctcmRmJyApCiAgICAgY29tcGlsZSBsaWJyYXJpZXMucmVzdGxldAogICAgIGNvbXBpbGUgbGlicmFyaWVzLnNwYXJxbApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3QvZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvcmVzdC9kZXYtc3RhdHVzLnhtbAppbmRleCA5YWYxMGMwLi4zN2Y5MDIwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvcmVzdC9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0L3NyYy9kb2NzL3Jlc3QudHh0IGIvbGlicmFyaWVzL3Jlc3Qvc3JjL2RvY3MvcmVzdC50eHQKaW5kZXggZTY5ZGUyOS4uZmM3YWFjNiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qvc3JjL2RvY3MvcmVzdC50eHQKKysrIGIvbGlicmFyaWVzL3Jlc3Qvc3JjL2RvY3MvcmVzdC50eHQKQEAgLTAsMCArMSwxOCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9hZG1pbi9FbnRpdHlSZXNvdXJjZS5qYXZhIGIvbGlicmFyaWVzL3Jlc3Qvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvYWRtaW4vRW50aXR5UmVzb3VyY2UuamF2YQppbmRleCAzNDc0OTcwLi4zMjhkMmMwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9hZG1pbi9FbnRpdHlSZXNvdXJjZS5qYXZhCisrKyBiL2xpYnJhcmllcy9yZXN0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2FkbWluL0VudGl0eVJlc291cmNlLmphdmEKQEAgLTM3LDcgKzM3LDYgQEAKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlVzZXM7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5RGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKIGltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2VCdWlsZGVyOwogaW1wb3J0IG9yZy5xaTRqLmFwaS52YWx1ZS5WYWx1ZVNlcmlhbGl6YXRpb247CkBAIC01Myw2ICs1Miw3IEBACiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLkVudGl0eVN0b3JlOwogaW1wb3J0IG9yZy5xaTRqLnNwaS5lbnRpdHlzdG9yZS5FbnRpdHlTdG9yZVVuaXRPZldvcms7CiBpbXBvcnQgb3JnLnFpNGouc3BpLmVudGl0eXN0b3JlLmhlbHBlcnMuSlNPTkVudGl0eVN0YXRlOworaW1wb3J0IG9yZy5xaTRqLnNwaS5tb2R1bGUuTW9kdWxlU3BpOwogaW1wb3J0IG9yZy5yZXN0bGV0LmRhdGEuQ2hhcmFjdGVyU2V0OwogaW1wb3J0IG9yZy5yZXN0bGV0LmRhdGEuRm9ybTsKIGltcG9ydCBvcmcucmVzdGxldC5kYXRhLkxhbmd1YWdlOwpAQCAtNzQsMTAgKzc0LDEzIEBACiAKICAgICBAU2VydmljZQogICAgIHByaXZhdGUgRW50aXR5U3RvcmUgZW50aXR5U3RvcmU7CisKICAgICBAU2VydmljZQogICAgIHByaXZhdGUgVmFsdWVTZXJpYWxpemF0aW9uIHZhbHVlU2VyaWFsaXphdGlvbjsKKwogICAgIEBTdHJ1Y3R1cmUKLSAgICBwcml2YXRlIE1vZHVsZSBtb2R1bGU7CisgICAgcHJpdmF0ZSBNb2R1bGVTcGkgbW9kdWxlOworCiAgICAgQFVzZXMKICAgICBwcml2YXRlIEVudGl0eVN0YXRlU2VyaWFsaXplciBlbnRpdHlTZXJpYWxpemVyOwogICAgIHByaXZhdGUgU3RyaW5nIGlkZW50aXR5OwpAQCAtMTExLDcgKzExNCw3IEBACiAgICAgICAgIHRyeQogICAgICAgICB7CiAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgaWRlbnRpdHlSZWYgPSBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICk7Ci0gICAgICAgICAgICB1b3cuZW50aXR5U3RhdGVPZiggaWRlbnRpdHlSZWYgKS5yZW1vdmUoKTsKKyAgICAgICAgICAgIHVvdy5lbnRpdHlTdGF0ZU9mKCBtb2R1bGUsIGlkZW50aXR5UmVmICkucmVtb3ZlKCk7CiAgICAgICAgICAgICB1b3cuYXBwbHlDaGFuZ2VzKCkuY29tbWl0KCk7CiAgICAgICAgICAgICBnZXRSZXNwb25zZSgpLnNldFN0YXR1cyggU3RhdHVzLlNVQ0NFU1NfTk9fQ09OVEVOVCApOwogICAgICAgICB9CkBAIC0xNzYsNyArMTc5LDcgQEAKICAgICAgICAgdHJ5CiAgICAgICAgIHsKICAgICAgICAgICAgIEVudGl0eVJlZmVyZW5jZSBlbnRpdHlSZWZlcmVuY2UgPSBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICk7Ci0gICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IHVuaXRPZldvcmsuZW50aXR5U3RhdGVPZiggZW50aXR5UmVmZXJlbmNlICk7CisgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IHVuaXRPZldvcmsuZW50aXR5U3RhdGVPZiggbW9kdWxlLCBlbnRpdHlSZWZlcmVuY2UgKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCggRW50aXR5Tm90Rm91bmRFeGNlcHRpb24gZSApCiAgICAgICAgIHsKQEAgLTMzOSw3ICszNDIsNiBAQAogICAgICAgICB9OwogICAgICAgICByZXByZXNlbnRhdGlvbi5zZXRDaGFyYWN0ZXJTZXQoIENoYXJhY3RlclNldC5VVEZfOCApOwogICAgICAgICByZXR1cm4gcmVwcmVzZW50YXRpb247Ci0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTQyNyw3ICs0MjksNyBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0T2ZXb3JrLmVudGl0eVN0YXRlT2YoIHJlZmVyZW5jZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRPZldvcmsuZW50aXR5U3RhdGVPZiggbW9kdWxlLCByZWZlcmVuY2UgKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnlBc3NvY2lhdGlvbi5yZW1vdmUoIHJlZmVyZW5jZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnlBc3NvY2lhdGlvbi5hZGQoIGluZGV4KyssIHJlZmVyZW5jZSApOwpAQCAtNDc5LDcgKzQ4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWZlcmVuY2UgcmVmZXJlbmNlID0gbmV3IEVudGl0eVJlZmVyZW5jZSggaWRlbnRpdHkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRPZldvcmsuZW50aXR5U3RhdGVPZiggcmVmZXJlbmNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdE9mV29yay5lbnRpdHlTdGF0ZU9mKCBtb2R1bGUsIHJlZmVyZW5jZSApOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRBc3NvY2lhdGlvbi5yZW1vdmUoIG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZEFzc29jaWF0aW9uLnB1dCggbmFtZSwgcmVmZXJlbmNlICk7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvcmVzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9hZG1pbi9RaTRqU2VydmVyU2VydmxldC5qYXZhIGIvbGlicmFyaWVzL3Jlc3Qvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvYWRtaW4vUWk0alNlcnZlclNlcnZsZXQuamF2YQppbmRleCA4ZjJkZDA2Li4yODY4MmZjIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9hZG1pbi9RaTRqU2VydmVyU2VydmxldC5qYXZhCisrKyBiL2xpYnJhcmllcy9yZXN0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2FkbWluL1FpNGpTZXJ2ZXJTZXJ2bGV0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBvcmcucmVzdGxldC5leHQuc2VydmxldC5TZXJ2ZXJTZXJ2bGV0OwogCiAvKioKLSAqIEludGVncmF0aW9uIHdpdGggUWk0ai4gUmVnaXN0ZXIgYW4gb2JqZWN0IGV4dGVuZGluZyBBcHBsaWNhdGlvbiB0byB1c2UuCisgKiBJbnRlZ3JhdGlvbiB3aXRoIFplc3QuIFJlZ2lzdGVyIGFuIG9iamVjdCBleHRlbmRpbmcgQXBwbGljYXRpb24gdG8gdXNlLgogICovCiBwdWJsaWMgY2xhc3MgUWk0alNlcnZlclNlcnZsZXQKICAgICBleHRlbmRzIFNlcnZlclNlcnZsZXQKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2FkbWluL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9yZXN0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2FkbWluL3BhY2thZ2UuaHRtbAppbmRleCA3ZTc0MmY0Li40NzI3ZmJhIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9hZG1pbi9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3Qvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvYWRtaW4vcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5SZVNUIEVudGl0eVN0b3JlLCBJbmRleCAmIFF1ZXJ5IExpYnJhcnkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9yZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvYWRtaW4vc3BhcnFsZm9ybS5odG1sIGIvbGlicmFyaWVzL3Jlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9hZG1pbi9zcGFycWxmb3JtLmh0bWwKaW5kZXggODFlNGJkMS4uODMzMzVmNiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9hZG1pbi9zcGFycWxmb3JtLmh0bWwKKysrIGIvbGlicmFyaWVzL3Jlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9hZG1pbi9zcGFycWxmb3JtLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWw+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aGVhZD4KICAgICA8dGl0bGU+CiAgICAgICAgIFNQQVJRTCBRdWVyeQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qvc3JjL21haW4vcmVzb3VyY2VzL3ZlbG9jaXR5LnByb3BlcnRpZXMgYi9saWJyYXJpZXMvcmVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvdmVsb2NpdHkucHJvcGVydGllcwppbmRleCBiNzcwNjRlLi43YzUyMmZkIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvcmVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvdmVsb2NpdHkucHJvcGVydGllcworKysgYi9saWJyYXJpZXMvcmVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvdmVsb2NpdHkucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgUiBVIE4gVCBJIE0gRSAgTCBPIEcKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Jlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvYWRtaW4vUmVzdFRlc3QuamF2YSBiL2xpYnJhcmllcy9yZXN0L3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9yZXN0L2FkbWluL1Jlc3RUZXN0LmphdmEKaW5kZXggY2MzZjdhOS4uOGU2YzU4NiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Jlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Jlc3QvYWRtaW4vUmVzdFRlc3QuamF2YQorKysgYi9saWJyYXJpZXMvcmVzdC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvcmVzdC9hZG1pbi9SZXN0VGVzdC5qYXZhCkBAIC0xODcsNyArMTg3LDcgQEAKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgZmluYWwgUmVzdFRlc3RlciByZXN0VGVzdGVyID0gbW9kdWxlLm5ld09iamVjdCggUmVzdFRlc3Rlci5jbGFzcyApOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0ID0gcmVzdFRlc3Rlci5nZXRFbnRpdGllcygpOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0ID0gcmVzdFRlc3Rlci5nZXRFbnRpdGllcygpLnJlcGxhY2UoICJcciIsICIiICk7CiAgICAgICAgIGFzc2VydFRoYXQoCiAgICAgICAgICAgICAiUmV0dXJuZWQgUkRGIiwgcmVzdWx0LAogICAgICAgICAgICAgYW55T2YoCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2NoZWR1bGVyL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9zY2hlZHVsZXIvYnVpbGQuZ3JhZGxlCmluZGV4IGVhYjIzMjIuLmJjNDI2Y2UgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zY2hlZHVsZXIvYnVpbGQuZ3JhZGxlCisrKyBiL2xpYnJhcmllcy9zY2hlZHVsZXIvYnVpbGQuZ3JhZGxlCkBAIC0xLDEyICsxLDMyIEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIFNjaGR1bGVyIExpYnJhcnkgZm9yIGxvbmcgdGVybSB0aW1pbmcgZnVuY3Rpb25hbGl0aWVzLiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBTY2hlZHVsZXIiIH19CitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBTY2hkdWxlciBMaWJyYXJ5IGZvciBsb25nIHRlcm0gdGltaW5nIGZ1bmN0aW9uYWxpdGllcy4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gU2NoZWR1bGVyIiB9fQogCiAKIGRlcGVuZGVuY2llcyB7CiAgICAgY29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiICkKICAgICBjb21waWxlIHByb2plY3QoICc6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMnICkKICAgICBjb21waWxlIGxpYnJhcmllcy5za2VkCisgICAgY29tcGlsZSBsaWJyYXJpZXMuc2xmNGpfYXBpCiAKICAgICB0ZXN0Q29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIgKQogICAgIHRlc3RDb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24uaW5kZXhpbmctcmRmIiApCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2NoZWR1bGVyL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL3NjaGVkdWxlci9kZXYtc3RhdHVzLnhtbAppbmRleCAyMWJiMzI4Li5mYzExY2U0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2NoZWR1bGVyL2Rldi1zdGF0dXMueG1sCisrKyBiL2xpYnJhcmllcy9zY2hlZHVsZXIvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9kb2NzL3NjaGVkdWxlci50eHQgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9kb2NzL3NjaGVkdWxlci50eHQKaW5kZXggYWVmNDQ4Ni4uMTQyOTA3YSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvZG9jcy9zY2hlZHVsZXIudHh0CisrKyBiL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL2RvY3Mvc2NoZWR1bGVyLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LXNjaGVkdWxlcixTY2hlZHVsZXIgTGlicmFyeV1dCiA9IFNjaGVkdWxlciA9CiAKQEAgLTU2LDcgKzc1LDcgQEAKIGVhY2ggVGltZWxpbmVSZWNvcmQgY3JlYXRlZCB3aGVuIHRoZSBUaW1lbGluZSBmZWF0dXJlIGlzIGFjdGl2YXRlZC4KIAogVGhlIHJ1bigpIG1ldGhvZCBvZiBUYXNrcyBpcyB3cmFwcGVkIGluIGEgVW5pdE9mV29yayB3aGVuIGNhbGxlZCBieSB0aGUgU2NoZWR1bGVyLgotVGhhbmtzIHRvIHRoZSBVbml0T2ZXb3JrIGhhbmRsaW5nIGluIFFpNGosIHlvdSBjYW4gc3BsaXQgdGhlIHdvcmsgZG9uZSBpbiB5b3VyIFRhc2tzIGluCitUaGFua3MgdG8gdGhlIFVuaXRPZldvcmsgaGFuZGxpbmcgaW4gWmVzdCwgeW91IGNhbiBzcGxpdCB0aGUgd29yayBkb25lIGluIHlvdXIgVGFza3MgaW4KIHNldmVyYWwgVW5pdE9mV29ya3MsIHRoZSBvbmUgYXJvdW5kIHRoZSBUYXNrI3J1bigpIGludm9jYXRpb24gd2lsbCB0aGVuIGJlIHBhdXNlZC4KIAogSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlOgpAQCAtMTE4LDYgKzEzNywxMSBAQAogLSBAYW5udWFseSBvciBAeWVhcmx5CiAKIAorPT0gRHVyYWJpbGl0eSA9PQorU2NoZWR1bGVzIGNhbiBlaXRoZXIgYmUgZXRoZXJlYWwgb3IgZHVyYWJsZSwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSArU2NoZWR1bGVyKy4gSWYgaXQgaXMgYSBkdXJhYmxlCitzY2hlZHVsZSwgdGhlbiB0aGUgVGFzayBtdXN0IGJlIGFuIEVudGl0eSBDb21wb3NpdGUuCisKK1doZW4gdGhlCiA9PSBPYnNlcnZpbmcgdGhlIFRpbWVsaW5lID09CiAKIFRpbWVsaW5lIGFsbG93IHRvIGJyb3dzZSBpbiBwYXN0IGFuZCBmdXR1cmUgVGFzayBydW5zLiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIG9ubHkgaWYgeW91IGFjdGl2YXRlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvU2NoZWR1bGVyLmphdmEgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvU2NoZWR1bGVyLmphdmEKaW5kZXggNTA1MjA1NS4uMTRkZjJlZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL1NjaGVkdWxlci5qYXZhCisrKyBiL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9TY2hlZHVsZXIuamF2YQpAQCAtMzIsMTUgKzMyLDI0IEBACiAKIC8qKgogICogU2NoZWR1bGVyLgotICoKKyAqIDxwPgogICogVGhpcyBpcyB0aGUgb25seSBpbnRlcmZhY2UgeW91IHNob3VsZCB1c2UgaW4geW91ciBhcHBsaWNhdGlvbiBmb3Igc2NoZWR1bGluZyB0YXNrcy4KLSAqCisgKiA8L3A+CisgKiA8cD4KICAqIFNlZSB7QGxpbmsgU2NoZWR1bGVyQ29uZmlndXJhdGlvbn0gZm9yIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcy4KKyAqIDwvcD4KKyAqIDxwPgogICogU2VlIGluIHtAbGluayBTY2hlZHVsZXJBc3NlbWJsZXJ9IGhvdyB0byBhc3NlbWJsZSBhIHtAbGluayBTY2hlZHVsZXJ9IGFuZCBvcHRpb25hbCB7QGxpbmsgVGltZWxpbmV9LgotICoKKyAqIDwvcD4KKyAqIDxwPgogICogQnkgZGVmYXVsdCwgYSB7QGxpbmsgU2NoZWR1bGV9IGlzIG5vdCBkdXJhYmxlLiBJbiBvdGhlciB3b3JkcywgaXQgZG8gbm90IHN1cnZpdmUgYW4ge0BsaW5rIEFwcGxpY2F0aW9ufSByZXN0YXJ0LgorICogPC9wPgorICogPHA+CiAgKiBUbyBtYWtlIGEge0BsaW5rIFNjaGVkdWxlfSBkdXJhYmxlLCBzZXQgaXQncyBkdXJhYmxlIHByb3BlcnR5IHRvIHRydWUgb25jZSBpdHMgc2NoZWR1bGVkLgorICogPC9wPgorICogPHA+CiAgKiBEdXJhYmxlIHtAbGluayBTY2hlZHVsZX1zIHRoYXQgaGF2ZSBubyBmdXR1cmUgcnVuIGFyZSByZW1vdmVkIGJ5IHtAY29kZSBTY2hlZHVsZXJHYXJiYWdlQ29sbGVjdG9yfSAobm90IGltcGxlbWVudGVkPykuCisgKiA8L3A+CiAgKi8KIEBDb25jZXJucyggVW5pdE9mV29ya0NvbmNlcm4uY2xhc3MgKQogcHVibGljIGludGVyZmFjZSBTY2hlZHVsZXIKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9TY2hlZHVsZXJNaXhpbi5qYXZhIGIvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL1NjaGVkdWxlck1peGluLmphdmEKaW5kZXggOTA1OGY0NS4uYzNmOGY2MSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL1NjaGVkdWxlck1peGluLmphdmEKKysrIGIvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL1NjaGVkdWxlck1peGluLmphdmEKQEAgLTE2MCw3ICsxNjAsNiBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJOZXh0IHJ1biBhdDogIiArIG5ldyBEYXRlVGltZSggbmV4dFJ1biApICk7CiAgICAgICAgICAgICAgICAgdGltaW5nUXVldWUuYWRkKCBuZXcgU2NoZWR1bGVUaW1lKCBzY2hlZHVsZS5pZGVudGl0eSgpLmdldCgpLCBuZXh0UnVuICkgKTsKICAgICAgICAgICAgICAgICBpZiggc2NoZWR1bGVIYW5kbGVyID09IG51bGwgKQogICAgICAgICAgICAgICAgIHsKQEAgLTE3NSwxNCArMTc0LDE2IEBACiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIk5leHQgcnVuIGF0OiAiICsgbmV3IERhdGVUaW1lKCBuZXh0UnVuICkgKTsKICAgICAgICAgICAgICAgICB0aW1pbmdRdWV1ZS5hZGQoIG5ldyBTY2hlZHVsZVRpbWUoIHNjaGVkdWxlLmlkZW50aXR5KCkuZ2V0KCksIG5leHRSdW4gKSApOwogICAgICAgICAgICAgICAgIFNjaGVkdWxlVGltZSBuZXdGaXJzdCA9IHRpbWluZ1F1ZXVlLmZpcnN0KCk7CiAgICAgICAgICAgICAgICAgaWYoICFmaXJzdC5lcXVhbHMoIG5ld0ZpcnN0ICkgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZXN0YXJ0IHRoZSBtYW5hZ2VtZW50VGhyZWFkLCB3aGljaCBpcyBjdXJyZW50bHkgd2FpdGluZyBmb3IgYSAnbGF0ZXInIGV2ZW50IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIG9jY3VyIHRoYW4gdGhlIG9uZSB0aGF0IHdhcyBqdXN0IHNjaGVkdWxlZC4KLSAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVIYW5kbGVyLmZ1dHVyZS5jYW5jZWwoIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoIHNjaGVkdWxlSGFuZGxlciAhPSBudWxsICYmIHNjaGVkdWxlSGFuZGxlci5mdXR1cmUgIT0gbnVsbCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlSGFuZGxlci5mdXR1cmUuY2FuY2VsKCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hIYW5kbGVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjIwLDExICsyMjEsMTMgQEAKICAgICAgICAgewogICAgICAgICAgICAgY29yZVBvb2xTaXplID0gd29ya2Vyc0NvdW50IC8gNDsKICAgICAgICAgfQotICAgICAgICAvLyBUaHJvd3MgSWxsZWdhbEFyZ3VtZW50IGlmIGNvcmVQb29sU2l6ZSBvciBrZWVwQWxpdmVUaW1lIGxlc3MgdGhhbiB6ZXJvLCBvciBpZiB3b3JrZXJzQ291bnQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIG9yIGlmIGNvcmVQb29sU2l6ZSBncmVhdGVyIHRoYW4gd29ya2Vyc0NvdW50LgorICAgICAgICAvLyBUaHJvd3MgSWxsZWdhbEFyZ3VtZW50IGlmIGNvcmVQb29sU2l6ZSBvciBrZWVwQWxpdmVUaW1lIGxlc3MgdGhhbiB6ZXJvLAorICAgICAgICAvLyBvciBpZiB3b3JrZXJzQ291bnQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sCisgICAgICAgIC8vIG9yIGlmIGNvcmVQb29sU2l6ZSBncmVhdGVyIHRoYW4gd29ya2Vyc0NvdW50LgogICAgICAgICB0YXNrRXhlY3V0b3IgPSBuZXcgVGhyZWFkUG9vbEV4ZWN1dG9yKCBjb3JlUG9vbFNpemUsIHdvcmtlcnNDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGlua2VkQmxvY2tpbmdRdWV1ZTxSdW5uYWJsZT4oIHdvcmtRdWV1ZVNpemUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkRmFjdG9yeSwgcmVqZWN0aW9uSGFuZGxlciApOworICAgICAgICAgICAgMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTLAorICAgICAgICAgICAgbmV3IExpbmtlZEJsb2NraW5nUXVldWU8UnVubmFibGU+KCB3b3JrUXVldWVTaXplICksCisgICAgICAgICAgICB0aHJlYWRGYWN0b3J5LCByZWplY3Rpb25IYW5kbGVyICk7CiAgICAgICAgIHRhc2tFeGVjdXRvci5wcmVzdGFydEFsbENvcmVUaHJlYWRzKCk7CiAgICAgICAgIG1hbmFnZW1lbnRFeGVjdXRvciA9IG5ldyBTY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IoIDIsIHRocmVhZEZhY3RvcnksIHJlamVjdGlvbkhhbmRsZXIgKTsKICAgICAgICAgbG9hZFNjaGVkdWxlcygpOwpAQCAtMjY3LDYgKzI3MCwxNSBAQAogICAgIHB1YmxpYyB2b2lkIHBhc3NpdmF0ZVNlcnZpY2UoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgeworICAgICAgICBtYW5hZ2VtZW50RXhlY3V0b3Iuc2h1dGRvd24oKTsKKyAgICAgICAgdGFza0V4ZWN1dG9yLnNodXRkb3duKCk7CisKKyAgICAgICAgbWFuYWdlbWVudEV4ZWN1dG9yLmF3YWl0VGVybWluYXRpb24oIDUsIFRpbWVVbml0LlNFQ09ORFMgKTsKKyAgICAgICAgbWFuYWdlbWVudEV4ZWN1dG9yLnNodXRkb3duTm93KCk7CisKKyAgICAgICAgdGFza0V4ZWN1dG9yLmF3YWl0VGVybWluYXRpb24oIDUsIFRpbWVVbml0LlNFQ09ORFMgKTsKKyAgICAgICAgdGFza0V4ZWN1dG9yLnNodXRkb3duTm93KCk7CisKICAgICAgICAgTE9HR0VSLmRlYnVnKCAiUGFzc2l2YXRlZCIgKTsKICAgICB9CiAKQEAgLTI3Nyw3ICsyODksNiBAQAogICAgIGNsYXNzIFNjaGVkdWxlSGFuZGxlcgogICAgICAgICBpbXBsZW1lbnRzIFJ1bm5hYmxlCiAgICAgewotICAgICAgICBwcml2YXRlIFNjaGVkdWxlUnVubmVyIHNjaGVkdWxlUnVubmVyOwogICAgICAgICBwcml2YXRlIFNjaGVkdWxlZEZ1dHVyZTw/PiBmdXR1cmU7CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0yODcsNyArMjk4LDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTY2hlZHVsZVRpbWUgc2NoZWR1bGVUaW1lID0gdGltaW5nUXVldWUuZmlyc3QoKTsKICAgICAgICAgICAgICAgICB0aW1pbmdRdWV1ZS5yZW1vdmUoIHNjaGVkdWxlVGltZSApOwotICAgICAgICAgICAgICAgIHNjaGVkdWxlUnVubmVyID0gbmV3IFNjaGVkdWxlUnVubmVyKCBzY2hlZHVsZVRpbWUsIFNjaGVkdWxlck1peGluLnRoaXMsIG1vZHVsZSApOworICAgICAgICAgICAgICAgIFNjaGVkdWxlUnVubmVyIHNjaGVkdWxlUnVubmVyID0gbmV3IFNjaGVkdWxlUnVubmVyKCBzY2hlZHVsZVRpbWUsIFNjaGVkdWxlck1peGluLnRoaXMsIG1vZHVsZSApOwogICAgICAgICAgICAgICAgIHRhc2tFeGVjdXRvci5zdWJtaXQoIHNjaGVkdWxlUnVubmVyICk7CiAgICAgICAgICAgICAgICAgaWYoIHRpbWluZ1F1ZXVlLnNpemUoKSA9PSAwICkKICAgICAgICAgICAgICAgICB7CkBAIC0zMjMsNyArMzM0LDYgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlJ1bm5pbmcgU2NoZWR1bGUiICk7CiAgICAgICAgICAgICBVc2VjYXNlIHVzZWNhc2UgPSBVc2VjYXNlQnVpbGRlci5uZXdVc2VjYXNlKCAiU2NoZWR1bGVSdW5uZXIiICk7CiAgICAgICAgICAgICBVbml0T2ZXb3JrIHVvdyA9IG1vZHVsZS5uZXdVbml0T2ZXb3JrKCB1c2VjYXNlICk7CiAgICAgICAgICAgICB0cnkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9ib290c3RyYXAvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL2Jvb3RzdHJhcC9wYWNrYWdlLmh0bWwKaW5kZXggZTY2YTgzNy4uYjlhMmVmMSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL2Jvb3RzdHJhcC9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL2Jvb3RzdHJhcC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNjaGVkdWxlciBBc3NlbWJseS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9wYWNrYWdlLmh0bWwKaW5kZXggOTE3YjRlYy4uYTc5NmNlMSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TY2hlZHVsZXIgTGlicmFyeS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3NjaGVkdWxlL1NjaGVkdWxlLmphdmEgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvU2NoZWR1bGUuamF2YQppbmRleCA1ZmJhNDg1Li5lZjJhMjE0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvU2NoZWR1bGUuamF2YQorKysgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvU2NoZWR1bGUuamF2YQpAQCAtNzEsNyArNzEsNyBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGZyb20gVGhlIHN0YXJ0aW5nIHRpbWUgd2hlbiB0byBsb29rIGZvciB0aGUgbmV4dCB0aW1lIGl0IHdpbGwgcnVuLgogICAgICAqCi0gICAgICogQHJldHVybiBUaGUgZXhhY3QgYWJzb2x1dGUgdGltZSB3aGVuIHRoaXMgU2NoZWR1bGUgaXMgdG8gYmUgcnVuIG5leHQgdGltZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBleGFjdCBhYnNvbHV0ZSB0aW1lIHdoZW4gdGhpcyBTY2hlZHVsZSBpcyB0byBiZSBydW4gbmV4dCB0aW1lLCBvciAtMSBpZiBuZXZlcgogICAgICAqLwogICAgIGxvbmcgbmV4dFJ1biggbG9uZyBmcm9tICk7CiAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9zY2hlZHVsZS9TY2hlZHVsZUZhY3RvcnkuamF2YSBiL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9zY2hlZHVsZS9TY2hlZHVsZUZhY3RvcnkuamF2YQppbmRleCA3ZjViODhjLi45NGI3ZmQyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvU2NoZWR1bGVGYWN0b3J5LmphdmEKKysrIGIvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3NjaGVkdWxlL1NjaGVkdWxlRmFjdG9yeS5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zY2hlZHVsZXIuVGFzazsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNjaGVkdWxlci5zY2hlZHVsZS5jcm9uLkNyb25TY2hlZHVsZTsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNjaGVkdWxlci5zY2hlZHVsZS5vbmNlLk9uY2VTY2hlZHVsZTsKK2ltcG9ydCBvcmcucWk0ai5zcGkudXVpZC5VdWlkSWRlbnRpdHlHZW5lcmF0b3JTZXJ2aWNlOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKQEAgLTQ4LDYgKzQ5LDkgQEAKICAgICAgICAgQFNlcnZpY2UKICAgICAgICAgcHJpdmF0ZSBTY2hlZHVsZXJTZXJ2aWNlIHNjaGVkdWxlcjsKIAorICAgICAgICBAU2VydmljZQorICAgICAgICBwcml2YXRlIFV1aWRJZGVudGl0eUdlbmVyYXRvclNlcnZpY2UgdXVpZDsKKwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIENyb25TY2hlZHVsZSBuZXdDcm9uU2NoZWR1bGUoIFRhc2sgdGFzaywgU3RyaW5nIGNyb25FeHByZXNzaW9uLCBEYXRlVGltZSBzdGFydCwgYm9vbGVhbiBkdXJhYmxlICkKICAgICAgICAgewpAQCAtNzQsNiArNzgsNyBAQAogICAgICAgICAgICAgQ3JvblNjaGVkdWxlIHByb3RvdHlwZSA9IGJ1aWxkZXIucHJvdG90eXBlKCk7CiAgICAgICAgICAgICBwcm90b3R5cGUudGFzaygpLnNldCggdGFzayApOwogICAgICAgICAgICAgcHJvdG90eXBlLnN0YXJ0KCkuc2V0KCBzdGFydCApOworICAgICAgICAgICAgcHJvdG90eXBlLmlkZW50aXR5KCkuc2V0KCB1dWlkLmdlbmVyYXRlKCBDcm9uU2NoZWR1bGUuY2xhc3MgKSApOwogICAgICAgICAgICAgcHJvdG90eXBlLmNyb25FeHByZXNzaW9uKCkuc2V0KCBjcm9uRXhwcmVzc2lvbiApOwogICAgICAgICAgICAgQ3JvblNjaGVkdWxlIHNjaGVkdWxlID0gYnVpbGRlci5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgbG9nZ2VyLmluZm8oICJTY2hlZHVsZSB7fSBjcmVhdGVkOiB7fSIsIHNjaGVkdWxlLnByZXNlbnRhdGlvblN0cmluZygpLCBzY2hlZHVsZS5pZGVudGl0eSgpLmdldCgpICk7CkBAIC04Nyw2ICs5Miw3IEBACiAgICAgICAgICAgICBDcm9uU2NoZWR1bGUgYnVpbGRlckluc3RhbmNlID0gYnVpbGRlci5pbnN0YW5jZSgpOwogICAgICAgICAgICAgYnVpbGRlckluc3RhbmNlLnRhc2soKS5zZXQoIHRhc2sgKTsKICAgICAgICAgICAgIGJ1aWxkZXJJbnN0YW5jZS5zdGFydCgpLnNldCggc3RhcnQgKTsKKyAgICAgICAgICAgIGJ1aWxkZXJJbnN0YW5jZS5pZGVudGl0eSgpLnNldCggdXVpZC5nZW5lcmF0ZSggQ3JvblNjaGVkdWxlLmNsYXNzICkgKTsKICAgICAgICAgICAgIGJ1aWxkZXJJbnN0YW5jZS5jcm9uRXhwcmVzc2lvbigpLnNldCggY3JvbkV4cHJlc3Npb24gKTsKICAgICAgICAgICAgIENyb25TY2hlZHVsZSBzY2hlZHVsZSA9IGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCAiU2NoZWR1bGUge30gY3JlYXRlZDoge30iLCBzY2hlZHVsZS5wcmVzZW50YXRpb25TdHJpbmcoKSwgc2NoZWR1bGUuaWRlbnRpdHkoKS5nZXQoKSApOwpAQCAtOTksNiArMTA1LDcgQEAKICAgICAgICAgICAgIE9uY2VTY2hlZHVsZSBidWlsZGVySW5zdGFuY2UgPSBidWlsZGVyLnByb3RvdHlwZSgpOwogICAgICAgICAgICAgYnVpbGRlckluc3RhbmNlLnRhc2soKS5zZXQoIHRhc2sgKTsKICAgICAgICAgICAgIGJ1aWxkZXJJbnN0YW5jZS5zdGFydCgpLnNldCggcnVuQXQgKTsKKyAgICAgICAgICAgIGJ1aWxkZXJJbnN0YW5jZS5pZGVudGl0eSgpLnNldCggdXVpZC5nZW5lcmF0ZSggQ3JvblNjaGVkdWxlLmNsYXNzICkgKTsKICAgICAgICAgICAgIE9uY2VTY2hlZHVsZSBzY2hlZHVsZSA9IGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCAiU2NoZWR1bGUge30gY3JlYXRlZDoge30iLCBzY2hlZHVsZS5wcmVzZW50YXRpb25TdHJpbmcoKSwgc2NoZWR1bGUuaWRlbnRpdHkoKS5nZXQoKSApOwogICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlOwpAQCAtMTExLDYgKzExOCw3IEBACiAgICAgICAgICAgICBPbmNlU2NoZWR1bGUgYnVpbGRlckluc3RhbmNlID0gYnVpbGRlci5pbnN0YW5jZSgpOwogICAgICAgICAgICAgYnVpbGRlckluc3RhbmNlLnRhc2soKS5zZXQoIHRhc2sgKTsKICAgICAgICAgICAgIGJ1aWxkZXJJbnN0YW5jZS5zdGFydCgpLnNldCggcnVuQXQgKTsKKyAgICAgICAgICAgIGJ1aWxkZXJJbnN0YW5jZS5pZGVudGl0eSgpLnNldCggdXVpZC5nZW5lcmF0ZSggQ3JvblNjaGVkdWxlLmNsYXNzICkgKTsKICAgICAgICAgICAgIE9uY2VTY2hlZHVsZSBzY2hlZHVsZSA9IGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCAiU2NoZWR1bGUge30gY3JlYXRlZDoge30iLCBzY2hlZHVsZS5wcmVzZW50YXRpb25TdHJpbmcoKSwgc2NoZWR1bGUuaWRlbnRpdHkoKS5nZXQoKSApOwogICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3NjaGVkdWxlL2Nyb24vQ3JvblNjaGVkdWxlLmphdmEgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvY3Jvbi9Dcm9uU2NoZWR1bGUuamF2YQppbmRleCBhMTY0NWJmLi5mOWI4NTQyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvY3Jvbi9Dcm9uU2NoZWR1bGUuamF2YQorKysgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvY3Jvbi9Dcm9uU2NoZWR1bGUuamF2YQpAQCAtNzgsMTMgKzc4LDE1IEBACiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgbG9uZyBuZXh0UnVuKCBsb25nIGZyb20gKQogICAgICAgICB7CisgICAgICAgICAgICBsb25nIGFjdHVhbEZyb20gPSBmcm9tOwogICAgICAgICAgICAgbG9uZyBmaXJzdFJ1biA9IHN0YXJ0KCkuZ2V0KCkuZ2V0TWlsbGlzKCk7CiAgICAgICAgICAgICBpZiggZmlyc3RSdW4gPiBmcm9tICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcm9tID0gZmlyc3RSdW47CisgICAgICAgICAgICAgICAgYWN0dWFsRnJvbSA9IGZpcnN0UnVuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTG9uZyBuZXh0UnVuID0gbmV3IG9yZy5jb2RlYXJ0aXNhbnMuc2tlZC5jcm9uLkNyb25TY2hlZHVsZSggY3JvbkV4cHJlc3Npb24oKS5nZXQoKSApLmZpcnN0UnVuQWZ0ZXIoIGZyb20gKTsKLSAgICAgICAgICAgIExPR0dFUi5pbmZvKCAiU2NoZWR1bGUuZmlyc3RSdW5BZnRlcih7fSkgQ3JvblNjaGVkdWxlIHJlc3VsdCBpcyB7fSIsIGZyb20sIGZpcnN0UnVuICk7CisgICAgICAgICAgICBMb25nIG5leHRSdW4gPSBuZXcgb3JnLmNvZGVhcnRpc2Fucy5za2VkLmNyb24uQ3JvblNjaGVkdWxlKCBjcm9uRXhwcmVzc2lvbigpLmdldCgpICkKKyAgICAgICAgICAgICAgICAuZmlyc3RSdW5BZnRlciggYWN0dWFsRnJvbSApOworICAgICAgICAgICAgTE9HR0VSLmluZm8oICJDcm9uU2NoZWR1bGU6Om5leHRSdW4oe30pIGlzIHt9IiwgZnJvbSwgZmlyc3RSdW4gKTsKICAgICAgICAgICAgIHJldHVybiBuZXh0UnVuOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3NjaGVkdWxlL2Nyb24vcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3NjaGVkdWxlL2Nyb24vcGFja2FnZS5odG1sCmluZGV4IDEwOTMxMWYuLmYzZmQyYzIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9zY2hlZHVsZS9jcm9uL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvY3Jvbi9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNjaGVkdWxlciBDUk9OIFNjaGVkdWxlcy48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3NjaGVkdWxlL29uY2UvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3NjaGVkdWxlL29uY2UvcGFja2FnZS5odG1sCmluZGV4IGM1ZDA0MmIuLmMxMmZkNWIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9zY2hlZHVsZS9vbmNlL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvb25jZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNjaGVkdWxlciBPbmNlIFNjaGVkdWxlcy48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3NjaGVkdWxlL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9zY2hlZHVsZS9wYWNrYWdlLmh0bWwKaW5kZXggMGJhOGY1Yy4uN2M3NDI1MCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3NjaGVkdWxlL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvc2NoZWR1bGUvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TY2hlZHVsZXIgU2NoZWR1bGVzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvdGltZWxpbmUvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL3RpbWVsaW5lL3BhY2thZ2UuaHRtbAppbmRleCA0YmYzMjdhLi4xYjc1N2QyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvdGltZWxpbmUvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci90aW1lbGluZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNjaGVkdWxlciBUaW1lbGluZS48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL0Zvb1Rhc2suamF2YSBiL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NjaGVkdWxlci9Gb29UYXNrLmphdmEKaW5kZXggZjQ2YTI1Ni4uNmFiNjFmZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NoZWR1bGVyL0Zvb1Rhc2suamF2YQorKysgYi9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zY2hlZHVsZXIvRm9vVGFzay5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc2NoZWR1bGVyOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5PcHRpb25hbDsKLWltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LklkZW50aXR5OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKIGltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKQEAgLTI3LDcgKzI3LDcgQEAKIAogQE1peGlucyggRm9vVGFzay5NaXhpbi5jbGFzcyApCiBwdWJsaWMgaW50ZXJmYWNlIEZvb1Rhc2sKLSAgICBleHRlbmRzIFRhc2ssIEVudGl0eUNvbXBvc2l0ZQorICAgIGV4dGVuZHMgVGFzaywgSWRlbnRpdHkKIHsKICAgICBQcm9wZXJ0eTxTdHJpbmc+IGlucHV0KCk7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIExPR0dFUi5pbmZvKCAiRm9vVGFza0VudGl0eS5ydW4oe30pIiwgbWUuaW5wdXQoKS5nZXQoKSApOworICAgICAgICAgICAgTE9HR0VSLmluZm8oICJGb29UYXNrLnJ1bih7fSkiLCBtZS5pbnB1dCgpLmdldCgpICk7CiAgICAgICAgICAgICBpZiggbWUuaW5wdXQoKS5nZXQoKS5lcXVhbHMoIENvbnN0YW50cy5CQVpBUiApICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiggbWUub3V0cHV0KCkuZ2V0KCkgPT0gbnVsbCApCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sIGIvbGlicmFyaWVzL3NjaGVkdWxlci9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbAppbmRleCA0MjY4ZTlmLi43NmNjN2M1IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2NoZWR1bGVyL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCisrKyBiL2xpYnJhcmllcy9zY2hlZHVsZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stdGVzdC54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxjb25maWd1cmF0aW9uPgogCiAgICAgPGFwcGVuZGVyIG5hbWU9InN0ZG91dCIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNvcmUuQ29uc29sZUFwcGVuZGVyIj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zY2hlZHVsZXIvdGVzdC1yZXBlYXRlZGx5LnNoIGIvbGlicmFyaWVzL3NjaGVkdWxlci90ZXN0LXJlcGVhdGVkbHkuc2gKaW5kZXggMDAyMmMyNS4uYmI3NTE2YiAxMDA3NTUKLS0tIGEvbGlicmFyaWVzL3NjaGVkdWxlci90ZXN0LXJlcGVhdGVkbHkuc2gKKysrIGIvbGlicmFyaWVzL3NjaGVkdWxlci90ZXN0LXJlcGVhdGVkbHkuc2gKQEAgLTEsNSArMSwyMCBAQAogIyEvYmluL3NoCiAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKICMgUnVuIGNsZWFuIHRlc3Qgb25jZSBhbmQgdGVzdCByZXBlYXRlZGx5CiAjIFN0b3Agb24gZmlyc3QgZmFpbHVyZQogIyBjYXQgYnVpbGQvbnVtLXJlcGVhdHMgdG8gc2VlIGhvdyBtYW55IHRpbWVzIGl0IHJhbgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NjcmlwdGluZy9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvc2NyaXB0aW5nL2J1aWxkLmdyYWRsZQppbmRleCBmOWM2ODJiLi4yZDY1ZTMyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2NyaXB0aW5nL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvc2NyaXB0aW5nL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIENvbW1vbiBTY3JpcHRpbmcgTGlicmFyeSBjb250YWlucyBjb21tb24gY2xhc3NlcyBhY3Jvc3Mgc2NyaXB0aW5nIGltcGxlbWVudGF0aW9ucy4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gU2NyaXB0aW5nIC0gQ29tbW9uIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgQ29tbW9uIFNjcmlwdGluZyBMaWJyYXJ5IGNvbnRhaW5zIGNvbW1vbiBjbGFzc2VzIGFjcm9zcyBzY3JpcHRpbmcgaW1wbGVtZW50YXRpb25zLiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIExpYnJhcnkgLSBTY3JpcHRpbmcgLSBDb21tb24iIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5hcGkiKSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zY3JpcHRpbmcvZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvc2NyaXB0aW5nL2Rldi1zdGF0dXMueG1sCmluZGV4IDY1NGQzYWEuLmFmYTMzNjkgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zY3JpcHRpbmcvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL3NjcmlwdGluZy9kZXYtc3RhdHVzLnhtbApAQCAtMSwxNyArMSwzMyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCiAgICAgICAgIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZCI+CiAgIDxzdGF0dXM+CiAgICAgPCEtLW5vbmUsZWFybHksYmV0YSxzdGFibGUsbWF0dXJlLS0+Ci0gICAgPGNvZGViYXNlPmJldGE8L2NvZGViYXNlPgorICAgIDxjb2RlYmFzZT5zdGFibGU8L2NvZGViYXNlPgogCiAgICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+CiAgICAgPGRvY3VtZW50YXRpb24+bm9uZTwvZG9jdW1lbnRhdGlvbj4KIAogICAgIDwhLS0gbm9uZSwgc29tZSwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPHVuaXR0ZXN0cz5zb21lPC91bml0dGVzdHM+CisgICAgPHVuaXR0ZXN0cz5jb21wbGV0ZTwvdW5pdHRlc3RzPgogICA8L3N0YXR1cz4KICAgPGxpY2Vuc2VzPgogICAgIDxsaWNlbnNlPkFMdjI8L2xpY2Vuc2U+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2NyaXB0aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zY3JpcHRpbmcvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NjcmlwdGluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NyaXB0aW5nL3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTRjNDhjCi0tLSAvZGV2L251bGwKKysrIGIvbGlicmFyaWVzL3NjcmlwdGluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NyaXB0aW5nL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxodG1sPgorICAgIDxib2R5PgorICAgICAgICA8aDI+U2NyaXB0aW5nIExpYnJhcnkuPC9oMj4KKyAgICA8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NjcmlwdGluZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NyaXB0aW5nL1NjcmlwdFV0aWxJbXBsVGVzdC5qYXZhIGIvbGlicmFyaWVzL3NjcmlwdGluZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2NyaXB0aW5nL1NjcmlwdFV0aWxJbXBsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTk4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJyYXJpZXMvc2NyaXB0aW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zY3JpcHRpbmcvU2NyaXB0VXRpbEltcGxUZXN0LmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zY3JpcHRpbmc7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jc0VxdWFsLmVxdWFsVG87CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhhdDsKKworcHVibGljIGNsYXNzIFNjcmlwdFV0aWxJbXBsVGVzdAoreworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdERlZmF1bHRTdHJlYW0oKQorICAgIHsKKyAgICAgICAgU2NyaXB0VXRpbCB1bmRlclRlc3QgPSBuZXcgU2NyaXB0VXRpbEltcGwoKTsKKyAgICAgICAgYXNzZXJ0VGhhdCggdW5kZXJUZXN0LmdldE91dCgpLCBlcXVhbFRvKFN5c3RlbS5vdXQpKTsKKyAgICB9CisKKyAgICBAVGVzdCggZXhwZWN0ZWQgPSBTY3JpcHRFeGNlcHRpb24uY2xhc3MgKQorICAgIHB1YmxpYyB2b2lkIHRlc3RFeGNlcHRpb24oKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IFNjcmlwdEV4Y2VwdGlvbiggIlRoaXMgaXMgYSB0ZXN0IGV4Y2VwdGlvbi4iICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NlcnZsZXQvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL3NlcnZsZXQvYnVpbGQuZ3JhZGxlCmluZGV4IDY1N2E0ZjcuLjEzMGFmZGIgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zZXJ2bGV0L2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvc2VydmxldC9idWlsZC5ncmFkbGUKQEAgLTEsMTAgKzEsMzAgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogU2VydmxldCBMaWJyYXJ5IHByb3ZpZGVzIGludGVncmF0aW9uIG9mIFFpNGogaW50byB3ZWIgYXBwbGljYXRpb25zLiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBTZXJ2bGV0IiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgU2VydmxldCBMaWJyYXJ5IHByb3ZpZGVzIGludGVncmF0aW9uIG9mIEFwYWNoZSBaZXN04oSiIGludG8gd2ViIGFwcGxpY2F0aW9ucy4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gU2VydmxldCIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZSggcHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSApCi0gIGNvbXBpbGUoIGxpYnJhcmllcy5zZXJ2bGV0X2FwaSApCisgIGNvbXBpbGUgbGlicmFyaWVzLnNlcnZsZXRfYXBpIAorICBjb21waWxlIGxpYnJhcmllcy5zbGY0al9hcGkKIAogICB0ZXN0Q29tcGlsZSggcHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpICkKICAgdGVzdENvbXBpbGUoIGxpYnJhcmllcy5qZXR0eV93ZWJhcHAgKQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NlcnZsZXQvZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvc2VydmxldC9kZXYtc3RhdHVzLnhtbAppbmRleCAyNGVkNTkwLi5jYmNkMjc0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2VydmxldC9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvc2VydmxldC9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zZXJ2bGV0L3NyYy9kb2NzL3NlcnZsZXQudHh0IGIvbGlicmFyaWVzL3NlcnZsZXQvc3JjL2RvY3Mvc2VydmxldC50eHQKaW5kZXggOWIyY2FiMS4uNGFmOTBjMSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NlcnZsZXQvc3JjL2RvY3Mvc2VydmxldC50eHQKKysrIGIvbGlicmFyaWVzL3NlcnZsZXQvc3JjL2RvY3Mvc2VydmxldC50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbbGlicmFyeS1zZXJ2bGV0LFNlcnZsZXQgTGlicmFyeV1dCiA9IFNlcnZsZXQgPQogCkBAIC02LDE2ICsyNSwxNiBAQAogc291cmNlPWxpYnJhcmllcy9zZXJ2bGV0L2Rldi1zdGF0dXMueG1sCiAtLS0tLS0tLS0tLS0tLQogCi1UaGlzIGxpYnJhcnkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGJvaWxlcnBsYXRlIGNvZGUgdG8gYm9vdHN0cmFwIGEgUWk0aiBBcHBsaWNhdGlvbiBpbiBhIFNlcnZsZXQgY29udGFpbmVyIHBsdXMgc29tZQorVGhpcyBsaWJyYXJ5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBib2lsZXJwbGF0ZSBjb2RlIHRvIGJvb3RzdHJhcCBhIFplc3TihKIgQXBwbGljYXRpb24gaW4gYSBTZXJ2bGV0IGNvbnRhaW5lciBwbHVzIHNvbWUKIGZhY2lsaXRpZXMuIEl0IGFpbXMgYXQgYSB2ZXJ5IHNpbXBsZSBuZWVkIGFuZCBpcyBwcm92aWRlZCBhcyBhbiBleGFtcGxlIGludGVncmF0aW9uLgogCi1JZiBpbnN0ZWFkIHlvdSB3YW50IHRvIHJ1biBhIHNlcnZsZXQgY29udGFpbmVyIGluc2lkZSBhIFFpNGogQXBwbGljYXRpb24sIHNlZSA8PGxpYnJhcnktaHR0cD4+LgorSWYgaW5zdGVhZCB5b3Ugd2FudCB0byBydW4gYSBzZXJ2bGV0IGNvbnRhaW5lciBpbnNpZGUgYSBaZXN04oSiIEFwcGxpY2F0aW9uLCBzZWUgPDxsaWJyYXJ5LWh0dHA+Pi4KIAogaW5jbHVkZTo6Li4vLi4vYnVpbGQvZG9jcy9idWlsZGluZm8vYXJ0aWZhY3QudHh0W10KIAogPT0gQXBwbGljYXRpb24gQm9vdHN0cmFwID09CiAKLUV4dGVuZHMgYEFic3RyYWN0UWk0alNlcnZsZXRCb290c3RyYXBgIHRvIGVhc2lseSBiaW5kIGEgUWk0aiBgQXBwbGljYXRpb25gIGFjdGl2YXRpb24vcGFzc2l2YXRpb24gdG8geW91ciB3ZWJhcHAKK0V4dGVuZHMgYEFic3RyYWN0UWk0alNlcnZsZXRCb290c3RyYXBgIHRvIGVhc2lseSBiaW5kIGEgWmVzdOKEoiBgQXBwbGljYXRpb25gIGFjdGl2YXRpb24vcGFzc2l2YXRpb24gdG8geW91ciB3ZWJhcHAKIGxpZmVjeWNsZS4KIAogVXNlIGBRaTRqU2VydmxldFN1cHBvcnQjYXBwbGljYXRpb24oamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dClgIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYEFwcGxpY2F0aW9uYCBmcm9tIHRoZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NlcnZsZXQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NlcnZsZXQvUWk0alNlcnZsZXRTdXBwb3J0LmphdmEgYi9saWJyYXJpZXMvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2VydmxldC9RaTRqU2VydmxldFN1cHBvcnQuamF2YQppbmRleCBkMWM3NTcwLi4zZTQwNGU0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2VydmxldC9RaTRqU2VydmxldFN1cHBvcnQuamF2YQorKysgYi9saWJyYXJpZXMvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2VydmxldC9RaTRqU2VydmxldFN1cHBvcnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgQXBwbGljYXRpb24gYXBwbGljYXRpb24oIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0ICkKICAgICB7Ci0gICAgICAgIHJldHVybiAoIEFwcGxpY2F0aW9uICkgc2VydmxldENvbnRleHQuZ2V0QXR0cmlidXRlKCBBUFBfSU5fQ1RYICk7IC8vIFRPRE8gdHJ5L2NhdGNoIGFuZCBmaW5kIGEgc3VpdGFibGUgUWk0aiBleGNlcHRpb24KKyAgICAgICAgcmV0dXJuICggQXBwbGljYXRpb24gKSBzZXJ2bGV0Q29udGV4dC5nZXRBdHRyaWJ1dGUoIEFQUF9JTl9DVFggKTsgLy8gVE9ETyB0cnkvY2F0Y2ggYW5kIGZpbmQgYSBzdWl0YWJsZSBaZXN0IGV4Y2VwdGlvbgogICAgIH0KIAogICAgIHByaXZhdGUgUWk0alNlcnZsZXRTdXBwb3J0KCkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zZXJ2bGV0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zZXJ2bGV0L2xpZmVjeWNsZS9BYnN0cmFjdFFpNGpTZXJ2bGV0Qm9vdHN0cmFwLmphdmEgYi9saWJyYXJpZXMvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2VydmxldC9saWZlY3ljbGUvQWJzdHJhY3RRaTRqU2VydmxldEJvb3RzdHJhcC5qYXZhCmluZGV4IDQzYzc1ZmEuLjJhMzYwN2MgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zZXJ2bGV0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zZXJ2bGV0L2xpZmVjeWNsZS9BYnN0cmFjdFFpNGpTZXJ2bGV0Qm9vdHN0cmFwLmphdmEKKysrIGIvbGlicmFyaWVzL3NlcnZsZXQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NlcnZsZXQvbGlmZWN5Y2xlL0Fic3RyYWN0UWk0alNlcnZsZXRCb290c3RyYXAuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogLyoqCiAgKiBBYnN0cmFjdCBTZXJ2bGV0Q29udGV4dExpc3RlbmVyIGltcGxlbWVudGluZyBBcHBsaWNhdGlvbkFzc2VtYmxlci4KICAqCi0gKiBFeHRlbmRzIHRoaXMgY2xhc3MgdG8gZWFzaWx5IGJpbmQgYSBRaTRqIEFwcGxpY2F0aW9uIGFjdGl2YXRpb24vcGFzc2l2YXRpb24gdG8geW91ciB3ZWJhcHAgbGlmZWN5Y2xlLgorICogRXh0ZW5kcyB0aGlzIGNsYXNzIHRvIGVhc2lseSBiaW5kIGEgWmVzdCBBcHBsaWNhdGlvbiBhY3RpdmF0aW9uL3Bhc3NpdmF0aW9uIHRvIHlvdXIgd2ViYXBwIGxpZmVjeWNsZS4KICAqCiAgKiBUaGUge0BsaW5rIEFwcGxpY2F0aW9ufSBpcyBzZXQgYXMgYSB7QGxpbmsgU2VydmxldENvbnRleHR9IGF0dHJpYnV0ZSBuYW1lZCB1c2luZyBhIGNvbnN0YW50LgogICogSW4geW91ciBzZXJ2bGV0cywgZmlsdGVycywgd2hhdGV2ZXIgaGFzIGFjY2VzcyB0byB0aGUge0BsaW5rIFNlcnZsZXRDb250ZXh0fSB1c2UgdGhlIGZvbGxvd2luZyBjb2RlIHRvIGdldCBhCkBAIC02MiwxMCArNjIsMTAgQEAKIHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0dHRVIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlciggUWk0alNlcnZsZXQuY2xhc3MuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSApOwotICAgIC8vIFFpNGogUnVudGltZQorICAgIC8vIFplc3QgUnVudGltZQogICAgIHByb3RlY3RlZCBRaTRqIGFwaTsKICAgICBwcm90ZWN0ZWQgRW5lcmd5NEphdmEgcWk0ajsKLSAgICAvLyBRaTRqIEFwcGxpY2F0aW9uCisgICAgLy8gWmVzdCBBcHBsaWNhdGlvbgogICAgIHByb3RlY3RlZCBBcHBsaWNhdGlvbkRlc2NyaXB0b3IgYXBwbGljYXRpb25Nb2RlbDsKICAgICBwcm90ZWN0ZWQgQXBwbGljYXRpb24gYXBwbGljYXRpb247CiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICAgICAgICAgIGFmdGVyQXBwbGljYXRpb25QYXNzaXZhdGlvbiggYXBwbGljYXRpb24gKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKLSAgICAgICAgICAgIExPR0dFUi53YXJuKCAiVW5hYmxlIHRvIHBhc3NpdmF0ZSBRaTRqIEFwcGxpY2F0aW9uLiIsIGV4ICk7CisgICAgICAgICAgICBMT0dHRVIud2FybiggIlVuYWJsZSB0byBwYXNzaXZhdGUgWmVzdCBBcHBsaWNhdGlvbi4iLCBleCApOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2VydmxldC9saWZlY3ljbGUvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NlcnZsZXQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NlcnZsZXQvbGlmZWN5Y2xlL3BhY2thZ2UuaHRtbAppbmRleCBmNzZjNDY3Li5iNjkyMDA5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2VydmxldC9saWZlY3ljbGUvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zZXJ2bGV0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zZXJ2bGV0L2xpZmVjeWNsZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNlcnZsZXQgQ29udGV4dCBMaWZlY3ljbGUuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zZXJ2bGV0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zZXJ2bGV0L3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zZXJ2bGV0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zZXJ2bGV0L3BhY2thZ2UuaHRtbAppbmRleCBjY2E5Zjk5Li5lZGM3NDVlIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2VydmxldC9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3NlcnZsZXQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NlcnZsZXQvcGFja2FnZS5odG1sCkBAIC0xLDggKzEsMjQgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TZXJ2bGV0IExpYnJhcnkuPC9oMj4KICAgICAgICAgPHA+Ci0gICAgICAgICAgICBUaGlzIGxpYnJhcnkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IG1lY2hhbmlzbSB0byBib290c3RyYXAgYSBRaTRqIEFwcGxpY2F0aW9uIGluIGEgU2VydmxldCBjb250YWluZXIgcGx1cworICAgICAgICAgICAgVGhpcyBsaWJyYXJ5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBtZWNoYW5pc20gdG8gYm9vdHN0cmFwIGEgWmVzdOKEoiBBcHBsaWNhdGlvbiBpbiBhIFNlcnZsZXQgY29udGFpbmVyIHBsdXMKICAgICAgICAgICAgIHNvbWUgZmFjaWxpdGllcy4KICAgICAgICAgPC9wPgogCkBAIC0xMywxMiArMjksMTIgQEAKIAogICAgICAgICA8aDM+QXBwbGljYXRpb24gQm9vdHN0cmFwPC9oMz4KICAgICAgICAgPHA+Ci0gICAgICAgICAgICBFeHRlbmRzIHtAbGluayBvcmcucWk0ai5saWJyYXJ5LnNlcnZsZXQubGlmZWN5Y2xlLkFic3RyYWN0UWk0alNlcnZsZXRCb290c3RyYXB9IHRvIGVhc2lseSBiaW5kIGEgUWk0agorICAgICAgICAgICAgRXh0ZW5kcyB7QGxpbmsgb3JnLnFpNGoubGlicmFyeS5zZXJ2bGV0LmxpZmVjeWNsZS5BYnN0cmFjdFFpNGpTZXJ2bGV0Qm9vdHN0cmFwfSB0byBlYXNpbHkgYmluZCBhIFplc3TihKIKICAgICAgICAgICAgIHtAbGluayBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkFwcGxpY2F0aW9ufSBhY3RpdmF0aW9uL3Bhc3NpdmF0aW9uIHRvIHlvdXIgd2ViYXBwIGxpZmVjeWNsZS4KICAgICAgICAgPC9wPgogICAgICAgICA8cD4KLSAgICAgICAgICAgIFVzZSB7QGxpbmsgUWk0alNlcnZsZXRTdXBwb3J0I2FwcGxpY2F0aW9uKGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQpfSB0byBnZXQgYSBoYW5kbGUgb24gdGhlCi0gICAgICAgICAgICB7QGxpbmsgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5BcHBsaWNhdGlvbn0gZnJvbSB0aGUge0BsaW5rIGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHR9LgorICAgICAgICAgICAgVXNlIHtAbGluayBvcmcucWk0ai5saWJyYXJ5LnNlcnZsZXQuUWk0alNlcnZsZXRTdXBwb3J0I2FwcGxpY2F0aW9uKGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQpfSB0byBnZXQKKyAgICAgICAgICAgIGEgaGFuZGxlIG9uIHRoZSB7QGxpbmsgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5BcHBsaWNhdGlvbn0gZnJvbSB0aGUge0BsaW5rIGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHR9LgogICAgICAgICA8L3A+CiAKICAgICAgICAgPGgzPkZhY2lsaXRpZXM8L2gzPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NoaXJvLWNvcmUvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL3NoaXJvLWNvcmUvYnVpbGQuZ3JhZGxlCmluZGV4IDI4NDIyYjAuLmQ1N2FjNzcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zaGlyby1jb3JlL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvc2hpcm8tY29yZS9idWlsZC5ncmFkbGUKQEAgLTEsMTIgKzEsMzIgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogU2hpcm8gTGlicmFyeSBpbnRlZ3JhdGVzIEFwYWNoZSBTaGlybyBzZWN1cml0eSBmcmFtZXdvcmsgaW50byBRaTRqLiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBTaGlybyBDb3JlIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgU2hpcm8gTGlicmFyeSBpbnRlZ3JhdGVzIEFwYWNoZSBTaGlybyBzZWN1cml0eSBmcmFtZXdvcmsgaW50byBBcGFjaGUgWmVzdOKEoi4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gU2hpcm8gQ29yZSIgfX0KIAogZGVwZW5kZW5jaWVzIHsKIAogICBjb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIgKQogICBjb21waWxlIGxpYnJhcmllcy5zaGlybwogICBjb21waWxlIGxpYnJhcmllcy5ib3VuY3lfY2FzdGxlCisgIGNvbXBpbGUgbGlicmFyaWVzLnNsZjRqX2FwaQogCiAgIHRlc3RDb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IiApCiAgIHRlc3RDb21waWxlIHByb2plY3QoICI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuc2hpcm8td2ViIiApCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2hpcm8tY29yZS9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9zaGlyby1jb3JlL2Rldi1zdGF0dXMueG1sCmluZGV4IDI0ZWQ1OTAuLmNiY2QyNzQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zaGlyby1jb3JlL2Rldi1zdGF0dXMueG1sCisrKyBiL2xpYnJhcmllcy9zaGlyby1jb3JlL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL2RvY3Mvc2hpcm8udHh0IGIvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL2RvY3Mvc2hpcm8udHh0CmluZGV4IGY5MzlmMTIuLmExMmEzZTcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy9kb2NzL3NoaXJvLnR4dAorKysgYi9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvZG9jcy9zaGlyby50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbbGlicmFyeS1zaGlybywgU2hpcm8gU2VjdXJpdHkgTGlicmFyeV1dCiA9IFNoaXJvIFNlY3VyaXR5ID0KIApAQCAtMTYsMjAgKzM1LDIwIEBACiBhcHBsaWNhdGlvbiDigJMgZnJvbSB0aGUgc21hbGxlc3QgbW9iaWxlIGFwcGxpY2F0aW9ucyB0byB0aGUgbGFyZ2VzdCB3ZWIgYW5kIGVudGVycHJpc2UgYXBwbGljYXRpb25zLicnIHNheXMgdGhlIEFwYWNoZQogU2hpcm8gd2Vic2l0ZS4KIAotQWx0b3VnaCBBcGFjaGUgU2hpcm8gY2FuIGJlIHVzZWQgYXMtaXMgd2l0aCBRaTRqIEFwcGxpY2F0aW9ucywgdGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGludGVncmF0aW9ucyB0aGF0IGNhbiBjb21lIGluCitBbHRvdWdoIEFwYWNoZSBTaGlybyBjYW4gYmUgdXNlZCBhcy1pcyB3aXRoIFplc3TihKIgQXBwbGljYXRpb25zLCB0aGlzIGxpYnJhcnkgcHJvdmlkZXMgaW50ZWdyYXRpb25zIHRoYXQgY2FuIGNvbWUgaW4KIGhhbmR5LiBJZiB5b3VyIHVzZSBjYXNlIGRvIG5vdCBmaXQgYW55IG9mIHRoZXNlcyBpbnRlZ3JhdGlvbnMsIGxvb2sgYXQgdGhlaXIgcmVzcGVjdGl2ZSBjb2RlLiBZb3Ugc2hvdWxkIGZpbmQgb3V0CiBwcmV0dHkgZWFzaWx5IGhvdyB0byBjb21wb3NlIHRoZSBwcm92aWRlZCBjb2RlIHRvIHdyaXRlIHlvdXIgaW50ZWdyYXRpb24uIERvbid0IGhlc2l0YXRlIHRvIGNvbnRyaWJ1dGUgaW50ZXJlc3RpbmcKIGludGVncmF0aW9ucyB0byB0aGlzIHZlcnkgbGlicmFyeS4KIAogV2UgaW52aXRlIHlvdSB0byByZWFkIHRoZSBjb21wcmVoZW5zaXZlIGh0dHA6Ly9zaGlyby5hcGFjaGUub3JnL2RvY3VtZW50YXRpb24uaHRtbFtBcGFjaGUgU2hpcm8gZG9jdW1lbnRhdGlvbl0sIHdlIHdpbGwKLW1vc3RseSBkaXNjdXNzIFFpNGogcmVsYXRlZCBtYXR0ZXJzIGhlcmUuCittb3N0bHkgZGlzY3VzcyBaZXN04oSiIHJlbGF0ZWQgbWF0dGVycyBoZXJlLgogCiBpbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQogCiA9PSBCYXNpYyB1c2FnZSA9PQogCiBGb3Igc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMsIHlvdSBjYW4gdXNlIHBsYWluIFNoaXJvIGVhc2lseS4gVGhlIG9ubHkgdGhpbmcgdG8gZG8gaXMgdG8gcmVnaXN0ZXIgYSBjb25maWd1cmVkCi1TZWN1cml0eU1hbmFnZXIgd2hlbiBhY3RpdmF0aW5nIHlvdXIgUWk0aiBBcHBsaWNhdGlvbi4gSXQgY2FuIGJlIGRvbmUgb3V0c2lkZSB0aGUgYXBwbGljYXRpb24sIGJlZm9yZSBpdHMgYWN0aXZhdGlvbiwKK1NlY3VyaXR5TWFuYWdlciB3aGVuIGFjdGl2YXRpbmcgeW91ciBaZXN04oSiIEFwcGxpY2F0aW9uLiBJdCBjYW4gYmUgZG9uZSBvdXRzaWRlIHRoZSBhcHBsaWNhdGlvbiwgYmVmb3JlIGl0cyBhY3RpdmF0aW9uLAogIsOgIGzDoCIgYnktaGFuZCA7CiAKIFtzbmlwcGV0LGphdmFdCkBAIC01OSw3ICs3OCw3IEBACiAKIFJlbWVtYmVyIHRoYXQgdGhpcyBzZXR1cCB1c2UgYSBUaHJlYWRMb2NhbCBTZWN1cml0eU1hbmFnZXIgc2luZ2xldG9uLiBBbW9uZyBvdGhlciB0aGluZ3MgaXQgbWVhbnMgdGhhdCwgYWx0aG91ZyB0aGUKIEluaVNlY3VyaXR5TWFuYWdlclNlcnZpY2UgaXMgYWN0aXZhdGVkIG9uIEFwcGxpY2F0aW9uIGFjdGl2YXRpb24sIGlmIHlvdSBuZWVkIHRvIHVzZSBTaGlybyBpbiBvdGhlciBTZXJ2aWNlcyB0aGF0IGFyZQotYWN0aXZhdGVkIG9uIEFwcGxpY2F0aW9uIGFjdGl2YXRpb24geW91IHNob3VsZCB0ZWxsIFFpNGogYWJvdXQgdGhpcyBkZXBlbmRlbmN5IGJ5IGluamVjdGluZyB0aGUgU2VjdXJpdHlNYW5hZ2VyU2VydmljZQorYWN0aXZhdGVkIG9uIEFwcGxpY2F0aW9uIGFjdGl2YXRpb24geW91IHNob3VsZCB0ZWxsIFplc3TihKIgYWJvdXQgdGhpcyBkZXBlbmRlbmN5IGJ5IGluamVjdGluZyB0aGUgU2VjdXJpdHlNYW5hZ2VyU2VydmljZQogaW4gdGhlIGxhdGVycy4KIAogT25jZSBzdGFydGVkIHlvdSBtdXN0IHJlbWVtYmVyIHRvIHJlZ2lzdGVyIHRoZSBTZWN1cml0eU1hbmFnZXIgaW4gU2hpcm8ncyBUaHJlYWRDb250ZXh0IDsKQEAgLTk3LDEwICsxMTYsMTAgQEAKIAogQWxsIHRoZSBhYm92ZSBpcyBzdWZmaWNpZW50IGFzIGxvbmcgYXMgeW91IHVzZSB0aGUgaW5pIGZpbGUgdG8gc3RvcmUgdXNlciBjcmVkZW50aWFscyBhbmQgcGVybWlzc2lvbnMgb3IgYSBSZWFsbSB0aGF0CiBoYXMgbm8gZGVwZW5kZW5jeSBvbiB5b3VyIGFwcGxpY2F0aW9uIGNvZGUgYW5kIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIGluaSBmaWxlIHRvIGJlIGluc3RhbmNpYXRlZCBieSBTaGlybyBvdXRzaWRlIHRoZQotUWk0aiBzY29wZS4KK1plc3TihKIgc2NvcGUuCiAKIE9uZSB1c2VjYXNlIHdoZXJlIGl0J3Mgbm90IHN1ZmZpY2llbnQgY29tZXMgcXVpY2tseSBhcyB5b3Ugd291bGQgbGlrZSB0byBwcm92aWRlIHVzZXIgY3JlZGVudGlhbHMgYW5kIHBlcm1pc3Npb25zCi1mcm9tIEVudGl0aWVzIHN0b3JlZCBpbiBhbiBFbnRpdHlTdG9yZSBvciBwZXJmb3JtIGFueSBjdXN0b20gbG9naWMgaW52b2x2aW5nIHlvdXIgUWk0aiBBcHBsaWNhdGlvbi4KK2Zyb20gRW50aXRpZXMgc3RvcmVkIGluIGFuIEVudGl0eVN0b3JlIG9yIHBlcmZvcm0gYW55IGN1c3RvbSBsb2dpYyBpbnZvbHZpbmcgeW91ciBaZXN04oSiIEFwcGxpY2F0aW9uLgogCiBMZXQncyBsb29rIGF0IGEgY29tcGxldGUgZXhhbXBsZSB1c2luZyBhIFJlYWxtIFNlcnZpY2UgdGhhdCBleHRlbmRzIG9uZSBvZiB0aGUgU2hpcm8gcHJvdmlkZWQgUmVhbG0gd2hpY2ggdXNlIGluLW1lbW9yeQogY3JlZGllbnRpYWxzIGFuZCBjb25maWd1cmluZyBpdCA7CkBAIC0yMTYsNyArMjM1LDcgQEAKIAogVGFrZSB0aGUgUGFzc3dvcmRSZWFsbVNlcnZpY2UgYXMgYSBzdGFydCBhbmQgZXh0ZW5kL3Jld3JpdGUgaXQgdG8gc3VpdCB5b3VyIG5lZWRzLgogCi1JZiB5b3UgaGFwcGVuIHRvIGNvbWUgd2l0aCBhIFFpNGogaW50ZWdyYXRpb24gdGhhdCBjb3VsZCBiZSB2YWx1YWJsZSBpbiB0aGlzIHZlcnkgbGlicmFyeSwgZG9uJ3QgaGVzaXRhdGUgdG8KK0lmIHlvdSBoYXBwZW4gdG8gY29tZSB3aXRoIGEgWmVzdOKEoiBpbnRlZ3JhdGlvbiB0aGF0IGNvdWxkIGJlIHZhbHVhYmxlIGluIHRoaXMgdmVyeSBsaWJyYXJ5LCBkb24ndCBoZXNpdGF0ZSB0bwogY29udHJpYnV0ZS4KIAogCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vYXNzZW1ibHkvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbAppbmRleCBlM2JhMTRjLi5iZDBkYWQ2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vYXNzZW1ibHkvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby9hc3NlbWJseS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNoaXJvIFNlY3VyaXR5IEFzc2VtYmx5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vY29uY2VybnMvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2NvbmNlcm5zL3BhY2thZ2UuaHRtbAppbmRleCBmNDBkMmM4Li4yYzFmYWY5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vY29uY2VybnMvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby9jb25jZXJucy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNoaXJvIFNlY3VyaXR5IENvbmNlcm5zLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vZG9tYWluL2NvbW1vbi9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vZG9tYWluL2NvbW1vbi9wYWNrYWdlLmh0bWwKaW5kZXggZTRkMmJmYy4uMGI2ZmZiOCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2RvbWFpbi9jb21tb24vcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby9kb21haW4vY29tbW9uL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U2hpcm8gU2VjdXJpdHkgQ29tbW9uIERvbWFpbi48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2RvbWFpbi9wYXNzd29yZHMvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2RvbWFpbi9wYXNzd29yZHMvcGFja2FnZS5odG1sCmluZGV4IDQzY2NkYjYuLmRmOWZmMzYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby9kb21haW4vcGFzc3dvcmRzL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vZG9tYWluL3Bhc3N3b3Jkcy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNoaXJvIFNlY3VyaXR5IFBhc3N3b3JkcyBEb21haW4uPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby9kb21haW4vcGVybWlzc2lvbnMvUm9sZUZhY3RvcnkuamF2YSBiL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby9kb21haW4vcGVybWlzc2lvbnMvUm9sZUZhY3RvcnkuamF2YQppbmRleCBkY2I5N2E4Li45MDAyODllIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vZG9tYWluL3Blcm1pc3Npb25zL1JvbGVGYWN0b3J5LmphdmEKKysrIGIvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2RvbWFpbi9wZXJtaXNzaW9ucy9Sb2xlRmFjdG9yeS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc2hpcm8uZG9tYWluLnBlcm1pc3Npb25zOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby9kb21haW4vcGVybWlzc2lvbnMvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2RvbWFpbi9wZXJtaXNzaW9ucy9wYWNrYWdlLmh0bWwKaW5kZXggMmY5ZWU1MC4uM2QwYjJkZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2RvbWFpbi9wZXJtaXNzaW9ucy9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2RvbWFpbi9wZXJtaXNzaW9ucy9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNoaXJvIFNlY3VyaXR5IFBlcm1pc3Npb25zIERvbWFpbi48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL2luaS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vaW5pL3BhY2thZ2UuaHRtbAppbmRleCBhZmE3ODhhLi5jZDA0YzEzIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vaW5pL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vaW5pL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U2hpcm8gU2VjdXJpdHkgSU5JIENvbmZpZ3VyYXRpb24gU3VwcG9ydC48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby9wYWNrYWdlLmh0bWwKaW5kZXggZDNkZTdlMC4uMWI2NDhlYSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TaGlybyBTZWN1cml0eSBMaWJyYXJ5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbCBiL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCmluZGV4IGU3NTIyOGYuLjhjOWI1MGEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCisrKyBiL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Y29uZmlndXJhdGlvbj4KIAogICAgIDxhcHBlbmRlciBuYW1lPSJzdGRvdXQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLkNvbnNvbGVBcHBlbmRlciI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvdGVzdC9yZXNvdXJjZXMvc3RhbmRhbG9uZS1zaGlyby5pbmkgYi9saWJyYXJpZXMvc2hpcm8tY29yZS9zcmMvdGVzdC9yZXNvdXJjZXMvc3RhbmRhbG9uZS1zaGlyby5pbmkKaW5kZXggMjE2MGRlNS4uYTllNWIwZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NoaXJvLWNvcmUvc3JjL3Rlc3QvcmVzb3VyY2VzL3N0YW5kYWxvbmUtc2hpcm8uaW5pCisrKyBiL2xpYnJhcmllcy9zaGlyby1jb3JlL3NyYy90ZXN0L3Jlc291cmNlcy9zdGFuZGFsb25lLXNoaXJvLmluaQpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIFR1dG9yaWFsIElOSSBjb25maWd1cmF0aW9uCiAjCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2hpcm8td2ViL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9zaGlyby13ZWIvYnVpbGQuZ3JhZGxlCmluZGV4IDI2ZmUwZDYuLmViZjdkYTMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zaGlyby13ZWIvYnVpbGQuZ3JhZGxlCisrKyBiL2xpYnJhcmllcy9zaGlyby13ZWIvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogU2hpcm8gTGlicmFyeSBpbnRlZ3JhdGVzIEFwYWNoZSBTaGlybyBzZWN1cml0eSBmcmFtZXdvcmsgaW50byBRaTRqLiBUaGlzIGJ1bmRsZSBwcm92aWRlcyBTZXJ2bGV0IHN1cHBvcnQuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFNoaXJvIFdlYiIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIFNoaXJvIExpYnJhcnkgaW50ZWdyYXRlcyBBcGFjaGUgU2hpcm8gc2VjdXJpdHkgZnJhbWV3b3JrIGludG8gQXBhY2hlIFplc3TihKIuIFRoaXMgYnVuZGxlIHByb3ZpZGVzIFNlcnZsZXQgc3VwcG9ydC4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gU2hpcm8gV2ViIiB9fQogCiBkZXBlbmRlbmNpZXMgewogCkBAIC0xMCw2ICsyOSw3IEBACiAgIGNvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5odHRwJyApCiAgIGNvbXBpbGUgbGlicmFyaWVzLnNoaXJvX3dlYgogICBjb21waWxlIGxpYnJhcmllcy5zZXJ2bGV0X2FwaQorICBjb21waWxlIGxpYnJhcmllcy5zbGY0al9hcGkKIAogICB0ZXN0Q29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIgKQogICB0ZXN0Q29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LnNoaXJvLXdlYiIgKQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NoaXJvLXdlYi9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9zaGlyby13ZWIvZGV2LXN0YXR1cy54bWwKaW5kZXggMjRlZDU5MC4uY2JjZDI3NCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NoaXJvLXdlYi9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvc2hpcm8td2ViL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NoaXJvLXdlYi9zcmMvZG9jcy9zaGlyby13ZWIudHh0IGIvbGlicmFyaWVzL3NoaXJvLXdlYi9zcmMvZG9jcy9zaGlyby13ZWIudHh0CmluZGV4IDhhMmI0Y2MuLmM5MmQ5YjggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zaGlyby13ZWIvc3JjL2RvY3Mvc2hpcm8td2ViLnR4dAorKysgYi9saWJyYXJpZXMvc2hpcm8td2ViL3NyYy9kb2NzL3NoaXJvLXdlYi50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbbGlicmFyeS1zaGlyby13ZWIsIFNoaXJvIFdlYiBTZWN1cml0eSBMaWJyYXJ5XV0KID0gU2hpcm8gV2ViIFNlY3VyaXR5ID0KIApAQCAtMTgsMTYgKzM3LDE2IEBACiBTaGlybyB3ZWJzaXRlLgogCiBXZSBpbnZpdGUgeW91IHRvIHJlYWQgdGhlIGNvbXByZWhlbnNpdmUgaHR0cDovL3NoaXJvLmFwYWNoZS5vcmcvZG9jdW1lbnRhdGlvbi5odG1sW0FwYWNoZSBTaGlybyBkb2N1bWVudGF0aW9uXSwgd2Ugd2lsbAotbW9zdGx5IGRpc2N1c3MgUWk0aiByZWxhdGVkIG1hdHRlcnMgaGVyZS4KK21vc3RseSBkaXNjdXNzIFplc3TihKIgcmVsYXRlZCBtYXR0ZXJzIGhlcmUuCiAKIGluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCiAKID09IFNlcnZsZXQgQ29udGV4dCA9PQogCi1JbiBhIHNlcnZsZXQgY29udGV4dCwgYmVpbmcgdGhyb3VnaCB0aGUgPDxsaWJyYXJ5LXNlcnZsZXQ+PiwgdGhlIDw8bGlicmFyeS1odHRwPj4gb3IgeW91ciBjdXN0b20gUWk0aiBhcHBsaWNhdGlvbgorSW4gYSBzZXJ2bGV0IGNvbnRleHQsIGJlaW5nIHRocm91Z2ggdGhlIDw8bGlicmFyeS1zZXJ2bGV0Pj4sIHRoZSA8PGxpYnJhcnktaHR0cD4+IG9yIHlvdXIgY3VzdG9tIFplc3TihKIgYXBwbGljYXRpb24KIGJvb3RzdHJhcCwgcGxhaW4gU2hpcm8gaXMgdXNhYmxlLiBBIFdlYkVudmlyb25tZW50IG11c3QgYmUgZ2xvYmFsbHkgYXZhaWxhYmxlIGFuZCBTaGlyb0ZpbHRlciBtdXN0IGJlIHJlZ2lzdGVyZWQuCiAKLUlmIHlvdSB1c2UgYSBjdXN0b20gUWk0aiBhcHBsaWNhdGlvbiBib29zdHJhcCBvciB0aGUgPDxsaWJyYXJ5LXNlcnZsZXQ+PiB5b3UgY2FuIGRpcmVjdGx5IHVzZSBTaGlybydzIHByb3ZpZGVkCitJZiB5b3UgdXNlIGEgY3VzdG9tIFplc3TihKIgYXBwbGljYXRpb24gYm9vc3RyYXAgb3IgdGhlIDw8bGlicmFyeS1zZXJ2bGV0Pj4geW91IGNhbiBkaXJlY3RseSB1c2UgU2hpcm8ncyBwcm92aWRlZAogRW52aXJvbm1lbnRMb2FkZXJMaXN0ZW5lciBhbmQgU2hpcm9GaWx0ZXIuCiAKIElmIHlvdSB1c2UgdGhlIDw8bGlicmFyeS1odHRwPj4geW91IGNhbiBlaXRoZXIgZGlyZWN0bHkgdXNlIFNoaXJvIGNsYXNzZXMgb3IgdXNlIHRoZSBhc3NlbWJseSBBUEkgYXMgZm9sbG93czoKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zaGlyby13ZWIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL3dlYi9hc3NlbWJseS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvc2hpcm8td2ViL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby93ZWIvYXNzZW1ibHkvcGFja2FnZS5odG1sCmluZGV4IGQ5M2Y2NzYuLjE0NjczYjUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zaGlyby13ZWIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL3dlYi9hc3NlbWJseS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3NoaXJvLXdlYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vd2ViL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U2hpcm8gV2ViIFNlY3VyaXR5IEFzc2VtYmx5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2hpcm8td2ViL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby93ZWIvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NoaXJvLXdlYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc2hpcm8vd2ViL3BhY2thZ2UuaHRtbAppbmRleCA1YzA1MGU5Li5hZjFkNGI4IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2hpcm8td2ViL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zaGlyby93ZWIvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zaGlyby13ZWIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NoaXJvL3dlYi9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNoaXJvIFdlYiBTZWN1cml0eSBMaWJyYXJ5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc2hpcm8td2ViL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sIGIvbGlicmFyaWVzL3NoaXJvLXdlYi9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbAppbmRleCBlNzUyMjhmLi44YzliNTBhIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc2hpcm8td2ViL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCisrKyBiL2xpYnJhcmllcy9zaGlyby13ZWIvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stdGVzdC54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxjb25maWd1cmF0aW9uPgogCiAgICAgPGFwcGVuZGVyIG5hbWU9InN0ZG91dCIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNvcmUuQ29uc29sZUFwcGVuZGVyIj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zaGlyby13ZWIvc3JjL3Rlc3QvcmVzb3VyY2VzL3dlYi1zaGlyby5pbmkgYi9saWJyYXJpZXMvc2hpcm8td2ViL3NyYy90ZXN0L3Jlc291cmNlcy93ZWItc2hpcm8uaW5pCmluZGV4IGRhYTFiMjguLjRiYWIwNzYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zaGlyby13ZWIvc3JjL3Rlc3QvcmVzb3VyY2VzL3dlYi1zaGlyby5pbmkKKysrIGIvbGlicmFyaWVzL3NoaXJvLXdlYi9zcmMvdGVzdC9yZXNvdXJjZXMvd2ViLXNoaXJvLmluaQpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIFR1dG9yaWFsIElOSSBjb25maWd1cmF0aW9uCiAjCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3ByaW5nL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9zcHJpbmcvYnVpbGQuZ3JhZGxlCmluZGV4IDkzY2IxM2EuLmY1YjE2MTMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcHJpbmcvYnVpbGQuZ3JhZGxlCisrKyBiL2xpYnJhcmllcy9zcHJpbmcvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogU3ByaW5nIExpYnJhcnkgYWxsb3dzIGZvciB0aWdodCBpbnRlZ3JhdGlvbiBvZiBTcHJpbmcgRnJhbWV3b3JrIGFuZCBRaTRqIGFwcGxpY2F0aW9ucy4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gU3ByaW5nIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgU3ByaW5nIExpYnJhcnkgYWxsb3dzIGZvciB0aWdodCBpbnRlZ3JhdGlvbiBvZiBTcHJpbmcgRnJhbWV3b3JrIGFuZCBBcGFjaGUgWmVzdOKEoiBhcHBsaWNhdGlvbnMuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIFNwcmluZyIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NwcmluZy9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9zcHJpbmcvZGV2LXN0YXR1cy54bWwKaW5kZXggNjU0ZDNhYS4uNThmZGEwOSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9kZXYtc3RhdHVzLnhtbAorKysgYi9saWJyYXJpZXMvc3ByaW5nL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpAQCAtOCw3ICsyNCw3IEBACiAgICAgPGNvZGViYXNlPmJldGE8L2NvZGViYXNlPgogCiAgICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPGRvY3VtZW50YXRpb24+bm9uZTwvZG9jdW1lbnRhdGlvbj4KKyAgICA8ZG9jdW1lbnRhdGlvbj5icmllZjwvZG9jdW1lbnRhdGlvbj4KIAogICAgIDwhLS0gbm9uZSwgc29tZSwgZ29vZCwgY29tcGxldGUgLS0+CiAgICAgPHVuaXR0ZXN0cz5zb21lPC91bml0dGVzdHM+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3ByaW5nL3NyYy9kb2NzL3NwcmluZy50eHQgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy9kb2NzL3NwcmluZy50eHQKaW5kZXggNzMzMDk1Zi4uMTJlYzQ3ZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9zcmMvZG9jcy9zcHJpbmcudHh0CisrKyBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL2RvY3Mvc3ByaW5nLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LXNwcmluZywgU3ByaW5nIEludGVncmF0aW9uIExpYnJhcnldXQogPSBTcHJpbmcgSW50ZWdyYXRpb24gPQogCkBAIC02LDggKzI1LDY3IEBACiBzb3VyY2U9bGlicmFyaWVzL3NwcmluZy9kZXYtc3RhdHVzLnhtbAogLS0tLS0tLS0tLS0tLS0KIAotU3ByaW5nIEludGVncmF0aW9uIExpYnJhcnkKLQotTk9URTogVGhpcyBMaWJyYXJ5IGhhcyBubyBkb2N1bWVudGF0aW9uIHlldC4gTGVhcm4gaG93IHRvIGNvbnRyaWJ1dGUgaW4gPDxjb21tdW5pdHktZG9jcz4+LgotCiBpbmNsdWRlOjouLi8uLi9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQorCis9PSBVc2luZyBTcHJpbmcgRnJhbWV3b3JrIGluIEFwYWNoZSBaZXN04oSiID09CitaZXN04oSiIHN1cHBvcnRzIHRoYXQgU3ByaW5nIEFwcGxpY2F0aW9uIENvbnRleHQgaXMgaW1wb3J0ZWQgaW50byB0aGUgWmVzdOKEoiBydW50aW1lLCBhbmQgdGhlIGRlY2xhcmVkIFNwcmluZworYmVhbnMgd2lsbCBiZSBhdmFpbGFibGUgYXMgWmVzdOKEoiBzZXJ2aWNlcy4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5ncyB0byByZW1lbWJlciBhcmU7CisKKyAgICAxLiBPbmx5IFNwcmluZyBTaW5nbGV0b25zIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLgorICAgIDIuIE9uZSBBcHBsaWNhdGlvbkNvbnRleHQgcGVyIFplc3TihKIgTW9kdWxlLgorICAgIDMuIFRoZSBaZXN04oSiIHNlcnZpY2Ugd2lsbCBiZSBnaXZlbiB0aGUgc2FtZSBuYW1lIGFzIHRoZSBTcHJpbmcgQmVhbiBuYW1lLgorICAgIDQuIFplc3TihKIgQ29uZmlndXJhdGlvbiBpcyBub3QgcmVhY2JhYmxlIGZyb20gdGhlIFNwcmluZyBiZWFuIChraW5kIG9mIG9idmlvdXMpLgorCitbc25pcHBldCxqYXZhXQorLS0tLQorc291cmNlPWxpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9pbXBvcnRlci9RaTRqSW1wb3J0U2VydmljZVRlc3QuamF2YQordGFnPWltcG9ydAorLS0tLQorCis9PSBVc2luZyBBcGFjaGUgWmVzdOKEoiBpbiBTcHJpbmcgRnJhbWV3b3JrID09CitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHJ1biBhIFplc3TihKIgQXBwbGljYXRpb24gYXMgYSBTcHJpbmcgQmVhbiBhbmQgZXhwb3J0IGl0cyBTZXJ2aWNlcyB0byBTcHJpbmcuCisKK1N0ZXBzIHRvIGV4cG9ydCBaZXN04oSiIHNlcnZpY2U6CisKKyAgICAxLiBDcmVhdGUgc3ByaW5nIEJlYW5GYWN0b3J5IHNlcnZpY2Ugb2YgcWk0aiBzZXJ2aWNlcyB0byBleHBvcnQuCisgICAgMi4gQ3JlYXRlIGEgY2xhc3MgdGhhdCBleHRlbmRzIFFpNGpBcHBsaWNhdGlvbkJvb3RzdHJhcC4KKyAgICAzLiBTZXRzIHRoZSBsYXllciBhbmQgbW9kdWxlIHRoYXQgcmVnaXN0ZXIgQmVhbkZhY3Rvcnkgc2VydmljZS4KKyAgICA0LiBBc3NlbWJsZSBxaTRqIGFwcGxpY2F0aW9uIGJ5IGltcGxlbWVudGluZyAjYXNzZW1ibGUgbWV0aG9kLgorICAgIDUuIFNldHMgdGhlIGlkZW50aXR5IG9mIGJlYW4gZmFjdG9yeSBzZXJ2aWNlLiBUaGlzIGlkZW50aXR5IGlzIHRoZSBzcHJpbmcgYmVhbiBuYW1lLgorICAgIDYuIERlY2xhcmUgcWk0aiBib290c3RyYXAgaW4gc3ByaW5nIHhtbCBhcHBsaWNhdGlvbiBjb250ZXh0LgorCitUbyBib290c3RyYXAgdGhlIFplc3TihKIgcnVudGltZSBpbiBTcHJpbmcsIHlvdSBzaG91bGQgaGF2ZSBhIGJvb3RzdHJhcCBiZWFuIHRoYXQgZXh0ZW5kcyB0aGUKKytvcmcucWk0ai5saWJyYXJ5LnNwcmluZy5ib290c3RyYXAuUWk0akFwcGxpY2F0aW9uQm9vdHN0cmFwKyBhbmQgaW1wbGVtZW50IHRoZQorK29yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkNvbnRleHRBd2FyZSsuCisKK0EgbmV3IGJlYW4gd2lsbCBhcHBlYXIgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQsIGNhbGxlZCArInFpNGpBcHBsaWNhdGlvbiIrIHdoaWNoIGlzIG9ubHkKK2ludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb2YgdGhpcyBsaWJyYXJ5LgorCitFeGFtcGxlIGFwcGxpY2F0aW9uIGNvbnRleHQ7Citbc291cmNlLHhtbF0KKy0tLS0KKyA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCisgPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICB4bWxuczpxaTRqPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYS9xaTRqL3NwcmluZyIKKyAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy0yLjUueHNkCisgIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hL3FpNGovc3ByaW5nIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hL3FpNGovc3ByaW5nL3NwcmluZy0wLjUueHNkIj4KKworICA8IS0tIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBRaTRqQXBwbGljYXRpb25Cb290c3RyYXAgLS0+CisKKyAgPHFpNGo6Ym9vdHN0cmFwIGNsYXNzPSJvcmcuaGVkaG1hbi5uaWNsYXMuTXlaZXN0Qm9vdHN0cmFwcGVyIi8+CisKKyAgPGJlYW4gaWQ9InNvbWVTZXJ2aWNlIiBjbGFzcz0ib3JnLmhlZGhtYW4ubmljbGFzLlNvbWVTZXJ2aWNlIj4KKworICA8Y29uc3RydWN0b3ItYXJnIHJlZj0ic29tZVNlcnZpY2UiLz4gPCEtLSBSZWZlcmVuY2UgcWk0aiBjb21tZW50IHNlcnZpY2UgLS0+CisKKyA8L2JlYW4+CistLS0tCisKK1tzbmlwcGV0LGphdmFdCistLS0tCitzb3VyY2U9bGlicmFyaWVzL3NwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL015WmVzdEJvb3RzdHJhcHBlci5qYXZhCit0YWc9Y29kZQorLS0tLQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9RaTRqQXBwbGljYXRpb25Cb290c3RyYXAuamF2YSBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvUWk0akFwcGxpY2F0aW9uQm9vdHN0cmFwLmphdmEKaW5kZXggZGNjYzYzZC4uYTYwNjYxYiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9RaTRqQXBwbGljYXRpb25Cb290c3RyYXAuamF2YQorKysgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL1FpNGpBcHBsaWNhdGlvbkJvb3RzdHJhcC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LkFwcGxpY2F0aW9uQ29udGV4dEF3YXJlOwogCiAvKioKLSAqIFJ1biBhIFFpNGogQXBwbGljYXRpb24gYXMgYSBTcHJpbmcgQmVhbiBhbmQgZXhwb3J0IGl0cyBTZXJ2aWNlcyB0byBTcHJpbmcuCisgKiBSdW4gYSBaZXN0IEFwcGxpY2F0aW9uIGFzIGEgU3ByaW5nIEJlYW4gYW5kIGV4cG9ydCBpdHMgU2VydmljZXMgdG8gU3ByaW5nLgogICogPHA+Ci0gKiBTdGVwcyB0byBleHBvcnQgUWk0aiBzZXJ2aWNlOgorICogU3RlcHMgdG8gZXhwb3J0IFplc3Qgc2VydmljZToKICAqIDwvcD4KICAqIDx1bD4KICAqIDxsaT5DcmVhdGUgc3ByaW5nIEJlYW5GYWN0b3J5IHNlcnZpY2Ugb2YgcWk0aiBzZXJ2aWNlcyB0byBleHBvcnQuPC9saT4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvaW50ZXJuYWwvYXBwbGljYXRpb24vUWk0akJvb3RzdHJhcEJlYW5EZWZpbml0aW9uUGFyc2VyLmphdmEgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL2ludGVybmFsL2FwcGxpY2F0aW9uL1FpNGpCb290c3RyYXBCZWFuRGVmaW5pdGlvblBhcnNlci5qYXZhCmluZGV4IGFhNjhkYzEuLmZiODc1YjMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvaW50ZXJuYWwvYXBwbGljYXRpb24vUWk0akJvb3RzdHJhcEJlYW5EZWZpbml0aW9uUGFyc2VyLmphdmEKKysrIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9pbnRlcm5hbC9hcHBsaWNhdGlvbi9RaTRqQm9vdHN0cmFwQmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQpAQCAtNTcsMTAgKzU3LDEwIEBACiAgICAgICAgIENsYXNzPD8+IGJvb3RzdHJhcENsYXNzOwogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgYm9vdHN0cmFwQ2xhc3MgPSBmb3JOYW1lKCBib290c3RyYXBDbGFzc1N0cmluZyApOworICAgICAgICAgICAgYm9vdHN0cmFwQ2xhc3MgPSBmb3JOYW1lKCBib290c3RyYXBDbGFzc1N0cmluZywgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpICk7CiAgICAgICAgIH0gY2F0Y2ggKCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUgKQogICAgICAgICB7Ci0gICAgICAgICAgICByZWFkZXJDb250ZXh0LmVycm9yKCAiUWk0aiBib290c3RyYXAgY2xhc3MgWyIgKyBib290c3RyYXBDbGFzc1N0cmluZyArICJdIGlzIG5vdCBmb3VuZC4iLCBhbkVsZW1lbnQgKTsKKyAgICAgICAgICAgIHJlYWRlckNvbnRleHQuZXJyb3IoICJaZXN0IGJvb3RzdHJhcCBjbGFzcyBbIiArIGJvb3RzdHJhcENsYXNzU3RyaW5nICsgIl0gaXMgbm90IGZvdW5kLiIsIGFuRWxlbWVudCApOwogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9pbnRlcm5hbC9hcHBsaWNhdGlvbi9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL2ludGVybmFsL2FwcGxpY2F0aW9uL3BhY2thZ2UuaHRtbAppbmRleCA0YmQ1YzE5Li5lMWMyMDkzIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL2ludGVybmFsL2FwcGxpY2F0aW9uL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL2ludGVybmFsL2FwcGxpY2F0aW9uL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U3ByaW5nIEludGVncmF0aW9uIGludGVybmFsIHBhY2thZ2UuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvaW50ZXJuYWwvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKaW5kZXggNGJkNWMxOS4uZTFjMjA5MyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNwcmluZyBJbnRlZ3JhdGlvbiBpbnRlcm5hbCBwYWNrYWdlLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL2ludGVybmFsL3NlcnZpY2UvU2VydmljZUZhY3RvcnlCZWFuLmphdmEgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL2ludGVybmFsL3NlcnZpY2UvU2VydmljZUZhY3RvcnlCZWFuLmphdmEKaW5kZXggYjVhMTQzYS4uNzZjNWJmZiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9pbnRlcm5hbC9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5QmVhbi5qYXZhCisrKyBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvaW50ZXJuYWwvc2VydmljZS9TZXJ2aWNlRmFjdG9yeUJlYW4uamF2YQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgICAgIGlmKCBzZXJ2aWNlUmVmZXJlbmNlID09IG51bGwgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiUWk0aiBzZXJ2aWNlIHdpdGggaWQgWyIgKyBhU2VydmljZUlkICsgIl0gaXMgbm90IGZvdW5kLiIgKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJaZXN0IHNlcnZpY2Ugd2l0aCBpZCBbIiArIGFTZXJ2aWNlSWQgKyAiXSBpcyBub3QgZm91bmQuIiApOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL2ludGVybmFsL3NlcnZpY2UvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9pbnRlcm5hbC9zZXJ2aWNlL3BhY2thZ2UuaHRtbAppbmRleCA0YmQ1YzE5Li5lMWMyMDkzIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL2ludGVybmFsL3NlcnZpY2UvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvaW50ZXJuYWwvc2VydmljZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNwcmluZyBJbnRlZ3JhdGlvbiBpbnRlcm5hbCBwYWNrYWdlLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvcGFja2FnZS5odG1sCmluZGV4IDQ0MjdhMjMuLjY2NDU2NWYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvcGFja2FnZS5odG1sCkBAIC0xLDUgKzEsMjEgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+Ci0gICAgICAgIDxoMj5SdW4gYSBRaTRqIEFwcGxpY2F0aW9uIGFzIGEgU3ByaW5nIEJlYW4gYW5kIGV4cG9ydCBpdHMgU2VydmljZXMgdG8gU3ByaW5nLjwvaDI+CisgICAgICAgIDxoMj5SdW4gYSBaZXN04oSiIEFwcGxpY2F0aW9uIGFzIGEgU3ByaW5nIEJlYW4gYW5kIGV4cG9ydCBpdHMgU2VydmljZXMgdG8gU3ByaW5nLjwvaDI+CiAgICAgPC9ib2R5PgogPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9pbXBvcnRlci9TcHJpbmdJbXBvcnRlckFzc2VtYmxlci5qYXZhIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2ltcG9ydGVyL1NwcmluZ0ltcG9ydGVyQXNzZW1ibGVyLmphdmEKaW5kZXggNDNkMWVjMy4uZjdmMDZmOSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2ltcG9ydGVyL1NwcmluZ0ltcG9ydGVyQXNzZW1ibGVyLmphdmEKKysrIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2ltcG9ydGVyL1NwcmluZ0ltcG9ydGVyQXNzZW1ibGVyLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIFZpc2liaWxpdHkgZGVmYXVsdFZpc2liaWxpdHk7CiAKICAgICAvKioKLSAgICAgKiBJbXBvcnQgYWxsIGJlYW5zIGZyb20gdGhlIGdpdmVuIEFwcGxpY2F0aW9uQ29udGV4dCBhcyBzZXJ2aWNlcyBpbiBRaTRqLAorICAgICAqIEltcG9ydCBhbGwgYmVhbnMgZnJvbSB0aGUgZ2l2ZW4gQXBwbGljYXRpb25Db250ZXh0IGFzIHNlcnZpY2VzIGluIFplc3QsCiAgICAgICogdXNpbmcgTW9kdWxlIGFzIFZpc2liaWxpdHkuCiAgICAgICoKICAgICAgKiBAcGFyYW0gY29udGV4dCB0aGUgU3ByaW5nIEFwcGxpY2F0aW9uQ29udGV4dApAQCAtNDIsNyArNDIsNyBAQAogCiAKICAgICAvKioKLSAgICAgKiBJbXBvcnQgYWxsIGJlYW5zIGZyb20gdGhlIGdpdmVuIEFwcGxpY2F0aW9uQ29udGV4dCBhcyBzZXJ2aWNlcyBpbiBRaTRqLAorICAgICAqIEltcG9ydCBhbGwgYmVhbnMgZnJvbSB0aGUgZ2l2ZW4gQXBwbGljYXRpb25Db250ZXh0IGFzIHNlcnZpY2VzIGluIFplc3QsCiAgICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBWaXNpYmlsaXR5IGxldmVsLgogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgICAgICAgICAgIHRoZSBTcHJpbmcgQXBwbGljYXRpb25Db250ZXh0CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvaW1wb3J0ZXIvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2ltcG9ydGVyL3BhY2thZ2UuaHRtbAppbmRleCA5YTRlZjM2Li41YTlhNmNjIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvaW1wb3J0ZXIvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9pbXBvcnRlci9wYWNrYWdlLmh0bWwKQEAgLTEsNSArMSwyMSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KLSAgICAgICAgPGgyPkltcG9ydCBTcHJpbmcgU2VydmljZXMgaW5zaWRlIGEgUWk0aiBBcHBsaWNhdGlvbi48L2gyPgorICAgICAgICA8aDI+SW1wb3J0IFNwcmluZyBTZXJ2aWNlcyBpbnNpZGUgYSBaZXN04oSiIEFwcGxpY2F0aW9uLjwvaDI+CiAgICAgPC9ib2R5PgogPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvcGFja2FnZS5odG1sCmluZGV4IGZlOGM5MmYuLjUxNmQwMzUgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U3ByaW5nIEludGVncmF0aW9uLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcuaGFuZGxlcnMgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcuaGFuZGxlcnMKaW5kZXggYTQ4ZDE4YS4uNjdiNGVlNCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nLmhhbmRsZXJzCisrKyBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy5oYW5kbGVycwpAQCAtMSArMSwxNiBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogaHR0cFw6Ly93d3cucWk0ai5vcmcvc2NoZW1hL3FpNGovc3ByaW5nPW9yZy5xaTRqLmxpYnJhcnkuc3ByaW5nLmJvb3RzdHJhcC5pbnRlcm5hbC5RaTRqTmFtZXNwYWNlSGFuZGxlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy5zY2hlbWFzIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nLnNjaGVtYXMKaW5kZXggODRiZjFmOC4uNjY5NTg3NyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nLnNjaGVtYXMKKysrIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nLnNjaGVtYXMKQEAgLTEgKzEsMTYgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGh0dHBcOi8vd3d3LnFpNGoub3JnL3NjaGVtYS9xaTRqL3NwcmluZy9zcHJpbmctMC41LnhzZD1vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9zcHJpbmctMC41LnhzZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL3NwcmluZy0wLjUueHNkIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvc3ByaW5nLTAuNS54c2QKaW5kZXggOWJjZWE1MS4uYWY2MmVjYyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvc3ByaW5nLTAuNS54c2QKKysrIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvc3ByaW5nLTAuNS54c2QKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx4c2Q6c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYS9xaTRqL3NwcmluZyIKICAgICAgICAgICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgICAgICAgICB4bWxuczpiZWFucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9NeVplc3RCb290c3RyYXBwZXIuamF2YSBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9NeVplc3RCb290c3RyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmNmMGEyCi0tLSAvZGV2L251bGwKKysrIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL015WmVzdEJvb3RzdHJhcHBlci5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3ByaW5nOworCitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFwcGxpY2F0aW9uQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3ByaW5nLmJvb3RzdHJhcC5RaTRqQXBwbGljYXRpb25Cb290c3RyYXA7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5CZWFuc0V4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkNvbnRleHRBd2FyZTsKKworLy8gU1RBUlQgU05JUFBFVDogY29kZQorcHVibGljIGNsYXNzIE15WmVzdEJvb3RzdHJhcHBlciBleHRlbmRzIFFpNGpBcHBsaWNhdGlvbkJvb3RzdHJhcAorICAgICAgICBpbXBsZW1lbnRzIEFwcGxpY2F0aW9uQ29udGV4dEF3YXJlCit7CisgICAgcHJpdmF0ZSBBcHBsaWNhdGlvbkNvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoQXBwbGljYXRpb25Bc3NlbWJseSBhc3NlbWJseSkgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCisgICAgeworICAgICAgICAvLyBOb3JtYWwgYXNzZW1ibHkgb2YgYW4gYXBwbGljYXRpb24uCisvLyBFTkQgU05JUFBFVDogY29kZQorLy8gU1RBUlQgU05JUFBFVDogY29kZQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldEFwcGxpY2F0aW9uQ29udGV4dChBcHBsaWNhdGlvbkNvbnRleHQgYXBwbGljYXRpb25Db250ZXh0KSB0aHJvd3MgQmVhbnNFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gYXBwbGljYXRpb25Db250ZXh0OworICAgIH0KKworfQorLy8gRU5EIFNOSVBQRVQ6IGNvZGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvVGV4dFByb2Nlc3NpbmdTZXJ2aWNlLmphdmEgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL1RleHRQcm9jZXNzaW5nU2VydmljZS5qYXZhCmluZGV4IDNjOTE3MDEuLmUyMTk1NjggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvVGV4dFByb2Nlc3NpbmdTZXJ2aWNlLmphdmEKKysrIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9UZXh0UHJvY2Vzc2luZ1NlcnZpY2UuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnNwcmluZy5ib290c3RyYXA7CiAKIHB1YmxpYyBpbnRlcmZhY2UgVGV4dFByb2Nlc3NpbmdTZXJ2aWNlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL1RvVXBwZXJjYXNlU2VydmljZS5qYXZhIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9Ub1VwcGVyY2FzZVNlcnZpY2UuamF2YQppbmRleCA4ZTM0Y2MzLi4xZTZjMjU5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL1RvVXBwZXJjYXNlU2VydmljZS5qYXZhCisrKyBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvVG9VcHBlcmNhc2VTZXJ2aWNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zcHJpbmcuYm9vdHN0cmFwOwogCiBwdWJsaWMgY2xhc3MgVG9VcHBlcmNhc2VTZXJ2aWNlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvaW1wb3J0ZXIvUWk0akltcG9ydFNlcnZpY2VUZXN0LmphdmEgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvaW1wb3J0ZXIvUWk0akltcG9ydFNlcnZpY2VUZXN0LmphdmEKaW5kZXggNGY0ODg1MC4uZmM3NmJlYSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2ltcG9ydGVyL1FpNGpJbXBvcnRTZXJ2aWNlVGVzdC5qYXZhCisrKyBiL2xpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9pbXBvcnRlci9RaTRqSW1wb3J0U2VydmljZVRlc3QuamF2YQpAQCAtNTQsOCArNTQsOSBAQAogICAgICAgICAgICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1vZHVsZS5vYmplY3RzKCBRaTRqSW1wb3J0U2VydmljZVRlc3QuY2xhc3MgKTsKLQorICAgICAgICAgICAgICAgIC8vIFNUQVJUIFNOSVBQRVQ6IGltcG9ydAogICAgICAgICAgICAgICAgIG5ldyBTcHJpbmdJbXBvcnRlckFzc2VtYmxlciggYXBwQ29udGV4dCApLmFzc2VtYmxlKCBtb2R1bGUgKTsKKyAgICAgICAgICAgICAgICAvLyBFTkQgU05JUFBFVDogaW1wb3J0CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9RaTRqRXhwb3J0U2VydmljZVRlc3QtY29udGV4dC54bWwgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9ib290c3RyYXAvUWk0akV4cG9ydFNlcnZpY2VUZXN0LWNvbnRleHQueG1sCmluZGV4IDQ0ZjA3YWUuLmE5NmVjMWMgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2Jvb3RzdHJhcC9RaTRqRXhwb3J0U2VydmljZVRlc3QtY29udGV4dC54bWwKKysrIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvYm9vdHN0cmFwL1FpNGpFeHBvcnRTZXJ2aWNlVGVzdC1jb250ZXh0LnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpxaTRqPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYS9xaTRqL3NwcmluZyIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgogICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMtMi41LnhzZApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NwcmluZy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvaW1wb3J0ZXIvUWk0akltcG9ydFNlcnZpY2VUZXN0LWNvbnRleHQueG1sIGIvbGlicmFyaWVzL3NwcmluZy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9zcHJpbmcvaW1wb3J0ZXIvUWk0akltcG9ydFNlcnZpY2VUZXN0LWNvbnRleHQueG1sCmluZGV4IGIwYmM4ODEuLjE5YzlhZjcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcHJpbmcvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvc3ByaW5nL2ltcG9ydGVyL1FpNGpJbXBvcnRTZXJ2aWNlVGVzdC1jb250ZXh0LnhtbAorKysgYi9saWJyYXJpZXMvc3ByaW5nL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvcWk0ai9saWJyYXJ5L3NwcmluZy9pbXBvcnRlci9RaTRqSW1wb3J0U2VydmljZVRlc3QtY29udGV4dC54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsLWJvbmVjcC9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvc3FsLWJvbmVjcC9idWlsZC5ncmFkbGUKaW5kZXggZjVmMDMyYi4uYTUwMzMzOCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NxbC1ib25lY3AvYnVpbGQuZ3JhZGxlCisrKyBiL2xpYnJhcmllcy9zcWwtYm9uZWNwL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIFNRTCBCb25lQ1AgTGlicmFyeSBwcm92aWRlcyBCb25lQ1Agc3VwcG9ydC4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gU1FMIEJvbmVDUCIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIFNRTCBCb25lQ1AgTGlicmFyeSBwcm92aWRlcyBCb25lQ1Agc3VwcG9ydC4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gU1FMIEJvbmVDUCIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuc3FsIikpCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsLWJvbmVjcC9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9zcWwtYm9uZWNwL2Rldi1zdGF0dXMueG1sCmluZGV4IGEwYzlmYmIuLmJkZjAwZTcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcWwtYm9uZWNwL2Rldi1zdGF0dXMueG1sCisrKyBiL2xpYnJhcmllcy9zcWwtYm9uZWNwL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NxbC1ib25lY3Avc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9ib25lY3AvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NxbC1ib25lY3Avc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9ib25lY3AvcGFja2FnZS5odG1sCmluZGV4IDM3NTMxMjkuLjQwNjBkN2YgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcWwtYm9uZWNwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvYm9uZWNwL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc3FsLWJvbmVjcC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2JvbmVjcC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNRTCBCb25lQ1AgU3VwcG9ydC48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NxbC1jM3AwL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9zcWwtYzNwMC9idWlsZC5ncmFkbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNjBkZTcuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3NxbC1jM3AwL2J1aWxkLmdyYWRsZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBTUUwgQzNQMCBMaWJyYXJ5IHByb3ZpZGVzIEMzUDAgc3VwcG9ydC4iCi0KLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBTUUwgQzNQMCIgfX0KLQotZGVwZW5kZW5jaWVzIHsKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuc3FsIikpCi0gIGNvbXBpbGUobGlicmFyaWVzLmMzcDApCi19Ci0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwtYzNwMC9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9zcWwtYzNwMC9kZXYtc3RhdHVzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjOWZiYi4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3FsLWMzcDAvZGV2LXN0YXR1cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKLSAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKLSAgICAgICAgaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xL2Rldi1zdGF0dXMueHNkIj4KLSAgPHN0YXR1cz4KLSAgICA8IS0tbm9uZSxlYXJseSxiZXRhLHN0YWJsZSxtYXR1cmUtLT4KLSAgICA8Y29kZWJhc2U+c3RhYmxlPC9jb2RlYmFzZT4KLQotICAgIDwhLS0gbm9uZSwgYnJpZWYsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDxkb2N1bWVudGF0aW9uPmdvb2Q8L2RvY3VtZW50YXRpb24+Ci0KLSAgICA8IS0tIG5vbmUsIHNvbWUsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDx1bml0dGVzdHM+Z29vZDwvdW5pdHRlc3RzPgotICA8L3N0YXR1cz4KLSAgPGxpY2Vuc2VzPgotICAgIDxsaWNlbnNlPkFMdjI8L2xpY2Vuc2U+Ci0gIDwvbGljZW5zZXM+Ci08L21vZHVsZT4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwtYzNwMC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2MzcDAvQzNQMERhdGFTb3VyY2VTZXJ2aWNlQXNzZW1ibGVyLmphdmEgYi9saWJyYXJpZXMvc3FsLWMzcDAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9jM3AwL0MzUDBEYXRhU291cmNlU2VydmljZUFzc2VtYmxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2I1ZWQ2Li4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zcWwtYzNwMC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2MzcDAvQzNQMERhdGFTb3VyY2VTZXJ2aWNlQXNzZW1ibGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBQYXVsIE1lcmxpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnNxbC5jM3AwOwotCi1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5WaXNpYmlsaXR5OwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNxbC5hc3NlbWJseS5BYnN0cmFjdFBvb2xlZERhdGFTb3VyY2VTZXJ2aWNlQXNzZW1ibGVyOwotCi0vKioKLSAqIFVzZSB0aGlzIEFzc2VtYmxlciB0byByZWdpc3RlciBhIERhdGFTb3VyY2VTZXJ2aWNlIGJhc2VkIG9uIEMzUDAgYW5kIGl0cyBDb25maWd1cmF0aW9uIGVudGl0eS4KLSAqLwotcHVibGljIGNsYXNzIEMzUDBEYXRhU291cmNlU2VydmljZUFzc2VtYmxlcgotICAgICAgICBleHRlbmRzIEFic3RyYWN0UG9vbGVkRGF0YVNvdXJjZVNlcnZpY2VBc3NlbWJsZXI8QzNQMERhdGFTb3VyY2VTZXJ2aWNlQXNzZW1ibGVyPgotewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25Bc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlLCBTdHJpbmcgaWRlbnRpdHksIFZpc2liaWxpdHkgdmlzaWJpbGl0eSApCi0gICAgewotICAgICAgICBtb2R1bGUuc2VydmljZXMoIEMzUDBEYXRhU291cmNlU2VydmljZUltcG9ydGVyLmNsYXNzICkuaWRlbnRpZmllZEJ5KCBpZGVudGl0eSApLnZpc2libGVJbiggdmlzaWJpbGl0eSApOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NxbC1jM3AwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvYzNwMC9DM1AwRGF0YVNvdXJjZVNlcnZpY2VJbXBvcnRlci5qYXZhIGIvbGlicmFyaWVzL3NxbC1jM3AwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvYzNwMC9DM1AwRGF0YVNvdXJjZVNlcnZpY2VJbXBvcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmJhZjVjLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zcWwtYzNwMC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2MzcDAvQzNQMERhdGFTb3VyY2VTZXJ2aWNlSW1wb3J0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExLCBSaWNrYXJkIMOWYmVyZy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxMiwgUGF1bCBNZXJsaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqCi0gKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zcWwuYzNwMDsKLQotaW1wb3J0IGNvbS5tY2hhbmdlLnYyLmMzcDAuQ29tYm9Qb29sZWREYXRhU291cmNlOwotaW1wb3J0IGNvbS5tY2hhbmdlLnYyLmMzcDAuRGF0YVNvdXJjZXM7Ci1pbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmF4LnNxbC5EYXRhU291cmNlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRvcnM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKLWltcG9ydCBvcmcucWk0ai5hcGkuc2VydmljZS5TZXJ2aWNlQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VJbXBvcnRlcjsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNxbC5kYXRhc291cmNlLkFic3RyYWN0RGF0YVNvdXJjZVNlcnZpY2VJbXBvcnRlck1peGluOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3FsLmRhdGFzb3VyY2UuRGF0YVNvdXJjZUNvbmZpZ3VyYXRpb25WYWx1ZTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNxbC5kYXRhc291cmNlLkRhdGFTb3VyY2VTZXJ2aWNlSW1wb3J0ZXJBY3RpdmF0aW9uOwotCi0vKioKLSAqIERhdGFTb3VyY2Ugc2VydmljZSBpbXBsZW1lbnRlZCBhcyBhIFNlcnZpY2VJbXBvcnRlci4KLSAqCi0gKiBJbXBvcnQgdmlzaWJsZSBEYXRhU291cmNlcyBhcyBTZXJ2aWNlcy4gVGhlIGRlZmF1bHQgTWl4aW4gdXNlIHRoZSBDM1AwCi0gKiBwb29saW5nIHN5c3RlbSBvcHRpb25hbHkgd3JhcHBlZCB3aXRoIENpcmN1aXRCcmVha2VyIHVzaW5nIGEgcHJveHkuCi0gKi8KLUBNaXhpbnMoIEMzUDBEYXRhU291cmNlU2VydmljZUltcG9ydGVyLk1peGluLmNsYXNzICkKLUBBY3RpdmF0b3JzKCBEYXRhU291cmNlU2VydmljZUltcG9ydGVyQWN0aXZhdGlvbi5BY3RpdmF0b3IuY2xhc3MgKQotcHVibGljIGludGVyZmFjZSBDM1AwRGF0YVNvdXJjZVNlcnZpY2VJbXBvcnRlcgotICAgICAgICBleHRlbmRzIFNlcnZpY2VJbXBvcnRlcjxEYXRhU291cmNlPiwgRGF0YVNvdXJjZVNlcnZpY2VJbXBvcnRlckFjdGl2YXRpb24sIFNlcnZpY2VDb21wb3NpdGUKLXsKLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTWl4aW4KLSAgICAgICAgICAgIGV4dGVuZHMgQWJzdHJhY3REYXRhU291cmNlU2VydmljZUltcG9ydGVyTWl4aW48Q29tYm9Qb29sZWREYXRhU291cmNlPgotICAgIHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIENvbWJvUG9vbGVkRGF0YVNvdXJjZSBzZXR1cERhdGFTb3VyY2VQb29sKCBEYXRhU291cmNlQ29uZmlndXJhdGlvblZhbHVlIGNvbmZpZyApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBDb21ib1Bvb2xlZERhdGFTb3VyY2UgcG9vbCA9IG5ldyBDb21ib1Bvb2xlZERhdGFTb3VyY2UoKTsKLQotICAgICAgICAgICAgQ2xhc3MuZm9yTmFtZSggY29uZmlnLmRyaXZlcigpLmdldCgpICk7Ci0gICAgICAgICAgICBwb29sLnNldERyaXZlckNsYXNzKCBjb25maWcuZHJpdmVyKCkuZ2V0KCkgKTsKLSAgICAgICAgICAgIHBvb2wuc2V0SmRiY1VybCggY29uZmlnLnVybCgpLmdldCgpICk7Ci0KLSAgICAgICAgICAgIGlmICggIWNvbmZpZy51c2VybmFtZSgpLmdldCgpLmVxdWFscyggIiIgKSApIHsKLSAgICAgICAgICAgICAgICBwb29sLnNldFVzZXIoIGNvbmZpZy51c2VybmFtZSgpLmdldCgpICk7Ci0gICAgICAgICAgICAgICAgcG9vbC5zZXRQYXNzd29yZCggY29uZmlnLnBhc3N3b3JkKCkuZ2V0KCkgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBjb25maWcubWluUG9vbFNpemUoKS5nZXQoKSAhPSBudWxsICkgewotICAgICAgICAgICAgICAgIHBvb2wuc2V0TWluUG9vbFNpemUoIGNvbmZpZy5taW5Qb29sU2l6ZSgpLmdldCgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIGNvbmZpZy5tYXhQb29sU2l6ZSgpLmdldCgpICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgcG9vbC5zZXRNYXhQb29sU2l6ZSggY29uZmlnLm1heFBvb2xTaXplKCkuZ2V0KCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggY29uZmlnLmxvZ2luVGltZW91dFNlY29uZHMoKS5nZXQoKSAhPSBudWxsICkgewotICAgICAgICAgICAgICAgIHBvb2wuc2V0TG9naW5UaW1lb3V0KCBjb25maWcubG9naW5UaW1lb3V0U2Vjb25kcygpLmdldCgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIGNvbmZpZy5tYXhDb25uZWN0aW9uQWdlU2Vjb25kcygpLmdldCgpICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgcG9vbC5zZXRNYXhJZGxlVGltZSggY29uZmlnLm1heENvbm5lY3Rpb25BZ2VTZWNvbmRzKCkuZ2V0KCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggY29uZmlnLnZhbGlkYXRpb25RdWVyeSgpLmdldCgpICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgcG9vbC5zZXRQcmVmZXJyZWRUZXN0UXVlcnkoIGNvbmZpZy52YWxpZGF0aW9uUXVlcnkoKS5nZXQoKSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgcHJvcHMgPSBjb25maWcucHJvcGVydGllcygpLmdldCgpOwotICAgICAgICAgICAgU3RyaW5nW10gcHJvcGVydGllcyA9IHByb3BzLnNwbGl0KCAiLCIgKTsKLSAgICAgICAgICAgIFByb3BlcnRpZXMgcG9vbFByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOwotICAgICAgICAgICAgZm9yICggU3RyaW5nIHByb3BlcnR5IDogcHJvcGVydGllcyApIHsKLSAgICAgICAgICAgICAgICBpZiAoIHByb3BlcnR5LnRyaW0oKS5sZW5ndGgoKSA+IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGtleXZhbHVlID0gcHJvcGVydHkudHJpbSgpLnNwbGl0KCAiPSIgKTsKLSAgICAgICAgICAgICAgICAgICAgcG9vbFByb3BlcnRpZXMuc2V0UHJvcGVydHkoIGtleXZhbHVlWzBdLCBrZXl2YWx1ZVsxXSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBvb2wuc2V0UHJvcGVydGllcyggcG9vbFByb3BlcnRpZXMgKTsKLQotICAgICAgICAgICAgcmV0dXJuIHBvb2w7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcGFzc2l2YXRlRGF0YVNvdXJjZVBvb2woIENvbWJvUG9vbGVkRGF0YVNvdXJjZSBkYXRhU291cmNlUG9vbCApCi0gICAgICAgICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBEYXRhU291cmNlcy5kZXN0cm95KCBkYXRhU291cmNlUG9vbCApOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsLWMzcDAvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9jM3AwL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zcWwtYzNwMC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2MzcDAvcGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDhhMDM4Li4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zcWwtYzNwMC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2MzcDAvcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD4KLSAgICA8Ym9keT4KLSAgICAgICAgPGgyPlNRTCBDM1AwIFN1cHBvcnQuPC9oMj4KLSAgICA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NxbC1kYmNwL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9zcWwtZGJjcC9idWlsZC5ncmFkbGUKaW5kZXggZmVlM2UxZC4uNTFhYmU3YyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NxbC1kYmNwL2J1aWxkLmdyYWRsZQorKysgYi9saWJyYXJpZXMvc3FsLWRiY3AvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogU1FMIERCQ1AgTGlicmFyeSBwcm92aWRlcyBEQkNQIHN1cHBvcnQuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFNRTCBEQkNQIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgU1FMIERCQ1AgTGlicmFyeSBwcm92aWRlcyBEQkNQIHN1cHBvcnQuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIFNRTCBEQkNQIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5zcWwiKSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwtZGJjcC9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9zcWwtZGJjcC9kZXYtc3RhdHVzLnhtbAppbmRleCBhMGM5ZmJiLi5iZGYwMGU3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsLWRiY3AvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL3NxbC1kYmNwL2Rldi1zdGF0dXMueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgogICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NxbC1kYmNwL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvZGJjcC9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvc3FsLWRiY3Avc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9kYmNwL3BhY2thZ2UuaHRtbAppbmRleCAyNjNjODUzLi40OTNiZjQ3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsLWRiY3Avc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9kYmNwL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvc3FsLWRiY3Avc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9kYmNwL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U1FMIEFwYWNoZSBEQkNQIFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwtbGlxdWliYXNlL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9zcWwtbGlxdWliYXNlL2J1aWxkLmdyYWRsZQppbmRleCAyMGJmZjg5Li45MTA1NTJlIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsLWxpcXVpYmFzZS9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL3NxbC1saXF1aWJhc2UvYnVpbGQuZ3JhZGxlCkBAIC0xLDEzICsxLDMzIEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIFNRTCBMaXF1aWJhc2UgTGlicmFyeSBwcm92aWRlcyBMaXF1aWJhc2Ugc3VwcG9ydC4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBMaWJyYXJ5IC0gU1FMIExpcXVpYmFzZSIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIFNRTCBMaXF1aWJhc2UgTGlicmFyeSBwcm92aWRlcyBMaXF1aWJhc2Ugc3VwcG9ydC4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gU1FMIExpcXVpYmFzZSIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuc3FsIikpCiAgIGNvbXBpbGUobGlicmFyaWVzLmxpcXVpYmFzZSkKKyAgY29tcGlsZSBsaWJyYXJpZXMuc2xmNGpfYXBpCiAKICAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQotICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuc3FsLWMzcDAiKSkKKyAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LnNxbC1kYmNwIikpCiAKICAgdGVzdFJ1bnRpbWUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lIikpCiAgIHRlc3RSdW50aW1lKGxpYnJhcmllcy5kZXJieSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwtbGlxdWliYXNlL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL3NxbC1saXF1aWJhc2UvZGV2LXN0YXR1cy54bWwKaW5kZXggYTBjOWZiYi4uYmRmMDBlNyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NxbC1saXF1aWJhc2UvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL3NxbC1saXF1aWJhc2UvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsLWxpcXVpYmFzZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2xpcXVpYmFzZS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvc3FsLWxpcXVpYmFzZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2xpcXVpYmFzZS9wYWNrYWdlLmh0bWwKaW5kZXggOTY5MTcwYy4uOTVkZGNmMiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NxbC1saXF1aWJhc2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9saXF1aWJhc2UvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zcWwtbGlxdWliYXNlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvbGlxdWliYXNlL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+U1FMIExpcXVpYmFzZSBTdXBwb3J0LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsLWxpcXVpYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2xpcXVpYmFzZS9MaXF1aWJhc2VTZXJ2aWNlVGVzdC5qYXZhIGIvbGlicmFyaWVzL3NxbC1saXF1aWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9saXF1aWJhc2UvTGlxdWliYXNlU2VydmljZVRlc3QuamF2YQppbmRleCAzZjg5NDM0Li44MmU1NmU4IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsLWxpcXVpYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2xpcXVpYmFzZS9MaXF1aWJhc2VTZXJ2aWNlVGVzdC5qYXZhCisrKyBiL2xpYnJhcmllcy9zcWwtbGlxdWliYXNlL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvbGlxdWliYXNlL0xpcXVpYmFzZVNlcnZpY2VUZXN0LmphdmEKQEAgLTM3LDggKzM3LDggQEAKIGltcG9ydCBvcmcucWk0ai5pby5JbnB1dHM7CiBpbXBvcnQgb3JnLnFpNGouaW8uT3V0cHV0czsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNxbC5hc3NlbWJseS5EYXRhU291cmNlQXNzZW1ibGVyOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3FsLmMzcDAuQzNQMERhdGFTb3VyY2VTZXJ2aWNlQXNzZW1ibGVyOwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3FsLmNvbW1vbi5EYXRhYmFzZXM7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zcWwuZGJjcC5EQkNQRGF0YVNvdXJjZVNlcnZpY2VBc3NlbWJsZXI7CiBpbXBvcnQgb3JnLnFpNGoudGVzdC5FbnRpdHlUZXN0QXNzZW1ibGVyOwogCiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuZXF1YWxUbzsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgaW4tbWVtb3J5IHN0b3JlIGZvciBjb25maWd1cmF0aW9ucwogICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlUZXN0QXNzZW1ibGVyKCkuYXNzZW1ibGUoIGNvbmZpZ01vZHVsZSApOwogCi0gICAgICAgICAgICAgICAgbmV3IEMzUDBEYXRhU291cmNlU2VydmljZUFzc2VtYmxlcigpLgorICAgICAgICAgICAgICAgIG5ldyBEQkNQRGF0YVNvdXJjZVNlcnZpY2VBc3NlbWJsZXIoKS4KICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllZEJ5KCAiZGF0YXNvdXJjZS1zZXJ2aWNlIiApLgogICAgICAgICAgICAgICAgICAgICB3aXRoQ29uZmlnKCBjb25maWdNb2R1bGUsIFZpc2liaWxpdHkubGF5ZXIgKS4KICAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGUoIG1vZHVsZSApOwpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NxbC1saXF1aWJhc2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2NoYW5nZWxvZy54bWwgYi9saWJyYXJpZXMvc3FsLWxpcXVpYmFzZS9zcmMvdGVzdC9yZXNvdXJjZXMvY2hhbmdlbG9nLnhtbAppbmRleCA5ODI0ZTZiLi45YWUwMjM2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsLWxpcXVpYmFzZS9zcmMvdGVzdC9yZXNvdXJjZXMvY2hhbmdlbG9nLnhtbAorKysgYi9saWJyYXJpZXMvc3FsLWxpcXVpYmFzZS9zcmMvdGVzdC9yZXNvdXJjZXMvY2hhbmdlbG9nLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGRhdGFiYXNlQ2hhbmdlTG9nCiAgICAgIHhtbG5zPSJodHRwOi8vd3d3LmxpcXVpYmFzZS5vcmcveG1sL25zL2RiY2hhbmdlbG9nIgogICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NxbC1saXF1aWJhc2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3Rkcy1saXF1aWJhc2UucHJvcGVydGllcyBiL2xpYnJhcmllcy9zcWwtbGlxdWliYXNlL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0ZHMtbGlxdWliYXNlLnByb3BlcnRpZXMKaW5kZXggNzIzMjllNS4uOTNiMWVlYiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NxbC1saXF1aWJhc2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3Rkcy1saXF1aWJhc2UucHJvcGVydGllcworKysgYi9saWJyYXJpZXMvc3FsLWxpcXVpYmFzZS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdGRzLWxpcXVpYmFzZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGVuYWJsZWQ9dHJ1ZQogdXJsPWpkYmM6ZGVyYnk6bWVtb3J5OnRlc3RkYjM7Y3JlYXRlPXRydWUKIGRyaXZlcj1vcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL3NxbC9idWlsZC5ncmFkbGUKaW5kZXggMmQxYWU4My4uZDQ3ODljMyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NxbC9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL3NxbC9idWlsZC5ncmFkbGUKQEAgLTEsMTcgKzEsMzYgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogU1FMIExpYnJhcnkgcHJvdmlkZXMgU1FMIHN1cHBvcnQuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFNRTCIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIFNRTCBMaWJyYXJ5IHByb3ZpZGVzIFNRTCBzdXBwb3J0LiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIExpYnJhcnkgLSBTUUwiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuY2lyY3VpdGJyZWFrZXIiKSkKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuY29udmVyc2lvbiIpKQogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5qbXgiKSkKKyAgY29tcGlsZSBsaWJyYXJpZXMuc2xmNGpfYXBpCiAKICAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQogICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiKSkKICAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LnNxbC1ib25lY3AiKSkKLSAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LnNxbC1jM3AwIikpCiAgIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5zcWwtZGJjcCIpKQogICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuc3FsLWxpcXVpYmFzZSIpKQogICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24uZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMiKSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwvZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvc3FsL2Rldi1zdGF0dXMueG1sCmluZGV4IGEwYzlmYmIuLmJkZjAwZTcgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcWwvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL3NxbC9kZXYtc3RhdHVzLnhtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwvc3JjL2RvY3Mvc3FsLnR4dCBiL2xpYnJhcmllcy9zcWwvc3JjL2RvY3Mvc3FsLnR4dAppbmRleCAxMzQ0ZThjLi5mZmFkMTcyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsL3NyYy9kb2NzL3NxbC50eHQKKysrIGIvbGlicmFyaWVzL3NxbC9zcmMvZG9jcy9zcWwudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2xpYnJhcnktc3FsLFNRTCBMaWJyYXJ5XV0KID0gU1FMID0KIApAQCAtMjMsMTAgKzQyLDkgQEAKIAogPT0gRGF0YVNvdXJjZSBhbmQgY29ubmVjdGlvbiBwb29scyA9PQogCi1EYXRhU291cmNlIHN1cHBvcnQgY29tZXMgaW4gZm91ciBmbGF2b3JzOgorRGF0YVNvdXJjZSBzdXBwb3J0IGNvbWVzIGluIHRocmVlIGZsYXZvcnM6CiAKIC0gdXNpbmcgdGhlIGh0dHA6Ly9qb2xib3guY29tL1tCb25lQ1BdIGNvbm5lY3Rpb24gcG9vbAotLSB1c2luZyB0aGUgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jM3AwL1tDM1AwXSBjb25uZWN0aW9uIHBvb2wKIC0gdXNpbmcgdGhlIGh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvZGJjcC9bQXBhY2hlIERCQ1BdIGNvbm5lY3Rpb24gcG9vbAogLSBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgRGF0YVNvdXJjZSBwcm92aWRlZCBhdCBhc3NlbWJseSB0aW1lCiAKQEAgLTU1LDIxICs3Myw2IEBACiB0YWc9Ym9uZWNwCiAtLS0tCiAKLSpDM1AwKgotCi1bZGV2c3RhdHVzXQotLS0tLS0tLS0tLS0tLS0KLXNvdXJjZT1saWJyYXJpZXMvc3FsLWMzcDAvZGV2LXN0YXR1cy54bWwKLS0tLS0tLS0tLS0tLS0tCi0KLWluY2x1ZGU6Oi4uLy4uLy4uL3NxbC1jM3AwL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCi0KLVtzbmlwcGV0LGphdmFdCi0tLS0tCi1zb3VyY2U9bGlicmFyaWVzL3NxbC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL0RvY3VtZW50YXRpb25TdXBwb3J0LmphdmEKLXRhZz1jM3AwCi0tLS0tCi0KICpBcGFjaGUgREJDUCoKIAogW2RldnN0YXR1c10KQEAgLTEyMyw3ICsxMjYsNyBAQAogCiA9PT0gSW1wb3J0aW5nIGFuIGV4aXN0aW5nIERhdGFTb3VyY2UgPT09CiAKLUltcG9ydGluZyBhbiBleGlzdGluZyBEYXRhU291cmNlIGF0IGFzc2VtYmx5IHRpbWUgaXMgdXNlZnVsbCB3aGVuIHlvdXIgUWk0agorSW1wb3J0aW5nIGFuIGV4aXN0aW5nIERhdGFTb3VyY2UgYXQgYXNzZW1ibHkgdGltZSBpcyB1c2VmdWxsIHdoZW4geW91ciBaZXN0CiBBcHBsaWNhdGlvbiBydW5zIGluIGFuIGVudmlyb25tZW50IHdoZXJlIERhdGFTb3VyY2UgYXJlIGFscmVhZHkgcHJvdmlkZWQuCiAKIFtzbmlwcGV0LGphdmFdCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvYXNzZW1ibHkvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3NxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbAppbmRleCAwZTdmMTE2Li5iM2I2MmE3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvYXNzZW1ibHkvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9hc3NlbWJseS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNRTCBMaWJyYXJ5IEFzc2VtYmx5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvY29tbW9uL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9jb21tb24vcGFja2FnZS5odG1sCmluZGV4IGRlNjg0NDUuLmU4Y2I5OWQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9jb21tb24vcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9jb21tb24vcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TUUwgTGlicmFyeSBVdGlsaXRpZXMuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9kYXRhc291cmNlL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9kYXRhc291cmNlL3BhY2thZ2UuaHRtbAppbmRleCBkOGIxMWFjLi4zZDM1MDJkIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvZGF0YXNvdXJjZS9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3NxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2RhdGFzb3VyY2UvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TUUwgTGlicmFyeSBEYXRhU291cmNlIFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9qbXgvRGF0YVNvdXJjZUNvbmZpZ3VyYXRpb25NYW5hZ2VyU2VydmljZS5qYXZhIGIvbGlicmFyaWVzL3NxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2pteC9EYXRhU291cmNlQ29uZmlndXJhdGlvbk1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggMzY0MmYxMi4uNTgzM2Y1MyAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2pteC9EYXRhU291cmNlQ29uZmlndXJhdGlvbk1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvbGlicmFyaWVzL3NxbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2pteC9EYXRhU291cmNlQ29uZmlndXJhdGlvbk1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiAgICAgICAgICAgICAgICAgTUJlYW5JbmZvIG1iZWFuSW5mbyA9IG5ldyBNQmVhbkluZm8oIERhdGFTb3VyY2VDb25maWd1cmF0aW9uLmNsYXNzLmdldE5hbWUoKSwgbmFtZSwgYXR0cmlidXRlcy50b0FycmF5KCBuZXcgTUJlYW5BdHRyaWJ1dGVJbmZvWyBhdHRyaWJ1dGVzLnNpemUoKSBdICksIG51bGwsIG9wZXJhdGlvbnMudG9BcnJheSggbmV3IE1CZWFuT3BlcmF0aW9uSW5mb1sgb3BlcmF0aW9ucy5zaXplKCkgXSApLCBudWxsICk7CiAgICAgICAgICAgICAgICAgT2JqZWN0IG1iZWFuID0gbmV3IENvbmZpZ3VyYWJsZURhdGFTb3VyY2UoIGRhdGFTb3VyY2VTZXJ2aWNlLCBtYmVhbkluZm8sIG5hbWUsIHByb3BlcnRpZXMgKTsKLSAgICAgICAgICAgICAgICBPYmplY3ROYW1lIGNvbmZpZ3VyYWJsZURhdGFTb3VyY2VOYW1lID0gbmV3IE9iamVjdE5hbWUoICJRaTRqOmFwcGxpY2F0aW9uPSIgKyBhcHBsaWNhdGlvbi5uYW1lKCkgKyAiLGNsYXNzPURhdGFzb3VyY2UsbmFtZT0iICsgbmFtZSApOworICAgICAgICAgICAgICAgIE9iamVjdE5hbWUgY29uZmlndXJhYmxlRGF0YVNvdXJjZU5hbWUgPSBuZXcgT2JqZWN0TmFtZSggIlplc3Q6YXBwbGljYXRpb249IiArIGFwcGxpY2F0aW9uLm5hbWUoKSArICIsY2xhc3M9RGF0YXNvdXJjZSxuYW1lPSIgKyBuYW1lICk7CiAgICAgICAgICAgICAgICAgc2VydmVyLnJlZ2lzdGVyTUJlYW4oIG1iZWFuLCBjb25maWd1cmFibGVEYXRhU291cmNlTmFtZSApOwogICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25OYW1lcy5hZGQoIGNvbmZpZ3VyYWJsZURhdGFTb3VyY2VOYW1lICk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvam14L3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9qbXgvcGFja2FnZS5odG1sCmluZGV4IDU2NWE5ZDEuLmVlN2Y5M2YgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9qbXgvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy9zcWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9qbXgvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5TUUwgTGlicmFyeSBKTVggU3VwcG9ydC48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3NxbC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL0RvY3VtZW50YXRpb25TdXBwb3J0LmphdmEgYi9saWJyYXJpZXMvc3FsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQppbmRleCBiYjVmY2FkLi5iOWVhOTQwIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQorKysgYi9saWJyYXJpZXMvc3FsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvRG9jdW1lbnRhdGlvblN1cHBvcnQuamF2YQpAQCAtMjYsNyArMjYsNiBAQAogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuY2lyY3VpdGJyZWFrZXIuQ2lyY3VpdEJyZWFrZXI7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zcWwuYXNzZW1ibHkuRGF0YVNvdXJjZUFzc2VtYmxlcjsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNxbC5ib25lY3AuQm9uZUNQRGF0YVNvdXJjZVNlcnZpY2VBc3NlbWJsZXI7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zcWwuYzNwMC5DM1AwRGF0YVNvdXJjZVNlcnZpY2VBc3NlbWJsZXI7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zcWwuZGJjcC5EQkNQRGF0YVNvdXJjZVNlcnZpY2VBc3NlbWJsZXI7CiAKIGltcG9ydCBzdGF0aWMgb3JnLnFpNGoubGlicmFyeS5zcWwuRG9jdW1lbnRhdGlvblN1cHBvcnQuQ29uc3RhbnRzLkRTX0lEOwpAQCAtODgsMTUgKzg3LDYgQEAKICAgICAgICAgICAgICAgICBhc3NlbWJsZSggbW9kdWxlICk7CiAgICAgICAgICAgICAvLyBFTkQgU05JUFBFVDogYm9uZWNwCiAKLSAgICAgICAgICAgIC8vIFNUQVJUIFNOSVBQRVQ6IGMzcDAKLSAgICAgICAgICAgIC8vIEFzc2VtYmxlIHRoZSBDM1AwIGJhc2VkIFNlcnZpY2UgSW1wb3J0ZXIKLSAgICAgICAgICAgIG5ldyBDM1AwRGF0YVNvdXJjZVNlcnZpY2VBc3NlbWJsZXIoKS4KLSAgICAgICAgICAgICAgICBpZGVudGlmaWVkQnkoIERTX1NFUlZJQ0VfSUQgKS4KLSAgICAgICAgICAgICAgICB2aXNpYmxlSW4oIFZpc2liaWxpdHkubW9kdWxlICkuCi0gICAgICAgICAgICAgICAgd2l0aENvbmZpZyggY29uZmlnLCBWaXNpYmlsaXR5LmxheWVyICkuCi0gICAgICAgICAgICAgICAgYXNzZW1ibGUoIG1vZHVsZSApOwotICAgICAgICAgICAgLy8gRU5EIFNOSVBQRVQ6IGMzcDAKLQogICAgICAgICAgICAgLy8gU1RBUlQgU05JUFBFVDogZGJjcAogICAgICAgICAgICAgLy8gQXNzZW1ibGUgdGhlIEFwYWNoZSBEQkNQIGJhc2VkIFNlcnZpY2UgSW1wb3J0ZXIKICAgICAgICAgICAgIG5ldyBEQkNQRGF0YVNvdXJjZVNlcnZpY2VBc3NlbWJsZXIoKS4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9qbXgvRGF0YVNvdXJjZUNvbmZpZ3VyYXRpb25NYW5hZ2VyU2VydmljZVRlc3QuamF2YSBiL2xpYnJhcmllcy9zcWwvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3NxbC9qbXgvRGF0YVNvdXJjZUNvbmZpZ3VyYXRpb25NYW5hZ2VyU2VydmljZVRlc3QuamF2YQppbmRleCBmMDZhYzJhLi5hNDI4YzA1IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zcWwvam14L0RhdGFTb3VyY2VDb25maWd1cmF0aW9uTWFuYWdlclNlcnZpY2VUZXN0LmphdmEKKysrIGIvbGlicmFyaWVzL3NxbC9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3FsL2pteC9EYXRhU291cmNlQ29uZmlndXJhdGlvbk1hbmFnZXJTZXJ2aWNlVGVzdC5qYXZhCkBAIC0zNCw5ICszNCw5IEBACiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5qbXguSk1YQXNzZW1ibGVyOwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3FsLmFzc2VtYmx5LkRhdGFTb3VyY2VBc3NlbWJsZXI7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zcWwuYXNzZW1ibHkuRGF0YVNvdXJjZUpNWEFzc2VtYmxlcjsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNxbC5jM3AwLkMzUDBEYXRhU291cmNlU2VydmljZUFzc2VtYmxlcjsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnNxbC5jb21tb24uRGF0YWJhc2VzOwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3FsLmRhdGFzb3VyY2UuRGF0YVNvdXJjZXM7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zcWwuZGJjcC5EQkNQRGF0YVNvdXJjZVNlcnZpY2VBc3NlbWJsZXI7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zcWwubGlxdWliYXNlLkxpcXVpYmFzZUNvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zcWwubGlxdWliYXNlLkxpcXVpYmFzZVNlcnZpY2U7CiBpbXBvcnQgb3JnLnFpNGoudGVzdC5FbnRpdHlUZXN0QXNzZW1ibGVyOwpAQCAtODAsNyArODAsNyBAQAogICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlUZXN0QXNzZW1ibGVyKCkudmlzaWJsZUluKCBWaXNpYmlsaXR5LmxheWVyICkuYXNzZW1ibGUoIG1vZHVsZSApOwogCiAgICAgICAgICAgICAgICAgLy8gU2V0IHVwIERhdGFTb3VyY2Ugc2VydmljZSB0aGF0IHdpbGwgbWFuYWdlIHRoZSBjb25uZWN0aW9uIHBvb2xzCi0gICAgICAgICAgICAgICAgbmV3IEMzUDBEYXRhU291cmNlU2VydmljZUFzc2VtYmxlcigpLmlkZW50aWZpZWRCeSggImRhdGFzb3VyY2Utc2VydmljZSIgKS52aXNpYmxlSW4oIFZpc2liaWxpdHkubGF5ZXIgKS5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgICAgICAgICAgbmV3IERCQ1BEYXRhU291cmNlU2VydmljZUFzc2VtYmxlcigpLmlkZW50aWZpZWRCeSggImRhdGFzb3VyY2Utc2VydmljZSIgKS52aXNpYmxlSW4oIFZpc2liaWxpdHkubGF5ZXIgKS5hc3NlbWJsZSggbW9kdWxlICk7CiAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIE1vZHVsZUFzc2VtYmx5IHRlc3RNb2R1bGUgPSBtb2R1bGUubGF5ZXIoKS5tb2R1bGUoICJUZXN0RFMiICk7CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9jaGFuZ2Vsb2cueG1sIGIvbGlicmFyaWVzL3NxbC9zcmMvdGVzdC9yZXNvdXJjZXMvY2hhbmdlbG9nLnhtbAppbmRleCA5ODI0ZTZiLi45YWUwMjM2IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvc3FsL3NyYy90ZXN0L3Jlc291cmNlcy9jaGFuZ2Vsb2cueG1sCisrKyBiL2xpYnJhcmllcy9zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL2NoYW5nZWxvZy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxkYXRhYmFzZUNoYW5nZUxvZwogICAgICB4bWxucz0iaHR0cDovL3d3dy5saXF1aWJhc2Uub3JnL3htbC9ucy9kYmNoYW5nZWxvZyIKICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3Rkcy5wcm9wZXJ0aWVzIGIvbGlicmFyaWVzL3NxbC9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdGRzLnByb3BlcnRpZXMKaW5kZXggMDNiZjEzMi4uOGZjOTIyOSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NxbC9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdGRzLnByb3BlcnRpZXMKKysrIGIvbGlicmFyaWVzL3NxbC9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdGRzLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogZW5hYmxlZD10cnVlCiB1cmw9amRiYzpkZXJieTptZW1vcnk6dGVzdGRiO2NyZWF0ZT10cnVlCiBkcml2ZXI9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3FsL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0ZHMyLnByb3BlcnRpZXMgYi9saWJyYXJpZXMvc3FsL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0ZHMyLnByb3BlcnRpZXMKaW5kZXggNmEwZDA2ZS4uZTYyZTlmZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3NxbC9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdGRzMi5wcm9wZXJ0aWVzCisrKyBiL2xpYnJhcmllcy9zcWwvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RkczIucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBlbmFibGVkPXRydWUKIHVybD1qZGJjOmRlcmJ5Om1lbW9yeTp0ZXN0ZGIyO2NyZWF0ZT10cnVlCiBkcml2ZXI9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1jb2RlYmVoaW5kL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvYnVpbGQuZ3JhZGxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTI5MzNmLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvYnVpbGQuZ3JhZGxlCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBTdHJ1dHMgTGlicmFyeSBhbGxvd3MgaW50ZWdyYXRpb24gb2YgUWk0aiBpbnRvIFN0cnV0czIgYXBwbGljYXRpb25zLiIKLQotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFN0cnV0czIgLSBDb2RlIEJlaGluZCJ9fQotCi1kZXBlbmRlbmNpZXMgewotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCi0gIGNvbXBpbGUoIHByb2plY3QoICc6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi1wbHVnaW4nICkgKQotICBjb21waWxlKGxpYnJhcmllcy5zdHJ1dHNfY29kZWJlaGluZCkKLQotICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikpCi0KLSAgdGVzdFJ1bnRpbWUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lIikpCi0gIHRlc3RSdW50aW1lKGxpYnJhcmllcy5sb2diYWNrKQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvZGV2LXN0YXR1cy54bWwgYi9saWJyYXJpZXMvc3RydXRzMi1jb2RlYmVoaW5kL2Rldi1zdGF0dXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTRkM2FhLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvZGV2LXN0YXR1cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKLSAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKLSAgICAgICAgaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xL2Rldi1zdGF0dXMueHNkIj4KLSAgPHN0YXR1cz4KLSAgICA8IS0tbm9uZSxlYXJseSxiZXRhLHN0YWJsZSxtYXR1cmUtLT4KLSAgICA8Y29kZWJhc2U+YmV0YTwvY29kZWJhc2U+Ci0KLSAgICA8IS0tIG5vbmUsIGJyaWVmLCBnb29kLCBjb21wbGV0ZSAtLT4KLSAgICA8ZG9jdW1lbnRhdGlvbj5ub25lPC9kb2N1bWVudGF0aW9uPgotCi0gICAgPCEtLSBub25lLCBzb21lLCBnb29kLCBjb21wbGV0ZSAtLT4KLSAgICA8dW5pdHRlc3RzPnNvbWU8L3VuaXR0ZXN0cz4KLSAgPC9zdGF0dXM+Ci0gIDxsaWNlbnNlcz4KLSAgICA8bGljZW5zZT5BTHYyPC9saWNlbnNlPgotICA8L2xpY2Vuc2VzPgotPC9tb2R1bGU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvZG9jcy9zdHJ1dHMtY29kZWJlaGluZC50eHQgYi9saWJyYXJpZXMvc3RydXRzMi1jb2RlYmVoaW5kL3NyYy9kb2NzL3N0cnV0cy1jb2RlYmVoaW5kLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZjMTI5Yy4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1jb2RlYmVoaW5kL3NyYy9kb2NzL3N0cnV0cy1jb2RlYmVoaW5kLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLVtbbGlicmFyeS1zdHJ1dHMtY29kZWJlaGluZCwgU3RydXRzIENvZGUgQmVoaW5kIExpYnJhcnldXQotPSBTdHJ1dHMgLSBDb2RlIEJlaGluZCA9Ci0KLVtkZXZzdGF0dXNdCi0tLS0tLS0tLS0tLS0tLQotc291cmNlPWxpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvZGV2LXN0YXR1cy54bWwKLS0tLS0tLS0tLS0tLS0tCi0KLVN0cnV0cyBDb2RlIEJlaGluZyBMaWJyYXJ5Ci0KLU5PVEU6IFRoaXMgTGlicmFyeSBoYXMgbm8gZG9jdW1lbnRhdGlvbiB5ZXQuIExlYXJuIGhvdyB0byBjb250cmlidXRlIGluIDw8Y29tbXVuaXR5LWRvY3M+Pi4KLQotaW5jbHVkZTo6Li4vLi4vYnVpbGQvZG9jcy9idWlsZGluZm8vYXJ0aWZhY3QudHh0W10KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvY29kZWJlaGluZC9RaTRqQ29kZWJlaGluZFBhY2thZ2VQcm92aWRlci5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9jb2RlYmVoaW5kL1FpNGpDb2RlYmVoaW5kUGFja2FnZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZmEwYzcuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9jb2RlYmVoaW5kL1FpNGpDb2RlYmVoaW5kUGFja2FnZVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MjMgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuY29kZWJlaGluZDsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5Db25maWd1cmF0aW9uOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5Db25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5QYWNrYWdlUHJvdmlkZXI7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuY29uZmlnLmVudGl0aWVzLkFjdGlvbkNvbmZpZzsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5jb25maWcuZW50aXRpZXMuUGFja2FnZUNvbmZpZzsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5jb25maWcuZW50aXRpZXMuUmVzdWx0Q29uZmlnOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5lbnRpdGllcy5SZXN1bHRUeXBlQ29uZmlnOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmluamVjdC5JbmplY3Q7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIudXRpbC5DbGFzc0xvYWRlclV0aWw7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIudXRpbC5sb2dnaW5nLkxvZ2dlcjsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi51dGlsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuY29uZmlnLio7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLkFjdGlvbkNvbmZpZ3VyYXRpb247Ci0KLS8qKgotICogVGhpcyBpcyBpbnNwaXJlZCBieSB0aGUgQ2xhc3NwYXRoUGFja2FnZVByb3ZpZGVyIGZyb20gdGhlIHN0cnV0czItY29kZWJlaGluZC1wbHVnaW4uICBNb3N0IG9mIHRoZSBjb2RlCi0gKiBpcyBkaXJlY3RseSBjb3BpZWQgZnJvbSB0aGUgMi4xLjEgdmVyc2lvbiBvZiB0aGUgcGx1Z2luIGJ1dCBtb2RpZmllZCB0byBvbmx5IGxvb2sgZm9yIHRoZSBAQWN0aW9uIGFubm90YXRpb24KLSAqIGFuZCB0byBhY2NlcHQgaW50ZXJmYWNlcyBhcyB3ZWxsIGFzIGNsYXNzZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBRaTRqQ29kZWJlaGluZFBhY2thZ2VQcm92aWRlcgotICAgIGltcGxlbWVudHMgUGFja2FnZVByb3ZpZGVyCi17Ci0KLSAgICBwcml2YXRlIEFjdGlvbkNvbmZpZ3VyYXRpb24gYWN0aW9uQ29uZmlndXJhdGlvbjsKLQotICAgIC8qKgotICAgICAqIFRoZSBkZWZhdWx0IHBhZ2UgcHJlZml4IChvciAicGF0aCIpLgotICAgICAqIFNvbWUgYXBwbGljYXRpb25zIG1heSBwbGFjZSBwYWdlcyB1bmRlciAiL1dFQi1JTkYiIGFzIGFuIGV4dHJlbWUgc2VjdXJpdHkgcHJlY2F1dGlvbi4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1BBR0VfUFJFRklYID0gInN0cnV0cy5jb25maWd1cmF0aW9uLmNsYXNzcGF0aC5kZWZhdWx0UGFnZVByZWZpeCI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZGVmYXVsdCBwYWdlIHByZWZpeCAobm9uZSkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdFBhZ2VQcmVmaXggPSAiIjsKLQotICAgIC8qKgotICAgICAqIFRoZSBkZWZhdWx0IHBhZ2UgZXh0ZW5zaW9uLCAgdG8gdXNlIGluIHBsYWNlIG9mICIuanNwIi4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1BBR0VfRVhURU5TSU9OID0gInN0cnV0cy5jb25maWd1cmF0aW9uLmNsYXNzcGF0aC5kZWZhdWx0UGFnZUV4dGVuc2lvbiI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZGVmYWN0byBkZWZhdWx0IHBhZ2UgZXh0ZW5zaW9uLCB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBKYXZhU2VydmVyIFBhZ2VzLgotICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nIGRlZmF1bHRQYWdlRXh0ZW5zaW9uID0gIi5qc3AiOwotCi0gICAgLyoqCi0gICAgICogQSBzZXR0aW5nIHRvIGluZGljYXRlIGEgY3VzdG9tIGRlZmF1bHQgcGFyZW50IHBhY2thZ2UsCi0gICAgICogdG8gdXNlIGluIHBsYWNlIG9mICJzdHJ1dHMtZGVmYXVsdCIuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9QQVJFTlRfUEFDS0FHRSA9ICJzdHJ1dHMuY29uZmlndXJhdGlvbi5jbGFzc3BhdGguZGVmYXVsdFBhcmVudFBhY2thZ2UiOwotCi0gICAgLyoqCi0gICAgICogTmFtZSBvZiB0aGUgZnJhbWV3b3JrJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9uIHBhY2thZ2UsCi0gICAgICogdGhhdCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIHBhY2thZ2VzIGF1dG9tYXRpY2FsbHkgaW5oZXJpdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZyBkZWZhdWx0UGFyZW50UGFja2FnZSA9ICJzdHJ1dHMtZGVmYXVsdCI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZGVmYXVsdCBwYWdlIHByZWZpeCAob3IgInBhdGgiKS4KLSAgICAgKiBTb21lIGFwcGxpY2F0aW9ucyBtYXkgcGxhY2UgcGFnZXMgdW5kZXIgIi9XRUItSU5GIiBhcyBhbiBleHRyZW1lIHNlY3VyaXR5IHByZWNhdXRpb24uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SQ0VfTE9XRVJfQ0FTRSA9ICJzdHJ1dHMuY29uZmlndXJhdGlvbi5jbGFzc3BhdGguZm9yY2VMb3dlckNhc2UiOwotCi0gICAgLyoqCi0gICAgICogV2hldGhlciB0byB1c2UgYSBsb3dlcmNhc2UgbGV0dGVyIGFzIHRoZSBpbml0aWFsIGxldHRlciBvZiBhbiBhY3Rpb24uCi0gICAgICogSWYgZmFsc2UsIGFjdGlvbnMgd2lsbCByZXRhaW4gdGhlIGluaXRpYWwgdXBwZXJjYXNlIGxldHRlciBmcm9tIHRoZSBBY3Rpb24gY2xhc3MuCi0gICAgICogKDxjb2RlPnZpZXcuYWN0aW9uPC9jb2RlPiAodHJ1ZSkgdmVyc3VzIDxjb2RlPlZpZXcuYWN0aW9uPC9jb2RlPiAoZmFsc2UpKS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gZm9yY2VMb3dlckNhc2UgPSB0cnVlOwotCi0gICAgLyoqCi0gICAgICogRGVmYXVsdCBzdWZmaXggdGhhdCBjYW4gYmUgdXNlZCB0byBpbmRpY2F0ZSBQT0pPICJBY3Rpb24iIGNsYXNzZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTiA9ICJBY3Rpb24iOwotCi0gICAgLyoqCi0gICAgICogSGVscGVyIGNsYXNzIHRvIHNjYW4gY2xhc3MgcGF0aCBmb3Igc2VydmVyIHBhZ2VzLgotICAgICAqLwotICAgIHByaXZhdGUgUGFnZUxvY2F0b3IgcGFnZUxvY2F0b3IgPSBuZXcgQ2xhc3NwYXRoUGFnZUxvY2F0b3IoKTsKLQotICAgIC8qKgotICAgICAqIEZsYWcgdG8gaW5kaWNhdGUgdGhlIHBhY2thZ2VzIGhhdmUgYmVlbiBsb2FkZWQuCi0gICAgICoKLSAgICAgKiBAc2VlICNsb2FkUGFja2FnZXMKLSAgICAgKiBAc2VlICNuZWVkc1JlbG9hZAotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBQYWNrYWdlTG9hZGVyIHBhY2thZ2VMb2FkZXI7Ci0KLSAgICAvKioKLSAgICAgKiBMb2dnaW5nIGluc3RhbmNlIGZvciB0aGlzIGNsYXNzLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlciggUWk0akNvZGViZWhpbmRQYWNrYWdlUHJvdmlkZXIuY2xhc3MgKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBYV29yayBDb25maWd1cmF0aW9uIGZvciB0aGlzIGFwcGxpY2F0aW9uLgotICAgICAqCi0gICAgICogQHNlZSAjaW5pdAotICAgICAqLwotICAgIHByaXZhdGUgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwotCi0gICAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uUGFja2FnZXM7Ci0KLSAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OwotCi0gICAgLyoqCi0gICAgICogUGFnZUxvY2F0b3IgZGVmaW5lcyBhIGxvY2F0ZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNjb3ZlciBzZXJ2ZXIgcGFnZXMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgUGFnZUxvY2F0b3IKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBVUkwgbG9jYXRlKCBTdHJpbmcgcGF0aCApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENsYXNzcGF0aFBhdGhMb2NhdG9yIHNlYXJjaGVzIHRoZSBjbGFzc3BhdGggZm9yIHNlcnZlciBwYWdlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENsYXNzcGF0aFBhZ2VMb2NhdG9yCi0gICAgICAgIGltcGxlbWVudHMgUGFnZUxvY2F0b3IKLSAgICB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVVJMIGxvY2F0ZSggU3RyaW5nIHBhdGggKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ2xhc3NMb2FkZXJVdGlsLmdldFJlc291cmNlKCBwYXRoLCBnZXRDbGFzcygpICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBASW5qZWN0KCAiYWN0aW9uUGFja2FnZXMiICkKLSAgICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25QYWNrYWdlcyggU3RyaW5nIHBhY2thZ2VzICkKLSAgICB7Ci0gICAgICAgIHRoaXMuYWN0aW9uUGFja2FnZXMgPSBwYWNrYWdlczsKLSAgICB9Ci0KLSAgICBASW5qZWN0Ci0gICAgcHVibGljIHZvaWQgc2V0U2VydmxldENvbnRleHQoIFNlcnZsZXRDb250ZXh0IGN0eCApCi0gICAgewotICAgICAgICB0aGlzLnNlcnZsZXRDb250ZXh0ID0gY3R4OwotICAgIH0KLQotICAgIEBJbmplY3QKLSAgICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25Db25maWd1cmF0aW9uKCBBY3Rpb25Db25maWd1cmF0aW9uIGFjdGlvbkNvbmZpZ3VyYXRpb24gKQotICAgIHsKLSAgICAgICAgdGhpcy5hY3Rpb25Db25maWd1cmF0aW9uID0gYWN0aW9uQ29uZmlndXJhdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWdpc3RlciBhIGRlZmF1bHQgcGFyZW50IHBhY2thZ2UgZm9yIHRoZSBhY3Rpb25zLgotICAgICAqCi0gICAgICogQHBhcmFtIGRlZmF1bHRQYXJlbnRQYWNrYWdlIHRoZSBuZXcgZGVmYXVsdFBhcmVudFBhY2thZ2UKLSAgICAgKi8KLSAgICBASW5qZWN0KCB2YWx1ZSA9IERFRkFVTFRfUEFSRU5UX1BBQ0tBR0UsIHJlcXVpcmVkID0gZmFsc2UgKQotICAgIHB1YmxpYyB2b2lkIHNldERlZmF1bHRQYXJlbnRQYWNrYWdlKCBTdHJpbmcgZGVmYXVsdFBhcmVudFBhY2thZ2UgKQotICAgIHsKLSAgICAgICAgdGhpcy5kZWZhdWx0UGFyZW50UGFja2FnZSA9IGRlZmF1bHRQYXJlbnRQYWNrYWdlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlZ2lzdGVyIGEgZGVmYXVsdCBwYWdlIGV4dGVuc2lvbiB0byB1c2Ugd2hlbiBsb2NhdGluZyBwYWdlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkZWZhdWx0UGFnZUV4dGVuc2lvbiB0aGUgbmV3IGRlZmF1bHRQYWdlRXh0ZW5zaW9uCi0gICAgICovCi0gICAgQEluamVjdCggdmFsdWUgPSBERUZBVUxUX1BBR0VfRVhURU5TSU9OLCByZXF1aXJlZCA9IGZhbHNlICkKLSAgICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0UGFnZUV4dGVuc2lvbiggU3RyaW5nIGRlZmF1bHRQYWdlRXh0ZW5zaW9uICkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGVmYXVsdFBhZ2VFeHRlbnNpb24gPSBkZWZhdWx0UGFnZUV4dGVuc2lvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWlnc3RlciBhIGRlZmF1bHQgcGFnZSBwcmVmaXggdG8gdXNlIHdoZW4gbG9jYXRpbmcgcGFnZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZGVmYXVsdFBhZ2VQcmVmaXggdGhlIGRlZmF1bHRQYWdlUHJlZml4IHRvIHNldAotICAgICAqLwotICAgIEBJbmplY3QoIHZhbHVlID0gREVGQVVMVF9QQUdFX1BSRUZJWCwgcmVxdWlyZWQgPSBmYWxzZSApCi0gICAgcHVibGljIHZvaWQgc2V0RGVmYXVsdFBhZ2VQcmVmaXgoIFN0cmluZyBkZWZhdWx0UGFnZVByZWZpeCApCi0gICAgewotICAgICAgICB0aGlzLmRlZmF1bHRQYWdlUHJlZml4ID0gZGVmYXVsdFBhZ2VQcmVmaXg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2hldGhlciB0byB1c2UgYSBsb3dlcmNhc2UgbGV0dGVyIGFzIHRoZSBpbml0aWFsIGxldHRlciBvZiBhbiBhY3Rpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZm9yY2UgSWYgZmFsc2UsIGFjdGlvbnMgd2lsbCByZXRhaW4gdGhlIGluaXRpYWwgdXBwZXJjYXNlIGxldHRlciBmcm9tIHRoZSBBY3Rpb24gY2xhc3MuCi0gICAgICogICAgICAgICAgICAgICg8Y29kZT52aWV3LmFjdGlvbjwvY29kZT4gKHRydWUpIHZlcnN1cyA8Y29kZT5WaWV3LmFjdGlvbjwvY29kZT4gKGZhbHNlKSkuCi0gICAgICovCi0gICAgQEluamVjdCggdmFsdWUgPSBGT1JDRV9MT1dFUl9DQVNFLCByZXF1aXJlZCA9IGZhbHNlICkKLSAgICBwdWJsaWMgdm9pZCBzZXRGb3JjZUxvd2VyQ2FzZSggU3RyaW5nIGZvcmNlICkKLSAgICB7Ci0gICAgICAgIHRoaXMuZm9yY2VMb3dlckNhc2UgPSAidHJ1ZSIuZXF1YWxzKCBmb3JjZSApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlZ2lzdGVyIGEgUGFnZUxvY2F0aW9uIHRvIHVzZSB0byBzY2FuIGZvciBzZXJ2ZXIgcGFnZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbG9jYXRvcgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFBhZ2VMb2NhdG9yKCBQYWdlTG9jYXRvciBsb2NhdG9yICkKLSAgICB7Ci0gICAgICAgIHRoaXMucGFnZUxvY2F0b3IgPSBsb2NhdG9yOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGluaXQoIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiApCi0gICAgICAgIHRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0gICAgewotICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG5lZWRzUmVsb2FkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhaW5pdGlhbGl6ZWQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYXJzIGFuZCBsb2FkcyB0aGUgbGlzdCBvZiBwYWNrYWdlcyByZWdpc3RlcmVkIGF0IGNvbnN0cnVjdGlvbi4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGxvYWRQYWNrYWdlcygpCi0gICAgICAgIHRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0gICAgewotICAgICAgICBwYWNrYWdlTG9hZGVyID0gbmV3IFBhY2thZ2VMb2FkZXIoKTsKLSAgICAgICAgU3RyaW5nW10gbmFtZXMgPSBhY3Rpb25QYWNrYWdlcy5zcGxpdCggIlxccypbLF1cXHMqIiApOwotICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBjbGFzc2xvYWRlciBzY2FubmVyIHdpdGggdGhlIGNvbmZpZ3VyZWQgcGFja2FnZXMKLSAgICAgICAgaWYoIG5hbWVzLmxlbmd0aCA+IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXRQYWdlTG9jYXRvciggbmV3IFNlcnZsZXRDb250ZXh0UGFnZUxvY2F0b3IoIHNlcnZsZXRDb250ZXh0ICkgKTsKLSAgICAgICAgfQotICAgICAgICBsb2FkUGFja2FnZXMoIG5hbWVzICk7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBsb2FkUGFja2FnZXMoIFN0cmluZ1tdIHBrZ3MgKQotICAgICAgICB0aHJvd3MgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZm9yKCBDbGFzcyBjbHMgOiBhY3Rpb25Db25maWd1cmF0aW9uLmdldENsYXNzZXMoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByb2Nlc3NBY3Rpb25DbGFzcyggY2xzLCBwa2dzICk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IoIFBhY2thZ2VDb25maWcgY29uZmlnIDogcGFja2FnZUxvYWRlci5jcmVhdGVQYWNrYWdlQ29uZmlncygpICkKLSAgICAgICAgewotICAgICAgICAgICAgY29uZmlndXJhdGlvbi5hZGRQYWNrYWdlQ29uZmlnKCBjb25maWcuZ2V0TmFtZSgpLCBjb25maWcgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIGRlZmF1bHQgYWN0aW9uIG1hcHBpbmcgZm9yIGEgY2xhc3MgaW5zdGFuY2UuCi0gICAgICoKLSAgICAgKiBUaGUgbmFtZXNwYWNlIGFubm90YXRpb24gaXMgaG9ub3JlZCwgaWYgZm91bmQsIG90aGVyd2lzZQotICAgICAqIHRoZSBKYXZhIHBhY2thZ2UgaXMgY29udmVydGVkIGludG8gdGhlIG5hbWVzcGFjZQotICAgICAqIGJ5IGNoYW5naW5nIHRoZSBkb3RzICgiLiIpIHRvIHNsYXNoZXMgKCIvIikuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2xzICBBY3Rpb24gb3IgUE9KTyBpbnN0YW5jZSB0byBwcm9jZXNzCi0gICAgICogQHBhcmFtIHBrZ3MgTGlzdCBvZiBwYWNrYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCBmb3IgQWN0aW9ucwotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NBY3Rpb25DbGFzcyggQ2xhc3M8Pz4gY2xzLCBTdHJpbmdbXSBwa2dzICkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gY2xzLmdldE5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGFjdGlvblBhY2thZ2UgPSBjbHMuZ2V0UGFja2FnZSgpLmdldE5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGFjdGlvbk5hbWVzcGFjZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBhY3Rpb25OYW1lID0gbnVsbDsKLQotICAgICAgICBvcmcuYXBhY2hlLnN0cnV0czIuY29uZmlnLkFjdGlvbiBhY3Rpb25Bbm4gPQotICAgICAgICAgICAgKG9yZy5hcGFjaGUuc3RydXRzMi5jb25maWcuQWN0aW9uKSBjbHMuZ2V0QW5ub3RhdGlvbiggb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbmZpZy5BY3Rpb24uY2xhc3MgKTsKLSAgICAgICAgaWYoIGFjdGlvbkFubiAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgYWN0aW9uTmFtZSA9IGFjdGlvbkFubi5uYW1lKCk7Ci0gICAgICAgICAgICBpZiggYWN0aW9uQW5uLm5hbWVzcGFjZSgpLmVxdWFscyggb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbmZpZy5BY3Rpb24uREVGQVVMVF9OQU1FU1BBQ0UgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uTmFtZXNwYWNlID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uTmFtZXNwYWNlID0gYWN0aW9uQW5uLm5hbWVzcGFjZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZm9yKCBTdHJpbmcgcGtnIDogcGtncyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoIG5hbWUuc3RhcnRzV2l0aCggcGtnICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYoIExPRy5pc0RlYnVnRW5hYmxlZCgpICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmRlYnVnKCAiQ2xhc3NwYXRoUGFja2FnZVByb3ZpZGVyOiBQcm9jZXNzaW5nIGNsYXNzICIgKyBuYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKCBwa2cubGVuZ3RoKCkgKyAxICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uTmFtZXNwYWNlID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGlvbk5hbWUgPSBuYW1lOwotICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gbmFtZS5sYXN0SW5kZXhPZiggJy4nICk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKCBwb3MgPiAtMSApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbk5hbWVzcGFjZSA9ICIvIiArIG5hbWUuc3Vic3RyaW5nKCAwLCBwb3MgKS5yZXBsYWNlKCAnLicsICcvJyApOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uTmFtZSA9IG5hbWUuc3Vic3RyaW5nKCBwb3MgKyAxICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gVHJ1bmNhdGUgQWN0aW9uIHN1ZmZpeCBpZiBmb3VuZAotICAgICAgICAgICAgaWYoIGFjdGlvbk5hbWUuZW5kc1dpdGgoIGdldENsYXNzU3VmZml4KCkgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uTmFtZSA9IGFjdGlvbk5hbWUuc3Vic3RyaW5nKCAwLCBhY3Rpb25OYW1lLmxlbmd0aCgpIC0gZ2V0Q2xhc3NTdWZmaXgoKS5sZW5ndGgoKSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGb3JjZSBpbml0aWFsIGxldHRlciBvZiBhY3Rpb24gdG8gbG93ZXJjYXNlLCBpZiBkZXNpcmVkCi0gICAgICAgICAgICBpZiggKCBmb3JjZUxvd2VyQ2FzZSApICYmICggYWN0aW9uTmFtZS5sZW5ndGgoKSA+IDEgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGxvd2VyUG9zID0gYWN0aW9uTmFtZS5sYXN0SW5kZXhPZiggJy8nICkgKyAxOwotICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggYWN0aW9uTmFtZS5zdWJzdHJpbmcoIDAsIGxvd2VyUG9zICkgKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIENoYXJhY3Rlci50b0xvd2VyQ2FzZSggYWN0aW9uTmFtZS5jaGFyQXQoIGxvd2VyUG9zICkgKSApOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggYWN0aW9uTmFtZS5zdWJzdHJpbmcoIGxvd2VyUG9zICsgMSApICk7Ci0gICAgICAgICAgICAgICAgYWN0aW9uTmFtZSA9IHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBQYWNrYWdlQ29uZmlnLkJ1aWxkZXIgcGtnQ29uZmlnID0gbG9hZFBhY2thZ2VDb25maWcoIGFjdGlvbk5hbWVzcGFjZSwgYWN0aW9uUGFja2FnZSwgY2xzICk7Ci0KLSAgICAgICAgLy8gSW4gY2FzZSB0aGUgcGFja2FnZSBjaGFuZ2VkIGR1ZSB0byBuYW1lc3BhY2UgYW5ub3RhdGlvbiBwcm9jZXNzaW5nCi0gICAgICAgIGlmKCAhYWN0aW9uUGFja2FnZS5lcXVhbHMoIHBrZ0NvbmZpZy5nZXROYW1lKCkgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFjdGlvblBhY2thZ2UgPSBwa2dDb25maWcuZ2V0TmFtZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gY2xzLmdldEFubm90YXRpb24oIFBhcmVudFBhY2thZ2UuY2xhc3MgKTsKLSAgICAgICAgaWYoIGFubm90YXRpb24gIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBwYXJlbnQgPSAoIChQYXJlbnRQYWNrYWdlKSBhbm5vdGF0aW9uICkudmFsdWUoKVswXTsKLSAgICAgICAgICAgIFBhY2thZ2VDb25maWcgcGFyZW50UGtnID0gY29uZmlndXJhdGlvbi5nZXRQYWNrYWdlQ29uZmlnKCBwYXJlbnQgKTsKLSAgICAgICAgICAgIGlmKCBwYXJlbnRQa2cgPT0gbnVsbCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FeGNlcHRpb24oICJDbGFzc3BhdGhQYWNrYWdlUHJvdmlkZXI6IFVuYWJsZSB0byBsb2NhdGUgcGFyZW50IHBhY2thZ2UgIiArIHBhcmVudCwgYW5ub3RhdGlvbiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGtnQ29uZmlnLmFkZFBhcmVudCggcGFyZW50UGtnICk7Ci0KLSAgICAgICAgICAgIGlmKCAhaXNOb3RFbXB0eSggcGtnQ29uZmlnLmdldE5hbWVzcGFjZSgpICkgJiYgaXNOb3RFbXB0eSggcGFyZW50UGtnLmdldE5hbWVzcGFjZSgpICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBrZ0NvbmZpZy5uYW1lc3BhY2UoIHBhcmVudFBrZy5nZXROYW1lc3BhY2UoKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgUmVzdWx0VHlwZUNvbmZpZyBkZWZhdWx0UmVzdWx0VHlwZSA9IHBhY2thZ2VMb2FkZXIuZ2V0RGVmYXVsdFJlc3VsdFR5cGUoIHBrZ0NvbmZpZyApOwotICAgICAgICBBY3Rpb25Db25maWcgYWN0aW9uQ29uZmlnID0gbmV3IEFjdGlvbkNvbmZpZy5CdWlsZGVyKCBhY3Rpb25QYWNrYWdlLCBhY3Rpb25OYW1lLCBjbHMuZ2V0TmFtZSgpICkKLSAgICAgICAgICAgIC5hZGRSZXN1bHRDb25maWdzKCBuZXcgUmVzdWx0TWFwPFN0cmluZywgUmVzdWx0Q29uZmlnPiggY2xzLCBhY3Rpb25OYW1lLCBkZWZhdWx0UmVzdWx0VHlwZSApICkKLSAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgICBwa2dDb25maWcuYWRkQWN0aW9uQ29uZmlnKCBhY3Rpb25OYW1lLCBhY3Rpb25Db25maWcgKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldENsYXNzU3VmZml4KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBBQ1RJT047Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmluZHMgb3IgY3JlYXRlcyB0aGUgcGFja2FnZSBjb25maWd1cmF0aW9uIGZvciBhbiBBY3Rpb24gY2xhc3MuCi0gICAgICoKLSAgICAgKiBUaGUgbmFtZXNwYWNlIGFubm90YXRpb24gaXMgaG9ub3JlZCwgaWYgZm91bmQsCi0gICAgICogYW5kIHRoZSBuYW1lc3BhY2UgaXMgY2hlY2tlZCBmb3IgYSBwYXJlbnQgY29uZmlndXJhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhY3Rpb25OYW1lc3BhY2UgVGhlIGNvbmZpZ3VyYXRpb24gbmFtZXNwYWNlCi0gICAgICogQHBhcmFtIGFjdGlvblBhY2thZ2UgICBUaGUgSmF2YSBwYWNrYWdlIGNvbnRhaW5pbmcgb3VyIEFjdGlvbiBjbGFzc2VzCi0gICAgICogQHBhcmFtIGFjdGlvbkNsYXNzICAgICBUaGUgQWN0aW9uIGNsYXNzIGluc3RhbmNlCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFBhY2thZ2VDb25maWcgb2JqZWN0IGZvciB0aGUgQWN0aW9uIGNsYXNzCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFBhY2thZ2VDb25maWcuQnVpbGRlciBsb2FkUGFja2FnZUNvbmZpZyggU3RyaW5nIGFjdGlvbk5hbWVzcGFjZSwgU3RyaW5nIGFjdGlvblBhY2thZ2UsIENsYXNzIGFjdGlvbkNsYXNzICkKLSAgICB7Ci0gICAgICAgIFBhY2thZ2VDb25maWcuQnVpbGRlciBwYXJlbnQgPSBudWxsOwotCi0gICAgICAgIC8vIENoZWNrIGZvciB0aGUgQE5hbWVzcGFjZSBhbm5vdGF0aW9uCi0gICAgICAgIGlmKCBhY3Rpb25DbGFzcyAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgTmFtZXNwYWNlIG5zID0gKE5hbWVzcGFjZSkgYWN0aW9uQ2xhc3MuZ2V0QW5ub3RhdGlvbiggTmFtZXNwYWNlLmNsYXNzICk7Ci0gICAgICAgICAgICBpZiggbnMgIT0gbnVsbCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyZW50ID0gbG9hZFBhY2thZ2VDb25maWcoIGFjdGlvbk5hbWVzcGFjZSwgYWN0aW9uUGFja2FnZSwgbnVsbCApOwotICAgICAgICAgICAgICAgIGFjdGlvbk5hbWVzcGFjZSA9IG5zLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgYWN0aW9uUGFja2FnZSA9IGFjdGlvbkNsYXNzLmdldE5hbWUoKTsKLQotICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGUgbmFtZXNwYWNlIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgdGhlIEBBY3Rpb24gYW5ub3RhdGlvbgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuc3RydXRzMi5jb25maWcuQWN0aW9uIGFjdGlvbkFubiA9Ci0gICAgICAgICAgICAgICAgICAgIChvcmcuYXBhY2hlLnN0cnV0czIuY29uZmlnLkFjdGlvbikgYWN0aW9uQ2xhc3MuZ2V0QW5ub3RhdGlvbiggb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbmZpZy5BY3Rpb24uY2xhc3MgKTsKLSAgICAgICAgICAgICAgICBpZiggYWN0aW9uQW5uICE9IG51bGwgJiYgIWFjdGlvbkFubi5ERUZBVUxUX05BTUVTUEFDRS5lcXVhbHMoIGFjdGlvbkFubi5uYW1lc3BhY2UoKSApICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlIHBhc3MgbnVsbCBhcyB0aGUgbmFtZXNwYWNlIGluIGNhc2UgdGhlIHBhcmVudCBwYWNrYWdlIGhhc24ndCBiZWVuIGxvYWRlZCB5ZXQKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gbG9hZFBhY2thZ2VDb25maWcoIG51bGwsIGFjdGlvblBhY2thZ2UsIG51bGwgKTsKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uUGFja2FnZSA9IGFjdGlvbkNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBQYWNrYWdlQ29uZmlnLkJ1aWxkZXIgcGtnQ29uZmlnID0gcGFja2FnZUxvYWRlci5nZXRQYWNrYWdlKCBhY3Rpb25QYWNrYWdlICk7Ci0gICAgICAgIGlmKCBwa2dDb25maWcgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBrZ0NvbmZpZyA9IG5ldyBQYWNrYWdlQ29uZmlnLkJ1aWxkZXIoIGFjdGlvblBhY2thZ2UgKTsKLQotICAgICAgICAgICAgcGtnQ29uZmlnLm5hbWVzcGFjZSggYWN0aW9uTmFtZXNwYWNlICk7Ci0gICAgICAgICAgICBpZiggcGFyZW50ID09IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFBhY2thZ2VDb25maWcgY2ZnID0gY29uZmlndXJhdGlvbi5nZXRQYWNrYWdlQ29uZmlnKCBkZWZhdWx0UGFyZW50UGFja2FnZSApOwotICAgICAgICAgICAgICAgIGlmKCBjZmcgIT0gbnVsbCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwa2dDb25maWcuYWRkUGFyZW50KCBjZmcgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FeGNlcHRpb24oICJDbGFzc3BhdGhQYWNrYWdlUHJvdmlkZXI6IFVuYWJsZSB0byBsb2NhdGUgZGVmYXVsdCBwYXJlbnQgcGFja2FnZTogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UGFyZW50UGFja2FnZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhY2thZ2VMb2FkZXIucmVnaXN0ZXJQYWNrYWdlKCBwa2dDb25maWcgKTsKLQotICAgICAgICAgICAgLy8gaWYgdGhlIHBhcmVudCBwYWNrYWdlIHdhcyBmaXJzdCBjcmVhdGVkIGJ5IGEgY2hpbGQsIGVuc3VyZSB0aGUgbmFtZXNwYWNlIGlzIGNvcnJlY3QKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBwa2dDb25maWcuZ2V0TmFtZXNwYWNlKCkgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBrZ0NvbmZpZy5uYW1lc3BhY2UoIGFjdGlvbk5hbWVzcGFjZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYoIHBhcmVudCAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFja2FnZUxvYWRlci5yZWdpc3RlckNoaWxkVG9QYXJlbnQoIHBrZ0NvbmZpZywgcGFyZW50ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiggTE9HLmlzRGVidWdFbmFibGVkKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBMT0cuZGVidWcoICJjbGFzczoiICsgYWN0aW9uQ2xhc3MgKyAiIHBhcmVudDoiICsgcGFyZW50ICsgIiBjdXJyZW50OiIgKyAoIHBrZ0NvbmZpZyAhPSBudWxsID8gcGtnQ29uZmlnLmdldE5hbWUoKSA6ICIiICkgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGtnQ29uZmlnOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgUmVzdWx0Q29uZmlnIG9iamVjdHMgZnJvbSByZXN1bHQgYW5ub3RhdGlvbnMsCi0gICAgICogYW5kIGlmIGEgcmVzdWx0IGlzbid0IGZvdW5kLCBjcmVhdGVzIGl0IG9uIHRoZSBmbHkuCi0gICAgICovCi0gICAgY2xhc3MgUmVzdWx0TWFwPEssIFY+Ci0gICAgICAgIGV4dGVuZHMgSGFzaE1hcDxLLCBWPgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBDbGFzcyBhY3Rpb25DbGFzczsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uTmFtZTsKLSAgICAgICAgcHJpdmF0ZSBSZXN1bHRUeXBlQ29uZmlnIGRlZmF1bHRSZXN1bHRUeXBlOwotCi0gICAgICAgIHB1YmxpYyBSZXN1bHRNYXAoIENsYXNzIGFjdGlvbkNsYXNzLCBTdHJpbmcgYWN0aW9uTmFtZSwgUmVzdWx0VHlwZUNvbmZpZyBkZWZhdWx0UmVzdWx0VHlwZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuYWN0aW9uQ2xhc3MgPSBhY3Rpb25DbGFzczsKLSAgICAgICAgICAgIHRoaXMuYWN0aW9uTmFtZSA9IGFjdGlvbk5hbWU7Ci0gICAgICAgICAgICB0aGlzLmRlZmF1bHRSZXN1bHRUeXBlID0gZGVmYXVsdFJlc3VsdFR5cGU7Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFueSBhbm5vdGF0aW9ucyBhcmUgYXJvdW5kCi0gICAgICAgICAgICBidWlsZEZyb21Bbm5vdGF0aW9ucyggYWN0aW9uQ2xhc3MgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZWN1cnNpdmVseSBmaW5kcyBhbm5vdGF0aW9ucyBmcm9tIGFsbCBwYXJlbnQgY2xhc3NlcyBhbmQgaW50ZXJmYWNlcy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGFjdGlvbkNsYXNzCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHZvaWQgYnVpbGRGcm9tQW5ub3RhdGlvbnMoIENsYXNzIGFjdGlvbkNsYXNzICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYoIGFjdGlvbkNsYXNzID09IG51bGwgfHwgYWN0aW9uQ2xhc3MuZ2V0TmFtZSgpLmVxdWFscyggT2JqZWN0LmNsYXNzLmdldE5hbWUoKSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIHVuY2hlY2tlZAotICAgICAgICAgICAgUmVzdWx0cyByZXN1bHRzID0gKFJlc3VsdHMpIGFjdGlvbkNsYXNzLmdldEFubm90YXRpb24oIFJlc3VsdHMuY2xhc3MgKTsKLSAgICAgICAgICAgIGlmKCByZXN1bHRzICE9IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNoZWNrIGhlcmUuLi4KLSAgICAgICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IHJlc3VsdHMudmFsdWUoKS5sZW5ndGg7IGkrKyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzdWx0cy52YWx1ZSgpWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgIFJlc3VsdENvbmZpZyBjb25maWcgPSBjcmVhdGVSZXN1bHRDb25maWcoIHJlc3VsdCApOwotICAgICAgICAgICAgICAgICAgICBpZiggIWNvbnRhaW5zS2V5KCAoSykgY29uZmlnLmdldE5hbWUoKSApICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHV0KCAoSykgY29uZmlnLmdldE5hbWUoKSwgKFYpIGNvbmZpZyApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB3aGF0IGFib3V0IGEgc2luZ2xlIFJlc3VsdCBhbm5vdGF0aW9uPwotICAgICAgICAgICAgUmVzdWx0IHJlc3VsdCA9IChSZXN1bHQpIGFjdGlvbkNsYXNzLmdldEFubm90YXRpb24oIFJlc3VsdC5jbGFzcyApOwotICAgICAgICAgICAgaWYoIHJlc3VsdCAhPSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZXN1bHRDb25maWcgY29uZmlnID0gY3JlYXRlUmVzdWx0Q29uZmlnKCByZXN1bHQgKTsKLSAgICAgICAgICAgICAgICBpZiggIWNvbnRhaW5zS2V5KCAoSykgY29uZmlnLmdldE5hbWUoKSApICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHB1dCggKEspIGNvbmZpZy5nZXROYW1lKCksIChWKSBjb25maWcgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1aWxkRnJvbUFubm90YXRpb25zKCBhY3Rpb25DbGFzcy5nZXRTdXBlcmNsYXNzKCkgKTsKLSAgICAgICAgICAgIGZvciggQ2xhc3MgaW1wbGVtZW50ZWRJbnRlcmZhY2UgOiBhY3Rpb25DbGFzcy5nZXRJbnRlcmZhY2VzKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1aWxkRnJvbUFubm90YXRpb25zKCBpbXBsZW1lbnRlZEludGVyZmFjZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEV4dHJhY3RzIHJlc3VsdCBuYW1lIGFuZCB2YWx1ZSBhbmQgY2FsbHMge0BsaW5rICNjcmVhdGVSZXN1bHRDb25maWd9LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcmVzdWx0IFJlc3VsdCBhbm5vdGF0aW9uIHJlZmVyZW5jZSByZXByZXNlbnRpbmcgcmVzdWx0IHR5cGUgdG8gY3JlYXRlCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gTmV3IG9yIGNhY2hlZCBSZXN1bHRDb25maWcgb2JqZWN0IGZvciByZXN1bHQKLSAgICAgICAgICovCi0gICAgICAgIHByb3RlY3RlZCBSZXN1bHRDb25maWcgY3JlYXRlUmVzdWx0Q29uZmlnKCBSZXN1bHQgcmVzdWx0ICkKLSAgICAgICAgewotICAgICAgICAgICAgQ2xhc3M8PyBleHRlbmRzIE9iamVjdD4gY2xzID0gcmVzdWx0LnR5cGUoKTsKLSAgICAgICAgICAgIGlmKCBjbHMgPT0gTnVsbFJlc3VsdC5jbGFzcyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2xzID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXN1bHRDb25maWcoIHJlc3VsdC5uYW1lKCksIGNscywgcmVzdWx0LnZhbHVlKCksIGNyZWF0ZVBhcmFtZXRlck1hcCggcmVzdWx0LnBhcmFtcygpICkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBNYXA8U3RyaW5nLCBTdHJpbmc+IGNyZWF0ZVBhcmFtZXRlck1hcCggU3RyaW5nW10gcGFybXMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotICAgICAgICAgICAgaW50IHN1YnRyYWN0ID0gcGFybXMubGVuZ3RoICUgMjsKLSAgICAgICAgICAgIGlmKCBzdWJ0cmFjdCAhPSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMT0cud2FybiggIk9kZCBudW1iZXIgb2YgcmVzdWx0IHBhcmFtZXRlcnMga2V5L3ZhbHVlcyBzcGVjaWZpZWQuICBUaGUgZmluYWwgb25lIHdpbGwgYmUgaWdub3JlZC4iICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IHBhcm1zLmxlbmd0aCAtIHN1YnRyYWN0OyBpKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBwYXJtc1sgaSsrIF07Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFybXNbIGkgXTsKLSAgICAgICAgICAgICAgICBtYXAucHV0KCBrZXksIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgaWYoIExPRy5pc0RlYnVnRW5hYmxlZCgpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExPRy5kZWJ1ZyggIkFkZGluZyBwYXJtZXRlclsiICsga2V5ICsgIjoiICsgdmFsdWUgKyAiXSB0byByZXN1bHQuIiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIGRlZmF1bHQgUmVzdWx0Q29uZmlnLAotICAgICAgICAgKiB1c2luZyBlaXRoZXIgdGhlIHJlc3VsdENsYXNzIG9yIHRoZSBkZWZhdWx0IFJlc3VsdFR5cGUgZm9yIGNvbmZpZ3VyYXRpb24gcGFja2FnZQotICAgICAgICAgKiBhc3NvY2lhdGVkIHRoaXMgUmVzdWx0TWFwIGNsYXNzLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ga2V5ICAgICAgICAgVGhlIHJlc3VsdCB0eXBlIG5hbWUKLSAgICAgICAgICogQHBhcmFtIHJlc3VsdENsYXNzIFRoZSBjbGFzcyBmb3IgdGhlIHJlc3VsdCB0eXBlCi0gICAgICAgICAqIEBwYXJhbSBsb2NhdGlvbiAgICBQYXRoIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIHR5cGUKLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBBIFJlc3VsdENvbmZpZyBmb3Iga2V5IG1hcHBlZCB0byBsb2NhdGlvbgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBSZXN1bHRDb25maWcgY3JlYXRlUmVzdWx0Q29uZmlnKCBPYmplY3Qga2V5LCBDbGFzczw/IGV4dGVuZHMgT2JqZWN0PiByZXN1bHRDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPD8gZXh0ZW5kcyBPYmplY3QsID8gZXh0ZW5kcyBPYmplY3Q+IGNvbmZpZ1BhcmFtcwotICAgICAgICApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKCByZXN1bHRDbGFzcyA9PSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25maWdQYXJhbXMgPSBkZWZhdWx0UmVzdWx0VHlwZS5nZXRQYXJhbXMoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gZGVmYXVsdFJlc3VsdFR5cGUuZ2V0Q2xhc3NOYW1lKCk7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRDbGFzcyA9IENsYXNzTG9hZGVyVXRpbC5sb2FkQ2xhc3MoIGNsYXNzTmFtZSwgZ2V0Q2xhc3MoKSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCggQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBleCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiggIkNsYXNzcGF0aFBhY2thZ2VQcm92aWRlcjogVW5hYmxlIHRvIGxvY2F0ZSByZXN1bHQgY2xhc3MgIiArIGNsYXNzTmFtZSwgYWN0aW9uQ2xhc3MgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0cmluZyBkZWZhdWx0UGFyYW07Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0UGFyYW0gPSAoU3RyaW5nKSByZXN1bHRDbGFzcy5nZXRGaWVsZCggIkRFRkFVTFRfUEFSQU0iICkuZ2V0KCBudWxsICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIG5vdCBzdXJlIHdoeSB0aGlzIGhhcHBlbmVkLCBidXQgbGV0J3MganVzdCB1c2UgYSBzZW5zaWJsZSBjaG9pY2UKLSAgICAgICAgICAgICAgICBkZWZhdWx0UGFyYW0gPSAibG9jYXRpb24iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBIYXNoTWFwIHBhcmFtcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICBpZiggY29uZmlnUGFyYW1zICE9IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtcy5wdXRBbGwoIGNvbmZpZ1BhcmFtcyApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJhbXMucHV0KCBkZWZhdWx0UGFyYW0sIGxvY2F0aW9uICk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdENvbmZpZy5CdWlsZGVyKCAoU3RyaW5nKSBrZXksIHJlc3VsdENsYXNzLmdldE5hbWUoKSApLmFkZFBhcmFtcyggcGFyYW1zICkuYnVpbGQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlYXJjaCBjbGFzc3BhdGggZm9yIGEgcGFnZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFNlcnZsZXRDb250ZXh0UGFnZUxvY2F0b3IKLSAgICAgICAgaW1wbGVtZW50cyBQYWdlTG9jYXRvcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgICAgICBwcml2YXRlIENsYXNzcGF0aFBhZ2VMb2NhdG9yIGNsYXNzcGF0aFBhZ2VMb2NhdG9yID0gbmV3IENsYXNzcGF0aFBhZ2VMb2NhdG9yKCk7Ci0KLSAgICAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dFBhZ2VMb2NhdG9yKCBTZXJ2bGV0Q29udGV4dCBjb250ZXh0ICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVVJMIGxvY2F0ZSggU3RyaW5nIHBhdGggKQotICAgICAgICB7Ci0gICAgICAgICAgICBVUkwgdXJsID0gbnVsbDsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVybCA9IGNvbnRleHQuZ2V0UmVzb3VyY2UoIHBhdGggKTsKLSAgICAgICAgICAgICAgICBpZiggdXJsID09IG51bGwgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdXJsID0gY2xhc3NwYXRoUGFnZUxvY2F0b3IubG9jYXRlKCBwYXRoICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2goIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiggTE9HLmlzRGVidWdFbmFibGVkKCkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HLmRlYnVnKCAiVW5hYmxlIHRvIHJlc29sdmUgcGF0aCAiICsgcGF0aCArICIgYWdhaW5zdCB0aGUgc2VydmxldCBjb250ZXh0IiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB1cmw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQYWNrYWdlTG9hZGVyCi0gICAgewotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgcGFja2FnZSBjb25maWd1cmF0aW9ucyBmb3Igc2Nhbm5lZCBBY3Rpb25zLgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBQYWNrYWdlQ29uZmlnLkJ1aWxkZXI+IHBhY2thZ2VDb25maWdCdWlsZGVycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgUGFja2FnZUNvbmZpZy5CdWlsZGVyPigpOwotCi0gICAgICAgIHByaXZhdGUgTWFwPFBhY2thZ2VDb25maWcuQnVpbGRlciwgUGFja2FnZUNvbmZpZy5CdWlsZGVyPiBjaGlsZFRvUGFyZW50ID0gbmV3IEhhc2hNYXA8UGFja2FnZUNvbmZpZy5CdWlsZGVyLCBQYWNrYWdlQ29uZmlnLkJ1aWxkZXI+KCk7Ci0KLSAgICAgICAgcHVibGljIFBhY2thZ2VDb25maWcuQnVpbGRlciBnZXRQYWNrYWdlKCBTdHJpbmcgbmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYWNrYWdlQ29uZmlnQnVpbGRlcnMuZ2V0KCBuYW1lICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCByZWdpc3RlckNoaWxkVG9QYXJlbnQoIFBhY2thZ2VDb25maWcuQnVpbGRlciBjaGlsZCwgUGFja2FnZUNvbmZpZy5CdWlsZGVyIHBhcmVudCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoaWxkVG9QYXJlbnQucHV0KCBjaGlsZCwgcGFyZW50ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCByZWdpc3RlclBhY2thZ2UoIFBhY2thZ2VDb25maWcuQnVpbGRlciBidWlsZGVyICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFja2FnZUNvbmZpZ0J1aWxkZXJzLnB1dCggYnVpbGRlci5nZXROYW1lKCksIGJ1aWxkZXIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBDb2xsZWN0aW9uPFBhY2thZ2VDb25maWc+IGNyZWF0ZVBhY2thZ2VDb25maWdzKCkKLSAgICAgICAgewotICAgICAgICAgICAgTWFwPFN0cmluZywgUGFja2FnZUNvbmZpZz4gY29uZmlncyA9IG5ldyBIYXNoTWFwPFN0cmluZywgUGFja2FnZUNvbmZpZz4oKTsKLQotICAgICAgICAgICAgU2V0PFBhY2thZ2VDb25maWcuQnVpbGRlcj4gYnVpbGRlcnM7Ci0gICAgICAgICAgICB3aGlsZSggKCBidWlsZGVycyA9IGZpbmRQYWNrYWdlc1dpdGhOb1BhcmVudHMoKSApLnNpemUoKSA+IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciggUGFja2FnZUNvbmZpZy5CdWlsZGVyIHBhcmVudCA6IGJ1aWxkZXJzICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFBhY2thZ2VDb25maWcgY29uZmlnID0gcGFyZW50LmJ1aWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3MucHV0KCBjb25maWcuZ2V0TmFtZSgpLCBjb25maWcgKTsKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZUNvbmZpZ0J1aWxkZXJzLnJlbW92ZSggY29uZmlnLmdldE5hbWUoKSApOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciggSXRlcmF0b3I8TWFwLkVudHJ5PFBhY2thZ2VDb25maWcuQnVpbGRlciwgUGFja2FnZUNvbmZpZy5CdWlsZGVyPj4gaSA9IGNoaWxkVG9QYXJlbnQuZW50cnlTZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hcC5FbnRyeTxQYWNrYWdlQ29uZmlnLkJ1aWxkZXIsIFBhY2thZ2VDb25maWcuQnVpbGRlcj4gZW50cnkgPSBpLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBlbnRyeS5nZXRWYWx1ZSgpID09IHBhcmVudCApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZ2V0S2V5KCkuYWRkUGFyZW50KCBjb25maWcgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3MudmFsdWVzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTZXQ8UGFja2FnZUNvbmZpZy5CdWlsZGVyPiBmaW5kUGFja2FnZXNXaXRoTm9QYXJlbnRzKCkKLSAgICAgICAgewotICAgICAgICAgICAgU2V0PFBhY2thZ2VDb25maWcuQnVpbGRlcj4gYnVpbGRlcnMgPSBuZXcgSGFzaFNldDxQYWNrYWdlQ29uZmlnLkJ1aWxkZXI+KCk7Ci0gICAgICAgICAgICBmb3IoIFBhY2thZ2VDb25maWcuQnVpbGRlciBjaGlsZCA6IHBhY2thZ2VDb25maWdCdWlsZGVycy52YWx1ZXMoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoICFjaGlsZFRvUGFyZW50LmNvbnRhaW5zS2V5KCBjaGlsZCApICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXJzLmFkZCggY2hpbGQgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYnVpbGRlcnM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgUmVzdWx0VHlwZUNvbmZpZyBnZXREZWZhdWx0UmVzdWx0VHlwZSggUGFja2FnZUNvbmZpZy5CdWlsZGVyIHBrZ0NvbmZpZyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBhY2thZ2VDb25maWcuQnVpbGRlciBwYXJlbnQ7Ci0gICAgICAgICAgICBQYWNrYWdlQ29uZmlnLkJ1aWxkZXIgY3VycmVudCA9IHBrZ0NvbmZpZzsKLQotICAgICAgICAgICAgd2hpbGUoICggcGFyZW50ID0gY2hpbGRUb1BhcmVudC5nZXQoIGN1cnJlbnQgKSApICE9IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudC5nZXRSZXN1bHRUeXBlKCBjdXJyZW50LmdldEZ1bGxEZWZhdWx0UmVzdWx0VHlwZSgpICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb3RFbXB0eSggU3RyaW5nIHRleHQgKQotICAgIHsKLSAgICAgICAgcmV0dXJuICggdGV4dCAhPSBudWxsICkgJiYgISIiLmVxdWFscyggdGV4dCApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvZGViZWhpbmQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvY29kZWJlaGluZC9ib290c3RyYXAvQ29kZWJlaGluZEFzc2VtYmxlci5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9jb2RlYmVoaW5kL2Jvb3RzdHJhcC9Db2RlYmVoaW5kQXNzZW1ibGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMThjNzMuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9jb2RlYmVoaW5kL2Jvb3RzdHJhcC9Db2RlYmVoaW5kQXNzZW1ibGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5jb2RlYmVoaW5kLmJvb3RzdHJhcDsKLQotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJsZXI7Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Nb2R1bGVBc3NlbWJseTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuY29kZWJlaGluZC5RaTRqQ29kZWJlaGluZFBhY2thZ2VQcm92aWRlcjsKLQotcHVibGljIGNsYXNzIENvZGViZWhpbmRBc3NlbWJsZXIKLSAgICBpbXBsZW1lbnRzIEFzc2VtYmxlcgotewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IGFNb2R1bGUgKQotICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGFNb2R1bGUub2JqZWN0cyggUWk0akNvZGViZWhpbmRQYWNrYWdlUHJvdmlkZXIuY2xhc3MgKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1jb2RlYmVoaW5kL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2NvZGViZWhpbmQvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9jb2RlYmVoaW5kL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5NDdmYi4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1jb2RlYmVoaW5kL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2NvZGViZWhpbmQvcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD4KLSAgICA8Ym9keT4KLSAgICAgICAgPGgyPlN0cnV0cyAyIENvZGVCZWhpbmQgSW50ZWdyYXRpb24uPC9oMj4KLSAgICA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItY29udmVudGlvbi9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL2J1aWxkLmdyYWRsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRhNzU1MC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL2J1aWxkLmdyYWRsZQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogU3RydXRzIExpYnJhcnkgYWxsb3dzIGludGVncmF0aW9uIG9mIFFpNGogaW50byBTdHJ1dHMyIGFwcGxpY2F0aW9ucy4iCi0KLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBTdHJ1dHMyIC0gQ29udmVudGlvbiIgfX0KLQotZGVwZW5kZW5jaWVzIHsKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQotICBjb21waWxlKCBwcm9qZWN0KCAnOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LnN0cnV0czItcGx1Z2luJyApICkKLSAgY29tcGlsZShsaWJyYXJpZXMuc3RydXRzX2NvbnZlbnRpb24pCi0KLSAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQotCi0gIHRlc3RSdW50aW1lKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpKQotICB0ZXN0UnVudGltZShsaWJyYXJpZXMubG9nYmFjaykKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL3N0cnV0czItY29udmVudGlvbi9kZXYtc3RhdHVzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU0ZDNhYS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL2Rldi1zdGF0dXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCi0gICAgICAgIGh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZCI+Ci0gIDxzdGF0dXM+Ci0gICAgPCEtLW5vbmUsZWFybHksYmV0YSxzdGFibGUsbWF0dXJlLS0+Ci0gICAgPGNvZGViYXNlPmJldGE8L2NvZGViYXNlPgotCi0gICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPGRvY3VtZW50YXRpb24+bm9uZTwvZG9jdW1lbnRhdGlvbj4KLQotICAgIDwhLS0gbm9uZSwgc29tZSwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPHVuaXR0ZXN0cz5zb21lPC91bml0dGVzdHM+Ci0gIDwvc3RhdHVzPgotICA8bGljZW5zZXM+Ci0gICAgPGxpY2Vuc2U+QUx2MjwvbGljZW5zZT4KLSAgPC9saWNlbnNlcz4KLTwvbW9kdWxlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvbnZlbnRpb24vc3JjL2RvY3Mvc3RydXRzLWNvbnZlbnRpb24udHh0IGIvbGlicmFyaWVzL3N0cnV0czItY29udmVudGlvbi9zcmMvZG9jcy9zdHJ1dHMtY29udmVudGlvbi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNWViYmMuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItY29udmVudGlvbi9zcmMvZG9jcy9zdHJ1dHMtY29udmVudGlvbi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1bW2xpYnJhcnktc3RydXRzLWNvbnZlbnRpb24sIFN0cnV0cyBDb252ZW50aW9uIExpYnJhcnldXQotPSBTdHJ1dHMgLSBDb252ZW50aW9uID0KLQotW2RldnN0YXR1c10KLS0tLS0tLS0tLS0tLS0tCi1zb3VyY2U9bGlicmFyaWVzL3N0cnV0czItY29udmVudGlvbi9kZXYtc3RhdHVzLnhtbAotLS0tLS0tLS0tLS0tLS0KLQotU3RydXRzIENvbnZlbnRpb24gTGlicmFyeQotCi1OT1RFOiBUaGlzIExpYnJhcnkgaGFzIG5vIGRvY3VtZW50YXRpb24geWV0LiBMZWFybiBob3cgdG8gY29udHJpYnV0ZSBpbiA8PGNvbW11bml0eS1kb2NzPj4uCi0KLWluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2NvbnZlbnRpb24vUWk0alBhY2thZ2VCYXNlZEFjdGlvbkNvbmZpZ0J1aWxkZXIuamF2YSBiL2xpYnJhcmllcy9zdHJ1dHMyLWNvbnZlbnRpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvY29udmVudGlvbi9RaTRqUGFja2FnZUJhc2VkQWN0aW9uQ29uZmlnQnVpbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA0ZGQ4Li4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLWNvbnZlbnRpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvY29udmVudGlvbi9RaTRqUGFja2FnZUJhc2VkQWN0aW9uQ29uZmlnQnVpbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuY29udmVudGlvbjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLk9iamVjdEZhY3Rvcnk7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuY29uZmlnLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuaW5qZWN0LkNvbnRhaW5lcjsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5pbmplY3QuSW5qZWN0OwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5jb252ZW50aW9uLlBhY2thZ2VCYXNlZEFjdGlvbkNvbmZpZ0J1aWxkZXI7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLkFjdGlvbkNvbmZpZ3VyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBRaTRqUGFja2FnZUJhc2VkQWN0aW9uQ29uZmlnQnVpbGRlcgotICAgIGV4dGVuZHMgUGFja2FnZUJhc2VkQWN0aW9uQ29uZmlnQnVpbGRlcgotewotCi0gICAgcHJpdmF0ZSBmaW5hbCBBY3Rpb25Db25maWd1cmF0aW9uIGFjdGlvbkNvbmZpZ3VyYXRpb247Ci0KLSAgICBASW5qZWN0Ci0gICAgcHVibGljIFFpNGpQYWNrYWdlQmFzZWRBY3Rpb25Db25maWdCdWlsZGVyKCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIENvbnRhaW5lciBjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RGYWN0b3J5IG9iamVjdEZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBASW5qZWN0KCAic3RydXRzLmNvbnZlbnRpb24ucmVkaXJlY3QudG8uc2xhc2giICkgU3RyaW5nIHJlZGlyZWN0VG9TbGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBJbmplY3QoICJzdHJ1dHMuY29udmVudGlvbi5kZWZhdWx0LnBhcmVudC5wYWNrYWdlIiApIFN0cmluZyBkZWZhdWx0UGFyZW50UGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbkNvbmZpZ3VyYXRpb24gYWN0aW9uQ29uZmlndXJhdGlvbgotICAgICkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCBjb25maWd1cmF0aW9uLCBjb250YWluZXIsIG9iamVjdEZhY3RvcnksIHJlZGlyZWN0VG9TbGFzaCwgZGVmYXVsdFBhcmVudFBhY2thZ2UgKTsKLSAgICAgICAgdGhpcy5hY3Rpb25Db25maWd1cmF0aW9uID0gYWN0aW9uQ29uZmlndXJhdGlvbjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBidWlsZEFjdGlvbkNvbmZpZ3MoKQotICAgIHsKLSAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uKCBhY3Rpb25Db25maWd1cmF0aW9uLmdldENsYXNzZXMoKSApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBib29sZWFuIGNhbm5vdEluc3RhbnRpYXRlKCBDbGFzczw/PiBhY3Rpb25DbGFzcyApCi0gICAgewotICAgICAgICByZXR1cm4gYWN0aW9uQ2xhc3MuaXNBbm5vdGF0aW9uKCkKLSAgICAgICAgICAgICAgIHx8IGFjdGlvbkNsYXNzLmlzRW51bSgpCi0gICAgICAgICAgICAgICB8fCAoICFhY3Rpb25DbGFzcy5pc0ludGVyZmFjZSgpICYmICggYWN0aW9uQ2xhc3MuZ2V0TW9kaWZpZXJzKCkgJiBNb2RpZmllci5BQlNUUkFDVCApICE9IDAgKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2NvbnZlbnRpb24vUWk0alBhY2thZ2VQcm92aWRlci5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItY29udmVudGlvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9jb252ZW50aW9uL1FpNGpQYWNrYWdlUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1OGQ0OC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2NvbnZlbnRpb24vUWk0alBhY2thZ2VQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuY29udmVudGlvbjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5Db25maWd1cmF0aW9uOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5Db25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5QYWNrYWdlUHJvdmlkZXI7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuaW5qZWN0LkluamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuY29udmVudGlvbi5BY3Rpb25Db25maWdCdWlsZGVyOwotCi1wdWJsaWMgY2xhc3MgUWk0alBhY2thZ2VQcm92aWRlciBpbXBsZW1lbnRzIFBhY2thZ2VQcm92aWRlciB7Ci0KLSAgICBwcml2YXRlIEFjdGlvbkNvbmZpZ0J1aWxkZXIgYWN0aW9uQ29uZmlnQnVpbGRlcjsKLQotICAgIEBJbmplY3QoInFpNGoiKQotICAgIHB1YmxpYyBRaTRqUGFja2FnZVByb3ZpZGVyKEFjdGlvbkNvbmZpZ0J1aWxkZXIgYWN0aW9uQ29uZmlnQnVpbGRlcikgewotICAgICAgICB0aGlzLmFjdGlvbkNvbmZpZ0J1aWxkZXIgPSBhY3Rpb25Db25maWdCdWlsZGVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGluaXQoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgbG9hZFBhY2thZ2VzKCkgdGhyb3dzIENvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotICAgICAgICBhY3Rpb25Db25maWdCdWlsZGVyLmJ1aWxkQWN0aW9uQ29uZmlncygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG5lZWRzUmVsb2FkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2NvbnZlbnRpb24vcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3N0cnV0czItY29udmVudGlvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9jb252ZW50aW9uL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjOWRiNC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2NvbnZlbnRpb24vcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD4KLSAgICA8Ym9keT4KLSAgICAgICAgPGgyPlN0cnV0cyAyIENvbnZlbnRpb24gSW50ZWdyYXRpb24uPC9oMj4KLSAgICA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItY29udmVudGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLXBsdWdpbi54bWwgYi9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMtcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGViN2VmNC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1jb252ZW50aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMtcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjAuZHRkIj4KLQotPHN0cnV0cz4KLSAgPGJlYW4gdHlwZT0ib3JnLmFwYWNoZS5zdHJ1dHMyLmNvbnZlbnRpb24uQWN0aW9uQ29uZmlnQnVpbGRlciIgbmFtZT0icWk0aiIKLSAgICAgICAgY2xhc3M9Im9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5jb252ZW50aW9uLlFpNGpQYWNrYWdlQmFzZWRBY3Rpb25Db25maWdCdWlsZGVyIi8+Ci0KLSAgPGJlYW4gdHlwZT0iY29tLm9wZW5zeW1waG9ueS54d29yazIuY29uZmlnLlBhY2thZ2VQcm92aWRlciIgbmFtZT0icWk0aiIKLSAgICAgICAgY2xhc3M9Im9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5jb252ZW50aW9uLlFpNGpQYWNrYWdlUHJvdmlkZXIiLz4KLTwvc3RydXRzPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL2J1aWxkLmdyYWRsZSBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9idWlsZC5ncmFkbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNzVhYjUuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL2J1aWxkLmdyYWRsZQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogU3RydXRzIExpYnJhcnkgYWxsb3dzIGludGVncmF0aW9uIG9mIFFpNGogaW50byBTdHJ1dHMyIGFwcGxpY2F0aW9ucy4iCi0KLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBTdHJ1dHMyIiB9fQotCi1kZXBlbmRlbmNpZXMgewotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCi0gIGNvbXBpbGUobGlicmFyaWVzLnN0cnV0c19jb3JlKQotICBjb21waWxlKGxpYnJhcmllcy5mcmVlbWFya2VyKQotICBjb21waWxlKGxpYnJhcmllcy5zZXJ2bGV0X2FwaSkKLQotICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikpCi0KLSAgdGVzdFJ1bnRpbWUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lIikpCi0gIHRlc3RSdW50aW1lKGxpYnJhcmllcy5sb2diYWNrKQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9kZXYtc3RhdHVzLnhtbCBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9kZXYtc3RhdHVzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU0ZDNhYS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vZGV2LXN0YXR1cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTxtb2R1bGUgeG1sbnM9Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMSIKLSAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEKLSAgICAgICAgaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xL2Rldi1zdGF0dXMueHNkIj4KLSAgPHN0YXR1cz4KLSAgICA8IS0tbm9uZSxlYXJseSxiZXRhLHN0YWJsZSxtYXR1cmUtLT4KLSAgICA8Y29kZWJhc2U+YmV0YTwvY29kZWJhc2U+Ci0KLSAgICA8IS0tIG5vbmUsIGJyaWVmLCBnb29kLCBjb21wbGV0ZSAtLT4KLSAgICA8ZG9jdW1lbnRhdGlvbj5ub25lPC9kb2N1bWVudGF0aW9uPgotCi0gICAgPCEtLSBub25lLCBzb21lLCBnb29kLCBjb21wbGV0ZSAtLT4KLSAgICA8dW5pdHRlc3RzPnNvbWU8L3VuaXR0ZXN0cz4KLSAgPC9zdGF0dXM+Ci0gIDxsaWNlbnNlcz4KLSAgICA8bGljZW5zZT5BTHYyPC9saWNlbnNlPgotICA8L2xpY2Vuc2VzPgotPC9tb2R1bGU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9kb2NzL3N0cnV0cy1wbHVnaW4udHh0IGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9kb2NzL3N0cnV0cy1wbHVnaW4udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWUyMmZmLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvZG9jcy9zdHJ1dHMtcGx1Z2luLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLVtbbGlicmFyeS1zdHJ1dHMtcGx1Z2luLCBTdHJ1dHMgUGx1Z2luIExpYnJhcnldXQotPSBTdHJ1dHMgLSBQbHVnaW4gPQotCi1bZGV2c3RhdHVzXQotLS0tLS0tLS0tLS0tLS0KLXNvdXJjZT1saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vZGV2LXN0YXR1cy54bWwKLS0tLS0tLS0tLS0tLS0tCi0KLVN0cnV0cyBQbHVnaW4gTGlicmFyeQotCi1OT1RFOiBUaGlzIExpYnJhcnkgaGFzIG5vIGRvY3VtZW50YXRpb24geWV0LiBMZWFybiBob3cgdG8gY29udHJpYnV0ZSBpbiA8PGNvbW11bml0eS1kb2NzPj4uCi0KLWluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvQWN0aW9uQ29uZmlndXJhdGlvbi5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL0FjdGlvbkNvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRkMzhiOC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvQWN0aW9uQ29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czI7Ci0KLWltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlRyYW5zaWVudENvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibGVyOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7Ci0KLXB1YmxpYyBjbGFzcyBBY3Rpb25Db25maWd1cmF0aW9uCi0gICAgaW1wbGVtZW50cyBBc3NlbWJsZXIsIFNlcmlhbGl6YWJsZQotewotICAgIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAgIHByaXZhdGUgZmluYWwgU2V0PENsYXNzPiBvYmplY3RUeXBlczsKLSAgICBwcml2YXRlIGZpbmFsIFNldDxDbGFzczw/IGV4dGVuZHMgQ29tcG9zaXRlPj4gY29tcG9zaXRlVHlwZXM7Ci0KLSAgICBwdWJsaWMgQWN0aW9uQ29uZmlndXJhdGlvbigpCi0gICAgewotICAgICAgICBjb21wb3NpdGVUeXBlcyA9IG5ldyBIYXNoU2V0PENsYXNzPD8gZXh0ZW5kcyBDb21wb3NpdGU+PigpOwotICAgICAgICBvYmplY3RUeXBlcyA9IG5ldyBIYXNoU2V0PENsYXNzPigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZE9iamVjdHMoIENsYXNzLi4uIG9iamVjdFR5cGVzICkKLSAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCi0gICAgewotICAgICAgICB0aGlzLm9iamVjdFR5cGVzLmFkZEFsbCggQXJyYXlzLmFzTGlzdCggb2JqZWN0VHlwZXMgKSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZENvbXBvc2l0ZXMoIENsYXNzPD8gZXh0ZW5kcyBDb21wb3NpdGU+Li4uIGNvbXBvc2l0ZVR5cGVzICkKLSAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCi0gICAgewotICAgICAgICB0aGlzLmNvbXBvc2l0ZVR5cGVzLmFkZEFsbCggQXJyYXlzLmFzTGlzdCggY29tcG9zaXRlVHlwZXMgKSApOwotICAgIH0KLQotICAgIHB1YmxpYyBTZXQ8Q2xhc3M+IGdldENsYXNzZXMoKQotICAgIHsKLSAgICAgICAgU2V0PENsYXNzPiBjbGFzc2VzID0gbmV3IEhhc2hTZXQ8Q2xhc3M+KCBvYmplY3RUeXBlcyApOwotICAgICAgICBjbGFzc2VzLmFkZEFsbCggY29tcG9zaXRlVHlwZXMgKTsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldCggY2xhc3NlcyApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQotICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIG1vZHVsZS5vYmplY3RzKCBvYmplY3RUeXBlcy50b0FycmF5KCBuZXcgQ2xhc3NbXXsgfSApICkudmlzaWJsZUluKCBWaXNpYmlsaXR5Lm1vZHVsZSApOwotICAgICAgICBtb2R1bGUudHJhbnNpZW50cyggKENsYXNzPD8gZXh0ZW5kcyBUcmFuc2llbnRDb21wb3NpdGU+W10pIGNvbXBvc2l0ZVR5cGVzLnRvQXJyYXkoIG5ldyBDbGFzc1tdeyB9ICkgKQotICAgICAgICAgICAgLnZpc2libGVJbiggVmlzaWJpbGl0eS5tb2R1bGUgKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvQWN0aW9uU2VydmljZS5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL0FjdGlvblNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZkOTlhZS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvQWN0aW9uU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMjsKLQotaW1wb3J0IG9yZy5xaTRqLmFwaS5zZXJ2aWNlLlNlcnZpY2VDb21wb3NpdGU7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQWN0aW9uU2VydmljZQotICAgIGV4dGVuZHMgU2VydmljZUNvbXBvc2l0ZQotewotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL0NvbnN0YW50cy5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQ3NmYyLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9Db25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qICBDb3B5cmlnaHQgMjAwOCBFZHdhcmQgWWFrb3AuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMjsKLQotcHVibGljIGNsYXNzIENvbnN0YW50cwotewotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFNFUlZMRVRfQVRUUklCVVRFID0gInFpNGouYXBwbGljYXRpb24uaW5pdGlhbGl6ZXIiOwotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL0NvbnN0cmFpbnRWaW9sYXRpb25JbnRlcmNlcHRvci5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL0NvbnN0cmFpbnRWaW9sYXRpb25JbnRlcmNlcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDk5Y2JmLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9Db25zdHJhaW50VmlvbGF0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvbkNvbnRleHQ7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uSW52b2NhdGlvbjsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5WYWxpZGF0aW9uQXdhcmU7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuaW50ZXJjZXB0b3IuQWJzdHJhY3RJbnRlcmNlcHRvcjsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5pbnRlcmNlcHRvci5QcmVSZXN1bHRMaXN0ZW5lcjsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi51dGlsLlZhbHVlU3RhY2s7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5RaTRqOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25zdHJhaW50LkNvbnN0cmFpbnRWaW9sYXRpb247Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnV0aWwuQ2xhc3NOYW1lTWFwcGVyOwotCi1pbXBvcnQgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9ucy5lbXB0eU1hcDsKLWltcG9ydCBzdGF0aWMgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnV0aWwuQ2xhc3NOYW1lRmlsdGVycy5yZW1vdmVTdWZmaXhlczsKLWltcG9ydCBzdGF0aWMgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnV0aWwuQ2xhc3NOYW1lcy5jbGFzc05hbWVJbkRvdE5vdGF0aW9uOwotCi0vKioKLSAqIDxwPkNvbnN0cmFpbnRWaW9sYXRpb25JbnRlcmNlcHRvciBhZGRzIGNvbnN0cmFpbnQgdmlvbGF0aW9ucyBmcm9tIHRoZSBBY3Rpb25Db250ZXh0IHRvIHRoZSBBY3Rpb24ncyBmaWVsZCBlcnJvcnMuPC9wPgotICoKLSAqIDxwPlRoaXMgaW50ZXJjZXB0b3IgYWRkcyBhbnkgZXJyb3IgZm91bmQgaW4gdGhlIHtAbGluayBBY3Rpb25Db250ZXh0fSdzIGNvbnN0cmFpbnQgdmlvbGF0aW9ucyBtYXAgYXMgYSBmaWVsZCBlcnJvcgotICogKHByb3ZpZGVkIHRoYXQgdGhlIGFjdGlvbiBpbXBsZW1lbnRzIHtAbGluayBWYWxpZGF0aW9uQXdhcmV9KS4gSW4gYWRkaXRpb24sIGFueSBmaWVsZCB0aGF0IGNvbnRhaW5zIGEgY29uc3RyYWludAotICogdmlvbGF0aW9uIGhhcyBpdHMgb3JpZ2luYWwgdmFsdWUgc2F2ZWQgc3VjaCB0aGF0IGFueSBzdWJzZXF1ZW50IHJlcXVlc3RzIGZvciB0aGF0IHZhbHVlIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUKLSAqIHJhdGhlciB0aGFuIHRoZSB2YWx1ZSBpbiB0aGUgYWN0aW9uLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGlmIHRoZSB2YWx1ZSAiYWJjIiBpcyBzdWJtaXR0ZWQgYW5kIGNhbid0IGJlIHNldAotICogb24gYSBwcm9wZXJ0eSByZXF1aXJpbmcgYXQgbGVhc3QgNSBjaGFyYWN0ZXJzLCB3ZSB3YW50IHRvIGRpc3BsYXkgdGhlIG9yaWdpbmFsIHN0cmluZyAoImFiYyIpIGFnYWluIHJhdGhlciB0aGFuIHRoZQotICogb3JpZ2luYWwgdmFsdWUgKGxpa2VseSBhbiBlbXB0eSBzdHJpbmcsIHdoaWNoIHdvdWxkIG1ha2UgdmVyeSBsaXR0bGUgc2Vuc2UgdG8gdGhlIHVzZXIpLjwvcD4KLSAqCi0gKiA8cD5UaGlzIGlzIHNpbWlsYXIsIGluIHByaW5jaXBsZSwgdG8gdGhlIFhXb3JrIENvbnZlcnNpb25FcnJvckludGVyY2VwdG9yIGFuZCBtdWNoIG9mIHRoZSBjb2RlIGlzIHJlZmxlY3RzIHRoYXQuPC9wPgotICovCi1wdWJsaWMgY2xhc3MgQ29uc3RyYWludFZpb2xhdGlvbkludGVyY2VwdG9yCi0gICAgZXh0ZW5kcyBBYnN0cmFjdEludGVyY2VwdG9yCi17Ci0gICAgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVYVF9DT05TVFJBSU5UX1ZJT0xBVElPTlMgPSBDb25zdHJhaW50VmlvbGF0aW9uSW50ZXJjZXB0b3IuY2xhc3MuZ2V0TmFtZSgpICsgIi5jb25zdHJhaW50VmlvbGF0aW9ucyI7Ci0KLSAgICBwcm90ZWN0ZWQgT2JqZWN0IGdldE92ZXJyaWRlRXhwciggQWN0aW9uSW52b2NhdGlvbiBpbnZvY2F0aW9uLCBGaWVsZENvbnN0cmFpbnRWaW9sYXRpb25zIHZpb2xhdGlvbnMgKQotICAgIHsKLSAgICAgICAgcmV0dXJuICInIiArIHZpb2xhdGlvbnMudmFsdWUoKSArICInIjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGludGVyY2VwdCggQWN0aW9uSW52b2NhdGlvbiBpbnZvY2F0aW9uICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgQWN0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCA9IGludm9jYXRpb24uZ2V0SW52b2NhdGlvbkNvbnRleHQoKTsKLSAgICAgICAgVmFsdWVTdGFjayBzdGFjayA9IGludm9jYXRpb25Db250ZXh0LmdldFZhbHVlU3RhY2soKTsKLQotICAgICAgICBPYmplY3QgYWN0aW9uID0gaW52b2NhdGlvbi5nZXRBY3Rpb24oKTsKLSAgICAgICAgaWYoIGFjdGlvbiBpbnN0YW5jZW9mIFZhbGlkYXRpb25Bd2FyZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZhbGlkYXRpb25Bd2FyZSB2YSA9IChWYWxpZGF0aW9uQXdhcmUpIGFjdGlvbjsKLSAgICAgICAgICAgIEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+IHByb3BlcnR5T3ZlcnJpZGVzID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7Ci0gICAgICAgICAgICBmb3IoIE1hcC5FbnRyeTxTdHJpbmcsIEZpZWxkQ29uc3RyYWludFZpb2xhdGlvbnM+IGZpZWxkVmlvbGF0aW9ucyA6IGZpZWxkQ29uc3RyYWludFZpb2xhdGlvbnMoIGludm9jYXRpb25Db250ZXh0ICkKLSAgICAgICAgICAgICAgICAuZW50cnlTZXQoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYWRkQ29uc3RyYWludFZpb2xhdGlvbkZpZWxkRXJyb3JzKCBzdGFjaywgdmEsIGZpZWxkVmlvbGF0aW9ucy5nZXRLZXkoKSwgZmllbGRWaW9sYXRpb25zLmdldFZhbHVlKCkgKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU92ZXJyaWRlcy5wdXQoIGZpZWxkVmlvbGF0aW9ucy5nZXRLZXkoKSwgZ2V0T3ZlcnJpZGVFeHByKCBpbnZvY2F0aW9uLCBmaWVsZFZpb2xhdGlvbnMuZ2V0VmFsdWUoKSApICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpZiB0aGVyZSB3ZXJlIHNvbWUgZXJyb3JzLCBwdXQgdGhlIG9yaWdpbmFsIChmYWtlKSB2YWx1ZXMgaW4gcGxhY2UgcmlnaHQgYmVmb3JlIHRoZSByZXN1bHQKLSAgICAgICAgICAgIGlmKCAhcHJvcGVydHlPdmVycmlkZXMuaXNFbXB0eSgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdmVycmlkZUFjdGlvblZhbHVlcyggaW52b2NhdGlvbiwgc3RhY2ssIHByb3BlcnR5T3ZlcnJpZGVzICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gaW52b2NhdGlvbi5pbnZva2UoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgb3ZlcnJpZGVBY3Rpb25WYWx1ZXMoCi0gICAgICAgIEFjdGlvbkludm9jYXRpb24gaW52b2NhdGlvbiwgVmFsdWVTdGFjayBzdGFjaywgZmluYWwgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4gcHJvcGVydHlPdmVycmlkZXMKLSAgICApCi0gICAgewotICAgICAgICBpbnZvY2F0aW9uLmFkZFByZVJlc3VsdExpc3RlbmVyKCBuZXcgUHJlUmVzdWx0TGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIGJlZm9yZVJlc3VsdCggQWN0aW9uSW52b2NhdGlvbiBpbnZvY2F0aW9uLCBTdHJpbmcgcmVzdWx0Q29kZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW52b2NhdGlvbi5nZXRTdGFjaygpLnNldEV4cHJPdmVycmlkZXMoIHByb3BlcnR5T3ZlcnJpZGVzICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYWRkQ29uc3RyYWludFZpb2xhdGlvbkZpZWxkRXJyb3JzKAotICAgICAgICBWYWx1ZVN0YWNrIHN0YWNrLCBWYWxpZGF0aW9uQXdhcmUgdmEsIFN0cmluZyBmaWVsZE5hbWUsIEZpZWxkQ29uc3RyYWludFZpb2xhdGlvbnMgdmlvbGF0aW9ucwotICAgICkKLSAgICB7Ci0gICAgICAgIGZvciggQ29uc3RyYWludFZpb2xhdGlvbiBjb25zdHJhaW50VmlvbGF0aW9uIDogdmlvbGF0aW9ucy5jb25zdHJhaW50VmlvbGF0aW9ucygpICkKLSAgICAgICAgewotICAgICAgICAgICAgT2JqZWN0IHRhcmdldCA9IHZpb2xhdGlvbnMudGFyZ2V0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IG1lc3NhZ2UoIHRhcmdldCwgdmlvbGF0aW9ucy5wcm9wZXJ0eU5hbWUoKSwgY29uc3RyYWludFZpb2xhdGlvbiwgc3RhY2sgKTsKLSAgICAgICAgICAgIHZhLmFkZEZpZWxkRXJyb3IoIGZpZWxkTmFtZSwgbWVzc2FnZSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoICJ1bmNoZWNrZWQiICkKLSAgICBwcml2YXRlIE1hcDxTdHJpbmcsIEZpZWxkQ29uc3RyYWludFZpb2xhdGlvbnM+IGZpZWxkQ29uc3RyYWludFZpb2xhdGlvbnMoIEFjdGlvbkNvbnRleHQgY29udGV4dCApCi0gICAgewotICAgICAgICBNYXA8U3RyaW5nLCBGaWVsZENvbnN0cmFpbnRWaW9sYXRpb25zPiB2aW9sYXRpb25zID0KLSAgICAgICAgICAgIChNYXA8U3RyaW5nLCBGaWVsZENvbnN0cmFpbnRWaW9sYXRpb25zPikgY29udGV4dC5nZXQoIENPTlRFWFRfQ09OU1RSQUlOVF9WSU9MQVRJT05TICk7Ci0gICAgICAgIGlmKCB2aW9sYXRpb25zID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1wdHlNYXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB2aW9sYXRpb25zOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZSggT2JqZWN0IHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJhaW50VmlvbGF0aW9uIGNvbnN0cmFpbnRWaW9sYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZVN0YWNrIHN0YWNrCi0gICAgKQotICAgIHsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2VLZXkgPSBtZXNzYWdlS2V5KCB0YXJnZXQsIHByb3BlcnR5TmFtZSwgY29uc3RyYWludFZpb2xhdGlvbiApOwotICAgICAgICBTdHJpbmcgZ2V0VGV4dEV4cHJlc3Npb24gPSAiZ2V0VGV4dCgnIiArIG1lc3NhZ2VLZXkgKyAiJykiOwotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IChTdHJpbmcpIHN0YWNrLmZpbmRWYWx1ZSggZ2V0VGV4dEV4cHJlc3Npb24gKTsKLQotICAgICAgICBpZiggbWVzc2FnZSA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VLZXk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbWVzc2FnZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiA8cD5UaGUgbWVzc2FnZSBrZXkgaXMgZ2VuZXJhdGVkIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSB0YXJnZXQsIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBhbmQgdGhlIHR5cGUgb2YgdGhlCi0gICAgICogY29uc3RyYWludCB2aW9sYXRpb24uICBTbywgaWYgdGhlIHRhcmdldCBoYXMgdHlwZSBJdGVtRW50aXR5IHdpdGggYSBuYW1lIHByb3BlcnR5IHRoYXQgaGFzIGEgbm90IGVtcHR5IGNvbnN0cmFpbnQKLSAgICAgKiBhbmQgdGhlIHVzZXIgZG9lc24ndCBlbnRlciBhbnl0aGluZyBmb3IgdGhlIHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIGtleSB3b3VsZCBiZQotICAgICAqICdpdGVtLm5hbWUubm90LmVtcHR5LmNvbnN0cmFpbnQudmlvbGF0ZWQnLjwvcD4KLSAgICAgKgotICAgICAqIDxwPk5vdGUgdGhhdCBpZiB0aGUgdHlwZSBuYW1lIG9mIHRoZSB0YXJnZXQgZW5kcyB3aXRoICdDb21wb3NpdGUnIG9yICdFbnRpdHknLCB0aG9zZSB3aWxsIGJlIHJlbW92ZWQgYW5kIHRoZQotICAgICAqIHJlc3Qgb2YgdGhlIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBjYW1lbC1jYXNlIHRvIGEgZG90IG5vdGF0aW9uLiAgVGhpcyBpcyB0cnVlIG9mIHRoZSBjb25zdHJhaW50IHR5cGVzIGFzCi0gICAgICogd2VsbC4gIFNvIGEgY29uc3RyYWludCBuYW1lZCBOb3RFbXB0eSB3aWxsIGJlIGNvbnZlcnRlZCB0byBub3QuZW1wdHkgYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUuPC9wPgotICAgICAqIEBwYXJhbSB0YXJnZXQgSkFWQURPQwotICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgSkFWQURPQwotICAgICAqIEBwYXJhbSB2aW9sYXRpb24gSkFWQURPQwotICAgICAqIEByZXR1cm4gSkFWQURPQwotICAgICAqLwotICAgIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZUtleSggT2JqZWN0IHRhcmdldCwgU3RyaW5nIHByb3BlcnR5TmFtZSwgQ29uc3RyYWludFZpb2xhdGlvbiB2aW9sYXRpb24gKQotICAgIHsKLSAgICAgICAgSXRlcmFibGU8Q2xhc3M8Pz4+IHR5cGVzOwotICAgICAgICBpZiggdGFyZ2V0IGluc3RhbmNlb2YgQ29tcG9zaXRlICkKLSAgICAgICAgewotICAgICAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IChDb21wb3NpdGUpIHRhcmdldDsKLSAgICAgICAgICAgIHR5cGVzID0gUWk0ai5GVU5DVElPTl9ERVNDUklQVE9SX0ZPUi5tYXAoIGNvbXBvc2l0ZSApLnR5cGVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBcnJheUxpc3Q8Q2xhc3M8Pz4+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PENsYXNzPD8+PiggMSApOwotICAgICAgICAgICAgbGlzdC5hZGQodGFyZ2V0LmdldENsYXNzKCkpOwotICAgICAgICAgICAgdHlwZXMgPSBsaXN0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZUluRG90Tm90YXRpb24oIHR5cGVzLCB3aXRob3V0Q29tcG9zaXRlT3JFbnRpdHlTdWZmaXggKQotICAgICAgICAgICAgICAgKyAiLiIgKyBwcm9wZXJ0eU5hbWUKLSAgICAgICAgICAgICAgICsgIi4iICsgY29uc3RyYWludEtleVBhcnQoIHZpb2xhdGlvbiApCi0gICAgICAgICAgICAgICArICIuY29uc3RyYWludC52aW9sYXRlZCI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3NOYW1lTWFwcGVyIHdpdGhvdXRDb21wb3NpdGVPckVudGl0eVN1ZmZpeCA9IHJlbW92ZVN1ZmZpeGVzKCAiQ29tcG9zaXRlIiwgIkVudGl0eSIgKTsKLQotICAgIHByaXZhdGUgU3RyaW5nIGNvbnN0cmFpbnRLZXlQYXJ0KCBDb25zdHJhaW50VmlvbGF0aW9uIGNvbnN0cmFpbnRWaW9sYXRpb24gKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZUluRG90Tm90YXRpb24oIGNvbnN0cmFpbnRWaW9sYXRpb24uY29uc3RyYWludCgpLmFubm90YXRpb25UeXBlKCkgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEZpZWxkQ29uc3RyYWludFZpb2xhdGlvbnMKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IHRhcmdldDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lOwotICAgICAgICBwcml2YXRlIGZpbmFsIE9iamVjdCB2YWx1ZTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb2xsZWN0aW9uPENvbnN0cmFpbnRWaW9sYXRpb24+IGNvbnN0cmFpbnRWaW9sYXRpb25zOwotCi0gICAgICAgIHB1YmxpYyBGaWVsZENvbnN0cmFpbnRWaW9sYXRpb25zKAotICAgICAgICAgICAgT2JqZWN0IGFUYXJnZXQsCi0gICAgICAgICAgICBTdHJpbmcgYVByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgIE9iamVjdCBhVmFsdWUsCi0gICAgICAgICAgICBDb2xsZWN0aW9uPENvbnN0cmFpbnRWaW9sYXRpb24+IGNvbnN0cmFpbnRWaW9sYXRpb25zCi0gICAgICAgICkKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0ID0gYVRhcmdldDsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGFQcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICB2YWx1ZSA9IGFWYWx1ZTsKLSAgICAgICAgICAgIHRoaXMuY29uc3RyYWludFZpb2xhdGlvbnMgPSBjb25zdHJhaW50VmlvbGF0aW9uczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBPYmplY3QgdGFyZ2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgcHJvcGVydHlOYW1lKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBPYmplY3QgdmFsdWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgQ29sbGVjdGlvbjxDb25zdHJhaW50VmlvbGF0aW9uPiBjb25zdHJhaW50VmlvbGF0aW9ucygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50VmlvbGF0aW9uczsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9FbnRpdHlDb21wb3NpdGVDb252ZXJ0ZXIuamF2YSBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9FbnRpdHlDb21wb3NpdGVDb252ZXJ0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1MDE2Ny4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvRW50aXR5Q29tcG9zaXRlQ29udmVydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmluamVjdC5JbmplY3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIudXRpbC5TdHJ1dHNUeXBlQ29udmVydGVyOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5Q29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcms7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29ya0ZhY3Rvcnk7Ci0KLS8qKgotICogPHA+Q29udmVydHMgU3RyaW5ncyB0byBlbnRpdGllcyBhbmQgZW50aXRpZXMgdG8gc3RyaW5ncy48L3A+Ci0gKgotICogPHA+VG8gY29udmVydCBmcm9tIGEgc3RyaW5nIHRvIGFuIGVudGl0eSB0aGUgdmFsdWUgcGFzc2VkIGluIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGlkZW50aXR5LiAgVGhlIGlkZW50aXR5IGNhbgotICogYmUgZWl0aGVyIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aXR5LCBlLmcgb3JnLnFpNGouZXhhbXBsZS5QZXJzb246MzY4ZTI3ZjAtZWEzOS00OTdhLTkwNjktZmZiNWY0MWJmMTc0LTAsIG9yIGl0IGNhbgotICogYmUganVzdCB0aGUgdXVpZC48L3A+Ci0gKgotICogPHA+Q29udmVyc2lvbiB0byBhIFN0cmluZyBpcyBkb25lIHVzaW5nIHRoZSBFbnRpdHlDb21wb3NpdGVzIGlkZW50aXR5IGFuZCBhbmQgcmV0dXJuaW5nIGp1c3QgdGhlIHV1aWQgcG9ydGlvbi48L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBFbnRpdHlDb21wb3NpdGVDb252ZXJ0ZXIKLSAgICBleHRlbmRzIFN0cnV0c1R5cGVDb252ZXJ0ZXIKLXsKLSAgICBwcml2YXRlIFVuaXRPZldvcmtGYWN0b3J5IHVvd2Y7Ci0KLSAgICBASW5qZWN0Ci0gICAgcHVibGljIHZvaWQgc2V0VW5pdE9mV29ya0ZhY3RvcnkoIFVuaXRPZldvcmtGYWN0b3J5IHVvd2YgKQotICAgIHsKLSAgICAgICAgdGhpcy51b3dmID0gdW93ZjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGNvbnZlcnRGcm9tU3RyaW5nKCBNYXAgY29udGV4dCwgU3RyaW5nW10gdmFsdWVzLCBDbGFzcyB0b0NsYXNzICkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBpZGVudGl0eSA9IGV4dHJhY3RJZGVudGl0eSggdmFsdWVzICk7Ci0gICAgICAgIFVuaXRPZldvcmsgdW93ID0gdW93Zi5jdXJyZW50VW5pdE9mV29yaygpOwotICAgICAgICByZXR1cm4gdW93LmdldCggdG9DbGFzcywgaWRlbnRpdHkgKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGNvbnZlcnRUb1N0cmluZyggTWFwIGNvbnRleHQsIE9iamVjdCBvICkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoIChFbnRpdHlDb21wb3NpdGUpIG8gKS5pZGVudGl0eSgpLmdldCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGV4dHJhY3RJZGVudGl0eSggU3RyaW5nW10gdmFsdWVzICkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBpZGVudGl0eSA9IHZhbHVlc1sgMCBdOwotICAgICAgICBpbnQgc2VwYXJhdG9ySW5kZXggPSBpZGVudGl0eS5pbmRleE9mKCAnOicgKTsKLSAgICAgICAgaWYoIHNlcGFyYXRvckluZGV4ID09IC0xICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aXR5OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpZGVudGl0eSA9IGlkZW50aXR5LnN1YnN0cmluZyggc2VwYXJhdG9ySW5kZXggKyAxICk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL1FpNGpBcHBsaWNhdGlvbkJvb3RzdHJhcExpc3RlbmVyLmphdmEgYi9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvUWk0akFwcGxpY2F0aW9uQm9vdHN0cmFwTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU5Y2I5ZS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvUWk0akFwcGxpY2F0aW9uQm9vdHN0cmFwTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKiAgQ29weXJpZ2h0IDIwMDggRWR3YXJkIFlha29wLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czI7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHRFdmVudDsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5BcHBsaWNhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXBwbGljYXRpb25Bc3NlbWJsZXI7Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5FbmVyZ3k0SmF2YTsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi1pbXBvcnQgc3RhdGljIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5Db25zdGFudHMuU0VSVkxFVF9BVFRSSUJVVEU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBRaTRqQXBwbGljYXRpb25Cb290c3RyYXBMaXN0ZW5lcgotICAgIGltcGxlbWVudHMgU2VydmxldENvbnRleHRMaXN0ZW5lcgotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlciggUWk0akFwcGxpY2F0aW9uQm9vdHN0cmFwTGlzdGVuZXIuY2xhc3MgKTsKLQotICAgIHByaXZhdGUgQXBwbGljYXRpb24gYXBwbGljYXRpb247Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBjb250ZXh0SW5pdGlhbGl6ZWQoIFNlcnZsZXRDb250ZXh0RXZlbnQgc2NlICkKLSAgICB7Ci0gICAgICAgIExPRy5pbmZvKCAiUWk0aiBQbHVnaW46IEluaXRpYWxpemluZyIgKTsKLQotICAgICAgICBTZXJ2bGV0Q29udGV4dCBjb250ZXh0ID0gc2NlLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgICAgIGFwcGxpY2F0aW9uID0gY3JlYXRlTmV3QXBwbGljYXRpb24oIGNvbnRleHQgKTsKLQotICAgICAgICBpZiggYXBwbGljYXRpb24gIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIE1vZHVsZSBtb2R1bGUgPSBxaTRqU3RydXRzTW9kdWxlKCBhcHBsaWNhdGlvbiApOwotICAgICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoIFNFUlZMRVRfQVRUUklCVVRFLCBtb2R1bGUgKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwbGljYXRpb24uYWN0aXZhdGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggIk5vbmUgb2YgdGhlIGFzc2VtYmx5IGNyZWF0aW9uIG1ldGhvZHMgcmV0dXJuZWQgYSBub24tbnVsbCBhc3NlbWJsZXIiICk7Ci0gICAgICAgIH0KLSAgICAgICAgTE9HLmluZm8oICIuLi4gaW5pdGlhbGl6ZWQgcWk0ai1zdHJ1dHMgaW50ZWdyYXRpb24gc3VjY2Vzc2Z1bGx5IiApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBRaTRqIGFwcGxpY2F0aW9uLgotICAgICAqCi0gICAgICogQHJldHVybiBRaTRqIHN0cnV0cyBtb2R1bGUuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIGFic3RyYWN0IE1vZHVsZSBxaTRqU3RydXRzTW9kdWxlKCBBcHBsaWNhdGlvbiBhcHBsaWNhdGlvbiApOwotCi0gICAgcHJpdmF0ZSBBcHBsaWNhdGlvbiBjcmVhdGVOZXdBcHBsaWNhdGlvbiggU2VydmxldENvbnRleHQgY29udGV4dCApCi0gICAgewotICAgICAgICBFbmVyZ3k0SmF2YSBxaTRqID0gbmV3IEVuZXJneTRKYXZhKCk7Ci0KLSAgICAgICAgLy8gVHJ5IGNyZWF0ZSBhc3NlbWJsZXIKLSAgICAgICAgZmluYWwgQXBwbGljYXRpb25Bc3NlbWJsZXIgYXNzZW1ibGVyID0gY3JlYXRlQXNzZW1ibGVyKCk7Ci0gICAgICAgIGlmKCBhc3NlbWJsZXIgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBxaTRqLm5ld0FwcGxpY2F0aW9uKCBhc3NlbWJsZXIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKCBBc3NlbWJseUV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCBlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYW4gYXBwbGljYXRpb24gYXNzZW1ibGVyLgotICAgICAqCi0gICAgICogQHJldHVybiBBbiBhcHBsaWNhdGlvbiBhc3NlbWJsZXIuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIEFwcGxpY2F0aW9uQXNzZW1ibGVyIGNyZWF0ZUFzc2VtYmxlcigpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCBTZXJ2bGV0Q29udGV4dEV2ZW50IHNjZSApCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgYXBwbGljYXRpb24ucGFzc2l2YXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggZSApOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL1FpNGpGaWx0ZXJEaXNwYXRjaGVyLmphdmEgYi9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvUWk0akZpbHRlckRpc3BhdGNoZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRjMGFhZS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvUWk0akZpbHRlckRpc3BhdGNoZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5Db25maWd1cmF0aW9uOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5Db25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbmZpZy5Db25maWd1cmF0aW9uTWFuYWdlcjsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5jb25maWcuQ29udGFpbmVyUHJvdmlkZXI7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuaW5qZWN0LkNvbnRhaW5lckJ1aWxkZXI7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuaW5qZWN0LkNvbnRleHQ7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuaW5qZWN0LkZhY3Rvcnk7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIudXRpbC5sb2NhdGlvbi5Mb2NhdGFibGVQcm9wZXJ0aWVzOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuRmlsdGVyQ29uZmlnOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5jb25maWcuQmVhblNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLkRpc3BhdGNoZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmRpc3BhdGNoZXIuRmlsdGVyRGlzcGF0Y2hlcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlRyYW5zaWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5vYmplY3QuT2JqZWN0RmFjdG9yeTsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKLWltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrRmFjdG9yeTsKLQotaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuQ29uc3RhbnRzLlNFUlZMRVRfQVRUUklCVVRFOwotCi1wdWJsaWMgY2xhc3MgUWk0akZpbHRlckRpc3BhdGNoZXIKLSAgICBleHRlbmRzIEZpbHRlckRpc3BhdGNoZXIKLXsKLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgRGlzcGF0Y2hlciBjcmVhdGVEaXNwYXRjaGVyKCBmaW5hbCBGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnICkKLSAgICB7Ci0gICAgICAgIERpc3BhdGNoZXIgZGlzcGF0Y2hlciA9IHN1cGVyLmNyZWF0ZURpc3BhdGNoZXIoIGZpbHRlckNvbmZpZyApOwotICAgICAgICBDb25maWd1cmF0aW9uTWFuYWdlciBjb25maWd1cmF0aW9uTWFuYWdlciA9IGNyZWF0ZUNvbmZpZ3VyYXRpb25NYW5hZ2VyKCBmaWx0ZXJDb25maWcgKTsKLSAgICAgICAgZGlzcGF0Y2hlci5zZXRDb25maWd1cmF0aW9uTWFuYWdlciggY29uZmlndXJhdGlvbk1hbmFnZXIgKTsKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoZXI7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIENvbmZpZ3VyYXRpb25NYW5hZ2VyIGNyZWF0ZUNvbmZpZ3VyYXRpb25NYW5hZ2VyKCBGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnICkKLSAgICB7Ci0gICAgICAgIENvbmZpZ3VyYXRpb25NYW5hZ2VyIGNvbmZpZ3VyYXRpb25NYW5hZ2VyID0gbmV3IENvbmZpZ3VyYXRpb25NYW5hZ2VyKCBCZWFuU2VsZWN0aW9uUHJvdmlkZXIuREVGQVVMVF9CRUFOX05BTUUgKTsKLSAgICAgICAgY29uZmlndXJhdGlvbk1hbmFnZXIuYWRkQ29udGFpbmVyUHJvdmlkZXIoIG5ldyBRaTRqQ29udGFpbmVyUHJvdmlkZXIoIG1vZHVsZSggZmlsdGVyQ29uZmlnICkgKSApOwotICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbk1hbmFnZXI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNb2R1bGUgbW9kdWxlKCBGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnICkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoTW9kdWxlKSBmaWx0ZXJDb25maWcuZ2V0U2VydmxldENvbnRleHQoKS5nZXRBdHRyaWJ1dGUoIFNFUlZMRVRfQVRUUklCVVRFICk7Ci0gICAgfQotCi0gICAgY2xhc3MgUWk0akNvbnRhaW5lclByb3ZpZGVyCi0gICAgICAgIGltcGxlbWVudHMgQ29udGFpbmVyUHJvdmlkZXIKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgTW9kdWxlIG1vZHVsZTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIHJlZ2lzdGVyZWQgPSBmYWxzZTsKLQotICAgICAgICBRaTRqQ29udGFpbmVyUHJvdmlkZXIoIE1vZHVsZSBhTW9kdWxlICkKLSAgICAgICAgewotICAgICAgICAgICAgbW9kdWxlID0gYU1vZHVsZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCByZWdpc3RlciggQ29udGFpbmVyQnVpbGRlciBidWlsZGVyLCBMb2NhdGFibGVQcm9wZXJ0aWVzIHByb3BzICkKLSAgICAgICAgICAgIHRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZhY3RvcnkoIGJ1aWxkZXIsIFVuaXRPZldvcmtGYWN0b3J5LmNsYXNzLCBtb2R1bGUgKTsKLSAgICAgICAgICAgIGZhY3RvcnkoIGJ1aWxkZXIsIE9iamVjdEZhY3RvcnkuY2xhc3MsIG1vZHVsZSApOwotICAgICAgICAgICAgZmFjdG9yeSggYnVpbGRlciwgVHJhbnNpZW50QnVpbGRlckZhY3RvcnkuY2xhc3MsIG1vZHVsZSApOwotICAgICAgICAgICAgZmFjdG9yeSggYnVpbGRlciwgQWN0aW9uQ29uZmlndXJhdGlvbi5jbGFzcywgYWN0aW9uQ29uZmlndXJhdGlvbigpICk7Ci0gICAgICAgICAgICByZWdpc3RlcmVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBuZWVkc1JlbG9hZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhcmVnaXN0ZXJlZDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBpbml0KCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gKQotICAgICAgICAgICAgdGhyb3dzIENvbmZpZ3VyYXRpb25FeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIDxUPiB2b2lkIGZhY3RvcnkoIENvbnRhaW5lckJ1aWxkZXIgYnVpbGRlciwgQ2xhc3M8VD4gdHlwZSwgZmluYWwgVCB2YWx1ZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuZmFjdG9yeSggdHlwZSwgbmV3IEZhY3Rvcnk8VD4oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBUIGNyZWF0ZSggQ29udGV4dCBjb250ZXh0ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIEFjdGlvbkNvbmZpZ3VyYXRpb24gYWN0aW9uQ29uZmlndXJhdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtb2R1bGUuZmluZFNlcnZpY2UoIEFjdGlvblNlcnZpY2UuY2xhc3MgKS5tZXRhSW5mbyggQWN0aW9uQ29uZmlndXJhdGlvbi5jbGFzcyApOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL1FpNGpPYmplY3RGYWN0b3J5LmphdmEgYi9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvUWk0ak9iamVjdEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmZDE5Yi4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvUWk0ak9iamVjdEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKiAgQ29weXJpZ2h0IDIwMDggRWR3YXJkIFlha29wLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czI7Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25Db250ZXh0OwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmluamVjdC5JbmplY3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIudXRpbC5PYmplY3RGYWN0b3J5RGVzdHJveWFibGU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5Db25zdHJ1Y3Rpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5Ob1N1Y2hUcmFuc2llbnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5UcmFuc2llbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBvcmcucWk0ai5hcGkub2JqZWN0Lk5vU3VjaE9iamVjdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkub2JqZWN0Lk9iamVjdEZhY3Rvcnk7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLlFpNGpPYmplY3RGYWN0b3J5LkNsYXNzVHlwZS4qOwotCi0vKioKLSAqIFFpNGogaW1wbGVtZW50YXRpb24gb2Ygc3RydXRzIG9iamVjdCBmYWN0b3J5LgotICovCi1wdWJsaWMgY2xhc3MgUWk0ak9iamVjdEZhY3RvcnkKLSAgICBleHRlbmRzIGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLk9iamVjdEZhY3RvcnkKLSAgICBpbXBsZW1lbnRzIE9iamVjdEZhY3RvcnlEZXN0cm95YWJsZQotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gICAgc3RhdGljIGVudW0gQ2xhc3NUeXBlCi0gICAgewotICAgICAgICBxaTRqQ29tcG9zaXRlLAotICAgICAgICBxaTRqT2JqZWN0LAotICAgICAgICBvYmplY3QKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1hcDxDbGFzcywgQ2xhc3NUeXBlPiB0eXBlczsKLQotICAgIHByaXZhdGUgT2JqZWN0RmFjdG9yeSBvYmplY3RGYWN0b3J5OwotICAgIHByaXZhdGUgVHJhbnNpZW50QnVpbGRlckZhY3RvcnkgY29tcG9zaXRlQnVpbGRlckZhY3Rvcnk7Ci0KLSAgICBwdWJsaWMgUWk0ak9iamVjdEZhY3RvcnkoKQotICAgIHsKLSAgICAgICAgdHlwZXMgPSBuZXcgSGFzaE1hcDxDbGFzcywgQ2xhc3NUeXBlPigpOwotICAgIH0KLQotICAgIEBJbmplY3QKLSAgICBwdWJsaWMgdm9pZCBzZXRPYmplY3RGYWN0b3J5KCBPYmplY3RGYWN0b3J5IG9iamVjdEZhY3RvcnkgKQotICAgIHsKLSAgICAgICAgdGhpcy5vYmplY3RGYWN0b3J5ID0gb2JqZWN0RmFjdG9yeTsKLSAgICB9Ci0KLSAgICBASW5qZWN0Ci0gICAgcHVibGljIHZvaWQgc2V0Q29tcG9zaXRlQnVpbGRlckZhY3RvcnkoIFRyYW5zaWVudEJ1aWxkZXJGYWN0b3J5IGNvbXBvc2l0ZUJ1aWxkZXJGYWN0b3J5ICkKLSAgICB7Ci0gICAgICAgIHRoaXMuY29tcG9zaXRlQnVpbGRlckZhY3RvcnkgPSBjb21wb3NpdGVCdWlsZGVyRmFjdG9yeTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCdWlsZCBhIGdlbmVyaWMgSmF2YSBvYmplY3Qgb2YgdGhlIGdpdmVuIHR5cGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2xhc3NUeXBlICAgIFR5cGUgb2YgT2JqZWN0IHRvIGJ1aWxkCi0gICAgICogQHBhcmFtIGV4dHJhQ29udGV4dCBBIG1hcCBvZiBleHRyYSBjb250ZXh0IHdoaWNoIHVzZXMgdGhlIHNhbWUga2V5cyBhcyB0aGUge0BsaW5rIEFjdGlvbkNvbnRleHR9Ci0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgQFN1cHByZXNzV2FybmluZ3MoICJ1bmNoZWNrZWQiICkKLSAgICBwdWJsaWMgT2JqZWN0IGJ1aWxkQmVhbiggQ2xhc3MgY2xhc3NUeXBlLCBNYXAgZXh0cmFDb250ZXh0ICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgLy8gVE9ETzogV2hhdCB0byBkbyB3aXRoIGV4dHJhQ29udGV4dAotCi0gICAgICAgIENsYXNzVHlwZSB0eXBlID0gdHlwZXMuZ2V0KCBjbGFzc1R5cGUgKTsKLSAgICAgICAgaWYoIHR5cGUgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCggdHlwZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIG9iamVjdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlU3RhbmRhcmRPYmplY3QoIGNsYXNzVHlwZSwgZmFsc2UgKTsKLSAgICAgICAgICAgIGNhc2UgcWk0akNvbXBvc2l0ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUWk0akNvbXBvc2l0ZSggY2xhc3NUeXBlLCBmYWxzZSApOwotICAgICAgICAgICAgY2FzZSBxaTRqT2JqZWN0OgotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVRaTRqT2JqZWN0KCBjbGFzc1R5cGUsIGZhbHNlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQga2luZCBvZiBvYmplY3QgaXMgdGhpcy4KLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGNyZWF0ZVFpNGpDb21wb3NpdGUoIGNsYXNzVHlwZSwgdHJ1ZSApOwotICAgICAgICBpZiggb2JqZWN0ID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBvYmplY3QgPSBjcmVhdGVRaTRqT2JqZWN0KCBjbGFzc1R5cGUsIHRydWUgKTsKLQotICAgICAgICAgICAgaWYoIG9iamVjdCA9PSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvYmplY3QgPSBjcmVhdGVTdGFuZGFyZE9iamVjdCggY2xhc3NUeXBlLCB0cnVlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIHByaXZhdGUgT2JqZWN0IGNyZWF0ZVN0YW5kYXJkT2JqZWN0KCBDbGFzcyBhQ2xhc3MsIGJvb2xlYW4gaXNBZGRUb1R5cGVzICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgT2JqZWN0IG9iaiA9IG51bGw7Ci0gICAgICAgIEV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgb2JqID0gYUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IGU7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IGU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiggaXNBZGRUb1R5cGVzICkKLSAgICAgICAgewotICAgICAgICAgICAgYWRkVG9UeXBlKCBhQ2xhc3MsIG9iamVjdCApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYoIGV4Y2VwdGlvbiAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgZXhjZXB0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG9iajsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQotICAgIHByaXZhdGUgT2JqZWN0IGNyZWF0ZVFpNGpPYmplY3QoIENsYXNzIGFDbGFzcywgYm9vbGVhbiBpc0FkZFRvVHlwZXMgKQotICAgIHsKLSAgICAgICAgaWYoIG9iamVjdEZhY3RvcnkgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29uc3RydWN0aW9uRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7Ci0gICAgICAgIE9iamVjdCBvYmogPSBudWxsOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBvYmogPSBvYmplY3RGYWN0b3J5Lm5ld09iamVjdCggYUNsYXNzICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIE5vU3VjaE9iamVjdEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIENvbnN0cnVjdGlvbkV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgZXhjZXB0aW9uID0gZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKCBpc0FkZFRvVHlwZXMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhZGRUb1R5cGUoIGFDbGFzcywgcWk0ak9iamVjdCApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYoIGV4Y2VwdGlvbiAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgZXhjZXB0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG9iajsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQotICAgIHByaXZhdGUgT2JqZWN0IGNyZWF0ZVFpNGpDb21wb3NpdGUoIENsYXNzIGFDbGFzcywgYm9vbGVhbiBpc0FkZFRvVHlwZXMgKQotICAgIHsKLSAgICAgICAgaWYoIGNvbXBvc2l0ZUJ1aWxkZXJGYWN0b3J5ID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIE9iamVjdCBvYmogPSBudWxsOwotICAgICAgICBDb25zdHJ1Y3Rpb25FeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgb2JqID0gY29tcG9zaXRlQnVpbGRlckZhY3RvcnkubmV3VHJhbnNpZW50KCBhQ2xhc3MgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggTm9TdWNoVHJhbnNpZW50RXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggQ29uc3RydWN0aW9uRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYoIGlzQWRkVG9UeXBlcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZFRvVHlwZSggYUNsYXNzLCBxaTRqQ29tcG9zaXRlICk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiggZXhjZXB0aW9uICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBleGNlcHRpb247Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gb2JqOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhZGRUb1R5cGUoIENsYXNzIGFDbGFzcywgQ2xhc3NUeXBlIGFDbGFzc1R5cGUgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkKCB0eXBlcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHR5cGVzLnB1dCggYUNsYXNzLCBhQ2xhc3NUeXBlICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBbGxvd3MgZm9yIE9iamVjdEZhY3RvcnkgaW1wbGVtZW50YXRpb25zIHRoYXQgc3VwcG9ydCBBY3Rpb25zIHdpdGhvdXQgbm8tYXJnIGNvbnN0cnVjdG9ycy4KLSAgICAgKgotICAgICAqIEByZXR1cm4ge0Bjb2RlIGZhbHNlfS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc05vQXJnQ29uc3RydWN0b3JSZXF1aXJlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIHZvaWQgZGVzdHJveSgpCi0gICAgewotICAgICAgICB0eXBlcy5jbGVhcigpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9RaTRqUHJvcGVydHlBY2Nlc3Nvci5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL1FpNGpQcm9wZXJ0eUFjY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3M2RlOGIuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL1FpNGpQcm9wZXJ0eUFjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IG9nbmwuTWV0aG9kRmFpbGVkRXhjZXB0aW9uOwotaW1wb3J0IG9nbmwuT2JqZWN0TWV0aG9kQWNjZXNzb3I7Ci1pbXBvcnQgb2dubC5PYmplY3RQcm9wZXJ0eUFjY2Vzc29yOwotaW1wb3J0IG9nbmwuT2dubENvbnRleHQ7Ci1pbXBvcnQgb2dubC5PZ25sRXhjZXB0aW9uOwotaW1wb3J0IG9nbmwuT2dubFJ1bnRpbWU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLlFpNGo7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5NYW55QXNzb2NpYXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLk5hbWVkQXNzb2NpYXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmNvbnN0cmFpbnQuQ29uc3RyYWludFZpb2xhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29uc3RyYWludC5Db25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuQ29uc3RyYWludFZpb2xhdGlvbkludGVyY2VwdG9yLkZpZWxkQ29uc3RyYWludFZpb2xhdGlvbnM7Ci0KLWltcG9ydCBzdGF0aWMgY29tLm9wZW5zeW1waG9ueS54d29yazIuY29udmVyc2lvbi5pbXBsLlhXb3JrQ29udmVydGVyLkNPTlZFUlNJT05fUFJPUEVSVFlfRlVMTE5BTUU7Ci1pbXBvcnQgc3RhdGljIG9nbmwuT2dubFJ1bnRpbWUuZ2V0Q29udmVydGVkVHlwZTsKLWltcG9ydCBzdGF0aWMgb2dubC5PZ25sUnVudGltZS5nZXRGaWVsZFZhbHVlOwotaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuQ29uc3RyYWludFZpb2xhdGlvbkludGVyY2VwdG9yLkNPTlRFWFRfQ09OU1RSQUlOVF9WSU9MQVRJT05TOwotCi0vKioKLSAqIDxwPkFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPYmplY3RQcm9wZXJ0eUFjY2Vzc29yIHRoYXQgcHJvdmlkZXMgY29udmVyc2lvbiBmb3IgUWk0aiBwcm9wZXJ0aWVzLiAgVGhlIHR5cGljYWwgd2F5IHRoYXQKLSAqIE9HTkwgZ2V0cy9zZXRzIG9iamVjdCBhdHRyaWJ1dGVzIGlzIGJ5IGZpbmRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgSmF2YUJlYW4gZ2V0dGVyL3NldHRlciBtZXRob2RzLiAgVGhpcwotICogT2JqZWN0UHJvcGVydHlBY2Nlc3NvciBjaGVja3MgaWYgdGhlcmUgaXMgYSBRaTRqIHByb3BlcnR5IG9uIHRoZSBDb21wb3NpdGUgYW5kIGlmIHRoZXJlIGlzIHVzZXMgdGhlIHByb3BlcnRpZXMKLSAqIGdldC9zZXQgbWV0aG9kcy48L3A+Ci0gKgotICogPHA+V2hlbiBzZXR0aW5nIFByb3BlcnR5IHZhbHVlcywgaWYgYSBDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uIGlzIHRocm93biBpdCBpcyBhZGRlZCB0byB0aGUgY29udGV4dCBzbyB0aGF0Ci0gKiBpdCBjYW4gYmUgcHJvY2Vzc2VkIGFuZCBieSB0aGUgQ29uc3RyYWludFZpb2xhdGlvbkludGVyY2VwdG9yLCBzaW1pbGFyIHRvIGhvdyBjb252ZXJzaW9uIGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgYnkKLSAqIHRoZSBDb252ZXJzaW9uRXJyb3JJbnRlcmNlcHRvcjwvcD4KLSAqCi0gKiA8cD5XaGVuIHNldHRpbmcgQXNzb2NpYXRpb24gdmFsdWVzLCB3ZSBhdHRlbXB0IHRvIGNvbnZlcnQgdGhlIHZhbHVlIHRvIHRoZSBhc3NvY2lhdGlvbiB0eXBlIHVzaW5nIHRoZSBub3JtYWwgWFdvcmsKLSAqIGNvbnZlcnRlciBtZWNoYW5pc21zLiAgSWYgdGhlIHR5cGUgaXMgYW4gRW50aXR5Q29tcG9zaXRlLCB3ZSBhbHJlYWR5IGhhdmUgYSBjb252ZXJ0ZXIgcmVnaXN0ZXJlZAotICoge0BsaW5rIEVudGl0eUNvbXBvc2l0ZUNvbnZlcnRlcn0gdG8gaGFuZGxlIGNvbnZlcnNpb24gZnJvbSBhIHN0cmluZyBpZGVudGl0eSB0byBhbiBvYmplY3QuICBJZiB0aGUgdHlwZSBpcyBub3QgYW4KLSAqIEVudGl0eUNvbXBvc2l0ZSwgYnV0IHRoZSBhY3R1YWwgdmFsdWVzIGFyZSBFbnRpdHlDb21wb3NpdGVzLCB5b3UgY2FuIHJlZ2lzdGVyIHRoZSB7QGxpbmsgRW50aXR5Q29tcG9zaXRlQ29udmVydGVyfQotICogZm9yIHlvdXIgdHlwZSBpbiB5b3VyIHh3b3JrLWNvbnZlcnNpb24ucHJvcGVydGllcyBmaWxlLjwvcD4KLSAqCi0gKiA8cD5OT1RFOiBXZSBjYW4ndCBkbyB0aGlzIGFzIGEgcmVndWxhciBjb252ZXJ0ZXIgYmVjYXVzZSBRaTRqIGNvbXBvc2l0ZXMgZG9lc24ndCAobm9yIHNob3VsZCBpdCBiZSkgZm9sbG93aW5nIHRoZQotICogSmF2YUJlYW4gc3RhbmRhcmQuICBXZSBtaWdodCBiZSBhYmxlIHRvIG9ubHkgb3ZlcnJpZGUgdGhlIGdldFByb3BlcnR5KCkgbWV0aG9kIGhlcmUgYW5kIGhhdmUgcmVndWxhciBjb252ZXJ0ZXJzIGZvcgotICogUHJvcGVydHksIEFzc29jaWF0aW9uIGFuZCBTZXRBc3NvY2lhdGlvbiBidXQgSSBoYXZlbid0IHRyaWVkIHRoYXQgeWV0IHNvIGl0IG1heSBub3Qgd29yayBhcyBleHBlY3RlZC48L3A+Ci0gKgotICogPHA+VE9ETzogRG9lc24ndCB5ZXQgaGFuZGxlIE1hbnlBc3NvY2lhdGlvbnMsIGJ1dCB0aGVzZSBzaG91bGRuJ3QgYmUgdG9vIGhhcmQgdG8gYWRkPC9wPgotICovCi1wdWJsaWMgY2xhc3MgUWk0alByb3BlcnR5QWNjZXNzb3IKLSAgICBleHRlbmRzIE9iamVjdFByb3BlcnR5QWNjZXNzb3IKLXsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RbXSBCTEFOS19BUkdVTUVOVFMgPSBuZXcgT2JqZWN0WzBdOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3RNZXRob2RBY2Nlc3NvciBtZXRob2RBY2Nlc3NvciA9IG5ldyBPYmplY3RNZXRob2RBY2Nlc3NvcigpOwotCi0gICAgQFN0cnVjdHVyZQotICAgIFFpNGogYXBpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIE9iamVjdCBnZXRQcm9wZXJ0eSggTWFwIGFDb250ZXh0LCBPYmplY3QgYVRhcmdldCwgT2JqZWN0IGFQcm9wZXJ0eU5hbWUgKQotICAgICAgICB0aHJvd3MgT2dubEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nIGZpZWxkTmFtZSA9IGFQcm9wZXJ0eU5hbWUudG9TdHJpbmcoKTsKLSAgICAgICAgT2JqZWN0IHFpNGpGaWVsZCA9IGdldFFpNGpGaWVsZCggYUNvbnRleHQsIGFUYXJnZXQsIGZpZWxkTmFtZSApOwotICAgICAgICBpZiggcWk0akZpZWxkICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBDbGFzczw/PiBtZW1iZXJDbGFzcyA9IHFpNGpGaWVsZC5nZXRDbGFzcygpOwotICAgICAgICAgICAgaWYoIFByb3BlcnR5LmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIG1lbWJlckNsYXNzICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFByb3BlcnR5PD8+IHByb3BlcnR5ID0gKFByb3BlcnR5KSBxaTRqRmllbGQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5LmdldCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiggQXNzb2NpYXRpb24uY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggbWVtYmVyQ2xhc3MgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzb2NpYXRpb248Pz4gYXNzb2NpYXRpb24gPSAoQXNzb2NpYXRpb24pIHFpNGpGaWVsZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXNzb2NpYXRpb24uZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKCBNYW55QXNzb2NpYXRpb24uY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggbWVtYmVyQ2xhc3MgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHFpNGpGaWVsZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoIE5hbWVkQXNzb2NpYXRpb24uY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggbWVtYmVyQ2xhc3MgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHFpNGpGaWVsZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdXBlci5nZXRQcm9wZXJ0eSggYUNvbnRleHQsIGFUYXJnZXQsIGZpZWxkTmFtZSApOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAidW5jaGVja2VkIiApCi0gICAgcHJpdmF0ZSBPYmplY3QgZ2V0UWk0akZpZWxkKCBNYXAgYUNvbnRleHQsIE9iamVjdCBhVGFyZ2V0LCBTdHJpbmcgYUZpZWxkTmFtZSApCi0gICAgICAgIHRocm93cyBPZ25sRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiggYVRhcmdldCAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSXMgdGFyZ2V0I25hbWUgYSBtZXRob2Q/IGUuZy4gY2F0Lm5hbWUoKQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZEFjY2Vzc29yLmNhbGxNZXRob2QoIGFDb250ZXh0LCBhVGFyZ2V0LCBhRmllbGROYW1lLCBCTEFOS19BUkdVTUVOVFMgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKCBNZXRob2RGYWlsZWRFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTWVhbnMgbm90IGEgcHJvcGVydHkvYXNzb2NpYXRpb24KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSXMgdGFyZ2V0I25hbWUgYSBmaWVsZD8gZS5nLiBhY3Rpb24uZmllbGQxLCB3aGVyZSBmaWVsZDEgaXMgZXh0cmFjdGVkIGZyb20gYSBjb21wb3NpdGUKLSAgICAgICAgICAgIE9nbmxDb250ZXh0IG9nbmxDb250ZXh0ID0gKE9nbmxDb250ZXh0KSBhQ29udGV4dDsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnZXRGaWVsZFZhbHVlKCBvZ25sQ29udGV4dCwgYVRhcmdldCwgYUZpZWxkTmFtZSwgdHJ1ZSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2goIE5vU3VjaEZpZWxkRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIE1lYW5zIG5vdCBhIGZpZWxkCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFByb3BlcnR5KCBNYXAgYUNvbnRleHQsIE9iamVjdCBhVGFyZ2V0LCBPYmplY3QgYVByb3BlcnR5TmFtZSwgT2JqZWN0IGFQcm9wZXJ0eVZhbHVlICkKLSAgICAgICAgdGhyb3dzIE9nbmxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBhUHJvcGVydHlOYW1lLnRvU3RyaW5nKCk7Ci0gICAgICAgIE9iamVjdCBxaTRqRmllbGQgPSBnZXRRaTRqRmllbGQoIGFDb250ZXh0LCBhVGFyZ2V0LCBmaWVsZE5hbWUgKTsKLQotICAgICAgICBpZiggcWk0akZpZWxkICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBDbGFzczw/PiBtZW1iZXJDbGFzcyA9IHFpNGpGaWVsZC5nZXRDbGFzcygpOwotCi0gICAgICAgICAgICBpZiggUHJvcGVydHkuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggbWVtYmVyQ2xhc3MgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSAoUHJvcGVydHkpIHFpNGpGaWVsZDsKLQotICAgICAgICAgICAgICAgIE9nbmxDb250ZXh0IG9nbmxDb250ZXh0ID0gKE9nbmxDb250ZXh0KSBhQ29udGV4dDsKLSAgICAgICAgICAgICAgICBDbGFzczw/PiBwcm9wZXJ0eVR5cGUgPSAoQ2xhc3MpIGFwaS5wcm9wZXJ0eURlc2NyaXB0b3JGb3IoIHByb3BlcnR5ICkudHlwZSgpOwotICAgICAgICAgICAgICAgIE9iamVjdCBjb252ZXJ0ZWRWYWx1ZSA9IGdldENvbnZlcnRlZFR5cGUoCi0gICAgICAgICAgICAgICAgICAgIG9nbmxDb250ZXh0LCBhVGFyZ2V0LCBudWxsLCBmaWVsZE5hbWUsIGFQcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVR5cGUgKTsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LnNldCggY29udmVydGVkVmFsdWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2goIENvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24gZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPENvbnN0cmFpbnRWaW9sYXRpb24+IHZpb2xhdGlvbnMgPSBlLmNvbnN0cmFpbnRWaW9sYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNvbnN0cmFpbnRWaW9sYXRpb24oIGFDb250ZXh0LCBhVGFyZ2V0LCBmaWVsZE5hbWUsIGNvbnZlcnRlZFZhbHVlLCB2aW9sYXRpb25zICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiggQXNzb2NpYXRpb24uY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggbWVtYmVyQ2xhc3MgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzb2NpYXRpb24gYXNzb2NpYXRpb24gPSAoQXNzb2NpYXRpb24pIHFpNGpGaWVsZDsKLSAgICAgICAgICAgICAgICBPZ25sQ29udGV4dCBvZ25sQ29udGV4dCA9IChPZ25sQ29udGV4dCkgYUNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgQ2xhc3M8Pz4gYXNzb2NpYXRpb25UeXBlID0gKENsYXNzKSBhcGkuYXNzb2NpYXRpb25EZXNjcmlwdG9yRm9yKCBhc3NvY2lhdGlvbiApLnR5cGUoKTsKLSAgICAgICAgICAgICAgICBPYmplY3QgY29udmVydGVkVmFsdWUgPSBnZXRDb252ZXJ0ZWRUeXBlKAotICAgICAgICAgICAgICAgICAgICBvZ25sQ29udGV4dCwgYVRhcmdldCwgbnVsbCwgZmllbGROYW1lLCBhUHJvcGVydHlWYWx1ZSwgYXNzb2NpYXRpb25UeXBlICk7Ci0gICAgICAgICAgICAgICAgaWYoIGNvbnZlcnRlZFZhbHVlID09IE9nbmxSdW50aW1lLk5vQ29udmVyc2lvblBvc3NpYmxlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPZ25sRXhjZXB0aW9uKCAiQ291bGQgbm90IGNvbnZlcnQgdmFsdWUgdG8gYXNzb2NpYXRpb24gdHlwZSIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbi5zZXQoIGNvbnZlcnRlZFZhbHVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoKCBDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbjxDb25zdHJhaW50VmlvbGF0aW9uPiB2aW9sYXRpb25zID0gZS5jb25zdHJhaW50VmlvbGF0aW9ucygpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVDb25zdHJhaW50VmlvbGF0aW9uKCBhQ29udGV4dCwgYVRhcmdldCwgZmllbGROYW1lLCBhUHJvcGVydHlWYWx1ZSwgdmlvbGF0aW9ucyApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoIE1hbnlBc3NvY2lhdGlvbi5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCBtZW1iZXJDbGFzcyApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT2dubEV4Y2VwdGlvbiggIlNldHRpbmcgbWFueSBhc3NvY2lhdGlvbiBbIiArIGZpZWxkTmFtZSArICJdIGlzIGltcG9zc2libGUuIiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiggTmFtZWRBc3NvY2lhdGlvbi5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCBtZW1iZXJDbGFzcyApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT2dubEV4Y2VwdGlvbiggIlNldHRpbmcgbmFtZWQgYXNzb2NpYXRpb24gWyIgKyBmaWVsZE5hbWUgKyAiXSBpcyBpbXBvc3NpYmxlLiIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN1cGVyLnNldFByb3BlcnR5KCBhQ29udGV4dCwgYVRhcmdldCwgYVByb3BlcnR5TmFtZSwgYVByb3BlcnR5VmFsdWUgKTsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQotICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGhhbmRsZUNvbnN0cmFpbnRWaW9sYXRpb24oCi0gICAgICAgIE1hcCBhQ29udGV4dCwgT2JqZWN0IGFUYXJnZXQsIFN0cmluZyBhUHJvcGVydHlOYW1lLCBPYmplY3QgYVByb3BlcnR5VmFsdWUsCi0gICAgICAgIENvbGxlY3Rpb248Q29uc3RyYWludFZpb2xhdGlvbj4gdmlvbGF0aW9ucwotICAgICkKLSAgICB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIEZpZWxkQ29uc3RyYWludFZpb2xhdGlvbnM+IGFsbFByb3BlcnR5Q29uc3RyYWludFZpb2xhdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoTWFwPFN0cmluZywgRmllbGRDb25zdHJhaW50VmlvbGF0aW9ucz4pIGFDb250ZXh0LmdldCggQ09OVEVYVF9DT05TVFJBSU5UX1ZJT0xBVElPTlMgKTsKLSAgICAgICAgaWYoIGFsbFByb3BlcnR5Q29uc3RyYWludFZpb2xhdGlvbnMgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFsbFByb3BlcnR5Q29uc3RyYWludFZpb2xhdGlvbnMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBhQ29udGV4dC5wdXQoIENPTlRFWFRfQ09OU1RSQUlOVF9WSU9MQVRJT05TLCBhbGxQcm9wZXJ0eUNvbnN0cmFpbnRWaW9sYXRpb25zICk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmVhbEZpZWxkTmFtZSA9IGFQcm9wZXJ0eU5hbWU7Ci0gICAgICAgIFN0cmluZyBmaWVsZEZ1bGxOYW1lID0gKFN0cmluZykgYUNvbnRleHQuZ2V0KCBDT05WRVJTSU9OX1BST1BFUlRZX0ZVTExOQU1FICk7Ci0gICAgICAgIGlmKCBmaWVsZEZ1bGxOYW1lICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWFsRmllbGROYW1lID0gZmllbGRGdWxsTmFtZTsKLSAgICAgICAgfQotICAgICAgICAvLyBBZGQgYW5vdGhlciB2aW9sYXRpb24KLSAgICAgICAgYWxsUHJvcGVydHlDb25zdHJhaW50VmlvbGF0aW9ucy5wdXQoCi0gICAgICAgICAgICByZWFsRmllbGROYW1lLCBuZXcgRmllbGRDb25zdHJhaW50VmlvbGF0aW9ucyggYVRhcmdldCwgYVByb3BlcnR5TmFtZSwgYVByb3BlcnR5VmFsdWUsIHZpb2xhdGlvbnMgKSApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9Vbml0T2ZXb3JrSW50ZXJjZXB0b3IuamF2YSBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9Vbml0T2ZXb3JrSW50ZXJjZXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyMWJlMy4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvVW5pdE9mV29ya0ludGVyY2VwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvbjsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25JbnZvY2F0aW9uOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmludGVyY2VwdG9yLkFic3RyYWN0SW50ZXJjZXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TdHJ1Y3R1cmU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29yazsKLWltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrRmFjdG9yeTsKLQotLyoqCi0gKiA8cD5BbiBpbnRlcmNlcHRvciB0byBiZSB1c2VkIHRvIHN0YXJ0IGEgVW5pdE9mV29yayBpZiBvbmUgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkLiAgSWYgdGhpcyBpbnRlcmNlcHRvciBjcmVhdGVzIGEKLSAqIG5ldyBVbml0T2ZXb3JrIGl0IHdpbGwgYWxzbyBhZGQgYSBQcmVSZXN1bHRMaXN0ZW5lciB0byBtYWtlIHN1cmUgdGhlIHVuaXQgb2Ygd29yayBpcyBjb21wbGV0ZWQgb3IgZGlzY2FyZGVkIGJlZm9yZQotICogdGhlIHJlc3VsdCBpcyBleGVjdXRlZC4gIFRoaXMgaXMgaW1wb3J0YW50IHNvIHRoYXQgdGhlIHJlbmRlcmluZyBvZiB0aGUgcmVzdWx0IGRvZXMgbm90IG1ha2UgYW55IGNoYW5nZXMgdG8gdGhlCi0gKiBlbnRpdGllcyBpdCBpcyBkZWFsaW5nIHdpdGggKHdlIGNhbiBtYXliZSBtYWtlIHRoaXMgYW4gb3B0aW9uLCB0byBrZWVwIHRoZSBVbml0T2ZXb3JrIG9wZW4gdW50aWwgdGhlIGludm9jYXRpb24gc3RhY2sKLSAqIHJldHVybnMgdG8gdGhpcyBpbnRlcmNlcHRvciBvciBpZiBpdCBzaG91bGQgdXNlIHRoZSBQcmVSZXN1bHRMaXN0ZW5lciwgYnV0IGZvciBub3cgSSBsaWtlIHRoZSBQcmVSZXN1bHRMaXN0ZW5lcgotICogYmV0dGVyIGFzIGl0IGlzIHNhZmVyKS48L3A+Ci0gKgotICogPHA+V2hlbiBhIG5ldyBVbml0T2ZXb3JrIGlzIGNyZWF0ZWQgYnkgdGhpcyBpbnRlcmNlcHRvciBhIGRlY2lzaW9uIG11c3QgYmUgbWFkZSB3aGVuIGNsb3NpbmcgaXQgd2hldGhlciB0byBkaXNjYXJkCi0gKiB0aGUgVW5pdE9mV29yayBvciBjb21wbGV0ZSBpdC4gIEZvciBub3csIGlmIHRoZSByZXN1bHRDb2RlIGlzICJzdWNjZXNzIiwgd2UgY29tcGxldGUgdGhlIFVuaXRPZldvcmssIG90aGVyd2lzZSB3ZQotICogZGlzY2FyZCBpdC4gIFRoZXJlIGFyZSBtYW55IHRoaW5ncyB3ZSBjYW4gZG8gaGVyZSB0byBtYWtlIGl0IG1vcmUgZmxleGlibGUsIGUuZy4gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSByZXN1bHQKLSAqIGNvZGVzIHRvIGNvbXBsZXRlIG9yLCBjb252ZXJzZWx5LCBjb2RlcyB0aGF0IHNob3VsZCByZXN1bHQgaW4gdGhlIFVuaXRPZldvcmsgYmVpbmcgZGlzY2FyZGVkLiAgU2luY2Ugd2UgaGF2ZSBhY2Nlc3MKLSAqIHRvIHRoZSBhY3Rpb24gaW52b2NhdGlvbiB3ZSBjb3VsZCBhbHNvIGRvIHNvbWV0aGluZyB3aXRoIGFubm90YXRpb25zIG9uIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQgdG8gYWxsb3cgdXNlciB0bwotICogc3BlY2lmeSBtb3JlIHNwZWNpZmljYWxseSBmb3IgdGhhdCBtZXRob2Qgd2hhdCByZXN1bHRzIHNob3VsZCByZXN1bHQgaW4gZGlzY2FyZHMgb3IgY29tcGxldGlvbnMuPC9wPgotICovCi1wdWJsaWMgY2xhc3MgVW5pdE9mV29ya0ludGVyY2VwdG9yCi0gICAgZXh0ZW5kcyBBYnN0cmFjdEludGVyY2VwdG9yCi17Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAgIEBTdHJ1Y3R1cmUKLSAgICBwcml2YXRlIFVuaXRPZldvcmtGYWN0b3J5IHVvd2Y7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGludGVyY2VwdCggQWN0aW9uSW52b2NhdGlvbiBpbnZvY2F0aW9uICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgYm9vbGVhbiBjcmVhdGVkVW5pdE9mV29yayA9IGZhbHNlOwotICAgICAgICBVbml0T2ZXb3JrIHVvdzsKLSAgICAgICAgaWYgKCF1b3dmLmlzVW5pdE9mV29ya0FjdGl2ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB1b3cgPSB1b3dmLm5ld1VuaXRPZldvcmsoKTsKLSAgICAgICAgICAgIGNyZWF0ZWRVbml0T2ZXb3JrID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVvdyA9IHVvd2YuY3VycmVudFVuaXRPZldvcmsoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyByZXN1bHRDb2RlID0gbnVsbDsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdENvZGUgPSBpbnZvY2F0aW9uLmludm9rZSgpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgaWYoIGNyZWF0ZWRVbml0T2ZXb3JrICYmIHVvdy5pc09wZW4oKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoIHNob3VsZENvbXBsZXRlKCBpbnZvY2F0aW9uLCByZXN1bHRDb2RlICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW93LmNvbXBsZXRlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVvdy5kaXNjYXJkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHRDb2RlOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIHNob3VsZENvbXBsZXRlKCBBY3Rpb25JbnZvY2F0aW9uIGludm9jYXRpb24sIFN0cmluZyByZXN1bHRDb2RlICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBBY3Rpb24uU1VDQ0VTUy5lcXVhbHMoIHJlc3VsdENvZGUgKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvYm9vdHN0cmFwL1N0cnV0czJQbHVnaW5Bc3NlbWJsZXIuamF2YSBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9ib290c3RyYXAvU3RydXRzMlBsdWdpbkFzc2VtYmxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmQ5N2ViLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9ib290c3RyYXAvU3RydXRzMlBsdWdpbkFzc2VtYmxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyogIENvcHlyaWdodCAyMDA4IEVkd2FyZCBZYWtvcC4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmJvb3RzdHJhcDsKLQotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibGVyOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLkFjdGlvbkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLkFjdGlvblNlcnZpY2U7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLlVuaXRPZldvcmtJbnRlcmNlcHRvcjsKLQotcHVibGljIGNsYXNzIFN0cnV0czJQbHVnaW5Bc3NlbWJsZXIKLSAgICBpbXBsZW1lbnRzIEFzc2VtYmxlcgotewotICAgIHByaXZhdGUgZmluYWwgQWN0aW9uQ29uZmlndXJhdGlvbiBhY3Rpb25Db25maWd1cmF0aW9uOwotCi0gICAgcHVibGljIFN0cnV0czJQbHVnaW5Bc3NlbWJsZXIoIEFjdGlvbkNvbmZpZ3VyYXRpb24gYWN0aW9uQ29uZmlndXJhdGlvbiApCi0gICAgewotICAgICAgICB0aGlzLmFjdGlvbkNvbmZpZ3VyYXRpb24gPSBhY3Rpb25Db25maWd1cmF0aW9uOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQotICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIG1vZHVsZS5vYmplY3RzKCBVbml0T2ZXb3JrSW50ZXJjZXB0b3IuY2xhc3MgKS52aXNpYmxlSW4oIFZpc2liaWxpdHkubW9kdWxlICk7Ci0gICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggQWN0aW9uU2VydmljZS5jbGFzcyApCi0gICAgICAgICAgICAuc2V0TWV0YUluZm8oIGFjdGlvbkNvbmZpZ3VyYXRpb24gKQotICAgICAgICAgICAgLnZpc2libGVJbiggVmlzaWJpbGl0eS5tb2R1bGUgKTsKLSAgICAgICAgYWN0aW9uQ29uZmlndXJhdGlvbi5hc3NlbWJsZSggbW9kdWxlICk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9wYWNrYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMTNkNjcuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3BhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+Ci0gICAgPGJvZHk+Ci0gICAgICAgIDxoMj5TdHJ1dHMgMiBJbnRlZ3JhdGlvbi48L2gyPgotICAgIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvc3VwcG9ydC9IYXNJbnB1dC5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvSGFzSW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ2ZjgzZi4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvc3VwcG9ydC9IYXNJbnB1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5zdXBwb3J0OwotCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0lucHV0Ci17Ci0KLSAgICBTdHJpbmcgaW5wdXQoKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvUHJvdmlkZXNFbnRpdHlPZi5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvUHJvdmlkZXNFbnRpdHlPZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTY0MWJhLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L1Byb3ZpZGVzRW50aXR5T2YuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUHJvdmlkZXNFbnRpdHlPZjxUPgotewotICAgIFN0cmluZyBnZXRJZCgpOwotCi0gICAgdm9pZCBzZXRJZCggU3RyaW5nIGlkICk7Ci0KLSAgICBUIGdldEVudGl0eSgpOwotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvUHJvdmlkZXNFbnRpdHlPZk1peGluLmphdmEgYi9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvc3VwcG9ydC9Qcm92aWRlc0VudGl0eU9mTWl4aW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlkZTMyOS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvc3VwcG9ydC9Qcm92aWRlc0VudGl0eU9mTWl4aW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQ7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlRoaXM7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuTm9TdWNoRW50aXR5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcms7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29ya0ZhY3Rvcnk7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnV0aWwuUGFyYW1ldGVyaXplZFR5cGVzLmZpbmRUeXBlVmFyaWFibGVzOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJvdmlkZXNFbnRpdHlPZk1peGluPFQ+Ci0gICAgaW1wbGVtZW50cyBQcm92aWRlc0VudGl0eU9mPFQ+LCBTdHJ1dHNBY3Rpb24KLXsKLQotICAgIEBUaGlzCi0gICAgcHJpdmF0ZSBQcm92aWRlc0VudGl0eU9mPFQ+IGVudGl0eVByb3ZpZGVyOwotCi0gICAgQFN0cnVjdHVyZQotICAgIHByaXZhdGUgVW5pdE9mV29ya0ZhY3RvcnkgdW93ZjsKLQotICAgIHByaXZhdGUgU3RyaW5nIGlkOwotICAgIHByaXZhdGUgVCBlbnRpdHk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRJZCggU3RyaW5nIGlkICkKLSAgICB7Ci0gICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVCBnZXRFbnRpdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVudGl0eTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBsb2FkRW50aXR5KCkKLSAgICB7Ci0gICAgICAgIFVuaXRPZldvcmsgdW93ID0gdW93Zi5jdXJyZW50VW5pdE9mV29yaygpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgZW50aXR5ID0gdW93LmdldCggdHlwZVRvTG9hZCgpLCBlbnRpdHlQcm92aWRlci5nZXRJZCgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIE5vU3VjaEVudGl0eUV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgYWRkQWN0aW9uRXJyb3IoIGdldFRleHQoICJlbnRpdHkubm90LmZvdW5kIiApICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgQ2xhc3M8VD4gdHlwZVRvTG9hZCgpCi0gICAgewotICAgICAgICByZXR1cm4gKENsYXNzPFQ+KSBmaW5kVHlwZVZhcmlhYmxlcyggZW50aXR5UHJvdmlkZXIuZ2V0Q2xhc3MoKSwgUHJvdmlkZXNFbnRpdHlPZi5jbGFzcyApWyAwIF07Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L1N0cnV0c0FjdGlvbi5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvU3RydXRzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNWMwM2MuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvU3RydXRzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQ7Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi4qOwotCi1wdWJsaWMgaW50ZXJmYWNlIFN0cnV0c0FjdGlvbgotICAgIGV4dGVuZHMgQWN0aW9uLCBWYWxpZGF0ZWFibGUsIFZhbGlkYXRpb25Bd2FyZSwgVGV4dFByb3ZpZGVyLCBMb2NhbGVQcm92aWRlcgotewotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvYWRkL1Byb3ZpZGVzQWRkaW5nT2YuamF2YSBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L2FkZC9Qcm92aWRlc0FkZGluZ09mLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTA1NTAuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvYWRkL1Byb3ZpZGVzQWRkaW5nT2YuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQuYWRkOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuUHJlcGFyYWJsZTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuc3VwcG9ydC5IYXNJbnB1dDsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuc3VwcG9ydC5TdHJ1dHNBY3Rpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUHJvdmlkZXNBZGRpbmdPZjxUPgotICAgIGV4dGVuZHMgUHJlcGFyYWJsZSwgSGFzSW5wdXQsIFN0cnV0c0FjdGlvbgotewotICAgIFQgZ2V0U3RhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L2FkZC9Qcm92aWRlc0FkZGluZ09mTWl4aW4uamF2YSBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L2FkZC9Qcm92aWRlc0FkZGluZ09mTWl4aW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI1ZmJlNS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvc3VwcG9ydC9hZGQvUHJvdmlkZXNBZGRpbmdPZk1peGluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5zdXBwb3J0LmFkZDsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlCdWlsZGVyOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKLWltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrOwotaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtGYWN0b3J5OwotCi1pbXBvcnQgc3RhdGljIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi51dGlsLkNsYXNzTmFtZXMuY2xhc3NOYW1lSW5Eb3ROb3RhdGlvbjsKLWltcG9ydCBzdGF0aWMgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnV0aWwuUGFyYW1ldGVyaXplZFR5cGVzLmZpbmRUeXBlVmFyaWFibGVzOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJvdmlkZXNBZGRpbmdPZk1peGluPFQ+Ci0gICAgZXh0ZW5kcyBBY3Rpb25TdXBwb3J0Ci0gICAgaW1wbGVtZW50cyBQcm92aWRlc0FkZGluZ09mPFQ+Ci17Ci0KLSAgICBAVGhpcwotICAgIHByaXZhdGUgUHJvdmlkZXNBZGRpbmdPZjxUPiBhY3Rpb247Ci0KLSAgICBAU3RydWN0dXJlCi0gICAgcHJpdmF0ZSBVbml0T2ZXb3JrRmFjdG9yeSB1b3dmOwotCi0gICAgcHJpdmF0ZSBFbnRpdHlCdWlsZGVyPFQ+IGJ1aWxkZXI7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVCBnZXRTdGF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYnVpbGRlci5pbnN0YW5jZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHByZXBhcmUoKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBwcmVwYXJlRW50aXR5QnVpbGRlcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgaW5wdXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIElOUFVUOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGFkZFN1Y2Nlc3NNZXNzYWdlKCk7Ci0gICAgICAgIHJldHVybiBTVUNDRVNTOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCAidW5jaGVja2VkIiApCi0gICAgcHJvdGVjdGVkIENsYXNzPFQ+IHR5cGVUb0FkZCgpCi0gICAgewotICAgICAgICByZXR1cm4gKENsYXNzPFQ+KSBmaW5kVHlwZVZhcmlhYmxlcyggYWN0aW9uLmdldENsYXNzKCksIFByb3ZpZGVzQWRkaW5nT2YuY2xhc3MgKVsgMCBdOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFN1Y2Nlc3NNZXNzYWdlKCkKLSAgICB7Ci0gICAgICAgIGFkZEFjdGlvbk1lc3NhZ2UoIGdldFRleHQoIGNsYXNzTmFtZUluRG90Tm90YXRpb24oIHR5cGVUb0FkZCgpICkgKyAiLnN1Y2Nlc3NmdWxseS5hZGRlZCIgKSApOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHByZXBhcmVFbnRpdHlCdWlsZGVyKCkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgVW5pdE9mV29yayB1b3cgPSB1b3dmLmN1cnJlbnRVbml0T2ZXb3JrKCk7Ci0gICAgICAgIGJ1aWxkZXIgPSB1b3cubmV3RW50aXR5QnVpbGRlciggdHlwZVRvQWRkKCkgKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvZWRpdC9Qcm92aWRlc0VkaXRpbmdPZi5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvZWRpdC9Qcm92aWRlc0VkaXRpbmdPZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjFlYzkwLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L2VkaXQvUHJvdmlkZXNFZGl0aW5nT2YuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQuZWRpdDsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLlByZXBhcmFibGU7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQuSGFzSW5wdXQ7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQuUHJvdmlkZXNFbnRpdHlPZjsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuc3VwcG9ydC5TdHJ1dHNBY3Rpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUHJvdmlkZXNFZGl0aW5nT2Y8VD4KLSAgICBleHRlbmRzIFByb3ZpZGVzRW50aXR5T2Y8VD4sIFByZXBhcmFibGUsIEhhc0lucHV0LCBTdHJ1dHNBY3Rpb24KLXsKLSAgICB2b2lkIHByZXBhcmVJbnB1dCgpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvc3VwcG9ydC9lZGl0L1Byb3ZpZGVzRWRpdGluZ09mTWl4aW4uamF2YSBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L2VkaXQvUHJvdmlkZXNFZGl0aW5nT2ZNaXhpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWVhYWExLi4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L2VkaXQvUHJvdmlkZXNFZGl0aW5nT2ZNaXhpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuc3VwcG9ydC5lZGl0OwotCi1pbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5UaGlzOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5zdXBwb3J0LlByb3ZpZGVzRW50aXR5T2ZNaXhpbjsKLQotaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIudXRpbC5QYXJhbWV0ZXJpemVkVHlwZXMuZmluZFR5cGVWYXJpYWJsZXM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcm92aWRlc0VkaXRpbmdPZk1peGluPFQ+Ci0gICAgZXh0ZW5kcyBQcm92aWRlc0VudGl0eU9mTWl4aW48VD4KLSAgICBpbXBsZW1lbnRzIFByb3ZpZGVzRWRpdGluZ09mPFQ+Ci17Ci0KLSAgICBAVGhpcwotICAgIHByaXZhdGUgUHJvdmlkZXNFZGl0aW5nT2Y8VD4gYWN0aW9uOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcHJlcGFyZSgpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGxvYWRFbnRpdHkoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwcmVwYXJlSW5wdXQoKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBpbnB1dCgpCi0gICAgewotICAgICAgICBpZiggZ2V0RW50aXR5KCkgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAiZW50aXR5LW5vdC1mb3VuZCI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElOUFVUOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBDbGFzczxUPiB0eXBlVG9Mb2FkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoQ2xhc3M8VD4pIGZpbmRUeXBlVmFyaWFibGVzKCBhY3Rpb24uZ2V0Q2xhc3MoKSwgUHJvdmlkZXNFZGl0aW5nT2YuY2xhc3MgKVsgMCBdOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvc3VwcG9ydC9saXN0L1Byb3ZpZGVzTGlzdE9mLmphdmEgYi9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvc3VwcG9ydC9saXN0L1Byb3ZpZGVzTGlzdE9mLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjY2I2ODguLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvbGlzdC9Qcm92aWRlc0xpc3RPZi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuc3VwcG9ydC5saXN0OwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuUHJlcGFyYWJsZTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuc3VwcG9ydC5TdHJ1dHNBY3Rpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUHJvdmlkZXNMaXN0T2Y8VD4KLSAgICBleHRlbmRzIFByZXBhcmFibGUsIFN0cnV0c0FjdGlvbgotewotICAgIEl0ZXJhYmxlPFQ+IGxpc3QoKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L2xpc3QvUHJvdmlkZXNMaXN0T2ZNaXhpbi5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvbGlzdC9Qcm92aWRlc0xpc3RPZk1peGluLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYmIyOTEuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvbGlzdC9Qcm92aWRlc0xpc3RPZk1peGluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5zdXBwb3J0Lmxpc3Q7Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKLWltcG9ydCBvcmcucWk0ai5hcGkucXVlcnkuUXVlcnlCdWlsZGVyOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5xdWVyeS5RdWVyeUJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcms7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuVW5pdE9mV29ya0ZhY3Rvcnk7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnV0aWwuUGFyYW1ldGVyaXplZFR5cGVzLmZpbmRUeXBlVmFyaWFibGVzOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJvdmlkZXNMaXN0T2ZNaXhpbjxUPgotICAgIGV4dGVuZHMgQWN0aW9uU3VwcG9ydAotICAgIGltcGxlbWVudHMgUHJvdmlkZXNMaXN0T2Y8VD4KLXsKLQotICAgIEBUaGlzCi0gICAgcHJpdmF0ZSBQcm92aWRlc0xpc3RPZjxUPiBhY3Rpb247Ci0KLSAgICBAU3RydWN0dXJlCi0gICAgcHJpdmF0ZSBVbml0T2ZXb3JrRmFjdG9yeSB1b3dmOwotCi0gICAgQFN0cnVjdHVyZQotICAgIHByaXZhdGUgUXVlcnlCdWlsZGVyRmFjdG9yeSBxYmY7Ci0KLSAgICBwcml2YXRlIEl0ZXJhYmxlPFQ+IHJlc3VsdHM7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSXRlcmFibGU8VD4gbGlzdCgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGlzIHdoZXJlIHdlJ2xsIGxvYWQgdGhlIGxpc3Qgb2YgZW50aXRpZXMuICBOb3QgYmVjYXVzZSBpdCBpcyBhbnkgYmV0dGVyIHRoYW4gdGhlIGV4ZWN1dGUoKSBtZXRob2QsIEkKLSAgICAgKiB3b3VsZCBhY3R1YWxseSBwcmVmZXIgZG9pbmcgaXQgaW4gdGhlIGV4ZWN1dGUgbWV0aG9kLiAgQnV0IHNpbmNlIHRoZXNlIGxpc3QgYWN0aW9ucyBjYW4gYmUgdGhlIHRhcmdldAotICAgICAqIG9mIHJlZGlyZWN0cyBhZnRlciBlcnJvcnMsIGFjdGlvbkVycm9ycyBtYXkgbm90IGJlIGVtcHR5IHdoaWNoIHdvdWxkIG1lYW4gZXhlY3V0ZSgpIHdvdWxkIG5ldmVyIGdldCBjYWxsZWQuCi0gICAgICogT25lIHdheSBhcm91bmQgdGhpcyB3b3VsZCBiZSB0byBoYXZlIGEgZGlmZmVyZW50IGludGVyY2VwdG9yIHN0YWNrIGp1c3QgZm9yIHRoZXNlIGxpc3QgYWN0aW9ucyB0aGF0IGRvZXNuJ3QKLSAgICAgKiBkbyB2YWxpZGF0aW9uLCBidXQgZm9yIG5vdyB3ZSdsbCBqdXN0IHVzZSB0aGUgcHJlcGFyZSgpIG1ldGhvZC4gIFdlIGNhbiBjaGFuZ2UgaXQgZWFzaWx5IGVub3VnaCBsYXRlciBpZiB0aGlzCi0gICAgICogYmVjb21lcyBhbiBpc3N1ZSBmb3Igc29tZSByZWFzb24uCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcHJlcGFyZSgpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFVuaXRPZldvcmsgdW93ID0gdW93Zi5jdXJyZW50VW5pdE9mV29yaygpOwotICAgICAgICBRdWVyeUJ1aWxkZXI8VD4gcWIgPSBxYmYubmV3UXVlcnlCdWlsZGVyKCB0eXBlVG9MaXN0KCkgKTsKLSAgICAgICAgcmVzdWx0cyA9IHVvdy5uZXdRdWVyeSggcWIgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIENsYXNzPFQ+IHR5cGVUb0xpc3QoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChDbGFzczxUPikgZmluZFR5cGVWYXJpYWJsZXMoIGFjdGlvbi5nZXRDbGFzcygpLCBQcm92aWRlc0xpc3RPZi5jbGFzcyApWyAwIF07Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L3ZpZXcvUHJvdmlkZXNWaWV3T2YuamF2YSBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L3ZpZXcvUHJvdmlkZXNWaWV3T2YuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE2ZWQzOS4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvc3VwcG9ydC92aWV3L1Byb3ZpZGVzVmlld09mLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQudmlldzsKLQotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5zdXBwb3J0LlByb3ZpZGVzRW50aXR5T2Y7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQuU3RydXRzQWN0aW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIFByb3ZpZGVzVmlld09mPFQ+Ci0gICAgZXh0ZW5kcyBQcm92aWRlc0VudGl0eU9mPFQ+LCBTdHJ1dHNBY3Rpb24KLXsKLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9zdXBwb3J0L3ZpZXcvUHJvdmlkZXNWaWV3T2ZNaXhpbi5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvdmlldy9Qcm92aWRlc1ZpZXdPZk1peGluLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYjEzOGEuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3N1cHBvcnQvdmlldy9Qcm92aWRlc1ZpZXdPZk1peGluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5zdXBwb3J0LnZpZXc7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlRoaXM7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQuUHJvdmlkZXNFbnRpdHlPZk1peGluOwotCi1pbXBvcnQgc3RhdGljIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi51dGlsLlBhcmFtZXRlcml6ZWRUeXBlcy5maW5kVHlwZVZhcmlhYmxlczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFByb3ZpZGVzVmlld09mTWl4aW48VD4KLSAgICBleHRlbmRzIFByb3ZpZGVzRW50aXR5T2ZNaXhpbjxUPgotICAgIGltcGxlbWVudHMgUHJvdmlkZXNWaWV3T2Y8VD4KLXsKLSAgICBAVGhpcwotICAgIHByaXZhdGUgUHJvdmlkZXNWaWV3T2Y8VD4gYWN0aW9uOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkKLSAgICB7Ci0gICAgICAgIGxvYWRFbnRpdHkoKTsKLSAgICAgICAgcmV0dXJuIFNVQ0NFU1M7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIENsYXNzPFQ+IHR5cGVUb0xvYWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChDbGFzczxUPikgZmluZFR5cGVWYXJpYWJsZXMoIGFjdGlvbi5nZXRDbGFzcygpLCBQcm92aWRlc1ZpZXdPZi5jbGFzcyApWyAwIF07Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi91dGlsL0NsYXNzTmFtZUZpbHRlcnMuamF2YSBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi91dGlsL0NsYXNzTmFtZUZpbHRlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q0MWNkZi4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvdXRpbC9DbGFzc05hbWVGaWx0ZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi51dGlsOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQ2xhc3NOYW1lRmlsdGVycwotewotICAgIHByaXZhdGUgQ2xhc3NOYW1lRmlsdGVycygpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQ2xhc3NOYW1lTWFwcGVyIHBhc3NUaHJ1TWFwcGVyID0gbmV3IENsYXNzTmFtZU1hcHBlcigpCi0gICAgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN0cmluZyBtYXAoIENsYXNzPD8+IHR5cGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZS5nZXROYW1lKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHVibGljIHN0YXRpYyBDbGFzc05hbWVNYXBwZXIgcmVtb3ZlU3VmZml4ZXMoIGZpbmFsIFN0cmluZy4uLiBzdWZmaXhlcyApCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IENsYXNzTmFtZU1hcHBlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFN0cmluZyBtYXAoIENsYXNzPD8+IHR5cGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IoIFN0cmluZyBzdWZmaXggOiBzdWZmaXhlcyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiggY2xhc3NOYW1lLmVuZHNXaXRoKCBzdWZmaXggKSApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWUuc3Vic3RyaW5nKCAwLCBjbGFzc05hbWUubGVuZ3RoKCkgLSBzdWZmaXgubGVuZ3RoKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi91dGlsL0NsYXNzTmFtZU1hcHBlci5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3V0aWwvQ2xhc3NOYW1lTWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZjNhOGYuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3V0aWwvQ2xhc3NOYW1lTWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vKioKLSAqCi0gKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnV0aWw7Ci0KLWltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIENsYXNzTmFtZU1hcHBlciBleHRlbmRzIEZ1bmN0aW9uPENsYXNzPD8+LFN0cmluZz4KLXsKLSAgICBAT3ZlcnJpZGUKLSAgICBTdHJpbmcgbWFwKCBDbGFzczw/PiB0eXBlICk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3V0aWwvQ2xhc3NOYW1lcy5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3V0aWwvQ2xhc3NOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWUzYWU4Li4wMDAwMDAwCi0tLSBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi91dGlsL0NsYXNzTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IG9yZy5xaTRqLmZ1bmN0aW9uYWwuRnVuY3Rpb247Ci1pbXBvcnQgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXM7Ci0KLWltcG9ydCBzdGF0aWMgamF2YS5sYW5nLkNoYXJhY3Rlci5pc0xvd2VyQ2FzZTsKLWltcG9ydCBzdGF0aWMgamF2YS5sYW5nLkNoYXJhY3Rlci50b0xvd2VyQ2FzZTsKLQotcHVibGljIGZpbmFsIGNsYXNzIENsYXNzTmFtZXMKLXsKLSAgICBwcml2YXRlIENsYXNzTmFtZXMoKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBjbGFzc05hbWVJbkRvdE5vdGF0aW9uKCBDbGFzczw/PiB0eXBlICkKLSAgICB7Ci0gICAgICAgIEZ1bmN0aW9uPENsYXNzPD8+LCBTdHJpbmc+IG1hcHBlciA9IENsYXNzTmFtZUZpbHRlcnMucGFzc1RocnVNYXBwZXI7Ci0gICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gbWFwID0gSXRlcmFibGVzLm1hcCggbWFwcGVyLCBBcnJheXMuYXNMaXN0KCB0eXBlICkgKTsKLSAgICAgICAgcmV0dXJuIENsYXNzTmFtZXMuY2FtZWxDYXNlVG9Eb3ROb3RhdGlvbiggbWFwICk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lSW5Eb3ROb3RhdGlvbiggSXRlcmFibGU8Q2xhc3M8Pz4+IHR5cGUsIENsYXNzTmFtZU1hcHBlciBtYXBwZXIgKQotICAgIHsKLSAgICAgICAgSXRlcmFibGU8U3RyaW5nPiBtYXAgPSBJdGVyYWJsZXMubWFwKCBtYXBwZXIsIHR5cGUgKTsKLSAgICAgICAgcmV0dXJuIENsYXNzTmFtZXMuY2FtZWxDYXNlVG9Eb3ROb3RhdGlvbiggbWFwICk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgY2FtZWxDYXNlVG9Eb3ROb3RhdGlvbiggSXRlcmFibGU8U3RyaW5nPiBuYW1lcyApCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgZm9yKCBTdHJpbmcgbmFtZSA6IG5hbWVzICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYoIGNvdW50KysgPiAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICIsIiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2IuYXBwZW5kKCBjYW1lbENhc2VUb0RvdE5vdGF0aW9uKCBuYW1lICkgKTsKLSAgICAgICAgfQotICAgICAgICBpZiggY291bnQgPT0gMSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIHNiLmFwcGVuZCggIl0iICk7Ci0gICAgICAgIHJldHVybiAiWyIgKyBzYi50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjYW1lbENhc2VUb0RvdE5vdGF0aW9uKCBTdHJpbmcgbmFtZSApCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIG5hbWUubGVuZ3RoKCkgKTsKLSAgICAgICAgc2IuYXBwZW5kKCB0b0xvd2VyQ2FzZSggbmFtZS5jaGFyQXQoIDAgKSApICk7Ci0gICAgICAgIGZvciggaW50IGkgPSAxOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciBjID0gbmFtZS5jaGFyQXQoIGkgKTsKLSAgICAgICAgICAgIGlmKCBpc0xvd2VyQ2FzZSggYyApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIGMgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICcuJyApOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggdG9Mb3dlckNhc2UoIGMgKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi91dGlsL1BhcmFtZXRlcml6ZWRUeXBlcy5qYXZhIGIvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3V0aWwvUGFyYW1ldGVyaXplZFR5cGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNTY1NjAuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3V0aWwvUGFyYW1ldGVyaXplZFR5cGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi51dGlsOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuUGFyYW1ldGVyaXplZFR5cGU7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKLQotcHVibGljIGZpbmFsIGNsYXNzIFBhcmFtZXRlcml6ZWRUeXBlcwotewotICAgIHByaXZhdGUgUGFyYW1ldGVyaXplZFR5cGVzKCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyA8UywgVCBleHRlbmRzIFM+IFR5cGVbXSBmaW5kVHlwZVZhcmlhYmxlcyggQ2xhc3M8VD4gdHlwZSwgQ2xhc3M8Uz4gc2VhcmNoVHlwZSApCi0gICAgewotICAgICAgICByZXR1cm4gUGFyYW1ldGVyaXplZFR5cGVzLmZpbmRQYXJhbWV0ZXJpemVkVHlwZSggdHlwZSwgc2VhcmNoVHlwZSApLmdldEFjdHVhbFR5cGVBcmd1bWVudHMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIDxTLCBUIGV4dGVuZHMgUz4gUGFyYW1ldGVyaXplZFR5cGUgZmluZFBhcmFtZXRlcml6ZWRUeXBlKCBDbGFzczxUPiB0eXBlLCBDbGFzczxTPiBzZWFyY2hUeXBlICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBQYXJhbWV0ZXJpemVkVHlwZXMuZmluZFBhcmFtZXRlcml6ZWRUeXBlKCAoVHlwZSkgdHlwZSwgc2VhcmNoVHlwZSApOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXJhbWV0ZXJpemVkVHlwZSBmaW5kUGFyYW1ldGVyaXplZFR5cGUoIFR5cGUgdHlwZSwgVHlwZSBzZWFyY2hUeXBlICkKLSAgICB7Ci0gICAgICAgIGlmKCB0eXBlIGluc3RhbmNlb2YgUGFyYW1ldGVyaXplZFR5cGUgJiYgKCAoUGFyYW1ldGVyaXplZFR5cGUpIHR5cGUgKS5nZXRSYXdUeXBlKCkuZXF1YWxzKCBzZWFyY2hUeXBlICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFBhcmFtZXRlcml6ZWRUeXBlKSB0eXBlOwotICAgICAgICB9Ci0gICAgICAgIFR5cGVbXSBwYXJlbnRzID0gKCAoQ2xhc3M8Pz4pIHR5cGUgKS5nZXRHZW5lcmljSW50ZXJmYWNlcygpOwotICAgICAgICBmb3IoIFR5cGUgcGFyZW50IDogcGFyZW50cyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBhcmFtZXRlcml6ZWRUeXBlIGZvdW5kVHlwZSA9IGZpbmRQYXJhbWV0ZXJpemVkVHlwZSggcGFyZW50LCBzZWFyY2hUeXBlICk7Ci0gICAgICAgICAgICBpZiggZm91bmRUeXBlICE9IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMtcGx1Z2luLnhtbCBiL2xpYnJhcmllcy9zdHJ1dHMyLXBsdWdpbi9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYWY2ZjkuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMtcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQotLyoKLSAqICRJZDogcG9tLnhtbCA1NTkyMDYgMjAwNy0wNy0yNCAyMTowMToxOFogYXBldHJlbGxpICQKLSAqCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLS0tPgotCi08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgotCi08c3RydXRzPgotICA8YmVhbiB0eXBlPSJjb20ub3BlbnN5bXBob255Lnh3b3JrMi5PYmplY3RGYWN0b3J5IiBuYW1lPSJxaTRqIiBjbGFzcz0ib3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLlFpNGpPYmplY3RGYWN0b3J5Ii8+Ci0gIDxjb25zdGFudCBuYW1lPSJzdHJ1dHMub2JqZWN0RmFjdG9yeSIgdmFsdWU9InFpNGoiLz4KLQotICA8YmVhbiB0eXBlPSJvZ25sLlByb3BlcnR5QWNjZXNzb3IiIG5hbWU9Im9yZy5xaTRqLmNvbXBvc2l0ZS5Db21wb3NpdGUiCi0gICAgICAgIGNsYXNzPSJvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuUWk0alByb3BlcnR5QWNjZXNzb3IiLz4KLTwvc3RydXRzPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9tYWluL3Jlc291cmNlcy94d29yay1jb252ZXJzaW9uLnByb3BlcnRpZXMgYi9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vcmVzb3VyY2VzL3h3b3JrLWNvbnZlcnNpb24ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYzNjU2MC4uMDAwMDAwMAotLS0gYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL21haW4vcmVzb3VyY2VzL3h3b3JrLWNvbnZlcnNpb24ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5Q29tcG9zaXRlPW9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5FbnRpdHlDb21wb3NpdGVDb252ZXJ0ZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvdXRpbC9QYXJhbWV0ZXJpemVkVHlwZXNUZXN0LmphdmEgYi9saWJyYXJpZXMvc3RydXRzMi1wbHVnaW4vc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvdXRpbC9QYXJhbWV0ZXJpemVkVHlwZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MzYwOTcuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL3V0aWwvUGFyYW1ldGVyaXplZFR5cGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIudXRpbDsKLQotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuUGFyYW1ldGVyaXplZFR5cGU7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJpemVkVHlwZXNUZXN0Ci17Ci0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBmaW5kUGFyYW1ldGVyaXplZFR5cGUoKQotICAgIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICAgR2FyYmFnZU1hbi5jbGFzcy5nZXRHZW5lcmljSW50ZXJmYWNlcygpWyAwIF0sCi0gICAgICAgICAgICBQYXJhbWV0ZXJpemVkVHlwZXMuZmluZFBhcmFtZXRlcml6ZWRUeXBlKCBHYXJiYWdlTWFuLmNsYXNzLCBIYW5kbGVyT2YuY2xhc3MgKQotICAgICAgICApOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgZmluZFR5cGVWYXJpYWJsZXMoKQotICAgIHsKLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMoCi0gICAgICAgICAgICAgICAgKChQYXJhbWV0ZXJpemVkVHlwZSkgR2FyYmFnZU1hbi5jbGFzcy5nZXRHZW5lcmljSW50ZXJmYWNlcygpWzBdKS5nZXRBY3R1YWxUeXBlQXJndW1lbnRzKCksCi0gICAgICAgICAgICAgICAgUGFyYW1ldGVyaXplZFR5cGVzLmZpbmRUeXBlVmFyaWFibGVzKCBHYXJiYWdlTWFuLmNsYXNzLCBIYW5kbGVyT2YuY2xhc3MgKQotICAgICAgICApOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnRlcmZhY2UgSGFuZGxlck9mPFQ+Ci0gICAgewotICAgIH0KLQotICAgIHN0YXRpYyBpbnRlcmZhY2UgVHJhc2gKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIEdhcmJhZ2VNYW4gaW1wbGVtZW50cyBIYW5kbGVyT2Y8VHJhc2g+Ci0gICAgewotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy91aWQvYnVpbGQuZ3JhZGxlIGIvbGlicmFyaWVzL3VpZC9idWlsZC5ncmFkbGUKaW5kZXggNTdiMDYxOS4uZWI2ZGNmZCAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3VpZC9idWlsZC5ncmFkbGUKKysrIGIvbGlicmFyaWVzL3VpZC9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiUWk0aiBVSUQgTGlicmFyeSBjb250YWlucyB2YXJpb3VzIElkZW50aXR5IGdlbmVyYXRpb24gc2VydmljZXMuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTGlicmFyeSAtIFVJRCIgfX0KK2Rlc2NyaXB0aW9uID0gIkFwYWNoZSBaZXN04oSiIFVJRCBMaWJyYXJ5IGNvbnRhaW5zIHZhcmlvdXMgSWRlbnRpdHkgZ2VuZXJhdGlvbiBzZXJ2aWNlcy4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBMaWJyYXJ5IC0gVUlEIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdWlkL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL3VpZC9kZXYtc3RhdHVzLnhtbAppbmRleCBhMGM5ZmJiLi5iZGYwMGU3IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvdWlkL2Rldi1zdGF0dXMueG1sCisrKyBiL2xpYnJhcmllcy91aWQvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdWlkL3NyYy9kb2NzL3VpZC50eHQgYi9saWJyYXJpZXMvdWlkL3NyYy9kb2NzL3VpZC50eHQKaW5kZXggZmRhZGIzYS4uNzEwYjYwNiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3VpZC9zcmMvZG9jcy91aWQudHh0CisrKyBiL2xpYnJhcmllcy91aWQvc3JjL2RvY3MvdWlkLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tsaWJyYXJ5LXVpZCwgVUlEIExpYnJhcnldXQogPSBVSUQgPQogCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdWlkL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91aWQvc2VxdWVuY2UvYXNzZW1ibHkvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3VpZC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdWlkL3NlcXVlbmNlL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbAppbmRleCBiMzkyMWI1Li5kNGJiMmYyIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvdWlkL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91aWQvc2VxdWVuY2UvYXNzZW1ibHkvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy91aWQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3VpZC9zZXF1ZW5jZS9hc3NlbWJseS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNlcXVlbmNlIFNlcnZpY2VzIEFzc2VtYmx5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdWlkL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91aWQvc2VxdWVuY2UvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3VpZC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdWlkL3NlcXVlbmNlL3BhY2thZ2UuaHRtbAppbmRleCBlMzk0YmExLi4wYTdlYWQ5IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvdWlkL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91aWQvc2VxdWVuY2UvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy91aWQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3VpZC9zZXF1ZW5jZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlNlcXVlbmNlIFNlcnZpY2VzLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdWlkL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91aWQvdXVpZC9hc3NlbWJseS9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvdWlkL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91aWQvdXVpZC9hc3NlbWJseS9wYWNrYWdlLmh0bWwKaW5kZXggNDk2N2ViNC4uNjIwMmYzZSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3VpZC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdWlkL3V1aWQvYXNzZW1ibHkvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy91aWQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3VpZC91dWlkL2Fzc2VtYmx5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+VVVJRCBTZXJ2aWNlIEFzc2VtYmx5LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdWlkL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91aWQvdXVpZC9wYWNrYWdlLmh0bWwgYi9saWJyYXJpZXMvdWlkL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91aWQvdXVpZC9wYWNrYWdlLmh0bWwKaW5kZXggYTBkYjVhNS4uNjkyNWIzMiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3VpZC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdWlkL3V1aWQvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy91aWQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3VpZC91dWlkL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+VVVJRCBTZXJ2aWNlLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdW93ZmlsZS9idWlsZC5ncmFkbGUgYi9saWJyYXJpZXMvdW93ZmlsZS9idWlsZC5ncmFkbGUKaW5kZXggYmNiOTY2NC4uZTBmMzExNiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Vvd2ZpbGUvYnVpbGQuZ3JhZGxlCisrKyBiL2xpYnJhcmllcy91b3dmaWxlL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJRaTRqIFVvV0ZpbGUgTGlicmFyeSBwcm92aWRlcyBmaWxlIG9wZXJhdGlvbnMgYmluZGluZyB0byBVb1dzLiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIExpYnJhcnkgLSBVb1dGaWxlIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgVW9XRmlsZSBMaWJyYXJ5IHByb3ZpZGVzIGZpbGUgb3BlcmF0aW9ucyBiaW5kaW5nIHRvIFVvV3MuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgTGlicmFyeSAtIFVvV0ZpbGUiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKZGlmZiAtLWdpdCBhL2xpYnJhcmllcy91b3dmaWxlL2Rldi1zdGF0dXMueG1sIGIvbGlicmFyaWVzL3Vvd2ZpbGUvZGV2LXN0YXR1cy54bWwKaW5kZXggYTg0NGFiNS4uNDNkZjYxNSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Vvd2ZpbGUvZGV2LXN0YXR1cy54bWwKKysrIGIvbGlicmFyaWVzL3Vvd2ZpbGUvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdW93ZmlsZS9zcmMvZG9jcy91b3dmaWxlLnR4dCBiL2xpYnJhcmllcy91b3dmaWxlL3NyYy9kb2NzL3Vvd2ZpbGUudHh0CmluZGV4IDk5MGI3NGIuLmIzYTFjMDAgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy91b3dmaWxlL3NyYy9kb2NzL3Vvd2ZpbGUudHh0CisrKyBiL2xpYnJhcmllcy91b3dmaWxlL3NyYy9kb2NzL3Vvd2ZpbGUudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2xpYnJhcnktdW93ZmlsZSxVb1dGaWxlIExpYnJhcnldXQogPSBVb1dGaWxlID0KIApkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Vvd2ZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Vvd2ZpbGUvYm9vdHN0cmFwL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy91b3dmaWxlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91b3dmaWxlL2Jvb3RzdHJhcC9wYWNrYWdlLmh0bWwKaW5kZXggMmI3NTViOC4uYzg4N2UyNiAxMDA2NDQKLS0tIGEvbGlicmFyaWVzL3Vvd2ZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Vvd2ZpbGUvYm9vdHN0cmFwL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvdW93ZmlsZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdW93ZmlsZS9ib290c3RyYXAvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5Vbml0T2ZXb3JrIEZpbGUgQXNzZW1ibHkuPC9oMj4KZGlmZiAtLWdpdCBhL2xpYnJhcmllcy91b3dmaWxlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91b3dmaWxlL2ludGVybmFsL3BhY2thZ2UuaHRtbCBiL2xpYnJhcmllcy91b3dmaWxlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91b3dmaWxlL2ludGVybmFsL3BhY2thZ2UuaHRtbAppbmRleCA4YTYyYjIyLi5iZGIzNGIxIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvdW93ZmlsZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdW93ZmlsZS9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKKysrIGIvbGlicmFyaWVzL3Vvd2ZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Vvd2ZpbGUvaW50ZXJuYWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5Vbml0T2ZXb3JrIEZpbGUgTGlicmFyeSBJbnRlcm5hbCBQYWNrYWdlLjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdW93ZmlsZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdW93ZmlsZS9wbHVyYWwvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3Vvd2ZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Vvd2ZpbGUvcGx1cmFsL3BhY2thZ2UuaHRtbAppbmRleCBhYTAzZjVjLi5kMGI3OTFlIDEwMDY0NAotLS0gYS9saWJyYXJpZXMvdW93ZmlsZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdW93ZmlsZS9wbHVyYWwvcGFja2FnZS5odG1sCisrKyBiL2xpYnJhcmllcy91b3dmaWxlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91b3dmaWxlL3BsdXJhbC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlVuaXRPZldvcmsgRmlsZSBQbHVyYWwgU3VwcG9ydC48L2gyPgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3Vvd2ZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Vvd2ZpbGUvc2luZ3VsYXIvcGFja2FnZS5odG1sIGIvbGlicmFyaWVzL3Vvd2ZpbGUvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Vvd2ZpbGUvc2luZ3VsYXIvcGFja2FnZS5odG1sCmluZGV4IDAyYzdhYzkuLjM3OGUyYTggMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy91b3dmaWxlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS91b3dmaWxlL3Npbmd1bGFyL3BhY2thZ2UuaHRtbAorKysgYi9saWJyYXJpZXMvdW93ZmlsZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdW93ZmlsZS9zaW5ndWxhci9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlVuaXRPZldvcmsgRmlsZSBTaW5ndWxhciBTdXBwb3J0LjwvaDI+CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdW93ZmlsZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdW93ZmlsZS9IYXNVb1dGaWxlVGVzdC5qYXZhIGIvbGlicmFyaWVzL3Vvd2ZpbGUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9saWJyYXJ5L3Vvd2ZpbGUvSGFzVW9XRmlsZVRlc3QuamF2YQppbmRleCBjN2RlOGQyLi5hOWUwODY0IDEwMDY0NAotLS0gYS9saWJyYXJpZXMvdW93ZmlsZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdW93ZmlsZS9IYXNVb1dGaWxlVGVzdC5qYXZhCisrKyBiL2xpYnJhcmllcy91b3dmaWxlL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS91b3dmaWxlL0hhc1VvV0ZpbGVUZXN0LmphdmEKQEAgLTQxLDYgKzQxLDcgQEAKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CiBpbXBvcnQgb3JnLnFpNGouaW8uSW5wdXRzOwogaW1wb3J0IG9yZy5xaTRqLmlvLk91dHB1dHM7CitpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5maWxlY29uZmlnLkZpbGVDb25maWd1cmF0aW9uQXNzZW1ibGVyOwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkudW93ZmlsZS5ib290c3RyYXAuVW9XRmlsZUFzc2VtYmxlcjsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnVvd2ZpbGUuaW50ZXJuYWwuQ29uY3VycmVudFVvV0ZpbGVNb2RpZmljYXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS51b3dmaWxlLnNpbmd1bGFyLkhhc1VvV0ZpbGVMaWZlY3ljbGU7CkBAIC0xNjgsNiArMTY5LDcgQEAKICAgICAgICAgLy8gRU5EIFNOSVBQRVQ6IGFzc2VtYmx5CiAgICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggVGVzdFNlcnZpY2UuY2xhc3MgKTsKICAgICAgICAgbmV3IEVudGl0eVRlc3RBc3NlbWJsZXIoKS5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIG5ldyBGaWxlQ29uZmlndXJhdGlvbkFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKICAgICAgICAgLy8gU1RBUlQgU05JUFBFVDogYXNzZW1ibHkKICAgICB9CiAgICAgLy8gRU5EIFNOSVBQRVQ6IGFzc2VtYmx5CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvdW93ZmlsZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL2xpYnJhcnkvdW93ZmlsZS9IYXNVb1dGaWxlc1Rlc3QuamF2YSBiL2xpYnJhcmllcy91b3dmaWxlL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS91b3dmaWxlL0hhc1VvV0ZpbGVzVGVzdC5qYXZhCmluZGV4IDhlY2QxYWIuLmMzMzA2NzYgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy91b3dmaWxlL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS91b3dmaWxlL0hhc1VvV0ZpbGVzVGVzdC5qYXZhCisrKyBiL2xpYnJhcmllcy91b3dmaWxlL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovbGlicmFyeS91b3dmaWxlL0hhc1VvV0ZpbGVzVGVzdC5qYXZhCkBAIC00MSw2ICs0MSw3IEBACiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwogaW1wb3J0IG9yZy5xaTRqLmlvLklucHV0czsKIGltcG9ydCBvcmcucWk0ai5pby5PdXRwdXRzOworaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZmlsZWNvbmZpZy5GaWxlQ29uZmlndXJhdGlvbkFzc2VtYmxlcjsKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnVvd2ZpbGUuYm9vdHN0cmFwLlVvV0ZpbGVBc3NlbWJsZXI7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS51b3dmaWxlLmludGVybmFsLkNvbmN1cnJlbnRVb1dGaWxlTW9kaWZpY2F0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkudW93ZmlsZS5wbHVyYWwuSGFzVW9XRmlsZXNMaWZlY3ljbGU7CkBAIC0xODMsNiArMTg0LDcgQEAKICAgICAgICAgLy8gRU5EIFNOSVBQRVQ6IGFzc2VtYmx5CiAgICAgICAgIG1vZHVsZS5zZXJ2aWNlcyggVGVzdFNlcnZpY2UuY2xhc3MgKTsKICAgICAgICAgbmV3IEVudGl0eVRlc3RBc3NlbWJsZXIoKS5hc3NlbWJsZSggbW9kdWxlICk7CisgICAgICAgIG5ldyBGaWxlQ29uZmlndXJhdGlvbkFzc2VtYmxlcigpLmFzc2VtYmxlKCBtb2R1bGUgKTsKICAgICAgICAgLy8gU1RBUlQgU05JUFBFVDogYXNzZW1ibHkKICAgICB9CiAgICAgLy8gRU5EIFNOSVBQRVQ6IGFzc2VtYmx5CmRpZmYgLS1naXQgYS9saWJyYXJpZXMvd3JhcHBlci9ncmFkbGUtd3JhcHBlci5qYXIgYi9saWJyYXJpZXMvd3JhcHBlci9ncmFkbGUtd3JhcHBlci5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZTBjMjUuLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3dyYXBwZXIvZ3JhZGxlLXdyYXBwZXIuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlicmFyaWVzL3dyYXBwZXIvZ3JhZGxlLXdyYXBwZXIucHJvcGVydGllcyBiL2xpYnJhcmllcy93cmFwcGVyL2dyYWRsZS13cmFwcGVyLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NDgxMDguLjAwMDAwMDAKLS0tIGEvbGlicmFyaWVzL3dyYXBwZXIvZ3JhZGxlLXdyYXBwZXIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNTdW4gTm92IDE0IDE4OjE4OjA2IENTVCAyMDEwCi1kaXN0cmlidXRpb25CYXNlPUdSQURMRV9VU0VSX0hPTUUKLWRpc3RyaWJ1dGlvblBhdGg9d3JhcHBlci9kaXN0cwotemlwU3RvcmVCYXNlPUdSQURMRV9VU0VSX0hPTUUKLXppcFN0b3JlUGF0aD13cmFwcGVyL2Rpc3RzCi0jZGlzdHJpYnV0aW9uVmVyc2lvbj0wLjktcmMtMQotI3VybFJvb3Q9aHR0cFw6Ly9kaXN0LmNvZGVoYXVzLm9yZy9ncmFkbGUKLWRpc3RyaWJ1dGlvblZlcnNpb249MC45Ci11cmxSb290PWh0dHBcOi8vZ3JhZGxlLmFydGlmYWN0b3J5b25saW5lLmNvbS9ncmFkbGUvZGlzdHJpYnV0aW9ucwotZGlzdHJpYnV0aW9uTmFtZT1ncmFkbGUKLWRpc3RyaWJ1dGlvbkNsYXNzaWZpZXI9YmluCmRpZmYgLS1naXQgYS9tYW51YWwvYnVpbGQuZ3JhZGxlIGIvbWFudWFsL2J1aWxkLmdyYWRsZQppbmRleCA2NTI4NTcyLi5jNzU0ODgwIDEwMDY0NAotLS0gYS9tYW51YWwvYnVpbGQuZ3JhZGxlCisrKyBiL21hbnVhbC9idWlsZC5ncmFkbGUKQEAgLTEsMTEgKzEsMzAgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogTWFudWFscyBhbmQgV2Vic2l0ZS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitkZXNjcmlwdGlvbiA9ICJBcGFjaGUgWmVzdOKEoiBNYW51YWxzIGFuZCBXZWJzaXRlLiIKIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZSggcHJvamVjdCggIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIiApICkKICAgY29tcGlsZSggcHJvamVjdCggIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50cyIgKSApCiAgIGNvbXBpbGUoIHByb2plY3QoICI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkubG9nZ2luZyIgKSApCiAgIHJ1bnRpbWUoIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiICkgKQotICBydW50aW1lKCBsaWJyYXJpZXMubG9nYmFjayApCisgIHJ1bnRpbWUoIGxpYnJhcmllcy5zbGY0al9zaW1wbGUgKQogfQogCiAKQEAgLTI3LDE5ICs0NiwxOSBAQAogCiB0YXNrIHdlYnNpdGUoIHR5cGU6IG9yZy5xaTRqLmdyYWRsZS5wbHVnaW4uRG9jdW1lbnRhdGlvbiwKICAgICAgICAgICAgICAgZGVwZW5kc09uOiByb290UHJvamVjdC5hbGxwcm9qZWN0cy50YXNrcy5mbGF0dGVuKCkuZmluZEFsbCB7IGl0Lm5hbWUgPT0gQXNjaWlkb2NCdWlsZEluZm8uVEFTS19OQU1FIH0gKSB7Ci0gIGRvY05hbWUgPSAnd2Vic2l0ZScKLSAgZG9jVHlwZSA9ICdhcnRpY2xlJworICBkb2NOYW1lICd3ZWJzaXRlJworICBkb2NUeXBlICdhcnRpY2xlJwogfQogCiB0YXNrIGFyY2hpdmVXZWJzaXRlKCB0eXBlOiBDb3B5ICkgewogICBkZXBlbmRzT24gd2Vic2l0ZQogICBpZiggcm9vdFByb2plY3QudmVyc2lvbiA9PSAnMCcgfHwgcm9vdFByb2plY3QudmVyc2lvbi5jb250YWlucyggIlNOQVBTSE9UIiApICkKICAgewotICAgIGludG8oICIkcm9vdFByb2plY3QucHJvamVjdERpci8uLi9xaTRqLmdpdGh1Yi5jb20vZGV2ZWxvcCIgKQorICAgIGludG8oICIkcm9vdFByb2plY3QucHJvamVjdERpci8uLi96ZXN0LXdlYi9zaXRlL2NvbnRlbnQvamF2YS9kZXZlbG9wIiApCiAgIH0KICAgZWxzZQogICB7Ci0gICAgaW50byggIiRyb290UHJvamVjdC5wcm9qZWN0RGlyLy4uL3FpNGouZ2l0aHViLmNvbS8kdmVyc2lvbiIgKQorICAgIGludG8oICIkcm9vdFByb2plY3QucHJvamVjdERpci8uLi96ZXN0LXdlYi9zaXRlL2NvbnRlbnQvamF2YS8kdmVyc2lvbiIgKQogICB9CiAgIGZyb20oICdidWlsZC9kb2NzL3dlYnNpdGUvJyApCiB9CkBAIC00OCw4ICs2Nyw4IEBACiAgIGRlcGVuZHNPbiBhcmNoaXZlV2Vic2l0ZQogICBpZiggcm9vdFByb2plY3QudmVyc2lvbiAhPSAnMCcgJiYgIXJvb3RQcm9qZWN0LnZlcnNpb24uY29udGFpbnMoICJTTkFQU0hPVCIgKSApCiAgIHsKLSAgICBmcm9tKCAiJHJvb3RQcm9qZWN0LnByb2plY3REaXIvLi4vcWk0ai5naXRodWIuY29tLyR2ZXJzaW9uLyIgKQotICAgIGludG8oICIkcm9vdFByb2plY3QucHJvamVjdERpci8uLi9xaTRqLmdpdGh1Yi5jb20vbGF0ZXN0LyIgKQorICAgIGZyb20oICIkcm9vdFByb2plY3QucHJvamVjdERpci8uLi96ZXN0LXdlYi9zaXRlL2NvbnRlbnQvamF2YS8kdmVyc2lvbi8iICkKKyAgICBpbnRvKCAiJHJvb3RQcm9qZWN0LnByb2plY3REaXIvLi4vemVzdC13ZWIvc2l0ZS9jb250ZW50L2phdmEvbGF0ZXN0LyIgKQogICB9CiB9CiAKQEAgLTU5LDMgKzc4LDE5IEBACiAvLyAgZGVwZW5kc09uIHJlZmVyZW5jZU1hbnVhbAogLy8gIGRlcGVuZHNPbiByZWNpcGVzCiB9CisKKy8vIFNraXAgaWYgYXNjaWlkb2MgaXMgbm90IGZvdW5kIGluIFBBVEggd2hlbiBidWlsZGluZyBhIDAgb3IgU05BUFNIT1QgdmVyc2lvbiwKKy8vIG9yIGlmIHNraXBBc2NpaWRvY0lmQWJzZW50IHByb3BlcnR5IGlzIHNldCBhbmQgYXNjaWlkb2MgaXMgbm90IGZvdW5kIGluIFBBVEgKK1sgd2Vic2l0ZSwgYXJjaGl2ZVdlYnNpdGUsIGNvcHlXZWJzaXRlLCBtYW51YWxzIF0qLm9ubHlJZiB7CisgIGRlZiBza2lwQXNjaWlkb2NJZkFic2VudCA9IHJvb3RQcm9qZWN0Lmhhc1Byb3BlcnR5KCAnc2tpcEFzY2lpZG9jSWZBYnNlbnQnICkgPyByb290UHJvamVjdC5za2lwQXNjaWlkb2NJZkFic2VudCA6IGZhbHNlCisgIGRlZiBwYXRoRGlycyA9IFN5c3RlbS5nZXRlbnYoICdQQVRIJyApLnNwbGl0KCBGaWxlLnBhdGhTZXBhcmF0b3IgKQorICBkZWYgcHJlc2VudCA9IHBhdGhEaXJzLmNvbGxlY3QoIHsgbmV3IEZpbGUoIGl0LCAnYXNjaWlkb2MnKSB9ICkuZmxhdHRlbigpLmZpbmRBbGwoIHsgaXQuaXNGaWxlKCkgfSApCisgIGlmKCAhc2tpcEFzY2lpZG9jSWZBYnNlbnQgJiYgdmVyc2lvbiAhPSAnMCcgJiYgIXZlcnNpb24uY29udGFpbnMoICdTTkFQU0hPVCcgKSApIHsKKyAgICBwcm9qZWN0LmxvZ2dlci5kZWJ1ZyAnQXNjaWlkb2MgdGFza3MgZm9yY2VkIGJlY2F1c2UgdmVyc2lvbiBpcyBuby0wIGFuZCBuby1TTkFQU0hPVCwgaG9wZSB5b3UgaGF2ZSBBc2NpaWRvYyBpbnN0YWxsZWQnCisgICAgcmV0dXJuIHRydWUKKyAgfQorICBpZiggIXByZXNlbnQgKSB7CisgICAgcHJvamVjdC5sb2dnZXIud2FybiAnQXNjaWlkb2Mgbm90IGZvdW5kIGluIFBBVEgsIG1hbnVhbCB0YXNrcyB3aWxsIHNraXAsIHBsZWFzZSBpbnN0YWxsIGh0dHA6Ly93d3cubWV0aG9kcy5jby5uei9hc2NpaWRvYy8nCisgIH0KKyAgcHJlc2VudAorfQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9jb25mL2FzY2lpZG9jLmNvbmYgYi9tYW51YWwvc3JjL2NvbmYvYXNjaWlkb2MuY29uZgppbmRleCAxNjRiMmJiLi5jMzAxYzZkIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2NvbmYvYXNjaWlkb2MuY29uZgorKysgYi9tYW51YWwvc3JjL2NvbmYvYXNjaWlkb2MuY29uZgpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBbbWlzY2VsbGFuZW91c10KIHRhYnNpemU9NAogCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2NvbmYvZG9jYm9vay5jb25mIGIvbWFudWFsL3NyYy9jb25mL2RvY2Jvb2suY29uZgppbmRleCBlNjkwMjg3Li4xMmYyYjAwIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2NvbmYvZG9jYm9vay5jb25mCisrKyBiL21hbnVhbC9zcmMvY29uZi9kb2Nib29rLmNvbmYKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogW2ltYWdlLWlubGluZW1hY3JvXQogPGlubGluZW1lZGlhb2JqZWN0PgogICA8aW1hZ2VvYmplY3Q+CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2NvbmYvZG9jYm9vazQ1LmNvbmYgYi9tYW51YWwvc3JjL2NvbmYvZG9jYm9vazQ1LmNvbmYKaW5kZXggYmUwODRhMC4uNjM2YjAzOSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9jb25mL2RvY2Jvb2s0NS5jb25mCisrKyBiL21hbnVhbC9zcmMvY29uZi9kb2Nib29rNDUuY29uZgpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiAjCiAjIGRvY2Jvb2s0NS5jb25mCiAjCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2NvbmYvbGlua2VkaW1hZ2VzLmNvbmYgYi9tYW51YWwvc3JjL2NvbmYvbGlua2VkaW1hZ2VzLmNvbmYKaW5kZXggZDY4MThjZS4uNmYwYjU2MiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9jb25mL2xpbmtlZGltYWdlcy5jb25mCisrKyBiL21hbnVhbC9zcmMvY29uZi9saW5rZWRpbWFnZXMuY29uZgpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBbaW1hZ2UtYmxvY2ttYWNyb10KIDxmaWd1cmV7aWQ/IGlkPSJ7aWR9In17cm9sZT8gcm9sZT0ie3JvbGV9In17cmVmdGV4dD8geHJlZmxhYmVsPSJ7cmVmdGV4dH0ifXtwZ3dpZGUtb3B0aW9uPyBwZ3dpZGU9IjEifT48dGl0bGU+e3RpdGxlfTwvdGl0bGU+CiB7dGl0bGUlfTxpbmZvcm1hbGZpZ3VyZXtpZD8gaWQ9IntpZH0ifXtyb2xlPyByb2xlPSJ7cm9sZX0ifXtyZWZ0ZXh0PyB4cmVmbGFiZWw9IntyZWZ0ZXh0fSJ9PntwZ3dpZGUtb3B0aW9uPzw/ZGJmbyBwZ3dpZGU9IjEiPz59CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2NvbmYveGh0bWwuY29uZiBiL21hbnVhbC9zcmMvY29uZi94aHRtbC5jb25mCmluZGV4IDlmMzdkZWEuLmMwNmE0Y2EgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvY29uZi94aHRtbC5jb25mCisrKyBiL21hbnVhbC9zcmMvY29uZi94aHRtbC5jb25mCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIEFTQ0lJRE9DX09QVFMgPSAnLS1hdHRyaWJ1dGUgZG9jaW5mbzEgLS1hdHRyaWJ1dGU9aWNvbnMgLS1kb2N0eXBlIGJvb2snCiBGT1BfT1BUUyA9ICcnCiBYU0xUUFJPQ19PUFRTID0gJy0teGluY2x1ZGUnCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvcmVmZXJlbmNlL2RvY2luZm8ueG1sIGIvbWFudWFsL3NyYy9kb2NzL3JlZmVyZW5jZS9kb2NpbmZvLnhtbAppbmRleCA0OGYzNmM2Li4yOGRmMWY1IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvcmVmZXJlbmNlL2RvY2luZm8ueG1sCisrKyBiL21hbnVhbC9zcmMvZG9jcy9yZWZlcmVuY2UvZG9jaW5mby54bWwKQEAgLTEsMTEgKzEsMjcgQEAKKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxhdXRob3Jncm91cD4KLSAgPGNvcnBhdXRob3I+VGhlIFFpNGogQ29tbXVuaXR5CisgIDxjb3JwYXV0aG9yPlRoZSBaZXN04oSiIENvbW11bml0eQogICA8L2NvcnBhdXRob3I+CiA8L2F1dGhvcmdyb3VwPgogCiA8Y29weXJpZ2h0PgogPHllYXI+MjAxMTwveWVhcj4KLTxob2xkZXI+UWk0aiBDb21tdW5pdHk8L2hvbGRlcj4KKzxob2xkZXI+WmVzdOKEoiBDb21tdW5pdHk8L2hvbGRlcj4KIDwvY29weXJpZ2h0PgogCiA8bGVnYWxub3RpY2U+CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvcmVmZXJlbmNlL2luZGV4LnR4dCBiL21hbnVhbC9zcmMvZG9jcy9yZWZlcmVuY2UvaW5kZXgudHh0CmluZGV4IDJkZTg3YzcuLjBiMmQzOTcgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy9yZWZlcmVuY2UvaW5kZXgudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy9yZWZlcmVuY2UvaW5kZXgudHh0CkBAIC0xLDUgKzEsMjQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW3JlZmVyZW5jZS1kb2N1bWVudGF0aW9uLFJlZmVyZW5jZSBNYW51YWxdXQotPSBRaTRqdntyZXZudW1iZXJ9IFJlZmVyZW5jZSBNYW51YWwgPQorPSBBcGFjaGUgWmVzdOKEoiB2e3Jldm51bWJlcn0gUmVmZXJlbmNlIE1hbnVhbCA9CiAKIDpxaTRqLXZlcnNpb246IHtyZXZudW1iZXJ9CiA6cWk0ai1idWlsZG51bWJlcjoge3Jldm51bWJlcn0KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvZG9jaW5mby54bWwgYi9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2RvY2luZm8ueG1sCmluZGV4IDZhZTVlMjYuLjdjM2FlOTcgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvZG9jaW5mby54bWwKKysrIGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9kb2NpbmZvLnhtbApAQCAtMSwxMSArMSwyNyBAQAorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGF1dGhvcmdyb3VwPgotICA8Y29ycGF1dGhvcj5UaGUgUWk0aiBDb21tdW5pdHkKKyAgPGNvcnBhdXRob3I+VGhlIFplc3TihKIgQ29tbXVuaXR5CiAgIDwvY29ycGF1dGhvcj4KIDwvYXV0aG9yZ3JvdXA+CiAKIDxjb3B5cmlnaHQ+CiAgIDx5ZWFyPjIwMTE8L3llYXI+Ci0gIDxob2xkZXI+UWk0aiBDb21tdW5pdHk8L2hvbGRlcj4KKyAgPGhvbGRlcj5aZXN04oSiIENvbW11bml0eTwvaG9sZGVyPgogPC9jb3B5cmlnaHQ+CiAKIDxsZWdhbG5vdGljZT4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tYXNzZW1ibHktYXBwbGljYXRpb24udHh0IGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1hc3NlbWJseS1hcHBsaWNhdGlvbi50eHQKaW5kZXggZGNiNTIwYy4uMDVlMmFkNyAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1hc3NlbWJseS1hcHBsaWNhdGlvbi50eHQKKysrIGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1hc3NlbWJseS1hcHBsaWNhdGlvbi50eHQKQEAgLTIzLDEzICsyMywxMyBAQAogCiBpbmNsdWRlOjouLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQogCi1BdCBydW50aW1lIHlvdSB3aWxsIG5lZWQgdGhlIENvcmUgUnVudGltZSBhcnRpZmFjdCB0b28uIFNlZSB0aGUgPDxob3d0by1kZXBlbmQtb24tcWk0aj4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgorQXQgcnVudGltZSB5b3Ugd2lsbCBuZWVkIHRoZSBDb3JlIFJ1bnRpbWUgYXJ0aWZhY3QgdG9vLiBTZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXplc3Q+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KIAogPT0gQmFzaWNzID09CiAKLUZpcnN0IGxldCdzIHJlY2FwIHRoZSBzdHJ1Y3R1cmFsIHJlcXVpcmVtZW50cyBvZiBRaTRqOworRmlyc3QgbGV0J3MgcmVjYXAgdGhlIHN0cnVjdHVyYWwgcmVxdWlyZW1lbnRzIG9mIFplc3Q7CiAKLSAgICAqIFRoZXJlIGlzIG9uZSBhbmQgb25seSBvbmUgQXBwbGljYXRpb24gaW5zdGFuY2UgcGVyIFFpNGogUnVudGltZS4KKyAgICAqIFRoZXJlIGlzIG9uZSBhbmQgb25seSBvbmUgQXBwbGljYXRpb24gaW5zdGFuY2UgcGVyIFplc3TihKIgUnVudGltZS4KICAgICAqIEV2ZXJ5IEFwcGxpY2F0aW9uIG11c3QgY29udGFpbiBvbmUgb3IgbW9yZSBMYXllcnMuCiAgICAgKiBBbGwgQ29tcG9zaXRlcyBtdXN0IGJlIGRlY2xhcmVkIGluIG9uZSBvciBtb3JlIE1vZHVsZXMuCiAgICAgKiBFYWNoIE1vZHVsZSBiZWxvbmcgdG8gYSBMYXllci4KQEAgLTQwLDcgKzQwLDcgQEAKIAogPT0gQXBwbGljYXRpb24gPT0KIAotVGhlIGZpcnN0IG9uZSBtZWFucyB0aGF0IGZvciBlYWNoIFFpNGogUnVudGltZSB5b3Ugc3RhcnQsIHRoZXJlIHdpbGwgYmUgZXhhY3RseSBvbmUgYXBwbGljYXRpb24uIEFzIGZhciBhcyB3ZSBrbm93LCBRaTRqCitUaGUgZmlyc3Qgb25lIG1lYW5zIHRoYXQgZm9yIGVhY2ggWmVzdOKEoiBSdW50aW1lIHlvdSBzdGFydCwgdGhlcmUgd2lsbCBiZSBleGFjdGx5IG9uZSBhcHBsaWNhdGlvbi4gQXMgZmFyIGFzIHdlIGtub3csIFplc3QKIGlzIGZ1bGx5IGlzb2xhdGVkLCBtZWFuaW5nIHRoZXJlIGFyZSBubyBzdGF0aWMgbWVtYmVycyBiZWluZyBwb3B1bGF0ZWQgYW5kIHN1Y2guCiAKID09IExheWVycyA9PQpAQCAtNDksNyArNDksNyBAQAogd2hpdGVib2FyZHMgKG9yIGV2ZW4gYmxhY2sgYm9hcmRzIGZvciB0aG9zZSBvbGQgZW5vdWdoKSwgYW5kIHNvbWV0aW1lcyBvcmdhbml6ZWQgdGhlIGNvZGViYXNlcyBhbG9uZyBzdWNoIGJvdW5kYXJpZXMuCiBCdXQsIHRoZXJlIGhhcyBiZWVuIGxpdHRsZSBlZmZvcnQgdG8gZW5mb3JjZSB0aGUgTGF5ZXIgbWVjaGFuaXNtIGluIGNvZGUsIGFsdGhvdWdoIGl0IGlzIGFuIGV4dHJlbWVseSBwb3dlcmZ1bAogY29uc3RydWN0LiBGaXJzdCBvZiBhbGwgaXQgaW1wbGllcyBkaXJlY3Rpb25hbCBkZXBlbmRlbmN5IGFuZCBhIGhpZ2ggZGVncmVlIG9mIG9yZGVyLCBzcGFnZXR0aSBjb2RlIGlzIHJlZHVjZWQgaWYKLXN1Y2Nlc3NmdWxseSBpbXBsZW1lbnRlZC4gRm9yIFFpNGosIGl0IG1lYW5zIHRoYXQgd2UgY2FuIHJlc3RyaWN0IGFjY2VzcyB0byBDb21wb3NpdGUgYW5kIE9iamVjdCBkZWNsYXJhdGlvbnMsIHNvIHRoYXQKK3N1Y2Nlc3NmdWxseSBpbXBsZW1lbnRlZC4gRm9yIFplc3QsIGl0IG1lYW5zIHRoYXQgd2UgY2FuIHJlc3RyaWN0IGFjY2VzcyB0byBDb21wb3NpdGUgYW5kIE9iamVjdCBkZWNsYXJhdGlvbnMsIHNvIHRoYXQKIGhpZ2hlciBsYXllcnMgY2FuIG5vdCByZWFjaCB0aGVtIGluY2lkZW50YWxseS4gWW91IGNhbiBlbmZvcmNlIGFyY2hpdGVjdHVyZSB0byBhIGhpZ2ggZGVncmVlLiBZb3UgY2FuIHJlcXVpcmUgYWxsCiBjcmVhdGlvbiBvZiBjb21wb3NpdGVzIHRvIGdvIHRocm91Z2ggYW4gZXhwb3NlZCBGYWN0b3J5LCB3aGljaCBkb2Vzbid0IHJlcXVpcmUgdGhlIENvbXBvc2l0ZSB0byBiZSBwdWJsaWMuIEFuZCBzbyBvbi4KIExheWVycyBoYXZlIGhpZXJhcmNoeSwgaS5lLiBvbmUgbGF5ZXIgaXMgdG9wIG9mIG9uZSBvciBtb3JlIGxheWVycywgYW5kIGlzIGJlbG93IG9uZSBvciBtb3JlIGxheWVycywgZXhjZXB0IGZvciB0aGUKQEAgLTU4LDcgKzU4LDcgQEAKIAogPT0gTW9kdWxlcyA9PQogCi1UaGUgTW9kdWxlIGNvbmNlcHQgaGFzIGFsc28gYmVlbiBhcm91bmQgZm9yZXZlci4gQW5kIGluIFFpNGogd2UgYWxzbyBtYWtlcyB0aGUgTW9kdWxlcyBleHBsaWNpdC4gRWFjaCBNb2R1bGUgYmVsb25nIHRvIGEKK1RoZSBNb2R1bGUgY29uY2VwdCBoYXMgYWxzbyBiZWVuIGFyb3VuZCBmb3JldmVyLiBBbmQgaW4gWmVzdOKEoiB3ZSBhbHNvIG1ha2VzIHRoZSBNb2R1bGVzIGV4cGxpY2l0LiBFYWNoIE1vZHVsZSBiZWxvbmcgdG8gYQogTGF5ZXIsIGFuZCBmb3IgZWFjaCBNb2R1bGUgeW91IGRlY2xhcmUgdGhlIENvbXBvc2l0ZSBhbmQgT2JqZWN0IHR5cGVzIGZvciB0aGF0IE1vZHVsZSwgdG9nZXRoZXIgd2l0aCBhIFZpc2liaWxpdHkgcnVsZSwKIG9uZSBvZjsgYXBwbGljYXRpb24sIGxheWVyLCBtb2R1bGUuCiAKQEAgLTEwOSw3ICsxMDksNyBAQAogSG93IHRvIHN0cnVjdHVyZSB5b3VyIGNvZGUgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIHNlY3Rpb24uIElmIHlvdSBhcmUgYW4gZXhwZXJpZW5jZWQgZGVzaWduZXIsIHlvdSB3aWxsIGhhdmUgZG9uZQogdGhhdCBiZWZvcmUsIGFuZCB5b3UgbWF5IGhhdmUgc3RhcnRlZCBvdXQgd2l0aCBnb29kIGludGVudGlvbnMgYXQgdGltZXMgb25seSB0byBmaW5kIHlvdXJzZWxmIGluIGEgc3BhZ2hldHRpIHN3YW1wCiBsYXRlciwgb3IgcGVyaGFwcyBpbiB0aGUgYWxzbyBmYW1vdXMgIkNsZWFyIGFzIENsYXkiIG9yICJCYWxsIChib3dsPykgb2YgTXVkIi4gRWl0aGVyIHdheSwgeW91IG5lZWQgdG8gZHJhdyBvbiB5b3VyCi1leHBlcmllbmNlIGFuZCBjb21lIHVwIHdpdGggZ29vZCBzdHJ1Y3R1cmUgdGhhdCBRaTRqIGxldHMgeW91IGVuZm9yY2UuCitleHBlcmllbmNlIGFuZCBjb21lIHVwIHdpdGggZ29vZCBzdHJ1Y3R1cmUgdGhhdCBaZXN04oSiIGxldHMgeW91IGVuZm9yY2UuCiAKIFNvLCBmb3IgdGhlIHNha2Ugb2YgZWR1Y2F0aW9uLCB3ZSBhcmUgZ29pbmcgdG8gbG9vayBhdCBhbiBhcHBsaWNhdGlvbiB0aGF0IGNvbnNpc3RzIG9mIG1hbnkgbGF5ZXJzLCBlYWNoIHdpdGggYSBmZXcKIG1vZHVsZXMuIFNlZSBwaWN0dXJlIGJlbG93LgpAQCAtMTI3LDcgKzEyNyw3IEBACiAtLS0tLS0tLS0tLQogCiBUaGUgYWJvdmUgaXMgdGhlIGJhc2ljIHNldHVwIG9uIGhvdyB0byBzdHJ1Y3R1cmUgYSByZWFsLXdvcmxkIGFwcGxpY2F0b24sIHVubGVzcyB5b3UgaW50ZW5kIHRvIG1lc3Mgd2l0aCB0aGUKLWltcGxlbWVudGF0aW9ucyBvZiB2YXJpb3VzIFFpNGogc3lzdGVtcyAoeWVzIHRoZXJlIGFyZSBob29rcyBmb3IgdGhhdCB0b28pLCBidXQgdGhhdCBpcyBkZWZpbml0ZWx5IGJleW9uZCB0aGUgc2NvcGUgb2YKK2ltcGxlbWVudGF0aW9ucyBvZiB2YXJpb3VzIFplc3TihKIgc3lzdGVtcyAoeWVzIHRoZXJlIGFyZSBob29rcyBmb3IgdGhhdCB0b28pLCBidXQgdGhhdCBpcyBkZWZpbml0ZWx5IGJleW9uZCB0aGUgc2NvcGUgb2YKIHRoaXMgdHV0b3JpYWwuCiAKIE5vdywgdGhlIGNyZWF0ZVh5ekxheWVyKCkgbWV0aG9kcyB3ZXJlIGV4Y2x1ZGVkIHRvIGtlZXAgdGhlIHNhbXBsZSBjcmlzcCBhbmQgZWFzeSB0byBmb2xsb3cuIExldCdzIHRha2UgYSBsb29rIGF0IHdoYXQKQEAgLTE1OCw1ICsxNTgsNSBAQAogdGFnPXNodXRkb3duCiAtLS0tLS0tLS0tLQogCi1UaGlzIGNvbmNsdWRlcyB0aGlzIHR1dG9yaWFsLiBXZSBoYXZlIGxvb2tlZCBob3cgdG8gZ2V0IHRoZSBpbml0aWFsIFFpNGogcnVudGltZSBnb2luZywgaG93IHRvIGRlY2xhcmUgdGhlIGFzc2VtYmx5CitUaGlzIGNvbmNsdWRlcyB0aGlzIHR1dG9yaWFsLiBXZSBoYXZlIGxvb2tlZCBob3cgdG8gZ2V0IHRoZSBpbml0aWFsIFplc3TihKIgcnVudGltZSBnb2luZywgaG93IHRvIGRlY2xhcmUgdGhlIGFzc2VtYmx5CiBmb3IgYXBwbGljYXRpb24gbW9kZWwgY3JlYXRpb24gYW5kIGZpbmFsbHkgdGhlIGFjdGl2YXRpb24gb2YgdGhlIG1vZGVsIGl0c2VsZi4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tYnVpbGQtc3lzdGVtLnR4dCBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tYnVpbGQtc3lzdGVtLnR4dAppbmRleCA5YzU1MWM5Li5hYjJkM2ZhIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWJ1aWxkLXN5c3RlbS50eHQKKysrIGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1idWlsZC1zeXN0ZW0udHh0CkBAIC0xLDI0ICsxLDQzIEBACi1bW2J1aWxkLXN5c3RlbSxCdWlsZCBTeXN0ZW1dXQotPSBCdWlsZCBTeXN0ZW0gPQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLVRoaXMgdHV0b3JpYWwgaXMgaW50ZW5kZWQgZm9yIGRldmVsb3BwZXJzIHdobyB3YW50IHRvIGJ1aWxkIHRoZSBRaTRqIFNESyB0aGVtc2VsdmVzLgotSXQgZGVzY3JpYmUgdGhlIFFpNGogU0RLIEJ1aWxkIFN5c3RlbSBmcm9tIGNvbXBpbGF0aW9uIHRvIHB1YmxpY2F0aW9uIG9mIGFydGlmYWN0cyBmb3IgY29uc3VtcHRpb24gYnkgb3RoZXIKK1tbYnVpbGQtc3lzdGVtLEJ1aWxkIFN5c3RlbV1dCis9IFplc3TihKIgQnVpbGQgU3lzdGVtID0KKworVGhpcyB0dXRvcmlhbCBpcyBpbnRlbmRlZCBmb3IgZGV2ZWxvcHBlcnMgd2hvIHdhbnQgdG8gYnVpbGQgdGhlIFplc3TihKIgU0RLIHRoZW1zZWx2ZXMuCitJdCBkZXNjcmliZSB0aGUgWmVzdOKEoiBTREsgQnVpbGQgU3lzdGVtIGZyb20gY29tcGlsYXRpb24gdG8gcHVibGljYXRpb24gb2YgYXJ0aWZhY3RzIGZvciBjb25zdW1wdGlvbiBieSBvdGhlcgogYXBwbGljYXRpb25zLgogCi1JZiBpbnN0ZWFkIHlvdSB3YW50IHRvIHNldHVwIHlvdXIgcHJvamVjdCBidWlsZCBzeXN0ZW0gdG8gZGVwZW5kIG9uIG1vZHVsZXMgb2YgdGhlIFFpNGogU0RLIHNlZSB0aGUKLTw8aG93dG8tZGVwZW5kLW9uLXFpNGosZGVkaWNhdGVkIHR1dG9yaWFsPj4uCitJZiBpbnN0ZWFkIHlvdSB3YW50IHRvIHNldHVwIHlvdXIgcHJvamVjdCBidWlsZCBzeXN0ZW0gdG8gZGVwZW5kIG9uIG1vZHVsZXMgb2YgdGhlIFplc3TihKIgU0RLIHNlZSB0aGUKKzw8aG93dG8tZGVwZW5kLW9uLXplc3QsZGVkaWNhdGVkIHR1dG9yaWFsPj4uCiAKIAogPT0gR3JhZGxlID09CiAKIE5PVEU6IEFsbCBtYWpvciBKYXZhIElERXMgaGF2ZSBncmVhdCBHcmFkbGUgc3VwcG9ydC4KLVZpc2l0IHRoZSBodHRwOi8vd3d3LmdyYWRsZS5vcmcvdG9vbGluZ1tHcmFkbGUgVG9vbGluZ10gcGFnZSB0byBsZWFybiBob3cgdG8gaW1wb3J0IHRoZSBRaTRqIFNESyBidWlsZCBpbnRvIHlvdXIKK1Zpc2l0IHRoZSBodHRwOi8vd3d3LmdyYWRsZS5vcmcvdG9vbGluZ1tHcmFkbGUgVG9vbGluZ10gcGFnZSB0byBsZWFybiBob3cgdG8gaW1wb3J0IHRoZSBaZXN04oSiIFNESyBidWlsZCBpbnRvIHlvdXIKIGZhdm9yaXRlIElERS4KIAotUWk0aiBjb21tdW5pdHkgbWlncmF0ZWQgYXdheSBmcm9tIE1hdmVuIGFmdGVyIHNldmVyYWwgeWVhcnMgb2YgZnJ1c3RyYXRpb24sIGVzcGVjaWFsbHkgYXJvdW5kIHJlbGVhc2UgbWFuYWdlbWVudCwKK1plc3TihKIgY29tbXVuaXR5IG1pZ3JhdGVkIGF3YXkgZnJvbSBNYXZlbiBhZnRlciBzZXZlcmFsIHllYXJzIG9mIGZydXN0cmF0aW9uLCBlc3BlY2lhbGx5IGFyb3VuZCByZWxlYXNlIG1hbmFnZW1lbnQsCiB2ZXJzaW9uaW5nIGFuZCBjcm9zcy1tb2R1bGUgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGlzc3VlcywgaW4gRmViIDIwMTEuCiBUaGUgdG9vbCBvZiBjaG9pY2UgaXMgbm93IEdyYWRsZSwgYW5kIGl0IGRvZXNuJ3QgcmVxdWlyZSBhbnkgaW5zdGFsbGF0aW9uLCB0aGVyZSBhcmUgK2dyYWRsZXcrIGFuZCArZ3JhZGxldy5iYXQrIGluCi10aGUgcm9vdCBmb2xkZXIgb2YgdGhlIFFpNGogU0RLIHRoYXQgd2lsbCBib290c3RyYXAgR3JhZGxlIGlmIG5vdCBkb25lIHNvIGFscmVhZHkuCit0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIFplc3TihKIgU0RLIHRoYXQgd2lsbCBib290c3RyYXAgR3JhZGxlIGlmIG5vdCBkb25lIHNvIGFscmVhZHkuCiAKIElmIHlvdSBhcmUgbmV3IHRvIEdyYWRsZSwgeW91IHNob3VsZCBrZWVwIHRoZSBodHRwOi8vd3d3LmdyYWRsZS5vcmcvZG9jdW1lbnRhdGlvbltkb2N1bWVudGF0aW9uXSBhdCBoYW5kcy4KIApAQCAtMjksMTMgKzQ4LDIwIEBACiAKID09IFJvb3QgcHJvamVjdCB0YXNrcyA9PQogCi1UaGUgUWk0aiBTREsgcm9vdCBwcm9qZWN0IGhhcyB0YXNrcyB0aGF0IHdvcmsgd2l0aCB0aGUgd2hvbGUgU0RLLgorVGhlIFplc3TihKIgU0RLIHJvb3QgcHJvamVjdCBoYXMgdGFza3MgdGhhdCB3b3JrIHdpdGggdGhlIHdob2xlIFNESy4KIFRoZSBkZWZhdWx0IGJ1aWxkLCB0cmlnZ2VyZWQgd2hlbiBydW5uaW5nIGdyYWRsZSB3aXRob3V0IGFueSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBjb21waWxlcyB0aGUgY29kZSBhbmQgcnVuIHRoZQogdGVzdHMsIGJ1dCBub3RoaW5nIGVsc2UuCiBBIHF1aWNrIHdheSB0byBjaGVjayB0aGF0IG5vdGhpbmcgYnJva2UuCiAKIEhlcmUgYXJlIHNvbWUgb2YgdGhlc2VzIGdsb2JhbCB0YXNrcyB3ZSBkZWZpbmVkOgogCitnb09mZmxpbmU6OgorKworLS0KK1Jlc29sdmUsIGRvd25sb2FkIGFuZCBjYWNoZSBhbGwgbmVlZGVkIGRlcGVuZGVuY2llcy4KK1VzZWZ1bCB0byBnbyBvZmZsaW5lLgorLS0KKwogY2xlYW46OgogKwogLS0KQEAgLTQ2LDcgKzcyLDcgQEAKICsKIC0tCiBSdW4gdGhlIHRlc3RzIGFuZCBvdGhlciBjaGVja3MgbGlrZSBjaGVja3N0eWxlLgotUmVwb3J0cyBhcmUgZ2VuZXJhdGVkIGluICtxaTRqLXNkay9idWlsZC9yZXBvcnRzKy4KK1JlcG9ydHMgYXJlIGdlbmVyYXRlZCBpbiArYnVpbGQvcmVwb3J0cysuCiAtLQogCiBpbnN0YWxsOjoKQEAgLTYxLDE0ICs4NywxNCBAQAogKwogLS0KIFByb2R1Y2VzIGFsbCB0aGUgYXJjaGl2ZXMsIGphdmFkb2NzLCBtYW51YWxzIGFuZCB3ZWJzaXRlIGNvbnRlbnQuCi1UaGUgb3V0cHV0IGlzIGdlbmVyYXRlZCB0byArcWk0ai1zZGsvYnVpbGQrLgorVGhlIG91dHB1dCBpcyBnZW5lcmF0ZWQgdG8gK2J1aWxkKy4KIC0tCiAKIHJlbGVhc2U6OgogKwogLS0KIFVwbG9hZHMgdGhlIHJlbGVhc2UgYXJ0aWZhY3RzIHRvIHRoZSBkaXN0cmlidXRpb24gc2VydmVycyBhbmQgY3JlYXRlcyB0aGUgcmVsZWFzZSBvdXRwdXQgaW50byB0aGUKLStxaTRqLXNkay9idWlsZC9kaXN0cmlidXRpb25zKyBkaXJlY3RvcnkuCisrYnVpbGQvZGlzdHJpYnV0aW9ucysgZGlyZWN0b3J5LgogLS0KIAogCkBAIC04Myw3ICsxMDksNyBAQAogLS0tLQogCiBUaGlzIGV4YW1wbGUgd2lsbCBvdXRwdXQgYWxsIGdyYWRsZSB0YXNrcyBhdmFpbGFibGUgaW4gdGhlICt0ZXN0cy9wZXJmb3JtYW5jZSsgbW9kdWxlIHdoZXJlIHlvdSBzaG91bGQgZmluZAotdGhlICt0ZXN0UGVyZisgdGFzayB0aGF0IHJ1biB0aGUgUWk0aiBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlLgordGhlICt0ZXN0UGVyZisgdGFzayB0aGF0IHJ1biB0aGUgWmVzdOKEoiBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlLgogCiAKID09IFZlcnNpb25zID09CkBAIC0xMDUsNDAgKzEzMSwxOCBAQAogCiA9PSBUZXN0cyA9PQogCi1OT1RFOiBTZWUgdGhlIGh0dHA6Ly9xaTRqLm9yZy9jb21tdW5pdHkvY2kuaHRtbFtRaTRqIENvbnRpbnVvdXMgSW50ZWdyYXRpb25dIGZvciBjdXJyZW50IHRlc3RzIHJlc3VsdHMKK05PVEU6IFNlZSB0aGUgaHR0cHM6Ly9idWlsZHMuYXBhY2hlLm9yZy92aWV3L1MtWi92aWV3L1plc3QvW1plc3TihKIgQ29udGludW91cyBJbnRlZ3JhdGlvbl0gZm9yIGN1cnJlbnQgdGVzdHMgcmVzdWx0cwogCi0vLyBUT0RPCi0KLT09PSBSZWdyZXNzaW9uIHRlc3RzID09PQotCi1UaGV5IGFyZSBub3QgcGFydCBvZiB0aGUgZGVmYXVsdCBidWlsZC4KLQotLy8gVE9ETwotCi0KLT09PSBQZXJmb3JtYW5jZSB0ZXN0cyA9PT0KLQotUGVyZm9ybWFuY2UgdGVzdHMgcHJvdmlkZSBwZXJmb3JtYW5jZSBtZXN1cmVtZW50cyBmb3IgdHlwaWNhbCBRaTRqIHVzZSBjYXNlcy4KLVRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkLgotCi0vLyBUT0RPCi0KLQotPT09IENvbXBsZXggdGVzdHMgPT09Ci0KLUNvbXBsZXggdGVzdHMgYXJlIHRoZSBvbmVzIHRoYXQgcmVxdWlyZXMgbWFudWFsIG9wZXJhdGlvbiB0byBiZSBleGVjdXRlZC4KLVRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkLgotCi0vLyBUT0RPCi0KK1VuaXQgYW5kIGludGVncmF0aW9uIHRlc3RzIGFyZSBsb2NhdGVkIG5lYXIgdGhlIGNvZGUgdW5kZXIgdGVzdC4KK1lvdSdsbCBmaW5kIHRoZXNlcyB0ZXN0cyBhY3Jvc3MgdGhlIHdob2xlIFNESy4KIAogPT09IFVuaXQgdGVzdHMgcmVxdWlyaW5nIGV4dGVybmFsIHNlcnZpY2VzID09PQogCi1OT1RFOiBUaGUgSFRNTCB0ZXN0IHJlcG9ydHMgZ2VuZXJhdGVkIGJ5IEdyYWRsZSBzaG93IHNraXBwZWQgdGVzdHMuCi0KIEFtb25nIHVuaXQgdGVzdHMsIHNvbWUgcmVxdWlyZSBhbiBleHRlcm5hbCBzZXJ2aWNlIHRvIGJlIHJ1bi4KIEZvciBleGFtcGxlLCB0aGUgTW9uZ29EQiBFbnRpdHlTdG9yZSBleHRlbnNpb24gcmVxdWlyZXMgYW4gYWN0dWFsIE1vbmdvREIgc2VydmVyIHRvIHJ1biBpdHMgdGVzdHMuCiAKK05PVEU6IFRoZSBIVE1MIHRlc3QgcmVwb3J0cyBnZW5lcmF0ZWQgYnkgR3JhZGxlIHNob3cgc2tpcHBlZCB0ZXN0cy4KKwogQWxsIHRob3NlcyB0ZXN0cyBzaG91bGQgYmUgcGFydCBvZiB0aGUgZGVmYXVsdCBidWlsZCBhbmQgY2hlY2sgaWYgdGhlIHNlcnZpY2UgaXMgYXZhaWxhYmxlIGF0IGl0cyBkZWZhdWx0IGxvY2F0aW9uCiBvbiArbG9jYWxob3N0KyBhbmQgc2tpcCBpZiBub3QuCiBUaGlzIGlzIGVhc2lseSBhY2hpZXZlZCB1c2luZyBodHRwOi8vanVuaXQuc291cmNlZm9yZ2UubmV0L2phdmFkb2Mvb3JnL2p1bml0L0Fzc3VtZS5odG1sW0pVbml0IGFzc3VtcHRpb25zXS4KQEAgLTE1MiwxMyArMTU2LDQyIEBACiAtIFBvc3RncmVTUUwgZm9yICtleHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbCsgYW5kICtleHRlbnNpb25zL2luZGV4aW5nLXNxbCsgKG5lZWQgc2V0dXAsIHNlZSB0ZXN0IHNvdXJjZSkKIC0gTXlTUUwgZm9yICtleHRlbnNpb25zL2VudGl0eXN0b3JlLXNxbCsgKG5lZWQgc2V0dXAsIHNlZSB0ZXN0IHNvdXJjZSkKIAorPT09IFBlcmZvcm1hbmNlIHRlc3RzID09PQogCi09PSBSZWxlYXNpbmcgdGhlIFFpNGogU0RLID09CitQZXJmb3JtYW5jZSB0ZXN0cyBwcm92aWRlIHBlcmZvcm1hbmNlIG1lc3VyZW1lbnRzIGZvciB0eXBpY2FsIFplc3TihKIgdXNlIGNhc2VzLgorVGhleSBhcmUgbm90IHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGQgYW5kIGFyZSBsb2NhdGVkIGluIHRoZSBgdGVzdHMvcGVyZm9ybWFuY2VgIGRpcmVjdG9yeSBvZiB0aGUgU0RLLgorCitUaGV5IGNhbiBiZSBydW4gd2l0aCB0aGUgZm9sbG93aW5nIEdyYWRsZSBjb21tYW5kOgorCitbc291cmNlLGJhc2hdCistLS0tLS0tLS0tLQorLi9ncmFkbGV3IDpvcmcucWk0ai50ZXN0czpvcmcucWk0ai50ZXN0LnBlcmZvcm1hbmNlOnRlc3RQZXJmCistLS0tLS0tLS0tLQorCitSZXN1bHRzIHdpbGwgdGhlbiBiZSBhdmFpbGFibGUgaW4gdGhlIHRlc3QgcmVwb3J0cy4KKworCis9PSBEb2N1bWVudGF0aW9uIGdlbmVyYXRpb24gPT0KKworVGhlIGJ1aWxkIGdlbmVyYXRlcyBhIGRvY3VtZW50YXRpb24gbWluaXNpdGU6CisKK1tzb3VyY2UsYmFzaF0KKy0tLS0tLS0tLS0tCisuL2dyYWRsZXcgLXAgbWFudWFsIHdlYnNpdGUKKy0tLS0tLS0tLS0tCisKK091dHB1dCBpcyBpbiBgfi9tYW51YWwvYnVpbGQvZG9jcy93ZWJzaXRlYC4KKworWW91J2xsIG5lZWQgQXNjaWlkb2MgYW5kIGRvY2Jvb2steHNsIGluc3RhbGxlZC4KKworCisKKz09IEJ1aWxkIGZvciByZWxlYXNlcyA9PQogCiBJTVBPUlRBTlQ6IFJlbWVtYmVyIHRoYXQgaWYgYSArdmVyc2lvbisgcHJvcGVydHkgaXMgbm90IGRlZmluZWQsIHRoZSBidWlsZCBzeXN0ZW0gd2lsbCByZWZ1c2UgdG8gbWFrZSBhIHJlbGVhc2UgYW5kIHVwbG9hZC4KIAotVGhlIFFpNGogU0RLIGJ1aWxkIHN5c3RlbSBpcyBzZXR1cCBmb3IgYW4gZWFzeSByZWxlYXNlIHByb2Nlc3MuCi1UaGlzIGlzIHZlcnkgdXNlZnVsIHRvIHRoZSBRaTRqIENvcmUgVGVhbSBidXQgY2FuIGFsc28gYmUgdXNlZnVsIHRvIHRoaXJkIHBhcnRpZXMgdGhhdCB3YW50IHRvIGN1dCBhIGluLWhvdXNlIHJlbGVhc2UuCitUaGUgWmVzdOKEoiBTREsgYnVpbGQgc3lzdGVtIGlzIHNldHVwIGZvciBhbiBlYXN5IHJlbGVhc2UgcHJvY2Vzcy4KK1RoaXMgaXMgdmVyeSB1c2VmdWwgdG8gdGhlIFplc3TihKIgQ29yZSBUZWFtIGJ1dCBjYW4gYWxzbyBiZSB1c2VmdWwgdG8gdGhpcmQgcGFydGllcyB0aGF0IHdhbnQgdG8gY3V0IGEgaW4taG91c2UgcmVsZWFzZS4KIEluIHRoaXMgcmVnYXJkLCB3ZSB0cnkgdG8gbWFrZSBldmVyeSBhc3BlY3Qgb2YgdGhlIHJlbGVhc2UgcHJvY2VzcyB1c2FibGUgZm9yIHN1Y2ggY2FzZXMuCiAKIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSByZWxlYXNlIHByb2Nlc3MuCkBAIC0xNjcsMTIgKzIwMCwxMiBAQAogCiA9PT0gUmVsZWFzZSBDcml0ZXJpYSA9PT0KIAotVGhlIFFpNGogU0RLIG1vZHVsZXMgYXJlIG9mIHZhcnlpbmcgbWF0dXJpdHkgbGV2ZWwgYW5kIHdlIHRyeSB0byBtYWludGFpbiBhIFNUQVRVUyAoK2Rldi1zdGF0dXMueG1sKykgZmlsZSBpbmRpY2F0aW5nCitUaGUgWmVzdOKEoiBTREsgbW9kdWxlcyBhcmUgb2YgdmFyeWluZyBtYXR1cml0eSBsZXZlbCBhbmQgd2UgdHJ5IHRvIG1haW50YWluIGEgU1RBVFVTICgrZGV2LXN0YXR1cy54bWwrKSBmaWxlIGluZGljYXRpbmcKIGhvdyBnb29kIHRoZSBjb2RlYmFzZSwgZG9jdW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBhcmUgZm9yIGVhY2ggb2YgdGhlIG1vZHVsZXMuIFRoaXMgaXMgaGlnaGx5IHN1YmplY3RpdmUgYW5kCiBwb3RlbnRpYWxseSBkaWZmZXJlbnQgaW5kaXZpZHVhbHMgd2lsbCBqdWRnZSB0aGlzIGRpZmZlcmVudGx5LCBidXQgYXQgbGVhc3QgaXQgZ2l2ZXMgYSBiYWxscGFyayBpZGVhIG9mIHRoZSBzaXR1YXRpb24KIGZvciBvdXIgdXNlcnMuCiAKLVRoZSBRaTRqIFNESyBidWlsZCBzeXN0ZW0gdXNlIHRoZSB2YWx1ZXMgZnJvbSB0aGUgK2Rldi1zdGF0dXMueG1sKyBmaWxlcyB0byBmaWx0ZXIgb3V0IG5vbi1yZWxlYXNhYmxlIG1vZHVsZXMgb3V0IGZvcgorVGhlIFplc3TihKIgU0RLIGJ1aWxkIHN5c3RlbSB1c2UgdGhlIHZhbHVlcyBmcm9tIHRoZSArZGV2LXN0YXR1cy54bWwrIGZpbGVzIHRvIGZpbHRlciBvdXQgbm9uLXJlbGVhc2FibGUgbW9kdWxlcyBvdXQgZm9yCiB0aGUgK2phdmFkb2NzKyBhbmQgK3VwbG9hZEFyY2hpdmVzKyByb290IHByb2plY3QgdGFza3MuCiBNb3Jlb3ZlciwgdGhlICtyZWxlYXNlKyB0YXNrIGVuc3VyZSB0aGF0IG5vIHJlbGVhc2FibGUgbW9kdWxlIGRlcGVuZHMgb24gbW9kdWxlKHMpIHRoYXQgZG9uJ3QgZml0IHRoZSByZWxlYXNlIGNyaXRlcmlhCiBhbmQgdGhyb3cgYSBkZXRhaWxlZCBleGNlcHRpb24gaWYgbmVlZCBiZS4KQEAgLTE4Myw3ICsyMTYsNyBAQAogPT09IFNpZ25pbmcgPT09CiAKIEFydGlmYWN0IHNpZ25pbmcgaXMgZG9uZSB1c2luZyBQR1AuCi1Zb3UgbmVlZCB0byBwcm92aWRlIEdyYWRsZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMKK1lvdSBuZWVkIHRvIHByb3ZpZGUgR3JhZGxlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcywgYH4vLmdyYWRsZS9ncmFkbGUucHJvcGVydGllc2AgaXMgYSBnb29kIHBsYWNlOgogCiAgICAgc2lnbmluZy5rZXlJZD1GQjc1MTk0MwogICAgIHNpZ25pbmcucGFzc3dvcmQ9Zm9vYmFyCkBAIC0yMDIsMTAgKzIzNSwxMCBAQAogQnkgZGVmYXVsdCBSRUxFQVNFUyBtdXN0IHNhdGlzZnkgUmVsZWFzZVNwZWNpZmljYXRpb24sIFNOQVBTSE9UIGRvbid0LgogUmVsZWFzZVNwZWNpZmljYXRpb24gdXNhZ2UgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYgYnkgc2V0dGluZyB0aGUgYHVwbG9hZFJlbGVhc2VTcGVjYCBwcm9wZXJ0eSB0byBmYWxzZS4KIAotQnkgZGVmYXVsdCBSRUxFQVNFUyBhbmQgU05BUEhPVFMgYXJlIHVwbG9hZGVkIHVzaW5nIFdFQkRBVi4KK0J5IGRlZmF1bHQgUkVMRUFTRVMgYW5kIFNOQVBIT1RTIGFyZSB1cGxvYWRlZCB1c2luZyBIVFRQLgogVXNlZCBXYWdvbiBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHNldHRpbmcgdGhlIGB1cGxvYWRXYWdvbmAgcHJvcGVydHkuCiAKLUJ5IGRlZmF1bHQgUkVMRUFTRVMgYW5kIFNOQVBTSE9UUyBhcmUgdXBsb2FkZWQgdG8gQ2xvdWRiZWVzLgorQnkgZGVmYXVsdCBSRUxFQVNFUyBhbmQgU05BUFNIT1RTIGFyZSB1cGxvYWRlZCB0byB0aGUgQXBhY2hlIE5leHVzLgogVGFyZ2V0IHJlcG9zaXRvcnkgY2FuIGJlIG92ZXJyaWRlbiBieSBzZXR0aW5nIHRoZSBgdXBsb2FkUmVwb3NpdG9yeWAgcHJvcGVydHkuCiAKIE5vIHVzZXJuYW1lL3Bhc3N3b3JkIGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQuCkBAIC0yMTUsNyArMjQ4LDcgQEAKIAogW3NvdXJjZSxiYXNoXQogLS0tLS0tLS0tLS0KLS4vZ3JhZGxldyB1cGxvYWRBcmNoaXZlcyAtRHZlcnNpb249Mi4wLVNOQVBTSE9UIC1QdXBsb2FkUmVsZWFzZVNwZWM9ZmFsc2UgXAorLi9ncmFkbGV3IHVwbG9hZEFyY2hpdmVzIC1EdmVyc2lvbj0zLjIuMS1TTkFQU0hPVCAtUHVwbG9hZFJlbGVhc2VTcGVjPWZhbHNlIFwKICAgICAtUHVwbG9hZFdhZ29uPXdoYXQ6ZXZlcjp3YWdvbiAtUHVwbG9hZFJlcG9zaXRvcnk9aHR0cDovL3doYXQuZXZlci5yZXBvc2l0b3J5L3VybCBcCiAgICAgLVB1cGxvYWRVc2VybmFtZT1mb28gLVB1cGxvYWRQYXNzd29yZD1iYXIKIC0tLS0tLS0tLS0tCkBAIC0yMjQsNyArMjU3LDcgQEAKIAogW3NvdXJjZSxiYXNoXQogLS0tLS0tLS0tLS0KLS4vZ3JhZGxldyB1cGxvYWRBcmNoaXZlcyAtRHZlcnNpb249Mi4wIC1QdXBsb2FkUmVwb3NpdG9yeT1maWxlOi8vL3BhdGgvdG8vbG9jYWwvcmVwb3NpdG9yeQorLi9ncmFkbGV3IHVwbG9hZEFyY2hpdmVzIC1EdmVyc2lvbj0zLjIuMSAtUHVwbG9hZFJlcG9zaXRvcnk9ZmlsZTovLy9wYXRoL3RvL2xvY2FsL3JlcG9zaXRvcnkKIC0tLS0tLS0tLS0tCiAKIFNlZSB0aGUgaHR0cDovL3d3dy5ncmFkbGUub3JnL2RvY3MvY3VycmVudC91c2VyZ3VpZGUvbWF2ZW5fcGx1Z2luLmh0bWwjd2Fnb25MaWJzW0dyYWRsZSBkb2N1bWVudGF0aW9uXSBhYm91dApkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1jb25maWd1cmUtc2VydmljZS50eHQgYi9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNvbmZpZ3VyZS1zZXJ2aWNlLnR4dAppbmRleCAzMDIyYjMzLi44Njc1MWI1IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNvbmZpZ3VyZS1zZXJ2aWNlLnR4dAorKysgYi9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNvbmZpZ3VyZS1zZXJ2aWNlLnR4dApAQCAtMTUsMTcgKzE1LDE3IEBACiAKIFtbaG93dG8tY29uZmlndXJlLXNlcnZpY2UsQ29uZmlndXJlIGEgU2VydmljZV1dCiA9IENvbmZpZ3VyZSBhIFNlcnZpY2UgPQotUWk0aiBzdXBwb3J0cyBhIENvbmZpZ3VyYXRpb24gc3lzdGVtIGZvciBzZXJ2aWNlcy4gVGhlIGNvbmZpZ3VyYXRpb24gaW5zdGFuY2UgaXRzZWxmIGlzIGFuIEVudGl0eSBhbmQgaXMgdGhlcmVmb3IKK1plc3TihKIgc3VwcG9ydHMgYSBDb25maWd1cmF0aW9uIHN5c3RlbSBmb3Igc2VydmljZXMuIFRoZSBjb25maWd1cmF0aW9uIGluc3RhbmNlIGl0c2VsZiBpcyBhbiBFbnRpdHkgYW5kIGlzIHRoZXJlZm9yCiByZWFkYWJsZSwgd3JpdGVhYmxlIGFuZCBxdWVyeWFibGUsIGp1c3QgbGlrZSBvdGhlciBFbnRpdGllcy4gVGhpcyBzaG91bGQgbWFrZSBDb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgbXVjaCBzaW1wbGVyLAogc2luY2UgeW91IGNhbiBlYXNpbHkgYnVpbGQgR1VJIHRvb2xzIHRvIGFsbG93IGVkaXRpbmcgb2YgdGhlc2UgaW4gcnVudGltZS4gSG93ZXZlciwgdG8gc2ltcGxpZnkgdGhlIGluaXRpYWwgdmFsdWVzIG9mCi10aGUgQ29uZmlndXJhdGlvbiBpbnN0YW5jZSwgUWk0aiBhbHNvIGRvZXMgdGhlIGluaXRpYWwgYm9vdHN0cmFwcGluZyBvZiB0aGUgQ29uZmlndXJhdGlvbiBlbnRpdHkgZm9yIHlvdS4gVGhpcyBIb3dUbyBpcwordGhlIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UsIFplc3TihKIgYWxzbyBkb2VzIHRoZSBpbml0aWFsIGJvb3RzdHJhcHBpbmcgb2YgdGhlIENvbmZpZ3VyYXRpb24gZW50aXR5IGZvciB5b3UuIFRoaXMgSG93VG8gaXMKIGdvaW5nIHRvIHNob3cgaG93LgogCiBJZiB5b3Ugd2FudCB0byByZXByb2R1Y2Ugd2hhdCdzIGV4cGxhaW5lZCBpbiB0aGlzIHR1dG9yaWFsLCByZW1lbWJlciB0byBkZXBlbmQgb24gdGhlIENvcmUgQm9vdHN0cmFwIGFydGlmYWN0OgogCiBpbmNsdWRlOjouLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQogCi1BdCBydW50aW1lIHlvdSB3aWxsIG5lZWQgdGhlIENvcmUgUnVudGltZSBhcnRpZmFjdCB0b28uIFNlZSB0aGUgPDxob3d0by1kZXBlbmQtb24tcWk0aj4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgorQXQgcnVudGltZSB5b3Ugd2lsbCBuZWVkIHRoZSBDb3JlIFJ1bnRpbWUgYXJ0aWZhY3QgdG9vLiBTZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXplc3Q+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KIAogPT0gV2UgbmVlZCBhIFNlcnZpY2UgPT0KIApAQCAtMTM5LDcgKzEzOSw3IEBACiBGaWxlOiBvcmcvcWk0ai9tYW51YWwvdHJhdmVsL09yYml0elNlcnZpY2UucHJvcGVydGllcwogCiA9PSBDaGFuZ2luZyBDb25maWd1cmF0aW9uIGluIHJ1bnRpbWUgPT0KLVVubGlrZSBtb3N0IGZyYW1ld29ya3MsIHRoZSBDb25maWd1cmF0aW9uIGluIFFpNGogaXMgYW4gYWN0aXZlIEVudGl0eSwgYW5kIG9uY2UgdGhlIHByb3BlcnRpZXMgZmlsZSBoYXMgYmVlbiByZWFkIG9uY2UKK1VubGlrZSBtb3N0IGZyYW1ld29ya3MsIHRoZSBDb25maWd1cmF0aW9uIGluIFplc3TihKIgaXMgYW4gYWN0aXZlIEVudGl0eSwgYW5kIG9uY2UgdGhlIHByb3BlcnRpZXMgZmlsZSBoYXMgYmVlbiByZWFkIG9uY2UKIGF0IHRoZSBmaXJzdCghKSBzdGFydHVwLCBpdCBubyBsb25nZXIgc2VydmVzIGFueSBwdXJwb3NlLiBUaGUgQ29uZmlndXJhdGlvbiB3aWxsIGFsd2F5cyBiZSByZXRyaWV2ZWQgZnJvbSB0aGUKIEVudGl0eVN0b3JlLiBDaGFuZ2VzIHRvIHRoZSBwcm9wZXJ0aWVzIGZpbGUgYXJlIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gaWYgdGhlIENvbmZpZ3VyYXRpb24gZW50aXR5IGlzIGZvdW5kIGluIHRoZQogZW50aXR5IHN0b3JlLgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1jb250ZXh0dWFsLWZyYWdtZW50cy50eHQgYi9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNvbnRleHR1YWwtZnJhZ21lbnRzLnR4dAppbmRleCA0MDU3M2M5Li4xZGM0MjNjIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNvbnRleHR1YWwtZnJhZ21lbnRzLnR4dAorKysgYi9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNvbnRleHR1YWwtZnJhZ21lbnRzLnR4dApAQCAtMjksNyArMjksNyBAQAogCiBpbmNsdWRlOjouLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQogCi1BdCBydW50aW1lIHlvdSB3aWxsIG5lZWQgdGhlIENvcmUgUnVudGltZSBhcnRpZmFjdCB0b28uIFNlZSB0aGUgPDxob3d0by1kZXBlbmQtb24tcWk0aj4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgorQXQgcnVudGltZSB5b3Ugd2lsbCBuZWVkIHRoZSBDb3JlIFJ1bnRpbWUgYXJ0aWZhY3QgdG9vLiBTZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXplc3Q+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KIAogVGhlIG1peGlucywgc2lkZWVmZmVjdHMgYW5kIGNvbmNlcm5zIGFyZSBhZGRlZCBkdXJpbmcgdGhlIGJvb3RzdHJhcCBwaGFzZS4gSXQgaXMgdmVyeSBzdHJhaWdodC1mb3J3YXJkOwogCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNyZWF0ZS1jb25jZXJuLnR4dCBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLWNvbmNlcm4udHh0CmluZGV4IDliMzE5ZjUuLmEzNmVhOTkgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLWNvbmNlcm4udHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLWNvbmNlcm4udHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2hvd3RvLWNyZWF0ZS1jb25jZXJuLENyZWF0ZSBhIENvbmNlcm5dXQogPSBDcmVhdGUgYSBDb25jZXJuID0KIApAQCAtNyw3ICsyNiw3IEBACiAKIGluY2x1ZGU6Oi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCiAKLUF0IHJ1bnRpbWUgeW91IHdpbGwgbmVlZCB0aGUgQ29yZSBSdW50aW1lIGFydGlmYWN0IHRvby4gU2VlIHRoZSA8PGhvd3RvLWRlcGVuZC1vbi1xaTRqPj4gdHV0b3JpYWwgZm9yIGRldGFpbHMuCitBdCBydW50aW1lIHlvdSB3aWxsIG5lZWQgdGhlIENvcmUgUnVudGltZSBhcnRpZmFjdCB0b28uIFNlZSB0aGUgPDxob3d0by1kZXBlbmQtb24temVzdD4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgogCiA9PSBUeXBlZCBDb25jZXJuID09CiAKQEAgLTIyLDggKzQxLDggQEAKIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZlIGltcGxlbWVudGVkIHRoZSBJbnZlbnRvcnlDb25jZXJuIGFzIGFuIGFic3RyYWN0IGNsYXNzIGlmIHdlIHdlcmUgbm90IGludGVyZXN0ZWQgaW4gX19hbGxfXyB0aGUgbWV0aG9kcyBpbiB0aGUgT3JkZXIgaW50ZXJmYWNlLgogRXh0ZW5kaW5nIHRoZSBDb25jZXJuT2YgaXMgYSBjb252ZW5pZW5jZSBtZWNoYW5pc20sIGluc3RlYWQgb2YgYW4gZXhwbGljaXQgQENvbmNlcm5Gb3IgYW5ub3RhdGlvbiBvbgogYSBwcml2YXRlIGZpZWxkLCB3aGljaCBjYW4gYmUgdXNlZCBpbiByYXJlIG9jY2FzaW9ucyB3aGVuIHlvdSBhcmUgbm90IGFibGUgdG8gZXh0ZW5kLiBUaGlzIGJhc2UgY2xhc3MgZGVmaW5lcyB0aGUgbmV4dAotZmllbGQsIHdoaWNoIGlzIHNldCB1cCBieSB0aGUgUWk0aiBydW50aW1lIGFuZCBwb2ludHMgdG8gdGhlIG5leHQgZnJhZ21lbnQgaW4gdGhlIGNhbGwgc3RhY2suIFdlIGNhbiBhbHNvIHNlZSB0aGF0IHRoZQotSW52ZW50b3J5U2VydmljZSBpcyBwcm92aWRlZCB0byB0aGUgY29uY2Vybiwgd2hpY2ggaXMgZG9uZSB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uLiBRaTRqIGFsc28gc3VwcG9ydHMgZGVwZW5kZW5jeQorZmllbGQsIHdoaWNoIGlzIHNldCB1cCBieSB0aGUgWmVzdOKEoiBydW50aW1lIGFuZCBwb2ludHMgdG8gdGhlIG5leHQgZnJhZ21lbnQgaW4gdGhlIGNhbGwgc3RhY2suIFdlIGNhbiBhbHNvIHNlZSB0aGF0IHRoZQorSW52ZW50b3J5U2VydmljZSBpcyBwcm92aWRlZCB0byB0aGUgY29uY2Vybiwgd2hpY2ggaXMgZG9uZSB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uLiBaZXN04oSiIGFsc28gc3VwcG9ydHMgZGVwZW5kZW5jeQogaW5qZWN0aW9uIHZpYSBjb25zdHJ1Y3RvcnMgYW5kIG1ldGhvZHMuCiAKIEl0IGNhbiBiZSB1c2VkIGFzIGZvbGxvd3M7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNyZWF0ZS1jb25zdHJhaW50LnR4dCBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLWNvbnN0cmFpbnQudHh0CmluZGV4IDYwM2YzZGQuLjIzZGZhYjcgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLWNvbnN0cmFpbnQudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLWNvbnN0cmFpbnQudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2hvd3RvLWNyZWF0ZS1jb25zdHJhaW50LENyZWF0ZSBhIENvbnN0cmFpbnRdXQogPSBDcmVhdGUgYSBDb25zdHJhaW50ID0KIApAQCAtNyw3ICsyNiw3IEBACiAKIGluY2x1ZGU6Oi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCiAKLUF0IHJ1bnRpbWUgeW91IHdpbGwgbmVlZCB0aGUgQ29yZSBSdW50aW1lIGFydGlmYWN0IHRvby4gU2VlIHRoZSA8PGhvd3RvLWRlcGVuZC1vbi1xaTRqPj4gdHV0b3JpYWwgZm9yIGRldGFpbHMuCitBdCBydW50aW1lIHlvdSB3aWxsIG5lZWQgdGhlIENvcmUgUnVudGltZSBhcnRpZmFjdCB0b28uIFNlZSB0aGUgPDxob3d0by1kZXBlbmQtb24temVzdD4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgogCiA9PSBNZXRob2QgQ29uc3RyYWludCA9PQogCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNyZWF0ZS1lbnRpdHkudHh0IGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1jcmVhdGUtZW50aXR5LnR4dAppbmRleCAxYjY5ZTE0Li40MWZmZTk0IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNyZWF0ZS1lbnRpdHkudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLWVudGl0eS50eHQKQEAgLTE1LDkgKzE1LDkgQEAKIAogW1tob3d0by1jcmVhdGUtZW50aXR5LENyZWF0ZSBhbiBFbnRpdHldXQogPSBDcmVhdGUgYW4gRW50aXR5ID0KLU9uZSBvZiB0aGUgbW9zdCBjb21tb24gdGFza3MgaW4gUWk0aiBpcyB0aGUgbWFuYWdlbWVudCBvZiB0aGUgbGlmZSBjeWNsZSBvZiBFbnRpdGllcy4gU2luY2UgUWk0aiBpcyBjYXBhYmxlIG9mCitPbmUgb2YgdGhlIG1vc3QgY29tbW9uIHRhc2tzIGluIFplc3TihKIgaXMgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGxpZmUgY3ljbGUgb2YgRW50aXRpZXMuIFNpbmNlIFplc3TihKIgaXMgY2FwYWJsZSBvZgogZGVsaXZlcmluZyBtdWNoIGhpZ2hlciBwZXJmb3JtYW5jZSB0aGFuIHRyYWRpdGlvbmFsIE9iamVjdC1SZWxhdGlvbmFsIE1hcHBpbmcgdGVjaG5vbG9naWVzLCB3ZSBhbHNvIGV4cGVjdCB0aGF0IHBlb3BsZQotdXNlIEVudGl0aWVzIG1vcmUgZnJlcXVlbnRseSBpbiBRaTRqIGFwcGxpY2F0aW9ucywgc28gaXQgaXMgYSB2ZXJ5IGltcG9ydGFudCB0b3BpYyB0byBjb3Zlci4KK3VzZSBFbnRpdGllcyBtb3JlIGZyZXF1ZW50bHkgaW4gWmVzdOKEoiBhcHBsaWNhdGlvbnMsIHNvIGl0IGlzIGEgdmVyeSBpbXBvcnRhbnQgdG9waWMgdG8gY292ZXIuCiAKIElmIHlvdSB3YW50IHRvIHJlcHJvZHVjZSB3aGF0J3MgZXhwbGFpbmVkIGluIHRoaXMgdHV0b3JpYWwsIHJlbWVtYmVyIHRvIGRlcGVuZCBvbiB0aGUgQ29yZSBCb290c3RyYXAgYXJ0aWZhY3Q6CiAKQEAgLTI2LDcgKzI2LDcgQEAKIE1vcmVvdmVyLCB5b3UnbGwgbmVlZCBhbiBFbnRpdHlTdG9yZSBmb3IgcGVyc2lzdGVuY2UgYW5kIGFuIEluZGV4aW5nIGVuZ2luZSBmb3IgcXVlcnlpbmcuIENob29zZSBhbW9uZyB0aGUgYXZhaWxhYmxlCiBpbXBsZW1lbnRhdGlvbnMgbGlzdGVkIGluIHRoZSA8PGV4dGVuc2lvbnM+PiBzZWN0aW9uLgogCi1BdCBydW50aW1lIHlvdSB3aWxsIG5lZWQgdGhlIENvcmUgUnVudGltZSBhcnRpZmFjdCB0b28uIFNlZSB0aGUgPDxob3d0by1kZXBlbmQtb24tcWk0aj4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgorQXQgcnVudGltZSB5b3Ugd2lsbCBuZWVkIHRoZSBDb3JlIFJ1bnRpbWUgYXJ0aWZhY3QgdG9vLiBTZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXplc3Q+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KIAogPT0gQmFzaWNzIEZpcnN0ID09CiAKQEAgLTM5LDcgKzM5LDcgQEAKIGludGVyZmFjZS4gVGhlIFZpc2liaWxpdHkgcnVsZXMgd2lsbCBiZSBhcHBsaWVkIHRvIGFzc29jaWF0ZSB0aGUgcmlnaHQgRW50aXR5Q29tcG9zaXRlIHdoZW4gYSBkb21haW4gdHlwZSBpcyByZXF1ZXN0ZWQuCiBBbWJpZ3VpdGllcyBhcmUgbm90IGFjY2VwdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBydW50aW1lIGV4Y2VwdGlvbnMuCiAKLVFpNGogc3VwcG9ydHMgdGhhdCBlYWNoIGVudGl0eSBpbnN0YW5jZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIGVudGl0eSB0eXBlLCBhbmQgaXQgaXMgbWFuYWdlZCBwZXIgaW5zdGFuY2UuIFRoaXMgZmVhdHVyZQorWmVzdOKEoiBzdXBwb3J0cyB0aGF0IGVhY2ggZW50aXR5IGluc3RhbmNlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgZW50aXR5IHR5cGUsIGFuZCBpdCBpcyBtYW5hZ2VkIHBlciBpbnN0YW5jZS4gVGhpcyBmZWF0dXJlCiBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgSG93VE8gYW5kIHdpbGwgYmUgY292ZXJlZCBzdWJzZXF1ZW50bHkuCiAKID09IEdvb2QgUHJhY3RpY2UgPT0KQEAgLTEyNSw3ICsxMjUsNyBAQAogCiA9PSBUaGUgRW50aXR5IEZhY3RvcnkgPT0KIAotVGhlIGVudGl0eSBmYWN0b3J5IGlzIHNvbWV0aGluZyB5b3UgbmVlZCB0byB3cml0ZSB5b3Vyc2VsZiwgYnV0IGFzIHdpdGggbW9zdCB0aGluZ3MgaW4gUWk0aiBpdCB3aWxsIGVuZCB1cCBiZWluZyBhCitUaGUgZW50aXR5IGZhY3RvcnkgaXMgc29tZXRoaW5nIHlvdSBuZWVkIHRvIHdyaXRlIHlvdXJzZWxmLCBidXQgYXMgd2l0aCBtb3N0IHRoaW5ncyBpbiBaZXN04oSiIGl0IHdpbGwgZW5kIHVwIGJlaW5nIGEKIGZhaXJseSBzbWFsbCBpbXBsZW1lbnRhdGlvbi4gU28gaG93IGlzIHRoYXQgZG9uZT8KIAogW3NuaXBwZXQsamF2YV0KQEAgLTEzNCw3ICsxMzQsNyBAQAogdGFnPWNhckZhY3RvcnkKIC0tLS0tLS0tLS0tCiAKLVRoYXQgaXMganVzdCB0aGUgZG9tYWluIGludGVyZmFjZS4gV2Ugbm93IG5lZWQgdG8gbWFrZSB0aGUgc2VydmljZSBpbnRlcmZhY2UsIHdoaWNoIFFpNGogbmVlZHMgdG8gaWRlbnRpZnkgc2VydmljZXMgYW5kCitUaGF0IGlzIGp1c3QgdGhlIGRvbWFpbiBpbnRlcmZhY2UuIFdlIG5vdyBuZWVkIHRvIG1ha2UgdGhlIHNlcnZpY2UgaW50ZXJmYWNlLCB3aGljaCBaZXN04oSiIG5lZWRzIHRvIGlkZW50aWZ5IHNlcnZpY2VzIGFuZAogbWFrZSBpdCBwb3NzaWJsZSBmb3IgdGhlIHNlcnZpY2UgaW5qZWN0aW9uIGxhdGVyLgogCiBbc25pcHBldCxqYXZhXQpAQCAtMTUxLDcgKzE1MSw3IEBACiB0YWc9Y2FyRmFjdG9yeU1peGluMQogLS0tLS0tLS0tLS0KIAotQW5kIGRvaW5nIHRoYXQsIGZpcnN0IG9mIGFsbCB3ZSBuZWVkIHRvIHJlcXVlc3QgUWk0aiBydW50aW1lIHRvIGdpdmUgdXMgdGhlIE1vZHVsZQorQW5kIGRvaW5nIHRoYXQsIGZpcnN0IG9mIGFsbCB3ZSBuZWVkIHRvIHJlcXVlc3QgWmVzdOKEoiBydW50aW1lIHRvIGdpdmUgdXMgdGhlIE1vZHVsZQogdGhhdCBvdXIgY29kZSBiZWxvbmdzIHRvLCBhbmQgdGhlIFVuaXRPZldvcmsgY3VycmVudCBjb250ZXh0IHRoZSBleGVjdXRpb24gaXMgaGFwcGVuaW5nIGluLgogCiBJbmplY3Rpb25zIHRoYXQgYXJlIHJlbGF0ZWQgdG8gdGhlIFZpc2liaWxpdHkgcnVsZXMgYXJlIGhhbmRsZWQgYnkgdGhlIEBTdHJ1Y3R1cmUgYW5ub3RhdGlvbi4gQW5kIHRoZSBlYXNpZXN0IHdheSBmb3IgdXMKQEAgLTE2Myw3ICsxNjMsNyBAQAogdGFnPWNhckZhY3RvcnlNaXhpbjIKIC0tLS0tLS0tLS0tCiAKLUhlcmUgUWk0aiB3aWxsIGluamVjdCB0aGUgbWVtYmVyIG1vZHVsZSB3aXRoIHRoZSBjb3JyZWN0IE1vZHVsZS4gSW4gY2FzZSB3ZSBvbmx5IG5lZWQgdGhlIE1vZHVsZQorSGVyZSBaZXN04oSiIHdpbGwgaW5qZWN0IHRoZSBtZW1iZXIgbW9kdWxlIHdpdGggdGhlIGNvcnJlY3QgTW9kdWxlLiBJbiBjYXNlIHdlIG9ubHkgbmVlZCB0aGUgTW9kdWxlCiBkdXJpbmcgdGhlIGNvbnN0cnVjdGlvbiwgd2UgY2FuIGFsc28gcmVxdWVzdCBpdCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgY29uc3RydWN0b3IgYXJndW1lbnQuCiAKIFtzbmlwcGV0LGphdmFdCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWNyZWF0ZS1zaWRlZWZmZWN0LnR4dCBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLXNpZGVlZmZlY3QudHh0CmluZGV4IDZjNDA4MjkuLjI2NzUxNjggMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLXNpZGVlZmZlY3QudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tY3JlYXRlLXNpZGVlZmZlY3QudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2hvd3RvLWNyZWF0ZS1zaWRlZWZmZWN0LENyZWF0ZSBhIFNpZGVFZmZlY3RdXQogPSBDcmVhdGUgYSBTaWRlRWZmZWN0ID0KIApAQCAtNyw3ICsyNiw3IEBACiAKIGluY2x1ZGU6Oi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCiAKLUF0IHJ1bnRpbWUgeW91IHdpbGwgbmVlZCB0aGUgQ29yZSBSdW50aW1lIGFydGlmYWN0IHRvby4gU2VlIHRoZSA8PGhvd3RvLWRlcGVuZC1vbi1xaTRqPj4gdHV0b3JpYWwgZm9yIGRldGFpbHMuCitBdCBydW50aW1lIHlvdSB3aWxsIG5lZWQgdGhlIENvcmUgUnVudGltZSBhcnRpZmFjdCB0b28uIFNlZSB0aGUgPDxob3d0by1kZXBlbmQtb24temVzdD4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgogCiA9PSBUeXBlZCBTaWRlRWZmZWN0ID09CiAKQEAgLTIyLDkgKzQxLDkgQEAKIFRoZSBNYWlsTm90aWZ5U2lkZUVmZmVjdCBpcyBpbXBsZW1lbnRlZCBhcyBhbiBhYnN0cmFjdCBjbGFzcywgc2luY2Ugd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBtYW55IG90aGVyIG1ldGhvZHMgaW4KIHRoZSBDb25maXJtYWJsZSBpbnRlcmZhY2UuIEV4dGVuZGluZyB0aGUgU2lkZUVmZmVjdE9mIGlzIGEgY29udmVuaWVuY2UgbWVjaGFuaXNtLCBpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IEBTaWRlRWZmZWN0Rm9yCiBhbm5vdGF0aW9uIG9uIGEgcHJpdmF0ZSBmaWVsZCwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gcmFyZSBvY2Nhc2lvbnMgd2hlbiB5b3UgYXJlIG5vdCBhYmxlIHRvIGV4dGVuZC4gVGhpcyBiYXNlIGNsYXNzCi1kZWZpbmVzIHRoZSBuZXh0IGZpZWxkLCB3aGljaCBpcyBzZXQgdXAgYnkgdGhlIFFpNGogcnVudGltZSBhbmQgcG9pbnRzIHRvIHRoZSBuZXh0IGZyYWdtZW50IGluIHRoZSBjYWxsIHN0YWNrLiBXZSBjYW4KK2RlZmluZXMgdGhlIG5leHQgZmllbGQsIHdoaWNoIGlzIHNldCB1cCBieSB0aGUgWmVzdOKEoiBydW50aW1lIGFuZCBwb2ludHMgdG8gdGhlIG5leHQgZnJhZ21lbnQgaW4gdGhlIGNhbGwgc3RhY2suIFdlIGNhbgogYWxzbyBzZWUgdGhhdCB0aGUgTWFpbFNlcnZpY2UsIEhhc0xpbmVJdGVtcyBhbmQgSGFzQ3VzdG9tZXIgYXJlIHByb3ZpZGVkIHRvIHRoZSBzaWRlLWVmZmVjdCwgd2hpY2ggaXMgZG9uZSB3aXRoCi1kZXBlbmRlbmN5IGluamVjdGlvbi4gUWk0aiBhbHNvIHN1cHBvcnRzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHZpYSBjb25zdHJ1Y3RvcnMgYW5kIG1ldGhvZHMuCitkZXBlbmRlbmN5IGluamVjdGlvbi4gWmVzdOKEoiBhbHNvIHN1cHBvcnRzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHZpYSBjb25zdHJ1Y3RvcnMgYW5kIG1ldGhvZHMuCiAKIEl0IGNhbiBiZSB1c2VkIGFzIGZvbGxvd3M7CiAKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tZGVwZW5kLW9uLXFpNGoudHh0IGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1kZXBlbmQtb24tcWk0ai50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YjczMDYuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1kZXBlbmQtb24tcWk0ai50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotW1tob3d0by1kZXBlbmQtb24tcWk0aixEZXBlbmQgb24gUWk0aiBpbiB5b3VyIGJ1aWxkXV0KLT0gRGVwZW5kIG9uIFFpNGogaW4geW91ciBidWlsZCA9Ci0KLU5PVEU6IFNvbWUgb2YgdGhlIDw8bGlicmFyaWVzPj4gYW5kIDw8ZXh0ZW5zaW9ucz4+IGRlcGVuZCBvbiBhcnRpZmFjdHMgdGhhdCBhcmUgbm90IGRlcGxveWVkIGluIGNlbnRyYWwsIHlvdSdsbCBuZWVkIHRvCi1hZGQgb3RoZXIgcmVwb3NpdG9yaWVzIHRvIHlvdXIgYnVpbGQgc2NyaXB0cyBhY2NvcmRpbmdseS4KLQotUmVsZWFzZSBhcnRpZmFjdHMsIGluY2x1ZGluZyBzb3VyY2VzIGFuZCBqYXZhZG9jLCBhcmUgZGVwbG95ZWQgdG8KLQotaHR0cHM6Ly9yZXBvc2l0b3J5LXFpNGouZm9yZ2UuY2xvdWRiZWVzLmNvbS9yZWxlYXNlL1todHRwczovL3JlcG9zaXRvcnktcWk0ai5mb3JnZS5jbG91ZGJlZXMuY29tL3JlbGVhc2UvXS4KLQotU25hcHNob3QgYXJ0aWZhY3RzLCBpbmNsdWRpbmcgc291cmNlcyBhbmQgamF2YWRvYywgYXJlIGJ1aWx0IGFnYWluc3QgdGhlIGBkZXZlbG9wYCBicmFuY2ggYW5kIGRlcGxveWVkIHdlZWtseSB0bwotCi1odHRwczovL3JlcG9zaXRvcnktcWk0ai5mb3JnZS5jbG91ZGJlZXMuY29tL3NuYXBzaG90L1todHRwczovL3JlcG9zaXRvcnktcWk0ai5mb3JnZS5jbG91ZGJlZXMuY29tL3NuYXBzaG90L10uCi0KLUFzIHRoZXkgYXJlIG5vdCBkZXBsb3llZCB0byBjZW50cmFsIHlvdSBuZWVkIHRvIGFkZCB0aGUgcmVwb3NpdG9yaWVzIHRvIHlvdXIgYnVpbGQgc2NyaXB0cy4KLQotCi09PSBNYW51YWxseSA9PQotCi1JZiB5b3UgZG9uJ3QgcmVseSBvbiB5b3VyIGJ1aWxkIHNjcmlwdHMgZGVwZW5kZW5jeSByZXNvbHV0aW9uIG1lY2hhbmlzbSB5b3Ugc2hvdWxkCi1odHRwOi8vcWk0ai5vcmcvZG93bmxvYWRzLmh0bWxbZG93bmxvYWRdIHRoZSBTREsgZGlzdHJpYnV0aW9uLgotCi09PSBVc2luZyBNYXZlbiA9PQotCi1GaXJzdCB5b3UgbmVlZCB0byByZWdpc3RlciB0aGUgUWk0aiByZXBvc2l0b3JpZXM6Ci0KLVtzb3VyY2UseG1sXQotLS0tLQotPHJlcG9zaXRvcmllcz4KLSAgICA8cmVwb3NpdG9yeT4KLSAgICAgICAgPGlkPnFpNGotcmVsZWFzZXM8L2lkPgotICAgICAgICA8dXJsPmh0dHBzOi8vcmVwb3NpdG9yeS1xaTRqLmZvcmdlLmNsb3VkYmVlcy5jb20vcmVsZWFzZS88L3VybD4KLSAgICA8L3JlcG9zaXRvcnk+Ci0gICAgPHJlcG9zaXRvcnk+Ci0gICAgICAgIDxpZD5xaTRqLXNuYXBzaG90czwvaWQ+Ci0gICAgICAgIDx1cmw+aHR0cHM6Ly9yZXBvc2l0b3J5LXFpNGouZm9yZ2UuY2xvdWRiZWVzLmNvbS9zbmFwc2hvdC88L3VybD4KLSAgICAgICAgPHJlbGVhc2VzPjxlbmFibGVkPmZhbHNlPC9lbmFibGVkPjwvcmVsZWFzZXM+Ci0gICAgICAgIDxzbmFwc2hvdHM+PGVuYWJsZWQ+dHJ1ZTwvZW5hYmxlZD48L3NuYXBzaG90cz4KLSAgICA8L3JlcG9zaXRvcnk+Ci08L3JlcG9zaXRvcmllcz4KLS0tLS0KLQotQWZ0ZXIgdGhhdCB5b3UgY2FuIGRlY2xhcmUgZGVwZW5kZW5jaWVzIG9uIFFpNGogYXJ0aWZhY3RzOgotCi1bc291cmNlLHhtbF0KLS0tLS0KLTxkZXBlbmRlbmNpZXM+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgIDxncm91cElkPm9yZy5xaTRqLmNvcmU8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj5RSTRKX1ZFUlNJT048L3ZlcnNpb24+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgotICAgICAgICA8Z3JvdXBJZD5vcmcucWk0ai5jb3JlPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD5vcmcucWk0ai5jb3JlLnJ1bnRpbWU8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPlFJNEpfVkVSU0lPTjwvdmVyc2lvbj4KLSAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLnFpNGouY29yZTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+UUk0Sl9WRVJTSU9OPC92ZXJzaW9uPgotICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgPC9kZXBlbmRlbmN5PgotPC9kZXBlbmRlbmNpZXM+Ci0tLS0tCi0KLVdoZXJlIGBRSTRKX1ZFUlNJT05gIGlzIHRoZSBRaTRqIHZlcnNpb24geW91IHdhbnQgdG8gdXNlLgotCi09PSBVc2luZyBHcmFkbGUgPT0KLQotRmlyc3QgeW91IG5lZWQgdG8gcmVnaXN0ZXIgdGhlIFFpNGogcmVwb3NpdG9yaWVzOgotCi1bc291cmNlLGdyb292eV0KLS0tLS0KLXJlcG9zaXRvcmllcyB7Ci0gICAgbWF2ZW4geyBuYW1lICdxaTRqLXJlbGVhc2VzJzsgdXJsICJodHRwczovL3JlcG9zaXRvcnktcWk0ai5mb3JnZS5jbG91ZGJlZXMuY29tL3JlbGVhc2UvIsKgfQotICAgIG1hdmVuIHsgbmFtZSAncWk0ai1zbmFwc2hvdHMnOyB1cmwgImh0dHBzOi8vcmVwb3NpdG9yeS1xaTRqLmZvcmdlLmNsb3VkYmVlcy5jb20vc25hcHNob3QvIiB9Ci19Ci0tLS0tCi0KLUFmdGVyIHRoYXQgeW91IGNhbiBkZWNsYXJlIGRlcGVuZGVuY2llcyBvbiBRaTRqIGFydGlmYWN0czoKLQotW3NvdXJjZSxncm9vdnldCi0tLS0tCi1kZXBlbmRlbmNpZXMgewotICAgIGNvbXBpbGUgICAgICJvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwOlFJNEpfVkVSU0lPTiIKLSAgICBydW50aW1lICAgICAib3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWU6UUk0Sl9WRVJTSU9OIgotICAgIHRlc3RDb21waWxlICJvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQ6UUk0Sl9WRVJTSU9OIgotfQotLS0tLQotCi1XaGVyZSBgUUk0Sl9WRVJTSU9OYCBpcyB0aGUgUWk0aiB2ZXJzaW9uIHlvdSB3YW50IHRvIHVzZS4KLQotPT0gVXNpbmcgQnVpbGRyID09Ci0KLUZpcnN0IHlvdSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBRaTRqIHJlcG9zaXRvcmllczoKLQotW3NvdXJjZSxydWJ5XQotLS0tLQotcmVwb3NpdG9yaWVzLnJlbW90ZSA8PCAnaHR0cHM6Ly9yZXBvc2l0b3J5LXFpNGouZm9yZ2UuY2xvdWRiZWVzLmNvbS9yZWxlYXNlLycKLXJlcG9zaXRvcmllcy5yZW1vdGUgPDwgJ2h0dHBzOi8vcmVwb3NpdG9yeS1xaTRqLmZvcmdlLmNsb3VkYmVlcy5jb20vc25hcHNob3QvJwotLS0tLQotCi1BZnRlciB0aGF0IHlvdSBjYW4gZGVjbGFyZSBkZXBlbmRlbmNpZXMgb24gUWk0aiBhcnRpZmFjdHM6Ci0KLVtzb3VyY2UscnVieV0KLS0tLS0KLWNvbXBpbGUud2l0aCAnb3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcDpRSTRKX1ZFUlNJT04nCi1wYWNrYWdlKDp3YXIpLndpdGggOmxpYnMgPT4gJ29yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lOlFJNEpfVkVSU0lPTicKLXRlc3Qud2l0aCAnb3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0OlFJNEpfVkVSU0lPTicKLS0tLS0KLQotV2hlcmUgYFFJNEpfVkVSU0lPTmAgaXMgdGhlIFFpNGogdmVyc2lvbiB5b3Ugd2FudCB0byB1c2UuCi0KLT09IFVzaW5nIFNCVCA9PQotCi1GaXJzdCB5b3UgbmVlZCB0byByZWdpc3RlciB0aGUgUWk0aiByZXBvc2l0b3JpZXM6Ci0KLVtzb3VyY2Usc2NhbGFdCi0tLS0tCi1yZXNvbHZlcnMgKz0gInFpNGotcmVsZWFzZXMiIGF0ICJodHRwczovL3JlcG9zaXRvcnktcWk0ai5mb3JnZS5jbG91ZGJlZXMuY29tL3JlbGVhc2UvIgotCi1yZXNvbHZlcnMgKz0gInFpNGotc25hcHNob3RzIiBhdCAiaHR0cHM6Ly9yZXBvc2l0b3J5LXFpNGouZm9yZ2UuY2xvdWRiZWVzLmNvbS9zbmFwc2hvdC8iCi0tLS0tCi0KLUFmdGVyIHRoYXQgeW91IGNhbiBkZWNsYXJlIGRlcGVuZGVuY2llcyBvbiBRaTRqIGFydGlmYWN0czoKLQotW3NvdXJjZSxzY2FsYV0KLS0tLS0KLWxpYnJhcnlEZXBlbmRlbmNpZXMgKz0gXAotICAgICJvcmcucWk0ai5jb3JlIiAlICJvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIgJSAiUUk0Sl9WRVJTSU9OIiBcCi0gICAgd2l0aFNvdXJjZXMoKSB3aXRoSmF2YWRvYygpCi1saWJyYXJ5RGVwZW5kZW5jaWVzICs9IFwKLSAgICAib3JnLnFpNGouY29yZSIgJSAib3JnLnFpNGouY29yZS5ydW50aW1lIiAlICJRSTRKX1ZFUlNJT04iICUgInJ1bnRpbWUiIFwKLSAgICB3aXRoU291cmNlcygpIHdpdGhKYXZhZG9jKCkKLWxpYnJhcnlEZXBlbmRlbmNpZXMgKz0gXAotICAgICJvcmcucWk0ai5jb3JlIiAlICJvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IiAlICJRSTRKX1ZFUlNJT04iICUgInRlc3QiIFwKLSAgICB3aXRoU291cmNlcygpIHdpdGhKYXZhZG9jKCkKLS0tLS0KLQotV2hlcmUgYFFJNEpfVkVSU0lPTmAgaXMgdGhlIFFpNGogdmVyc2lvbiB5b3Ugd2FudCB0byB1c2UuCi0KLT09IFVzaW5nIEl2eSA9PQotCi1GaXJzdCB5b3UgbmVlZCB0byByZWdpc3RlciB0aGUgUWk0aiByZXBvc2l0b3JpZXMgaW4gYSBgaXZ5c2V0dGluZ3MueG1sYCBmaWxlOgotCi1bc291cmNlLHhtbF0KLS0tLS0KLTxpdnlzZXR0aW5ncz4KLSAgICA8c2V0dGluZ3MgZGVmYXVsdFJlc29sdmVyPSJjaGFpbiIvPgotICAgIDxyZXNvbHZlcnM+Ci0gICAgICAgIDxjaGFpbiBuYW1lPSJjaGFpbiI+Ci0gICAgICAgICAgICA8aWJpYmxpbyBuYW1lPSJxaTRqLXJlbGVhc2VzIiAgbTJjb21wYXRpYmxlPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICAgcm9vdD0iaHR0cHM6Ly9yZXBvc2l0b3J5LXFpNGouZm9yZ2UuY2xvdWRiZWVzLmNvbS9yZWxlYXNlLyIvPgotICAgICAgICAgICAgPGliaWJsaW8gbmFtZT0icWk0ai1zbmFwc2hvdHMiIG0yY29tcGF0aWJsZT0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgIHJvb3Q9Imh0dHBzOi8vcmVwb3NpdG9yeS1xaTRqLmZvcmdlLmNsb3VkYmVlcy5jb20vc25hcHNob3QvIi8+Ci0gICAgICAgIDwvY2hhaW4+Ci0gICAgPC9yZXNvbHZlcnM+Ci08L2l2eXNldHRpbmdzPgotLS0tLQotCi1BZnRlciB0aGF0IHlvdSBjYW4gZGVjbGFyZSBkZXBlbmRlbmNpZXMgb24gUWk0aiBhcnRpZmFjdHM6Ci0KLVtzb3VyY2UseG1sXQotLS0tLQotPGl2eS1tb2R1bGU+Ci0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgPGRlcGVuZGVuY3kgb3JnPSJvcmcucWk0ai5jb3JlIiBuYW1lPSJvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIKLSAgICAgICAgICAgICAgICAgICAgcmV2PSJRSTRKX1ZFUlNJT04iICBjb25mPSJkZWZhdWx0IiAvPgotICAgICAgICA8ZGVwZW5kZW5jeSBvcmc9Im9yZy5xaTRqLmNvcmUiIG5hbWU9Im9yZy5xaTRqLmNvcmUucnVudGltZSIKLSAgICAgICAgICAgICAgICAgICAgcmV2PSJRSTRKX1ZFUlNJT04iICBjb25mPSJydW50aW1lIiAvPgotICAgICAgICA8ZGVwZW5kZW5jeSBvcmc9Im9yZy5xaTRqLmNvcmUiIG5hbWU9Im9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiCi0gICAgICAgICAgICAgICAgICAgIHJldj0iUUk0Sl9WRVJTSU9OIiAgY29uZj0idGVzdCIgLz4KLSAgICA8L2RlcGVuZGVuY2llcz4KLTwvaXZ5LW1vZHVsZT4KLS0tLS0KLQotV2hlcmUgYFFJNEpfVkVSU0lPTmAgaXMgdGhlIFFpNGogdmVyc2lvbiB5b3Ugd2FudCB0byB1c2UuCi0KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tZGVwZW5kLW9uLXplc3QudHh0IGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1kZXBlbmQtb24temVzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwYjYyOQotLS0gL2Rldi9udWxsCisrKyBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tZGVwZW5kLW9uLXplc3QudHh0CkBAIC0wLDAgKzEsMTkzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworW1tob3d0by1kZXBlbmQtb24temVzdCxEZXBlbmQgb24gWmVzdOKEoiBpbiB5b3VyIGJ1aWxkXV0KKz0gRGVwZW5kIG9uIFplc3TihKIgaW4geW91ciBidWlsZCA9CisKK05PVEU6IFNvbWUgb2YgdGhlIDw8bGlicmFyaWVzPj4gYW5kIDw8ZXh0ZW5zaW9ucz4+IGRlcGVuZCBvbiBhcnRpZmFjdHMgdGhhdCBhcmUgbm90IGRlcGxveWVkIGluIGNlbnRyYWwsIHlvdSdsbCBuZWVkIHRvCithZGQgb3RoZXIgcmVwb3NpdG9yaWVzIHRvIHlvdXIgYnVpbGQgc2NyaXB0cyBhY2NvcmRpbmdseS4KKworUmVsZWFzZSBhcnRpZmFjdHMsIGluY2x1ZGluZyBzb3VyY2VzIGFuZCBqYXZhZG9jLCBhcmUgZGVwbG95ZWQgdG8gTWF2ZW4gQ2VudHJhbDoKKworaHR0cDovL3JlcG8xLm1hdmVuLm9yZy9tYXZlbjIvIChVUykKKworaHR0cDovL3VrLm1hdmVuLm9yZy9tYXZlbjIvIChFdXJvcGUpCisKK1NuYXBzaG90IGFydGlmYWN0cywgaW5jbHVkaW5nIHNvdXJjZXMgYW5kIGphdmFkb2MsIGFyZSBidWlsdCBhZ2FpbnN0IHRoZSBgZGV2ZWxvcGAgYnJhbmNoIGFuZCBkZXBsb3llZCB3ZWVrbHkgdG8gdGhlIEFwYWNoZSBTTkFQU0hPVFMgcmVwb3NpdG9yeToKKworaHR0cDovL3JlcG9zaXRvcnkuYXBhY2hlLm9yZy9zbmFwc2hvdHMvCisKKworPT0gTWFudWFsbHkgPT0KKworSWYgeW91IGRvbid0IHJlbHkgb24geW91ciBidWlsZCBzY3JpcHRzIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiBtZWNoYW5pc20geW91IHNob3VsZAoraHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvZG93bmxvYWQuaHRtbFtkb3dubG9hZF0gdGhlIFNESyBkaXN0cmlidXRpb24uCisKKworPT0gVXNpbmcgTWF2ZW4gPT0KKworWW91IHNpbXBseSBkZWNsYXJlIGRlcGVuZGVuY2llcyBvbiBaZXN04oSiIGFydGlmYWN0czoKKworW3NvdXJjZSx4bWxdCistLS0tCis8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgICA8Z3JvdXBJZD5vcmcucWk0ai5jb3JlPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5vcmcucWk0ai5jb3JlLmJvb3RzdHJhcDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+WkVTVF9WRVJTSU9OPC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLnFpNGouY29yZTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+b3JnLnFpNGouY29yZS5ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj5aRVNUX1ZFUlNJT048L3ZlcnNpb24+CisgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPm9yZy5xaTRqLmNvcmU8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPlpFU1RfVkVSU0lPTjwvdmVyc2lvbj4KKyAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKzwvZGVwZW5kZW5jaWVzPgorLS0tLQorCitXaGVyZSBgWkVTVF9WRVJTSU9OYCBpcyB0aGUgWmVzdOKEoiB2ZXJzaW9uIHlvdSB3YW50IHRvIHVzZS4KKworSWYgeW91IHdhbnQgdG8gdXNlICstU05BUFNIT1QrIHZlcnNpb25zLCB5b3UgbmVlZCB0byByZWdpc3RlciB0aGUgQXBhY2hlIFNuYXBzaG90cyByZXBvc2l0b3J5OgorCitbc291cmNlLHhtbF0KKy0tLS0KKzxyZXBvc2l0b3JpZXM+CisgICAgPHJlcG9zaXRvcnk+CisgICAgICAgIDxpZD5hcGFjaGUtc25hcHNob3RzPC9pZD4KKyAgICAgICAgPHVybD5odHRwczovL3JlcG9zaXRvcnkuYXBhY2hlLm9yZy9zbmFwc2hvdHMvPC91cmw+CisgICAgICAgIDxyZWxlYXNlcz48ZW5hYmxlZD5mYWxzZTwvZW5hYmxlZD48L3JlbGVhc2VzPgorICAgICAgICA8c25hcHNob3RzPjxlbmFibGVkPnRydWU8L2VuYWJsZWQ+PC9zbmFwc2hvdHM+CisgICAgPC9yZXBvc2l0b3J5PgorPC9yZXBvc2l0b3JpZXM+CistLS0tCisKKworPT0gVXNpbmcgR3JhZGxlID09CisKK1lvdSBzaW1wbHkgZGVjbGFyZSBkZXBlbmRlbmNpZXMgb24gWmVzdOKEoiBhcnRpZmFjdHM6CisKK1tzb3VyY2UsZ3Jvb3Z5XQorLS0tLQorZGVwZW5kZW5jaWVzIHsKKyAgICBjb21waWxlICAgICAib3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcDpaRVNUX1ZFUlNJT04iCisgICAgcnVudGltZSAgICAgIm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lOlpFU1RfVkVSU0lPTiIKKyAgICB0ZXN0Q29tcGlsZSAib3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0OlpFU1RfVkVSU0lPTiIKK30KKy0tLS0KKworV2hlcmUgYFpFU1RfVkVSU0lPTmAgaXMgdGhlIFplc3TihKIgdmVyc2lvbiB5b3Ugd2FudCB0byB1c2UuCisKK0lmIHlvdSB3YW50IHRvIHVzZSArLVNOQVBTSE9UKyB2ZXJzaW9ucywgeW91IG5lZWQgdG8gcmVnaXN0ZXIgdGhlIEFwYWNoZSBTbmFwc2hvdHMgcmVwb3NpdG9yeToKKworW3NvdXJjZSxncm9vdnldCistLS0tCityZXBvc2l0b3JpZXMgeworICAgIG1hdmVuIHsgbmFtZSAnYXBhY2hlLXNuYXBzaG90cyc7IHVybCAiaHR0cHM6Ly9yZXBvc2l0b3J5LmFwYWNoZS5vcmcvc25hcHNob3RzLyIgfQorfQorLS0tLQorCisKKz09IFVzaW5nIEJ1aWxkciA9PQorCitZb3Ugc2ltcGx5IGRlY2xhcmUgZGVwZW5kZW5jaWVzIG9uIFplc3TihKIgYXJ0aWZhY3RzOgorCitbc291cmNlLHJ1YnldCistLS0tCitjb21waWxlLndpdGggJ29yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXA6WkVTVF9WRVJTSU9OJworcGFja2FnZSg6d2FyKS53aXRoIDpsaWJzID0+ICdvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZTpaRVNUX1ZFUlNJT04nCit0ZXN0LndpdGggJ29yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydDpaRVNUX1ZFUlNJT04nCistLS0tCisKK1doZXJlIGBaRVNUX1ZFUlNJT05gIGlzIHRoZSBaZXN04oSiIHZlcnNpb24geW91IHdhbnQgdG8gdXNlLgorCitJZiB5b3Ugd2FudCB0byB1c2UgKy1TTkFQU0hPVCsgdmVyc2lvbnMsIHlvdSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBBcGFjaGUgU25hcHNob3RzIHJlcG9zaXRvcnk6CisKK1tzb3VyY2UscnVieV0KKy0tLS0KK3JlcG9zaXRvcmllcy5yZW1vdGUgPDwgJ2h0dHBzOi8vcmVwb3NpdG9yeS5hcGFjaGUub3JnL3NuYXBzaG90cy8nCistLS0tCisKKworPT0gVXNpbmcgU0JUID09CisKK1lvdSBzaW1wbHkgZGVjbGFyZSBkZXBlbmRlbmNpZXMgb24gWmVzdOKEoiBhcnRpZmFjdHM6CisKK1tzb3VyY2Usc2NhbGFdCistLS0tCitsaWJyYXJ5RGVwZW5kZW5jaWVzICs9IFwKKyAgICAib3JnLnFpNGouY29yZSIgJSAib3JnLnFpNGouY29yZS5ib290c3RyYXAiICUgIlpFU1RfVkVSU0lPTiIgXAorICAgIHdpdGhTb3VyY2VzKCkgd2l0aEphdmFkb2MoKQorbGlicmFyeURlcGVuZGVuY2llcyArPSBcCisgICAgIm9yZy5xaTRqLmNvcmUiICUgIm9yZy5xaTRqLmNvcmUucnVudGltZSIgJSAiWkVTVF9WRVJTSU9OIiAlICJydW50aW1lIiBcCisgICAgd2l0aFNvdXJjZXMoKSB3aXRoSmF2YWRvYygpCitsaWJyYXJ5RGVwZW5kZW5jaWVzICs9IFwKKyAgICAib3JnLnFpNGouY29yZSIgJSAib3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIgJSAiWkVTVF9WRVJTSU9OIiAlICJ0ZXN0IiBcCisgICAgd2l0aFNvdXJjZXMoKSB3aXRoSmF2YWRvYygpCistLS0tCisKK1doZXJlIGBaRVNUX1ZFUlNJT05gIGlzIHRoZSBaZXN04oSiIHZlcnNpb24geW91IHdhbnQgdG8gdXNlLgorCitJZiB5b3Ugd2FudCB0byB1c2UgKy1TTkFQU0hPVCsgdmVyc2lvbnMsIHlvdSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBBcGFjaGUgU25hcHNob3RzIHJlcG9zaXRvcnk6CisKK1tzb3VyY2Usc2NhbGFdCistLS0tCityZXNvbHZlcnMgKz0gImFwYWNoZS1zbmFwc2hvdHMiIGF0ICJodHRwczovL3JlcG9zaXRvcnkuYXBhY2hlLm9yZy9zbmFwc2hvdHMvIgorLS0tLQorCisKKz09IFVzaW5nIEl2eSA9PQorCitZb3Ugc2ltcGx5IGRlY2xhcmUgZGVwZW5kZW5jaWVzIG9uIFplc3TihKIgYXJ0aWZhY3RzOgorCitbc291cmNlLHhtbF0KKy0tLS0KKzxpdnktbW9kdWxlPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5IG9yZz0ib3JnLnFpNGouY29yZSIgbmFtZT0ib3JnLnFpNGouY29yZS5ib290c3RyYXAiCisgICAgICAgICAgICAgICAgICAgIHJldj0iWkVTVF9WRVJTSU9OIiAgY29uZj0iZGVmYXVsdCIgLz4KKyAgICAgICAgPGRlcGVuZGVuY3kgb3JnPSJvcmcucWk0ai5jb3JlIiBuYW1lPSJvcmcucWk0ai5jb3JlLnJ1bnRpbWUiCisgICAgICAgICAgICAgICAgICAgIHJldj0iWkVTVF9WRVJTSU9OIiAgY29uZj0icnVudGltZSIgLz4KKyAgICAgICAgPGRlcGVuZGVuY3kgb3JnPSJvcmcucWk0ai5jb3JlIiBuYW1lPSJvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IgorICAgICAgICAgICAgICAgICAgICByZXY9IlpFU1RfVkVSU0lPTiIgIGNvbmY9InRlc3QiIC8+CisgICAgPC9kZXBlbmRlbmNpZXM+Cis8L2l2eS1tb2R1bGU+CistLS0tCisKK1doZXJlIGBaRVNUX1ZFUlNJT05gIGlzIHRoZSBaZXN04oSiIHZlcnNpb24geW91IHdhbnQgdG8gdXNlLgorCitJZiB5b3Ugd2FudCB0byB1c2UgKy1TTkFQU0hPVCsgdmVyc2lvbnMsIHlvdSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBBcGFjaGUgU25hcHNob3RzIHJlcG9zaXRvcnkgaW4gYSBgaXZ5c2V0dGluZ3MueG1sYCBmaWxlOgorCitbc291cmNlLHhtbF0KKy0tLS0KKzxpdnlzZXR0aW5ncz4KKyAgICA8c2V0dGluZ3MgZGVmYXVsdFJlc29sdmVyPSJjaGFpbiIvPgorICAgIDxyZXNvbHZlcnM+CisgICAgICAgIDxjaGFpbiBuYW1lPSJjaGFpbiI+CisgICAgICAgICAgICA8aWJpYmxpbyBuYW1lPSJhcGFjaGUtc25hcHNob3RzIiBtMmNvbXBhdGlibGU9InRydWUiCisgICAgICAgICAgICAgICAgICAgICByb290PSJodHRwczovL3JlcG9zaXRvcnkuYXBhY2hlLm9yZy9zbmFwc2hvdHMvIi8+CisgICAgICAgIDwvY2hhaW4+CisgICAgPC9yZXNvbHZlcnM+Cis8L2l2eXNldHRpbmdzPgorLS0tLQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1pbnZvY2F0aW9uLWFubm90YXRpb24udHh0IGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1pbnZvY2F0aW9uLWFubm90YXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMGVkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWludm9jYXRpb24tYW5ub3RhdGlvbi50eHQKQEAgLTAsMCArMSw3OCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1tbaG93dG8taW52b2NhdGlvbi1hbm5vdGF0aW9uLFVzZSBASW52b2NhdGlvbl1dCis9IFVzZSBASW52b2NhdGlvbiA9CitUaGUgQEludm9jYXRpb24gYW5ub3RhdGlvbiBpcyByZWxhdGl2ZWx5IHVua25vd24gYnV0IGNhbiBiZSByYXRoZXIgcG93ZXJmdWwgdG8gdXNlLCBlc3BlY2lhbGx5IHdoZW4gY3JlYXRpbmcKK2xpYnJhcmllcyB0aGF0IG5lZWRzIHRvIGJlIGZsZXhpYmxlIG9mIHdoYXQgdGhlIHVzZXIgbmVlZHMgdG8gZG8uCisKK0BJbnZvY2F0aW9uIGlzIGEgZGlmZmVyZW50ICtJbmplY3Rpb25TY29wZSssIHdoaWNoIGlzIGEgY29uY2VwdCB0byB0ZWxsIFplc3QgcnVudGltZSB3aGVyZSB0byBsb29rIGZvciB0aGUKK2luc3RhbmNlcyB0byBiZSBpbmplY3RlZC4gT3RoZXIsIG1vcmUgd2VsbC1rbm93biwgK0luamVjdGlvblNjb3BlKyBhbm5vdGF0aW9ucyBhcmUgK0BUaGlzKywgK0BTdHJ1Y3R1cmUrIGFuZAorK0BTZXJ2aWNlKy4KKworVGhlICtASW52b2NhdGlvbisgaW5qZWN0aW9uIHNjb3BlIGNhbiBwcm92aWRlIHRoZSBmb2xsb3dpbmcgdHlwZXMsIGFsbCByZWxhdGVkIHRvIHRoZSBvbi1nb2luZyBtZXRob2QgaW52b2NhdGlvbiwKK3doaWNoIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGluIEdlbmVyaWMgQ29uY2VybnMgb3IgR2VuZXJpYyBNaXhpbnM7CisKKyAgICAqICtqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QrIC0gVGhlIGN1cnJlbnQgbWV0aG9kIGJlaW5nIGludm9rZWQuCisgICAgKiAramF2YS5sYW5nLnJlZmxlY3QuQW5ub3RhdGVkRWxlbWVudCsgLSBBbiBkZXNjcmlwdG9yIGZvciBhbGwgYW5ub3RhdGlvbnMgb2YgdGhlIE1ldGhvZC4KKyAgICAqIF9DdXN0b20gQW5ub3RhdGlvbnNfIC0gWW91ciBvd24gYW5ub3RhdGlvbiB0eXBlLgorICAgICogK2phdmEudXRpbC5JdGVyYWJsZTxNZXRob2Q+KyAtIEFuIGl0ZXJhYmxlIG9mIGFsbCBkZWNsYXJlZCBtZXRob2RzIG9mIHRoZSBjb21wb3NpdGUgdHlwZS4KKworPT0gamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kID09CitUaGlzIGluamVjdGlvbiB3aWxsIHNpbXBseSBwcm92aWRlIHRoZSAramF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kKyBvZiB0aGUgb24tZ29pbmcgY2FsbC4gRm9yIGdlbmVyaWMgZnJhZ21lbnRzIHRoYXQKK3dpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCBhcmd1bWVudCBpbiB0aGUgK2phdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyLmludm9rZSgpKyBtZXRob2QuIFNvbWV0aW1lcworaXQgaXMgdXNlZnVsIHRvIG9idGFpbiB0aGlzIGZvciB0eXBlZCBmcmFnbWVudCBhcyB3ZWxsLCB0byByZWR1Y2UgbmFtZXMgaW4gU3RyaW5ncy4KKworPT0gamF2YS5sYW5nLnJlZmxlY3QuQW5ub3RhdGVkRWxlbWVudCA9PQorVGhpcyBSZWZsZWN0aW9uIEFQSSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFubm90YXRpb24gYXNwZWN0IG9mIGFueSBlbGVtZW50IHRoYXQgY2FuIGJlIGFubm90YXRlZC4gWmVzdCBpbXBsZW1lbnRzCit0aGlzIGludGVyZmFjZSBmb3IgdGhlIENvbXBvc2l0ZS4gVGhhdCBtZWFucyB0aGF0IGFubm90YXRpb25zIGZvciBib3RoIHRoZSBtZXRob2QgYXMgd2VsbCBhcyB0aGUgY29tcG9zaXRlIGlzIHByb3ZpZGVkCit0aHJvdWdoIHRoaXMgaW5qZWN0aW9uLgorCis9PSBDdXN0b20gQW5ub3RhdGlvbnMgPT0KK0l0IGlzIG9mdGVuIHVzZWZ1bCB0byBpbnRyb2R1Y2Ugb25lJ3Mgb3duIGFubm90YXRpb25zLCBlc3BlY2lhbGx5IGZvciBsaWJyYXJpZXMsIGFuZCB1c2UgdGhlc2UgYW5ub3RhdGlvbnMgdG8gZGlyZWN0Cit0aGUgcnVudGltZSB0byBkbyBkaWZmZXJlbnQgdGhpbmdzLiBNYW55IG9mIHRoZSAiYnVpbHQtaW4iIGZlYXR1cmVzIGluIFplc3QgaXMgYWN0dWFsbHkgZG9uZSBieSB0aGlzIG1lY2hhbmlzbSBhbmQKK25vdCBkaXJlY3RseSBpbXBsZW1lbnRlZCBpbiB0aGUgQ29yZSBSdW50aW1lLgorCitGaXJzdCBjcmVhdGUgYW4gYW5ub3RhdGlvbiBvZiB5b3VyIG93biBsaWtpbmcsIGl0IG11c3QgaGF2ZSAramF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKyBzZXQgdG8gK1JVTlRJTUUrCisKK1tzbmlwcGV0LGphdmFdCistLS0tLS0tLS0tLQorc291cmNlPWNvcmUvcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3J1bnRpbWUvaW5qZWN0aW9uL0ludm9jYXRpb25JbmplY3Rpb25UZXN0LmphdmEKK3RhZz1hbm5vdGF0aW9uCistLS0tLS0tLS0tLQorCitBZnRlciB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgdGhpcyBhbm5vdGF0aW9uIHBsYWNlZCBvbiBjb21wb3NpdGUgdHlwZSBtZXRob2RzLAorCitbc25pcHBldCxqYXZhXQorLS0tLS0tLS0tLS0KK3NvdXJjZT1jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9JbnZvY2F0aW9uSW5qZWN0aW9uVGVzdC5qYXZhCit0YWc9ZGVjbGFyYXRpb24KKy0tLS0tLS0tLS0tCisKK2FuZCB0aGVuIHRoZSBhbm5vdGF0aW9uIGNhbiBzaW1wbHkgYmUgaW5qZWN0ZWQgaW50byB5b3VyIENvbmNlcm5zIG9yIE1peGlucywgbGlrZSB0aGlzOworCitbc25pcHBldCxqYXZhXQorLS0tLS0tLS0tLS0KK3NvdXJjZT1jb3JlL3J1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9ydW50aW1lL2luamVjdGlvbi9JbnZvY2F0aW9uSW5qZWN0aW9uVGVzdC5qYXZhCit0YWc9dXNlMQorLS0tLS0tLS0tLS0KKworPT0gamF2YS51dGlsLkl0ZXJhYmxlPE1ldGhvZD4gPT0KK1RoaXMgaW5qZWN0aW9uIHdpbGwgcHJvdmlkZSBhbGwgdGhlIGRlY2xhcmVkIG1ldGhvZHMgb2YgdGhlIGN1cnJlbnQgY29tcG9zaXRlLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1peGlucworb3IgY29uY2VybnMgdGhhdCBidWlsZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBvc2l0ZSB0aGV5IGJlbG9uZyB0by4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWxldmVyYWdlLXByb3BlcnRpZXMudHh0IGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1sZXZlcmFnZS1wcm9wZXJ0aWVzLnR4dAppbmRleCAyNGJkZTJjLi4xOTM0ZjhjIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLWxldmVyYWdlLXByb3BlcnRpZXMudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tbGV2ZXJhZ2UtcHJvcGVydGllcy50eHQKQEAgLTE2LDcgKzE2LDcgQEAKIFtbaG93dG8tbGV2ZXJhZ2UtcHJvcGVydGllcyxMZXZlcmFnZSBQcm9wZXJ0aWVzXV0KID0gTGV2ZXJhZ2UgUHJvcGVydGllcyA9CiAKLVFpNGogZG9lcyBub3QgZm9sbG93IHRoZSBKYXZhQmVhbnMgc3RhbmRhcmQgZm9yIHByb3BlcnR5IHN1cHBvcnQuIEluc3RlYWQsIGEgbXVjaCBtb3JlIGV4cGxpY2l0IGNvbmNlcHQgaXMgaW4gcGxhY2UuIFRoZQorWmVzdOKEoiBkb2VzIG5vdCBmb2xsb3cgdGhlIEphdmFCZWFucyBzdGFuZGFyZCBmb3IgcHJvcGVydHkgc3VwcG9ydC4gSW5zdGVhZCwgYSBtdWNoIG1vcmUgZXhwbGljaXQgY29uY2VwdCBpcyBpbiBwbGFjZS4gVGhlCiBhZHZhbnRhZ2VzIGFyZSBlbm9ybW91cywgYW5kIHRoZSBvbmx5IHJlYWwgZG93bnNpZGUgaXMgdGhhdCBwZW9wbGUgYXJlIGFscmVhZHkgZGVzdHJveWVkLCB0aGlua2luZyBpbiBzbyBjYWxsZWQgUE9KTwogdGVybXMuCiAKQEAgLTI0LDkgKzI0LDkgQEAKIAogaW5jbHVkZTo6Li4vLi4vLi4vLi4vY29yZS9hcGkvYnVpbGQvZG9jcy9idWlsZGluZm8vYXJ0aWZhY3QudHh0W10KIAotQXQgcnVudGltZSB5b3Ugd2lsbCBuZWVkIHRoZSBDb3JlIFJ1bnRpbWUgYXJ0aWZhY3QgdG9vLiBTZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXFpNGo+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KK0F0IHJ1bnRpbWUgeW91IHdpbGwgbmVlZCB0aGUgQ29yZSBSdW50aW1lIGFydGlmYWN0IHRvby4gU2VlIHRoZSA8PGhvd3RvLWRlcGVuZC1vbi16ZXN0Pj4gdHV0b3JpYWwgZm9yIGRldGFpbHMuCiAKLVNvIGluIFFpNGosIGluc3RlYWQgb2Ygd3JpdGluZzsKK1NvIGluIFplc3QsIGluc3RlYWQgb2Ygd3JpdGluZzsKIAogW3NuaXBwZXQsamF2YV0KIC0tLS0tLS0tLS0tCkBAIC03MCw3ICs3MCw3IEBACiAKID09IFBlcnNpc3RlbmNlID09CiAKLVRoZSBQcm9wZXJ0eSBjb25jZXB0IGFsc28gYWxsb3dzIGEgbXVjaCBiZXR0ZXIgZGVmaW5lZCBwZXJzaXN0ZW5jZSBtb2RlbC4gSW4gUWk0aiwgb25seSBQcm9wZXJ0eSBhbmQgQXNzb2NpYXRpb24KK1RoZSBQcm9wZXJ0eSBjb25jZXB0IGFsc28gYWxsb3dzIGEgbXVjaCBiZXR0ZXIgZGVmaW5lZCBwZXJzaXN0ZW5jZSBtb2RlbC4gSW4gWmVzdCwgb25seSBQcm9wZXJ0eSBhbmQgQXNzb2NpYXRpb24KIGluc3RhbmNlcyBhcmUgcGVyc2lzdGVkLCBhbmQgdGhhdCBtYWtlcyB0aGUgc2VtYW50aWNzIGFyb3VuZCB0aGUgcGVyc2lzdGVuY2Ugc3lzdGVtIHZlcnkgY2xlYXIuCiAKIFByb3BlcnRpZXMgcmVmZXJlbmNlIHZhbHVlcyBvbmx5LCBhbmQgdGhlc2UgdmFsdWVzIG11c3QgYmUgU2VyaWFsaXphYmxlLCB3aGljaCBtZWFucyB0aGF0IFByb3BlcnRpZXMgY2FuIG5vdCBjb250YWluCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLXJlbGVhc2luZy1hcGFjaGUudHh0IGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1yZWxlYXNpbmctYXBhY2hlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTI5MzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by1yZWxlYXNpbmctYXBhY2hlLnR4dApAQCAtMCwwICsxLDYzNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1tbcmVsZWFzaW5nLWFwYWNoZSxSZWxlYXNpbmcgWmVzdF1dCis9IFJlbGVhc2luZyBaZXN04oSiCisKK1tXQVJOSU5HXQorPT09PQorWW91IG5lZWQgYSB1bml4LWxpa2UgZW52aXJvbm1lbnQgdG8gYWN0dWFsbHkgcGVyZm9ybSB0aGUgcmVsZWFzZSBwcm9jZXNzLgorVGhpcyB0dXRvcmlhbCBpcyBrbm93biB0byB3b3JrIG9uIExpbnV4IGFuZCBNYWMuCis9PT09CisKK1RoaXMgdHV0b3JpYWwgaXMgaW50ZW5kZWQgZm9yIEFwYWNoZSBaZXN04oSiIGNvbW1pdGVycyB3aG8gd2FudCB0byByZWxlYXNlIGEgbmV3IHZlcnNpb24gb2YgQXBhY2hlIFplc3TihKIgKEphdmEgRWRpdGlvbikgYXQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorSXQgZGVzY3JpYmVzIHRoZSB0b29scyBhbmQgcHJvY2Vzc2VzIG9mIGEgdHlwaWNhbCByZWxlYXNlLgorCitJdCBpcyBpbnRlbmRlZCB0byBiZSBhIHJlY29tbWVuZGF0aW9uIG9mIGJlc3QgcHJhY3RpY2VzIGZvciB0aGUgQXBhY2hlIFplc3TihKIgcHJvamVjdC4KK1RoZSBpbnN0cnVjdGlvbnMgcHJvdmlkZWQgaGVyZSBhcmUgY29uc2lzdGVudCB3aXRoLCBidXQgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBodHRwczovL3d3dy5hcGFjaGUub3JnL2Rldi9yZWxlYXNlLmh0bWxbQVNGIFJlbGVhc2UgR3VpZGVsaW5lc10uCisKKworCis9PSBQcmVwYXJpbmcgYSByZWxlYXNlCisKKworPT09IFNlbGVjdCBhIFJlbGVhc2UgTWFuYWdlcgorCitBIFplc3QgY29tbWl0dGVyIChub3JtYWxseSBvbmUgb2YgdGhlIGRldmVsb3BtZW50IHRlYW0pIHNob3VsZCBwb3N0IGFuIGVtYWlsIHRvIHRoZSBkZXZlbG9wbWVudCBsaXN0IHByb3Bvc2luZyB0aGF0IGEgcmVsZWFzZSBiZSBtYWRlIGFuZCBub21pbmF0aW5nIGEgcmVsZWFzZSBtYW5hZ2VyLgorVHlwaWNhbGx5LCB0aGUgcHJvcG9zZXIgdm9sdW50ZWVycyBhcyB0aGUgcmVsZWFzZSBtYW5hZ2VyIGFuZCBpdCBwYXNzZXMgYnkgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2dsb3NzYXJ5Lmh0bWwjTGF6eUNvbnNlbnN1c1tsYXp5IGNvbnNlbnN1c10uCisKKworPT09IENsb25lL0NoZWNrb3V0IGFsbCByZXBvc2l0b3JpZXMKKworQ2xvbmUvY2hlY2tvdXQgYWxsIG5lZWRlZCByZXBvc2l0b3JpZXMsIG5leHQgdG8gZWFjaCBvdGhlcjoKKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK21rZGlyIHplc3QtcmVwb3MKK2NkIHplc3QtcmVwb3MKK2dpdCBjbG9uZSBodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvemVzdC1qYXZhLmdpdCB6ZXN0LWphdmEKK3N2biBjaGVja291dCBodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi96ZXN0LyB6ZXN0LXdlYgorc3ZuIGNoZWNrb3V0IC0tZGVwdGggZW1wdHkgaHR0cHM6Ly9kaXN0LmFwYWNoZS5vcmcvcmVwb3MvZGlzdC8gemVzdC1kaXN0CitjZCB6ZXN0LWRpc3QKK3N2biB1cGRhdGUgLS1zZXQtZGVwdGggaW1tZWRpYXRlcyBkZXYKK3N2biB1cGRhdGUgLS1zZXQtZGVwdGggaW1tZWRpYXRlcyByZWxlYXNlCitzdm4gdXBkYXRlIC0tc2V0LWRlcHRoIGluZmluaXR5IGRldi96ZXN0Citzdm4gdXBkYXRlIC0tc2V0LWRlcHRoIGluZmluaXR5IHJlbGVhc2UvemVzdAorLS0tLQorCitZb3Ugc2hvdWxkIHRoZW4gZ2V0IHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHRyZWU6CisKK1tzb3VyY2UsdGV4dF0KKy0tLS0KKy4KK+KUlOKUgOKUgCB6ZXN0LXJlcG9zCisgICAg4pSc4pSA4pSAIHplc3QtamF2YSAgICAgICAgICAgIyBBcGFjaGUgWmVzdOKEoiAoSmF2YSBFZGl0aW9uKSBzb3VyY2UKKyAgICDilJzilIDilIAgemVzdC13ZWIgICAgICAgICAgICAjIGh0dHBzOi8vemVzdC5hcGFjaGUub3JnLyB3ZWJzaXRlCisgICAg4pSU4pSA4pSAIHplc3QtZGlzdAorICAgICAgICDilJzilIDilIAgZGV2CisgICAgICAgIHwgICDilJTilIDilIAgemVzdCAgICAgICAgIyBSZWxlYXNlcyBjYW5kaWRhdGUgZGlzdHJpYnV0aW9ucworICAgICAgICDilJTilIDilIAgcmVsZWFzZQorICAgICAgICAgICAg4pSU4pSA4pSAIHplc3QgICAgICAgICMgUmVsZWFzZXMgZGlzdHJpYnV0aW9ucworLS0tLQorCisKK1tUSVBdCis9PT09CitGcm9tIG5vdyBvbiwgYWxsIGNvbW1hbmQgbGluZSBzbmlwcGV0cyBzdGFydCBmcm9tIHRoZSBgemVzdC1yZXBvc2AgZGlyZWN0b3J5LgorPT09PQorCisKKz09PSBCdWlsZCBBcGFjaGUgWmVzdOKEoiAoSmF2YSBFZGl0aW9uKQorCitFbnN1cmUgeW91IGNhbiB0ZXN0LCBidWlsZCBBcGFjaGUgWmVzdOKEoiAoSmF2YSBFZGl0aW9uKSwgaW5jbHVkaW5nIHRoZSBkb2N1bWVudGF0aW9uIG1pbmlzaXRlIGdlbmVyYXRpb24gdXNpbmcgQXNjaWlkb2MgYW5kIGFydGlmYWN0IHNpZ25pbmcuCisKK0hlcmUgaXMgd2hhdCBzaG91bGQgcGFzcyBiZWZvcmUgZ29pbmcgZnVydGhlcjoKKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK2NkIHplc3QtamF2YQorLi9ncmFkbGV3IC1EdmVyc2lvbj0iPFJFTEVBU0UtVkVSU0lPTj4iIHdlYnNpdGUgc2lnbkFyY2hpdmVzCistLS0tCisKK1NlZSB0aGUgPDxidWlsZC1zeXN0ZW0sIEJ1aWxkIFN5c3RlbT4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgorCisKKz09PSBJbnN0YWxsIEpla3lsbAorCitNb3Jlb3ZlciwgeW91IHdpbGwgbmVlZCB0byBoYXZlIGEgdmFsaWQgaHR0cDovL2pla3lsbHJiLmNvbS9bSmVreWxsXSBpbnN0YWxsYXRpb24gYXMgdGhlIEFwYWNoZSBaZXN04oSiIGh0dHBzOi8vemVzdC5hcGFjaGUub3JnL1t3ZWJzaXRlXSBpcyBnZW5lcmF0ZWQgdXNpbmcgaXQuCisKKworPT09IFNldHVwIGdpdCBmbG93CisKK2BnaXQtZmxvd2AgaXMgYSBnaXQgZXh0ZW5zaW9uIHRoYXQgYWRkIGdpdCBjb21tYW5kcyB0byBlYXNpbHkgdXNlIHRoZSBnaXQgZmxvdyBicmFuY2hpbmcgbW9kZWwgdGhlIEFwYWNoZSBaZXN04oSiIHByb2plY3QgZm9sbG93cy4KK1NlZSB0aGUgaHR0cHM6Ly9naXRodWIuY29tL252aWUvZ2l0Zmxvdy93aWtpL0luc3RhbGxhdGlvbltpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zXS4KKworCis9PT0gU2V0dXAgZ2l0IHNpZ25pbmcKKworRW5zdXJlIHlvdSBjYW4gc2lnbiBnaXQgdGFncy4KKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK2dpdCBjb25maWcgLS1nbG9iYWwgdXNlci5zaWduaW5na2V5IDxZT1VSLVBHUC1JRD4KKy0tLS0KKworU2VlIHRoZSBodHRwczovL2dpdC1zY20uY29tL2Jvb2svdHIvdjIvR2l0LVRvb2xzLVNpZ25pbmctWW91ci1Xb3JrW0dpdCBUb29scyAtIFNpZ25pbmcgWW91ciBXb3JrXSBzZWN0aW9uIG9mIHRoZSBHaXQgYm9vay4KKworCis9PT0gU2V0dXAgQXBhY2hlIE5leHVzIGNyZWRlbnRpYWxzCisKK1NlZSB0aGUgQXBhY2hlIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZGV2L3B1Ymxpc2hpbmctbWF2ZW4tYXJ0aWZhY3RzLmh0bWxbUHVibGlzaGluZyBNYXZlbiBBcnRpZmFjdHNdIGd1aWRlIGFuZCB0aGUgQXBhY2hlIFplc3TihKIgKEphdmEgRWRpdGlvbikgPDxidWlsZC1zeXN0ZW0sQnVpbGQgU3lzdGVtPj4gdHV0b3JpYWwuCisKKworPT09IFVwZGF0ZSB0aGUgYEtFWVNgIGZpbGVzIGlmIG5lZWRlZC4KKworVGhlIHJlZmVyZW5jZSBgS0VZU2AgZmlsZSBjYW4gYmUgZm91bmQgYXQgdGhlIGB6ZXN0LWphdmFgIHJlcG9zaXRvcnkncyByb290LCB0aGF0IGlzIGB6ZXN0LWphdmEvS0VZU2AuCitFbnN1cmUgdGhhdCBpdCBjb250YWlucyB5b3VyIHB1YmxpYyBrZXkuCisKK05leHQsIGRpZmYgaXQgYWdhaW5zdCB0aGUgb25lcyBwcmVzZW50IGluIHRoZSBgZGV2YCBhbmQgYHJlbGVhc2VgIGRpc3RyaWJ1dGlvbiBhcmVhczoKKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK2RpZmYgemVzdC1qYXZhL0tFWVMgemVzdC1kaXN0L2Rldi96ZXN0L0tFWVMKK2RpZmYgemVzdC1qYXZhL0tFWVMgemVzdC1kaXN0L3JlbGVhc2UvemVzdC9LRVlTCistLS0tCisKK0FuZCB1cGRhdGUgdGhlbSBpZiBuZWVkZWQ6CisKK1tzb3VyY2Usc2hlbGxdCistLS0tCitjcCB6ZXN0LWphdmEvS0VZUyB6ZXN0LWRpc3QvZGV2L3plc3QvS0VZUworY3AgemVzdC1qYXZhL0tFWVMgemVzdC1kaXN0L3JlbGVhc2UvemVzdC9LRVlTCitjZCB6ZXN0LWRpc3QvZGV2L3plc3QKK3N2biBhZGQgZGV2L3plc3QvS0VZUyByZWxlYXNlL3plc3QvS0VZUworc3ZuIGNvbW1pdCAtbSAiemVzdDogdXBkYXRpbmcgWmVzdCBLRVlTIgorLS0tLQorCisKKworPT0gQ3JlYXRpbmcgYSBSZWxlYXNlIENhbmRpZGF0ZQorCisKKz09PSBSZXNvbHZlIEpJUkEgaXNzdWVzCisKK1Jlc29sdmUgYWxsIGlzc3VlcyBvbiB0aGF0IHZlcnNpb24hCitUaGV5IGNhbiBiZSByZXNvbHZlZCBieToKKworLSBmaXhpbmcKKy0gbWFya2luZyB0aGVtIGFzIGBJTlZBTElEYCBvciBgV09OVEZJWGAKKy0gY2hhbmdpbmcgdGhlaXIgZml4IHZlcnNpb24gdG8gYW5vdGhlciB1bnJlbGVhc2VkIHZlcnNpb24KKworU2VlIHRoZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1pFU1RbWkVTVF0gcHJvamVjdCBvbiBKSVJBLgorCisKKz09PSBQcmVwYXJlIFJlbGVhc2UtTm90ZXMKKworQXBhY2hlIFplc3TihKIgcmVsZWFzZS1ub3RlcyBhcmUgZ2VuZXJhdGVkIGZyb20gSklSQSBpc3N1ZXMuCisKK09wZW4gdGhlIHRhcmdldCBaZXN04oSiIHZlcnNpb24ncyByZWxlYXNlLW5vdGVzIGluIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvWkVTVC8/c2VsZWN0ZWRUYWI9Y29tLmF0bGFzc2lhbi5qaXJhLmppcmEtcHJvamVjdHMtcGx1Z2luOnJvYWRtYXAtcGFuZWxbSklSQV0gYW5kIHJldmlldyB0aGVtLgorCitKSVJBIGNhbiBwcm9kdWNlcyByZWxlYXNlLW5vdGVzIGFzIEhUTUwgb3IgcGxhaW4tdGV4dC4KK1NldCBpdCB1cCB0byBnZW5lcmF0ZSBwbGFpbi10ZXh0IHJlbGVhc2Utbm90ZXMuCisKK1dlIHdpbGwgbmVlZCB0aGVzZSBpbiBzZXZlcmFsIGZvcm1hdHMuCitTdGFydGluZyBmcm9tIHRoZSBwbGFpbi10ZXh0IG9uZSB3ZSB3aWxsIGdlbmVyYXRlIHRoZSBvdGhlcnMuCisKK0ZpcnN0IHNhdmUgdGhlIHRleHQtcGxhaW4gcmVsZWFzZS1ub3RlcyBpbiBhIGZpbGUgbmFtZWQgYGFwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tcmVsZWFzZS1ub3Rlcy50eHRgLgorQSBnb29kIHBsYWNlIGZvciB0aGlzIGZpbGUgd291bGQgYmUgaW4gdGhlIGB6ZXN0LXJlcG9zYCBkaXJlY3RvcnkgY3JlYXRlZCBlYXJsaWVyLCBhbG9uZ3NpZGUgYWxsIHJlcG9zaXRvcmllcy4KKworQ29udmVydCB0byBBc2NpaWRvYzoKKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK2NhdCAiYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1yZWxlYXNlLW5vdGVzLnR4dCIgfCBcCisgIHNlZCAtZSAicy8qIFxbWkVTVC1cKFswLTldXCkqXF0vLSBodHRwczpcL1wvaXNzdWVzLmFwYWNoZS5vcmdcL2ppcmFcL2Jyb3dzZVwvWkVTVC1cMVtaRVNULVwxXS8iIHwgXAorICBzZWQgLWUgInMvXlwqXCovPT09LyIgPiAiYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1yZWxlYXNlLW5vdGVzLmFkb2MiCistLS0tCisKK0NvbnZlcnQgdG8gTWFya2Rvd246CisKK1tzb3VyY2Usc2hlbGxdCistLS0tCitjYXQgImFwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tcmVsZWFzZS1ub3Rlcy50eHQiIHwgXAorICBzZWQgLWUgInMvKiBcW1pFU1QtXChbMC05XVwpKlxdLy0gW1pFU1QtXDFdKGh0dHBzOlwvXC9pc3N1ZXMuYXBhY2hlLm9yZ1wvamlyYVwvYnJvd3NlXC9aRVNULVwxKS8iIHwgXAorICBzZWQgLWUgInMvXlwqXCovIyMjLyIgPiAiYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1yZWxlYXNlLW5vdGVzLm1kIgorLS0tLQorCitZb3Ugc2hvdWxkIHRoZW4gaGF2ZSB0aGUgZm9sbG93aW5nIGZpbGVzOgorCitbc291cmNlLHNoZWxsXQorLS0tLQorLgor4pSc4pSA4pSAIGFwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tcmVsZWFzZS1ub3Rlcy50eHQKK+KUnOKUgOKUgCBhcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LXJlbGVhc2Utbm90ZXMuYWRvYwor4pSU4pSA4pSAIGFwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tcmVsZWFzZS1ub3Rlcy5tZAorLS0tLQorCitXZSB3aWxsIHVzZSB0aGVtIGxhdGVyLgorCisKKz09PSBDcmVhdGUgYSBSQyBicmFuY2gKKworV2UgdXNlIGA8UkVMRUFTRS1WRVJTSU9OPi1SQyNgIHdoZXJlIGBSRUxFQVNFLVZFUlNJT05gIGlzIHRoZSB0YXJnZXQgcmVsZWFzZSB2ZXJzaW9uIGFuZCBgUkMjYCBmb3IgUmVsZWFzZSBDYW5kaWRhdGUgYW5kIGFuIGluY3JlbWVudGFsIG51bWJlciBpbiBjYXNlIHRoZSByZWxlYXNlIHByb2Nlc3MgaGFzIHRvIGJlIGRvbmUgc2V2ZXJhbCB0aW1lcy4KKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK2NkIHplc3QtamF2YQorZ2l0IGZsb3cgcmVsZWFzZSBzdGFydCAiPFJFTEVBU0UtVkVSU0lPTj4tUkMjIgorLS0tLQorCitUaGlzIHdpbGwgZXZlbnR1YWxseSBnZW5lcmF0ZXMgYSBgPFJFTEVBU0UtVkVSU0lPTj4tUkMjYCB0YWcgdGhhdCB3ZSB3aWxsIGFtZW5kIHdpdGggYSBgPFJFTEVBU0UtVkVSU0lPTj5gIHNpZ25lZCB0YWcgaWYgdGhlIHZvdGUgcGFzc2VzLCBzZWUgYmVsb3cuCisKKworPT09IEF1ZGl0IGFydGlmYWN0cyBhbmQgZGlzdHJpYnV0aW9ucworCitNYWtlIGEgY29tcGxldGUgYnVpbGQsIGRlcGxveWluZyBtYXZlbiBhcnRpZmFjdHMgbG9jYWxseToKKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK2NkIHplc3QtamF2YQorLi9ncmFkbGV3IC1EdmVyc2lvbj0iPFJFTEVBU0UtVkVSU0lPTj4iIC1QdXBsb2FkUmVwb3NpdG9yeT0iZmlsZTovLyQocHdkKS9idWlsZC9yZXBvc2l0b3JpZXMvemVzdC1qYXZhIiBcCisgICAgY2xlYW4gYXNzZW1ibGUgY2hlY2tEaXN0cyB1cGxvYWRBcmNoaXZlcworLS0tLQorCitSZXZpZXcgbWF2ZW4gYXJ0aWZhY3RzIGluIGBidWlsZC9yZXBvc2l0b3JpZXMvemVzdC1qYXZhYC4KKworQWxzbyByZXZpZXcgdGhlIHJlbGVhc2UgZGlzdHJpYnV0aW9ucyBpbiBgYnVpbGQvZGlzdHJpYnV0aW9uc2Agd2hlcmUgeW91IHNob3VsZCBmaW5kIHRoZSBmb2xsb3dpbmcgZmlsZXM6CisKK1tzb3VyY2Usc2hlbGxdCistLS0tCisuCivilJzilIDilIAgYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4udGd6CivilJzilIDilIAgYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4udGd6Lk1ENQor4pSc4pSA4pSAIGFwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tYmluLnRnei5TSEEtNTEyCivilJzilIDilIAgYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4udGd6LmFzYwor4pSc4pSA4pSAIGFwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tYmluLnppcAor4pSc4pSA4pSAIGFwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tYmluLnppcC5NRDUKK+KUnOKUgOKUgCBhcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LWJpbi56aXAuU0hBLTUxMgor4pSc4pSA4pSAIGFwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tYmluLnppcC5hc2MKK+KUnOKUgOKUgCBhcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LXNyYy50Z3oKK+KUnOKUgOKUgCBhcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LXNyYy50Z3ouTUQ1CivilJzilIDilIAgYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1zcmMudGd6LlNIQS01MTIKK+KUnOKUgOKUgCBhcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LXNyYy50Z3ouYXNjCivilJzilIDilIAgYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1zcmMuemlwCivilJzilIDilIAgYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1zcmMuemlwLk1ENQor4pSc4pSA4pSAIGFwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tc3JjLnppcC5TSEEtNTEyCivilJTilIDilIAgYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1zcmMuemlwLmFzYworLS0tLQorCitJZiBhbnksIG1ha2UgdGhlIHJlcXVpcmVkIGNoYW5nZXMsIGNvbW1pdCB0aGVtIGFuZCBpdGVyYXRlLgorCisKKz09PSBDbG9zZSB0aGUgUkMgYnJhbmNoCisKK09uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgcHJvZHVjZWQgYXJ0aWZhY3RzLCBjbG9zZSB0aGUgcmVsZWFzZSBjYW5kaWRhdGUgYnJhbmNoOgorCitbc291cmNlLHNoZWxsXQorLS0tLQorY2QgemVzdC1qYXZhCitnaXQgZmxvdyByZWxlYXNlIGZpbmlzaCAiPFJFTEVBU0UtVkVSU0lPTj4tUkMjIgorLS0tLQorCisKKz09PSBDaGVja291dCB0aGUgUkMgdGFnCisKK1RvIGJ1aWxkIHRoZSByZWxlYXNlIGNhbmRpZGF0ZSBiaXRzLCB3ZSBuZWVkIHRvIGNoZWNrb3V0IHRoZSByZWxlYXNlIGNhbmRpZGF0ZSB0YWcsIHRoYXQgd2lsbCBldmVudHVhbGx5IGJlIHByb21vdGVkIGFzIGEgc2lnbmVkIHJlbGVhc2UgdGFnLCBiZWNhdXNlIHRoZSBBcGFjaGUgWmVzdOKEoiBidWlsZCBzeXN0ZW0gZ2VuZXJhdGVzIHZlcnNpb25uaW5nIGluZm9ybWF0aW9uIGJhc2VkIG9uIGdpdCBtZXRhZGF0YS4KKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK2NkIHplc3QtamF2YQorZ2l0IGNoZWNrb3V0ICI8UkVMRUFTRS1WRVJTSU9OPi1SQyMiCistLS0tCisKKworPT09IEJ1aWxkIFJDIGFydGlmYWN0cyBhbmQgZGlzdHJpYnV0aW9ucworCitbc291cmNlLHNoZWxsXQorLS0tLQorY2QgemVzdC1qYXZhCisuL2dyYWRsZXcgLUR2ZXJzaW9uPSI8UkVMRUFTRS1WRVJTSU9OPiIgY2xlYW4gYXNzZW1ibGUKKy0tLS0KKworCis9PT0gU3RhZ2UgUkMgbWF2ZW4gYXJ0aWZhY3RzCisKK1N0YWdlIGFydGlmYWN0cyB0byBodHRwczovL3JlcG9zaXRvcnkuYXBhY2hlLm9yZy9bcmVwb3NpdG9yeS5hcGFjaGUub3JnXSA6CisKK1tzb3VyY2Usc2hlbGxdCistLS0tCitjZCB6ZXN0LWphdmEKKy4vZ3JhZGxldyAtRHZlcnNpb249IjxSRUxFQVNFLVZFUlNJT04+IiB1cGxvYWRBcmNoaXZlcworLS0tLQorCitDbG9zZSB0aGUgc3RhZ2luZyBOZXh1cyByZXBvc2l0b3J5IGJ5IGZvbGxvd2luZyB0aGUgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9kZXYvcHVibGlzaGluZy1tYXZlbi1hcnRpZmFjdHMuaHRtbCNjbG9zZS1zdGFnZVtDbG9zaW5nIHRoZSBzdGFnZWQgcmVwb3NpdG9yeV0gZ3VpZGUuCisKKworPT09IFVwbG9hZCBSQyBkaXN0cmlidXRpb25zCisKK1NvdXJjZSBhbmQgYmluYXJ5IGRpc3RyaWJ1dGlvbnMsIGNoZWNrc3VtcyBhbmQgc2lnbmF0dXJlcyBtdXN0IGJlIHVwbG9hZGVkIHRvIGh0dHBzOi8vZGlzdC5hcGFjaGUub3JnL3JlcG9zL2Rpc3QvZGV2L3plc3QvW2Rpc3QuYXBhY2hlLm9yZy9yZXBvcy9kaXN0L2Rldi96ZXN0XS4KK1RoaXMgYnVpbGQgY3JlYXRlZCB0aGVzZSBpbiB0aGUgYGJ1aWQvZGlzdHJpYnV0aW9uc2AgZGlyZWN0b3J5LCBuYW1lZCBgYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1bc3JjfGJpbl0qLipgLgorQXMgdGhpcyByZWxlYXNlIHN0aWxsIGlzIGEgc2ltcGxlIGNhbmRpZGF0ZSwgd2UnbGwgcmVuYW1lIHRoZW0gYmVmb3JlIHVwbG9hZCB0byBhZHZlcnRpc2UgdGhpcyBpbiB0aGVpciBuYW1lcy4KKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KKyMgU291cmNlIFpJUAorY3AgInplc3QtamF2YS9idWlsZC9kaXN0cmlidXRpb25zL2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tc3JjLnppcCIgInplc3QtZGlzdC9kZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1zcmMuemlwIgorY3AgInplc3QtamF2YS9idWlsZC9kaXN0cmlidXRpb25zL2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tc3JjLnppcC5NRDUiICJ6ZXN0LWRpc3QvZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtc3JjLnppcC5NRDUiCitjcCAiemVzdC1qYXZhL2J1aWxkL2Rpc3RyaWJ1dGlvbnMvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1zcmMuemlwLlNIQS01MTIiICJ6ZXN0LWRpc3QvZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtc3JjLnppcC5TSEEtNTEyIgorY3AgInplc3QtamF2YS9idWlsZC9kaXN0cmlidXRpb25zL2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tc3JjLnppcC5hc2MiICJ6ZXN0LWRpc3QvZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtc3JjLnppcC5hc2MiCisjIFNvdXJjZSBUQVIuR1oKK2NwICJ6ZXN0LWphdmEvYnVpbGQvZGlzdHJpYnV0aW9ucy9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LXNyYy50Z3oiICJ6ZXN0LWRpc3QvZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtc3JjLnRneiIKK2NwICJ6ZXN0LWphdmEvYnVpbGQvZGlzdHJpYnV0aW9ucy9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LXNyYy50Z3ouTUQ1IiAiemVzdC1kaXN0L2Rldi96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tUkMjLXNyYy50Z3ouTUQ1IgorY3AgInplc3QtamF2YS9idWlsZC9kaXN0cmlidXRpb25zL2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tc3JjLnRnei5TSEEtNTEyIiAiemVzdC1kaXN0L2Rldi96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tUkMjLXNyYy50Z3ouU0hBLTUxMiIKK2NwICJ6ZXN0LWphdmEvYnVpbGQvZGlzdHJpYnV0aW9ucy9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LXNyYy50Z3ouYXNjIiAiemVzdC1kaXN0L2Rldi96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tUkMjLXNyYy50Z3ouYXNjIgorIyBCaW5hcnkgWklQCitjcCAiemVzdC1qYXZhL2J1aWxkL2Rpc3RyaWJ1dGlvbnMvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4uemlwIiAiemVzdC1kaXN0L2Rldi96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tUkMjLWJpbi56aXAiCitjcCAiemVzdC1qYXZhL2J1aWxkL2Rpc3RyaWJ1dGlvbnMvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4uemlwLk1ENSIgInplc3QtZGlzdC9kZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1iaW4uemlwLk1ENSIKK2NwICJ6ZXN0LWphdmEvYnVpbGQvZGlzdHJpYnV0aW9ucy9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LWJpbi56aXAuU0hBLTUxMiIgInplc3QtZGlzdC9kZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1iaW4uemlwLlNIQS01MTIiCitjcCAiemVzdC1qYXZhL2J1aWxkL2Rpc3RyaWJ1dGlvbnMvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4uemlwLmFzYyIgInplc3QtZGlzdC9kZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1iaW4uemlwLmFzYyIKKyMgQmluYXJ5IFRBUi5HWgorY3AgInplc3QtamF2YS9idWlsZC9kaXN0cmlidXRpb25zL2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tYmluLnRneiIgInplc3QtZGlzdC9kZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1iaW4udGd6IgorY3AgInplc3QtamF2YS9idWlsZC9kaXN0cmlidXRpb25zL2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tYmluLnRnei5NRDUiICJ6ZXN0LWRpc3QvZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtYmluLnRnei5NRDUiCitjcCAiemVzdC1qYXZhL2J1aWxkL2Rpc3RyaWJ1dGlvbnMvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4udGd6LlNIQS01MTIiICJ6ZXN0LWRpc3QvZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtYmluLnRnei5TSEEtNTEyIgorY3AgInplc3QtamF2YS9idWlsZC9kaXN0cmlidXRpb25zL2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tYmluLnRnei5hc2MiICJ6ZXN0LWRpc3QvZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtYmluLnRnei5hc2MiCistLS0tCisKK0FuZCB0aGVuIHVwbG9hZCB0aGVtOgorCitbc291cmNlLHNoZWxsXQorLS0tLQorY2QgemVzdC1kaXN0L2Rldi96ZXN0Citzdm4gYWRkICogLS1mb3JjZQorc3ZuIGNvbW1pdCAtbSAiemVzdDogdXBsb2FkIDxSRUxFQVNFLVZFUlNJT04+IHRvIGRpc3QvZGV2L3plc3QiCistLS0tCisKKworPT0gUnVuIHRoZSB2b3RlCisKK1NlbmQgYSAiVk9URSIgdG8gdGhlIG1haWx0bzpkZXZAemVzdC5hcGFjaGUub3JnW2RldmVsb3BlciBtYWlsaW5nIGxpc3RdIGluY2x1ZGluZyBsaW5rcyB0byByZWxlYXNlIGFydGlmYWN0cy4gQSBWT1RFIGFsd2F5cyBjb250YWlucyB0d28gcGFydHMuIFNlbmQgYW4gZW1haWwgdG8gdGhlIGRldmVsb3BlciBtYWlsaW5nIGxpc3Qgd2l0aCB0aGUgc3ViamVjdCBsaW5lOgorCitbc291cmNlLHRleHRdCistLS0tCitbVk9URV0gUmVsZWFzZSBaZXN0IChKYXZhIEVkaXRpb24pIHZlcnNpb24gPFJFTEVBU0UtVkVSU0lPTj4KKy0tLS0KKworSGVyZSBpcyBhIHNhbXBsZSB0ZW1wbGF0ZToKKworW3NvdXJjZSx0ZXh0XQorLS0tLQorRGVhciBjb21tdW5pdHksCisKK0kgYW0gaGFwcHkgdG8gc3RhcnQgdGhlIFZPVEUgdGhyZWFkIGZvciBBcGFjaGUgWmVzdCAoSmF2YSBFZGl0aW9uKSA8UkVMRUFTRS1WRVJTSU9OPiEKKworVGhlIGNoYW5nZWxvZyBmb3IgdGhpcyByZWxlYXNlIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvc2VjdXJlL1JlbGVhc2VOb3RlLmpzcGE/cHJvamVjdElkPTEyMzE2ODIwJnZlcnNpb249MTIzMzI5OTcKKworVGFnOiBodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2Y/cD16ZXN0LWphdmEuZ2l0O2E9dGFnO2g9Y2MwZjgyMTFiZjQ3YjJkZjcyYTYyMzljOWZkY2QxZDY5MDZlYTI0NgorCitUaGUgZGlzdHJpYnV0aW9ucyB0byBiZSB2b3RlZCBvbiBhcmUgbG9jYXRlZCBoZXJlOiBodHRwczovL2Rpc3QuYXBhY2hlLm9yZy9yZXBvcy9kaXN0L2Rldi96ZXN0LworCitDb252ZW5pZW5jZSBhcnRpZmFjdHMgaW4gYSBtYXZlbiByZXBvc2l0b3J5IGFyZSBzdGFnZWQgaGVyZTogaHR0cHM6Ly9yZXBvc2l0b3J5LmFwYWNoZS5vcmcvY29udGVudC9ncm91cHMvc3RhZ2luZy9vcmcvcWk0ai8KKworUmVsZWFzZSBkaXN0cmlidXRpb25zIGFuZCBjb252ZW5pZW5jZSBhcnRpZmFjdHMgYXJlIHNpZ25lZCB3aXRoIHRoZSBmb2xsb3dpbmcga2V5OiBodHRwczovL2Rpc3QuYXBhY2hlLm9yZy9yZXBvcy9kaXN0L2Rldi96ZXN0L0tFWVMKKworUGxlYXNlIHZvdGUgb24gcmVsZWFzaW5nIHRoaXMgcGFja2FnZSBhcyBBcGFjaGUgWmVzdCAoSmF2YSBFZGl0aW9uKSA8UkVMRUFTRS1WRVJTSU9OPi4KKworVGhlIHZvdGUgaXMgb3BlbiBmb3IgdGhlIG5leHQgNzIgaG91cnMgYW5kIHBhc3NlcyBpZiBhIG1ham9yaXR5IG9mIGF0IGxlYXN0IHRocmVlICsxIFBNQyB2b3RlcyBhcmUgY2FzdCBhbmQgdGhlcmUgbXVzdCBiZSBtb3JlIHBvc2l0aXZlIHRoYW4gbmVnYXRpdmUgdm90ZXMuCisKK1sgXSArMSBSZWxlYXNlIEFwYWNoZSBaZXN0IChKYXZhIEVkaXRpb24pIDxSRUxFQVNFLVZFUlNJT04+CitbIF0gIDAgSSBkb24ndCBoYXZlIGEgc3Ryb25nIG9waW5pb24gYWJvdXQgdGhpcywgYnV0IEkgYXNzdW1lIGl0J3Mgb2sKK1sgXSAtMSBEbyBub3QgcmVsZWFzZSBBcGFjaGUgWmVzdCAoSmF2YSBFZGl0aW9uKSA8UkVMRUFTRS1WRVJTSU9OPiBiZWNhdXNlLi4uCisKK0hlcmUgaXMgbXkgdm90ZToKKworKzEgKGJpbmRpbmcpCisKK0NoZWVycworLS0tLQorCitBZnRlciB0aGUgdm90ZSBpcyBvdmVyLCBzZW5kIGEgIlJFU1VMVCIgZW1haWwgdG8gdGhlIGxpc3Qgd2l0aCB0aGUgc3ViamVjdCBsaW5lOgorCitbc291cmNlLHRleHRdCistLS0tCitbUkVTVUxUXVtWT1RFXSBSZWxlYXNlIFplc3QgKEphdmEgRWRpdGlvbikgdmVyc2lvbiA8UkVMRUFTRS1WRVJTSU9OPgorLS0tLQorCitIZXJlIGlzIGEgc2FtcGxlIHRlbXBsYXRlOgorCitbc291cmNlLHRleHRdCistLS0tCitUbzogIlplc3QgRGV2ZWxvcGVycyBMaXN0IiA8ZGV2QHplc3QuYXBhY2hlLm9yZz4KK0NDOiAiWmVzdCBQcm9qZWN0IE1hbmFnZW1lbnQgQ29tbWl0dGVlIExpc3QiIDxwcml2YXRlQHplc3QuYXBhY2hlLm9yZz4KK1N1YmplY3Q6IFtSRVNVTFRdW1ZPVEVdIFJlbGVhc2UgWmVzdCAoSmF2YSBFZGl0aW9uKSB2ZXJzaW9uIDxSRUxFQVNFLVZFUlNJT04+CisKK0hpLAorCitUaGUgdm90ZSBoYXMgcGFzc2VkfGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgcmVzdWx0OgorCisrMSAoYmluZGluZyk6IDw8bGlzdCBvZiBuYW1lcz4+CisrMSAobm9uIGJpbmRpbmcpOiA8PGxpc3Qgb2YgbmFtZXM+PgorCitJIHdpbGwgcHJvbW90ZXxkcm9wIHRoZSBkaXN0cmlidXRpb25zIGFuZCBhcnRpZmFjdHMuCistLS0tCisKK1ZvdGVzIG9uIHdoZXRoZXIgYSBwYWNrYWdlIGlzIHJlYWR5IHRvIGJlIHJlbGVhc2VkIHVzZSBtYWpvcml0eSBhcHByb3ZhbCAtLSBpLmUuLCBhdCBsZWFzdCB0aHJlZSBQTUMgbWVtYmVycyBtdXN0IHZvdGUgYWZmaXJtYXRpdmVseSBmb3IgcmVsZWFzZSwgYW5kIHRoZXJlIG11c3QgYmUgbW9yZSBwb3NpdGl2ZSB0aGFuIG5lZ2F0aXZlIHZvdGVzLgorCisKKz09IFZPVEUgcGFzc2VzCisKKworPT09IFNlYWwgdGhlIHJlbGVhc2UKKworQ3JlYXRlIGFuZCBzaWduIHRoZSByZWxlYXNlIGdpdCB0YWcgZnJvbSB0aGUgdW5zaWduZWQgcmVsZWFzZSBjYW5kaWRhdGUgdGFnOgorCitbc291cmNlLHNoZWxsXQorLS0tLQorY2QgemVzdC1qYXZhCitnaXQgdGFnIC1zICI8UkVMRUFTRS1WRVJTSU9OPiIgIjxSRUxFQVNFLVZFUlNJT04+LVJDIyIKKy0tLS0KKworUHVzaCBhbGwgZ2l0IGNoYW5nZXM6CisKK1tzb3VyY2Usc2hlbGxdCistLS0tCitjZCB6ZXN0LWphdmEKK2dpdCBjaGVja291dCBtYXN0ZXIKK2dpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKK2dpdCBjaGVja291dCBkZXZlbG9wCitnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCitnaXQgcHVzaCBvcmlnaW4gLS10YWdzCistLS0tCisKKworPT09IFB1Ymxpc2ggYml0cworCitQcm9tb3RlIHRoZSBzdGFnZWQgTmV4dXMgcmVwb3NpdG9yeSBzbyBpdCBnZXRzIHN5bmNoZWQgdG8gTWF2ZW4gQ2VudHJhbCBieSBmb2xsb3dpbmcgdGhlIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZGV2L3B1Ymxpc2hpbmctbWF2ZW4tYXJ0aWZhY3RzLmh0bWwjcHJvbW90ZVtQcm9tb3RpbmcgYSByZXBvXSBndWlkZS4KKworTW92ZSB0aGUgcmVsZWFzZSBkaXN0cmlidXRpb25zLCBjaGVja3N1bXMgYW5kIHNpZ25hdHVyZXMgZnJvbSBodHRwczovL2Rpc3QuYXBhY2hlLm9yZy9yZXBvcy9kaXN0L2Rldi96ZXN0L1t6ZXN0LWRpc3QvZGV2L3plc3RdIHRvIGh0dHBzOi8vZGlzdC5hcGFjaGUub3JnL3JlcG9zL2Rpc3QvcmVsZWFzZS96ZXN0L1t6ZXN0LWRpc3QvcmVsZWFzZS96ZXN0XToKKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK2NkIHplc3QtZGlzdAorIyBTb3VyY2UgWklQCitzdm4gbW92ZSAiZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtc3JjLnppcCIgInJlbGVhc2UvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LXNyYy56aXAiCitzdm4gbW92ZSAiZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtc3JjLnppcC5NRDUiICJyZWxlYXNlL3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1zcmMuemlwLk1ENSIKK3N2biBtb3ZlICJkZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1zcmMuemlwLlNIQS01MTIiICJyZWxlYXNlL3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1zcmMuemlwLlNIQS01MTIiCitzdm4gbW92ZSAiZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtc3JjLnppcC5hc2MiICJyZWxlYXNlL3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1zcmMuemlwLmFzYyIKKyMgU291cmNlIFRBUi5HWgorc3ZuIG1vdmUgImRldi96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tUkMjLXNyYy50Z3oiICJyZWxlYXNlL3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1zcmMudGd6Igorc3ZuIG1vdmUgImRldi96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tUkMjLXNyYy50Z3ouTUQ1IiAicmVsZWFzZS96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tc3JjLnRnei5NRDUiCitzdm4gbW92ZSAiZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtc3JjLnRnei5TSEEtNTEyIiAicmVsZWFzZS96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tc3JjLnRnei5TSEEtNTEyIgorc3ZuIG1vdmUgImRldi96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tUkMjLXNyYy50Z3ouYXNjIiAicmVsZWFzZS96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tc3JjLnRnei5hc2MiCisjIEJpbmFyeSBaSVAKK3N2biBtb3ZlICJkZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1iaW4uemlwIiAicmVsZWFzZS96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tYmluLnppcCIKK3N2biBtb3ZlICJkZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1iaW4uemlwLk1ENSIgInJlbGVhc2UvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LWJpbi56aXAuTUQ1Igorc3ZuIG1vdmUgImRldi96ZXN0L2FwYWNoZS16ZXN0LWphdmEtPFJFTEVBU0UtVkVSU0lPTj4tUkMjLWJpbi56aXAuU0hBLTUxMiIgInJlbGVhc2UvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LWJpbi56aXAuU0hBLTUxMiIKK3N2biBtb3ZlICJkZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1iaW4uemlwLmFzYyIgInJlbGVhc2UvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LWJpbi56aXAuYXNjIgorIyBCaW5hcnkgVEFSLkdaCitzdm4gbW92ZSAiZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtYmluLnRneiIgInJlbGVhc2UvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LWJpbi50Z3oiCitzdm4gbW92ZSAiZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtYmluLnRnei5NRDUiICJyZWxlYXNlL3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4udGd6Lk1ENSIKK3N2biBtb3ZlICJkZXYvemVzdC9hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LVJDIy1iaW4udGd6LlNIQS01MTIiICJyZWxlYXNlL3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4udGd6LlNIQS01MTIiCitzdm4gbW92ZSAiZGV2L3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1SQyMtYmluLnRnei5hc2MiICJyZWxlYXNlL3plc3QvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPi1iaW4udGd6LmFzYyIKKy0tLS0KKworQW5kIHVwbG9hZCB0aGVtOgorCitbc291cmNlLHNoZWxsXQorLS0tLQorY2QgemVzdC1kaXN0Citzdm4gY29tbWl0IC1tICJ6ZXN0OiA8UkVMRUFTRS1WRVJTSU9OPi1SQyMgdm90ZSBwYXNzZWQsIHByb21vdGVkIGFzIDxSRUxFQVNFLVZFUlNJT04+IHJlbGVhc2UiCistLS0tCisKKworPT09IFdhaXQgMjQgaG91cnMKKworRm9yIG1pcnJvcnMgdG8gcGljayB1cCB0aGUgbmV3IGJpdHMuCisKKworPT09IFByZXBhcmUgYW4gYW5ub3VuY2VtZW50CisKK0Nvb3JkaW5hdGUgYSBwcmVzcyByZWxlYXNlIHdpdGggcHJlc3NAYXBhY2hlLm9yZy4KKworICAgIFRPRE8KKworWW91IGNhbiByZXVzZSB0aGUgcmVsZWFzZS1ub3RlcyBjb250ZW50IGZyb20gdGhlIGB0eHRgL2BhZG9jYC9gbWRgIGZpbGVzIGNyZWF0ZWQgZWFybGllci4KKworVGhpcyBhbm5vdWNlbWVudCB3aWxsIGJlIHVzZWQgaW4gYSB2YXJpZXR5IG9mIG1lZGlhIGxpa2UgZW1haWxzLCB3ZWJzaXRlcyBldGMuLi4KK1N0YXJ0IHdpdGggYSB0ZXh0IHZlcnNpb24gYW5kIG9uY2Ugc2F0aXNmaWVkIGNyZWF0ZSBhdCBsZWFzdCBhIE1hcmtkb3duIHZlcnNpb24gZm9yIHRoZSB3ZWJzaXRlLCBzZWUgYmVsb3cuCisKKworPT09IFVwZGF0ZSB0aGUgWmVzdOKEoiB3ZWJzaXRlCisKK0dlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBqYXZhZG9jIG1pbmlzaXRlOgorCitbc291cmNlLHNoZWxsXQorLS0tLQorY2QgemVzdC1qYXZhCisuL2dyYWRsZXcgLUR2ZXJzaW9uPSI8UkVMRUFTRS1WRVJTSU9OPiIgYXJjaGl2ZUphdmFkb2NzIG1hbnVhbHMKKy0tLS0KKworVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgcHV0IGFsbCBmaWxlcyBpbnRvIHRoZSBgemVzdC13ZWJgIHdlYnNpdGUgcmVwb3NpdG9yeS4KKworQ3JlYXRlIGEgbmV3IHBvc3Qgb24gdGhlIFplc3TihKIgd2Vic2l0ZSBieSBjcmVhdGluZyBhIG5ldyBNYXJrZG93biBmaWxlOgorCitbc291cmNlLHNoZWxsXQorLS0tLQorY2QgemVzdC13ZWIKK3RvdWNoICJzaXRlL3NyYy9fcG9zdHMvWVlZWS1NTS1ERC1hcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+Lm1kIgorb3BlbiAhJAorLS0tLQorCitZb3UgY2FuIHJldXNlIHRoZSBNYXJrZG93biBmb3JtYXR0ZWQgYW5ub3VuY2VtZW50IGNvbnRlbnQuCisKK0FkZCB0aGUgbmV3IHJlbGVhc2VkIHZlcnNpb24gaW4gYHplc3Qtd2ViL3NpdGUvY29udGVudC9qYXZhL3ZlcnNpb25zLmpzb25gIGJlbG93IHRoZSBgbGF0ZXN0YCBlbnRyeToKKworW3NvdXJjZSxqc10KKy0tLS0KK3sKKyAgICAiZGV2ZWxvcCI6ICJkZXZlbG9wIiwKKyAgICAibGF0ZXN0IjogImxhdGVzdCIsCisgICAgIjxSRUxFQVNFLVZFUlNJT04+IiwgIjxSRUxFQVNFLVZFUlNJT04+IiwKKyAgICAiMi4wIjogIjIuMCIsCisgICAgIjw9MS40LngiOiAiMS40IgorfQorLS0tLQorCitGaW5hbGx5LCBlZGl0IGB6ZXN0LXdlYi9zaXRlL3NyYy9fZGF0YS9yZWxlYXNlcy55bWxgIHdpdGggdGhlIG5ldyByZWxlYXNlIGRhdGEuCitVcG1vc3QgaXMgdGhlIGxhdGVzdDoKKworW3NvdXJjZSx0ZXh0XQorLS0tLQorLSB2ZXJzaW9uOiA8UkVMRUFTRS1WRVJTSU9OPgorICBhbm5vdW5jZW1lbnQ6IFlZWVkvTU0vREQvYXBhY2hlLXplc3QtamF2YS08UkVMRUFTRS1WRVJTSU9OPgorICBzaWduZXI6IEpvaG4gRG9lCisgIHBncElkOiBGQjc1MTk0MworLS0tLQorCitZb3UgY2FuIHJ1biB0aGUgWmVzdOKEoiB3ZWJzaXRlIGxvY2FsbHk6CisKK1tzb3VyY2Usc2hlbGxdCistLS0tCitjZCB6ZXN0LXdlYgoramVreWxsIHNlcnZlCistLS0tCisKK09wZW4gaHR0cDovLzEyNy4wLjAuMTo0MDAwL1todHRwOi8vMTI3LjAuMC4xOjQwMDAvXSB0byBsaXZlLXByZXZpZXcgeW91ciBjaGFuZ2VzLgorCitPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIGNoYW5nZXMsIGJ1aWxkIHRoZSBwcm9kdWN0aW9uIHdlYnNpdGU6CisKK1tzb3VyY2Usc2hlbGxdCistLS0tCitjZCB6ZXN0LXdlYgoramVreWxsIGJ1aWxkCistLS0tCisKK0FuZCBwdWJsaXNoIGl0OgorCitbc291cmNlLHNoZWxsXQorLS0tLQorc3ZuIGFkZCAqIC0tZm9yY2UKK3N2biBjb21taXQgLW0gInplc3Q6IHVwZGF0ZSB3ZWJzaXRlIgorLS0tLQorCisKKz09PSBSZWdpc3RlciB0aGUgcmVsZWFzZQorCitSZWdpc3RlciB0aGUgbmV3IHJlbGVhc2UgYXQgaHR0cHM6Ly9yZXBvcnRlci5hcGFjaGUub3JnL1tyZXBvcnRlci5hcGFjaGUub3JnXQorCisKKz09PSBBbm5vdW5jZQorCitGaW5hbGx5LCBzZW5kIGFuIGFubm91bmNlbWVudCB0byBtYWlsdG86ZGV2QHplc3QuYXBhY2hlLm9yZ1tkZXZAXSBhbmQgbWFpbHRvOnVzZXJzQHplc3QuYXBhY2hlLm9yZ1t1c2Vyc0BdIG1haWxpbmcgbGlzdHMuIEVtYWlsIGFubm91bmNlbWVudHMgc2hvdWxkIGhhdmUgdGhlIHN1YmplY3QgbGluZToKKworW3NvdXJjZSx0ZXh0XQorLS0tLQorW0FOTk9VTkNFXSBSZWxlYXNlZCBaZXN0IChKYXZhIEVkaXRpb24pIHZlcnNpb24gPFJFTEVBU0UtVkVSU0lPTj4KKy0tLS0KKworVGhlIGFubm91bmNlbWVudCBlbWFpbCBzaG91bGQgY29udGFpbnMgdGhlIHJlbGVhc2Utbm90ZXMgYXMgdGV4dCwgcmVtZW1iZXIgdGhleSBhcmUgaW4gdGhlIGBhcGFjaGUtemVzdC1qYXZhLTxSRUxFQVNFLVZFUlNJT04+LXJlbGVhc2Utbm90ZXMudHh0YCBmaWxlIHlvdSBjcmVhdGVkIGVhcmxpZXIuCisKKworCis9PSBWT1RFIGZhaWxzCisKKworPT09IFJlY29yZCBmYWlsdXJlCisKK1dlIGtlZXAgdGhlIHJlbGVhc2UgY2FuZGlkYXRlIGdpdCBoaXN0b3J5LgorSXQgY2FuIGJlIHVzZWZ1bCBmb3IgcmV2aWV3ZXJzIHRvIGhhdmUgYWNjZXNzIHRvIGl0LgorUmVtZW1iZXIsIHdlIGNyZWF0ZWQgYSByZWxlYXNlIGNhbmRpZGF0ZSBicmFuY2ggYW5kIHRhZ3MsIG5vIHNpZ25lZCByZWxlYXNlIHRhZy4KKworW3NvdXJjZSxzaGVsbF0KKy0tLS0KK2NkIHplc3QtamF2YQorZ2l0IGNoZWNrb3V0IG1hc3RlcgorZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorZ2l0IGNoZWNrb3V0IGRldmVsb3AKK2dpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKK2dpdCBwdXNoIG9yaWdpbiAtLXRhZ3MKKy0tLS0KKworCis9PT0gRHJvcCBSQyBhcnRpZmFjdHMgYW5kIGRpc3RyaWJ1dGlvbnMKKworRHJvcCB0aGUgTmV4dXMgc3RhZ2luZyByZXBvc2l0b3J5IGJ5IGZvbGxvd2luZyB0aGUgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9kZXYvcHVibGlzaGluZy1tYXZlbi1hcnRpZmFjdHMuaHRtbCNkcm9wW0Ryb3BwaW5nIGEgcmVwb10gZ3VpZGUuCisKK0Ryb3AgZGlzdHJpYnV0aW9ucywgY2hlY2tzdW1zIGFuZCBzaWduYXR1cmVzIGZyb20gaHR0cHM6Ly9kaXN0LmFwYWNoZS5vcmcvcmVwb3MvZGlzdC9kZXYvemVzdC9bemVzdC1kaXN0L2Rldi96ZXN0XQorCitbc291cmNlLHNoZWxsXQorLS0tLQorY2QgemVzdC1kaXN0L2Rldi96ZXN0Lworcm0gIio8UkVMRUFTRS1WRVJTSU9OPi1SQyMqLioiCitzdm4gYWRkICogLS1mb3JjZQorc3ZuIGNvbW1pdCAtbSAiemVzdDogZHJvcHBpbmcgPFJFTEVBU0UtVkVSU0lPTj4tUkMjIGZyb20gZGlzdC9kZXYvemVzdCBhcyB0aGUgdm90ZSBmYWlsZWQiCistLS0tCisKKworPT09IFN0YXJ0IG92ZXIKKworSWYgYSBuZXcgUkMgaXMgdG8gYmUgY3JlYXRlZCwgcmVzdGFydCB0aGUgcHJvY2VzcyBhcyBkZXNjcmliZWQgYWJvdmUuCisKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tdXNlLWlvLnR4dCBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8tdXNlLWlvLnR4dAppbmRleCBhYzFhZTEwLi43ZWFlY2Y2IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLXVzZS1pby50eHQKKysrIGIvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by11c2UtaW8udHh0CkBAIC04MCw3ICs4MCw3IEBACiAKIGluY2x1ZGU6Oi4uLy4uLy4uLy4uL2NvcmUvcnVudGltZS9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQogCi1TZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXFpNGo+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KK1NlZSB0aGUgPDxob3d0by1kZXBlbmQtb24temVzdD4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgogCiBPbmNlIHRoZXNlcyBwYXJ0cyB3ZXJlIGlkZW50aWZpZWQgaXQgd2FzIG1vc3RseSBqdXN0IGEgbWF0dGVyIG9mIHB1dHRpbmcgaW50ZXJmYWNlcyBvbiB0aGVzZSBwaWVjZXMsIGFuZCBtYWtpbmcgc3VyZQogdGhleSBjYW4gYmUgZWFzaWx5IHVzZWQgaW4gbWFueSBkaWZmZXJlbnQgc2l0dWF0aW9ucy4gVGhlIHJlc3VsdCBpcyBhcyBmb2xsb3dzLgpAQCAtMjQ1LDEwICsyNDUsMTAgQEAKIFN5c3RlbS5vdXQucHJpbnRsbigiTnIgb2YgbGluZXM6Iitjb3VudGVyLmdldENvdW50KCkpCiAtLS0tLS0tLS0tLS0tLQogCi09PSBVc2FnZSBpbiB0aGUgUWk0aiBTUEkgPT0KKz09IFVzYWdlIGluIHRoZSBaZXN04oSiIFNQSSA9PQogCiBOb3cgSSBjYW4gZmluYWxseSBnZXQgYmFjayB0byBteSBpbml0aWFsIHByb2JsZW0gdGhhdCBsZWQgbWUgdG8gbG9vayBpbnRvIHRoaXM6IGhvdyB0byBpbXBsZW1lbnQgYSBnb29kIHdheSB0byBhY2Nlc3MKLUVudGl0eVN0YXRlcyBpbiBhIFFpNGogRW50aXR5U3RvcmUsIGFuZCBwZXJmb3JtIHJlc3RvcmVzIG9mIGJhY2t1cHMuIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgYWNjZXNzaW5nIEVudGl0eVN0YXRlcyBsb29rCitFbnRpdHlTdGF0ZXMgaW4gYSBaZXN04oSiIEVudGl0eVN0b3JlLCBhbmQgcGVyZm9ybSByZXN0b3JlcyBvZiBiYWNrdXBzLiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGFjY2Vzc2luZyBFbnRpdHlTdGF0ZXMgbG9vawogbGlrZSB0aGlzOgogCiBbc291cmNlLGphdmFdCkBAIC0zMjIsNSArMzIyLDUgQEAKIGFsbG93aW5nIHRoZXNlIHRhc2tzIHRvIGJlIGRlY29yYXRlZCB3aXRoIGV4dHJhIGZlYXR1cmVzIHdoZW4gbmVlZGVkLgogCiBUaGlzIGFydGljbGUgaGFzIG91dGxpbmVkIG9uZSB3YXkgdG8gZG8gdGhpcywgYW5kIHRoZSBBUEkgYW5kIGhlbHBlcnMgdGhhdCBJJ3ZlIGRlc2NyaWJlZCBhcmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50Ci1RaTRqIENvcmUgMS4zLVNOQVBTSE9UIGluIEdpdCAoc2VlIFFpNGogaG9tZXBhZ2UgZm9yIGFjY2VzcyBkZXRhaWxzKS4gVGhlIGlkZWEgaXMgdG8gc3RhcnQgdXNpbmcgaXQgdGhyb3VnaG91dCBRaTRqCitaZXN04oSiIENvcmUgMS4zLVNOQVBTSE9UIGluIEdpdCAoc2VlIFplc3TihKIgaG9tZXBhZ2UgZm9yIGFjY2VzcyBkZXRhaWxzKS4gVGhlIGlkZWEgaXMgdG8gc3RhcnQgdXNpbmcgaXQgdGhyb3VnaG91dCBaZXN0CiB3aGVyZXZlciB3ZSBuZWVkIHRvIGRvIEkvTyBvZiB0aGUgdHlwZSBkZXNjcmliZWQgaGVyZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLXdyaXRpbmctZG9jcy50eHQgYi9tYW51YWwvc3JjL2RvY3MvdHV0b3JpYWxzL2hvd3RvLXdyaXRpbmctZG9jcy50eHQKaW5kZXggNzI2YWE0NS4uZDVlYjEzZSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3R1dG9yaWFscy9ob3d0by13cml0aW5nLWRvY3MudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy90dXRvcmlhbHMvaG93dG8td3JpdGluZy1kb2NzLnR4dApAQCAtMSw1ICsxLDI0IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tjb21tdW5pdHktZG9jcyxXcml0aW5nIERvY3VtZW50YXRpb25dXQotPSBXcml0aW5nIFFpNGogRG9jdW1lbnRhdGlvbiA9Cis9IFdyaXRpbmcgWmVzdOKEoiBEb2N1bWVudGF0aW9uID0KIAogVGhlIGRvY3VtZW50cyB1c2UgdGhlIGFzY2lpZG9jIGZvcm1hdCwgc2VlOgogCkBAIC04LDYgKzI3LDkgQEAKIAogVGhlIGNoZWF0c2hlZXQgaXMgcmVhbGx5IHVzZWZ1bCEKIAorWW91IG5lZWQgdG8gaW5zdGFsbCBgYXNjaWlkb2NgIGFuZCBgZG9jYm9vay14c2xgLgorCisKIFtbY29tbXVuaXR5LWRvY3Mtb3ZlcmFsbC1mbG93LERvY3VtZW50YXRpb24gRmxvd11dCiA9PSBPdmVyYWxsIEZsb3cgPT0KIApAQCAtMjEsNyArNDMsNyBAQAogVGhlIGFib3ZlIGZpbGVzIGFyZSBhbGwgY29uc3VtZWQgYnkgdGhlIGJ1aWxkIG9mIHRoZSBtYW51YWwgKGJ5IGFkZGluZyB0aGVtIGFzIGRlcGVuZGVuY2llcykuCiBUbyBnZXQgY29udGVudCBpbmNsdWRlZCBpbiB0aGUgbWFudWFsLCBpdCBoYXMgdG8gYmUgZXhwbGljaXRseSBpbmNsdWRlZCBieSBhIGRvY3VtZW50IGluIHRoZSBtYW51YWwgYXMgd2VsbC4KIAotVGhlIHdob2xlIGRvY3VtZW50YXRpb24gc2V0IGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBfKm1hbnVhbCpfIG1vZHVsZSBpbiB0aGUgK3FpNGotc2RrKywgYW5kIHdlIGFyZSBjdXJyZW50bHkgb25seSBjcmVhdGluZyB0aGUgd2Vic2l0ZS4KK1RoZSB3aG9sZSBkb2N1bWVudGF0aW9uIHNldCBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgXyptYW51YWwqXyBtb2R1bGUgaW4gdGhlIFNESywgYW5kIHdlIGFyZSBjdXJyZW50bHkgb25seSBjcmVhdGluZyB0aGUgd2Vic2l0ZS4KIFRoZSBVc2VyIEd1aWRlIGFuZCBSZWZlcmVuY2UgTWFudWFsIGFyZSBmdXR1cmUgcHJvamVjdHMuCiAKID09IEhlYWRpbmdzIGFuZCBkb2N1bWVudCBzdHJ1Y3R1cmUgPT0KQEAgLTEwNSwyOCArMTI3LDI4IEBACiAKIFtzb3VyY2VdCiAtLS0tCi1odHRwOi8vd3d3LnFpNGoub3JnL1tMaW5rIHRleHQgaGVyZV0KK2h0dHBzOi8vemVzdC5hcGFjaGUub3JnL1tMaW5rIHRleHQgaGVyZV0KIC0tLS0KIAotV2hpY2ggcmVuZGVycyBsaWtlOiBodHRwOi8vd3d3LnFpNGoub3JnL1tMaW5rIHRleHQgaGVyZV0KK1doaWNoIHJlbmRlcnMgbGlrZTogaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvW0xpbmsgdGV4dCBoZXJlXQogCiBGb3Igc2hvcnQgbGlua3MgaXQgbWF5IGJlIGJldHRlciBub3QgdG8gYWRkIGEgbGluayB0ZXh0LCBqdXN0IGRvOgogCiBbc291cmNlXQogLS0tLQotaHR0cDovL3d3dy5xaTRqLm9yZy8KK2h0dHBzOi8vemVzdC5hcGFjaGUub3JnLwogLS0tLQogCi1XaGljaCByZW5kZXJzIGxpa2U6IGh0dHA6Ly93d3cucWk0ai5vcmcvCitXaGljaCByZW5kZXJzIGxpa2U6IGh0dHBzOi8vemVzdC5hcGFjaGUub3JnLwogCiBJdCdzIG9rIHRvIGhhdmUgYSBkb3QgcmlnaHQgYWZ0ZXIgdGhlIFVSTCwgaXQgd29uJ3QgYmUgcGFydCBvZiB0aGUgbGluay4KIAogW3NvdXJjZV0KIC0tLS0KLWh0dHA6Ly93d3cucWk0ai5vcmcvLgoraHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvLgogLS0tLQogCi1XaGljaCByZW5kZXJzIGxpa2U6IGh0dHA6Ly93d3cucWk0ai5vcmcvLgorV2hpY2ggcmVuZGVycyBsaWtlOiBodHRwczovL3plc3QuYXBhY2hlLm9yZy8uCiAKID09IFRleHQgRm9ybWF0dGluZyA9PQogCkBAIC0yMDksNyArMjMxLDcgQEAKICAtLS0tLS0tLS0tLQogLS0tLQogCi1UaGUgc291cmNlIGZpbGUgaXMgcmVsYXRpdmUgdG8gdGhlICtxaTRqLXNkaysgcm9vdCwgYW5kIHRoZSAndGFnJyBpcyBkZWZpbmVkIGluIHRoZSBzb3VyY2UgZmlsZS4KK1RoZSBzb3VyY2UgZmlsZSBpcyByZWxhdGl2ZSB0byB0aGUgU0RLIHJvb3QsIGFuZCB0aGUgJ3RhZycgaXMgZGVmaW5lZCBpbiB0aGUgc291cmNlIGZpbGUuCiBUaGUgYWJvdmUgY291bGQgYmUgYnJpbmdpbmcgaW4gY29udGVudCB0aGF0IGxvb2tzIGxpa2U7CiAKIFtzb3VyY2VdCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2NvcmUudHh0IGIvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9jb3JlLnR4dAppbmRleCA4MGNjN2UyLi5iNmQ3N2RlIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2NvcmUudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvY29yZS50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIDpsZXZlbG9mZnNldDogMQogCiBbW2NvcmUsQ29yZV1dCkBAIC01LDIwICsyNCwyMCBAQAogCiA9PSBPdmVydmlldyA9PQogCi1UaGUgUWk0aiBDb3JlIGlzIGNvbXBvc2VkIG9mIHNldmVyYWwgYXJ0aWZhY3RzIGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24uCitUaGUgWmVzdOKEoiBDb3JlIGlzIGNvbXBvc2VkIG9mIHNldmVyYWwgYXJ0aWZhY3RzIGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24uCiAKIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3cgdGhlIENvcmUgYXJ0aWZhY3RzIGFsb25nc2lkZSA8PGxpYnJhcmllcyxsaWJyYXJpZXM+PiBhbmQgPDxleHRlbnNpb25zLGV4dGVuc2lvbnM+PiwgYW5kLCBpbiBncmVlbiwKIHR5cGljYWwgYXBwbGljYXRpb25zIGFydGlmYWN0cy4gVGhpcyBpcyBub3QgYSBmdWxsIGNvZGUgZGVwZW5kZW5jeSBncmFwaCBidXQgc2hvdWxkIGdpdmUgeW91IGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlCi1waWVjZXMgZml0IHRvZ2V0aGVyLiBGaW5kIG91dCBtb3JlIGFib3V0IGVhY2ggb2YgdGhlIFFpNGogQ29yZSBhcnRpZmFjdHMgYmVsb3cuCitwaWVjZXMgZml0IHRvZ2V0aGVyLiBGaW5kIG91dCBtb3JlIGFib3V0IGVhY2ggb2YgdGhlIFplc3TihKIgQ29yZSBhcnRpZmFjdHMgYmVsb3cuCiAKLS5RaTRqIENvcmUgT3ZlcnZpZXcKKy5aZXN04oSiIENvcmUgT3ZlcnZpZXcKIGltYWdlOjpjb3JlLW92ZXJ2aWV3LnBuZ1tdCiAKIC8vKjw8Y29yZS1hcGksQ29yZSBBUEk+PioKID09PSBDb3JlIEFQSSA9PT0KIAogLy9fX19fCi1UaGUgUWk0aiBDb3JlIEFQSSBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgZm9yIGNsaWVudCBhcHBsaWNhdGlvbiBjb2RlIGR1cmluZyB0aGUgbWFpbiBleGVjdXRpb24gcGhhc2UsIGkuZS4gYWZ0ZXIgdGhlCitUaGUgWmVzdOKEoiBDb3JlIEFQSSBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgZm9yIGNsaWVudCBhcHBsaWNhdGlvbiBjb2RlIGR1cmluZyB0aGUgbWFpbiBleGVjdXRpb24gcGhhc2UsIGkuZS4gYWZ0ZXIgdGhlCiBhcHBsaWNhdGlvbiBoYXMgYmVlbiBhY3RpdmF0ZWQuCiAKIDw8Y29yZS1hcGksTGVhcm4gbW9yZT4+CkBAIC0yNyw5ICs0Niw5IEBACiAvLyo8PGNvcmUtYm9vdHN0cmFwLWFzc2VtYmx5LENvcmUgQm9vdHN0cmFwPj4qCiA9PT0gQ29yZSBCb290c3RyYXAgPT09CiAvL19fX18KLVFpNGogaGFzIGEgZGlzdGluY3QgYm9vdHN0cmFwIHBoYXNlLCBhbHNvIGtub3duIGFzIHRoZSBfQXNzZW1ibHlfIG9mIGFuIGFwcGxpY2F0aW9uLCB3aGVyZSB0aGUgYXBwbGljYXRpb25zIHN0cnVjdHVyZQorWmVzdOKEoiBoYXMgYSBkaXN0aW5jdCBib290c3RyYXAgcGhhc2UsIGFsc28ga25vd24gYXMgdGhlIF9Bc3NlbWJseV8gb2YgYW4gYXBwbGljYXRpb24sIHdoZXJlIHRoZSBhcHBsaWNhdGlvbnMgc3RydWN0dXJlCiBpcyBkZWZpbmVkIHByb2dyYW1tYXRpY2FsbHkuIE9uY2UgYWxsIHRoZSBsYXllcnMsIG1vZHVsZXMgYW5kIGFsbCB0aGUgY29tcG9zaXRlIHR5cGVzIGluIGVhY2ggbW9kdWxlIGhhdmUgYmVlbiBkZWZpbmVkCi10aGUgbW9kZWwgaXMgaW5zdGFudGlhdGVkIGludG8gYW4gYXBwbGljYXRpb24uIFRoaXMgZW5hYmxlcyB0aGUgZW50aXJlIF9zdHJ1Y3R1cmVfIHN5c3RlbSBpbiBRaTRqLCB3aGVyZSB0eXBlcyAiYmVsb25ncyIKK3RoZSBtb2RlbCBpcyBpbnN0YW50aWF0ZWQgaW50byBhbiBhcHBsaWNhdGlvbi4gVGhpcyBlbmFibGVzIHRoZSBlbnRpcmUgX3N0cnVjdHVyZV8gc3lzdGVtIGluIFplc3QsIHdoZXJlIHR5cGVzICJiZWxvbmdzIgogdG8gYSBtb2R1bGUgYW5kIHZpc2liaWxpdHkgcnVsZXMgZGVmaW5lIGRlZmF1bHQgYmVoYXZpb3JzLCBlbmZvcmNlbWVudCBvZiBhcmNoaXRlY3R1cmFsIGludGVncml0eSBhbmQgbXVjaCBtb3JlLgogCiA8PGNvcmUtYm9vdHN0cmFwLWFzc2VtYmx5LExlYXJuIG1vcmU+PgpAQCAtMzgsOCArNTcsOCBAQAogLy8qPDxjb3JlLXRlc3RzdXBwb3J0LENvcmUgVGVzdCBTdXBwb3J0Pj4qCiA9PT0gQ29yZSBUZXN0IFN1cHBvcnQgPT09CiAvL19fX18KLVFpNGogY29tZXMgd2l0aCBjbGFzc2VzIHRvIGhlbHAgd2l0aCB0ZXN0aW5nLiBUaGVyZSBpcyBhbHNvIHNvbWUgbW9ja2luZyBzdXBwb3J0LCB0byBhbGxvdyBzb21lIG9mIFFpNGrigJlzIHVuaXF1ZQotYXNwZWN0cyB0byBiZSBtb2NrZWQsIGJ1dCBzaW5jZSBRaTRqIGlzIHNvIGZsZXhpYmxlIGF0IGEgZmluZS1ncmFudWxhciBsZXZlbCwgd2UgaGF2ZSBmb3VuZCB0aGF0IG1vY2tpbmcgaXMgc2VsZG9tLAorWmVzdOKEoiBjb21lcyB3aXRoIGNsYXNzZXMgdG8gaGVscCB3aXRoIHRlc3RpbmcuIFRoZXJlIGlzIGFsc28gc29tZSBtb2NraW5nIHN1cHBvcnQsIHRvIGFsbG93IHNvbWUgb2YgWmVzdOKAmXMgdW5pcXVlCithc3BlY3RzIHRvIGJlIG1vY2tlZCwgYnV0IHNpbmNlIFplc3TihKIgaXMgc28gZmxleGlibGUgYXQgYSBmaW5lLWdyYW51bGFyIGxldmVsLCB3ZSBoYXZlIGZvdW5kIHRoYXQgbW9ja2luZyBpcyBzZWxkb20sCiBpZiBldmVyLCBuZWVkZWQuCiAKIDw8Y29yZS10ZXN0c3VwcG9ydCxMZWFybiBtb3JlPj4KQEAgLTQ4LDkgKzY3LDkgQEAKIC8vKjw8Y29yZS1mdW5jdGlvbmFsLENvcmUgRnVuY3Rpb25hbCBBUEk+PioKID09PSBDb3JlIEZ1bmN0aW9uYWwgQVBJID09PQogLy9fX19fCi1UaGUgUWk0aiBDb3JlIEZ1bmN0aW9uYWwgQVBJIGlzIGEgZ2VuZXJpYyBwYWNrYWdlIHRvIHdvcmsgd2l0aCBJdGVyYWJsZXMgaW4gYSAiZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBsYW5ndWFnZSIgc3R5bGUuCitUaGUgWmVzdOKEoiBDb3JlIEZ1bmN0aW9uYWwgQVBJIGlzIGEgZ2VuZXJpYyBwYWNrYWdlIHRvIHdvcmsgd2l0aCBJdGVyYWJsZXMgaW4gYSAiZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBsYW5ndWFnZSIgc3R5bGUuCiAKLVRoaXMgcGFja2FnZSBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIGV2ZXJ5dGhpbmcgZWxzZSBpbiBRaTRqIGFuZCBtYXkgYmUgdXNlZCBvbiBpdHMgb3duIGluIGFueSBraW5kIG9mIGVudmlyb25tZW50CitUaGlzIHBhY2thZ2UgaXMgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiBldmVyeXRoaW5nIGVsc2UgaW4gWmVzdOKEoiBhbmQgbWF5IGJlIHVzZWQgb24gaXRzIG93biBpbiBhbnkga2luZCBvZiBlbnZpcm9ubWVudAogc3VjaCBhcyBTcHJpbmcgb3IgSmF2YSBFRSBhcHBsaWNhdGlvbnMuCiAKIDw8Y29yZS1mdW5jdGlvbmFsLExlYXJuIG1vcmU+PgpAQCAtNTksNyArNzgsNyBAQAogLy8qPDxjb3JlLWlvLENvcmUgSS9PIEFQST4+KgogPT09IENvcmUgSS9PIEFQSSA9PT0KIC8vX19fXwotVGhlIFFpNGogQ29yZSBJL08gQVBJIHRyaWVzIHRvIGFkZHJlc3MgdGhlIHByb2JsZW0gYXJvdW5kIHNodWZmbGluZyBkYXRhIGFyb3VuZCBmcm9tIHZhcmlvdXMgSS9PIGlucHV0cyBhbmQgb3V0cHV0cywKK1RoZSBaZXN04oSiIENvcmUgSS9PIEFQSSB0cmllcyB0byBhZGRyZXNzIHRoZSBwcm9ibGVtIGFyb3VuZCBzaHVmZmxpbmcgZGF0YSBhcm91bmQgZnJvbSB2YXJpb3VzIEkvTyBpbnB1dHMgYW5kIG91dHB1dHMsCiBwb3NzaWJseSB3aXRoIHRyYW5zZm9ybWF0aW9ucyBhbmQgZmlsdGVyaW5nIGFsb25nIHRoZSB3YXkuCiAKIDw8Y29yZS1pbyxMZWFybiBtb3JlPj4KQEAgLTY4LDcgKzg3LDcgQEAKIC8vKjw8Y29yZS1zcGksQ29yZSBFeHRlbnNpb24gU1BJPj4qCiA9PT0gQ29yZSBFeHRlbnNpb24gU1BJID09PQogLy9fX19fCi1UaGUgUWk0aiBDb3JlIFJ1bnRpbWUgaGFzIGEgbnVtYmVyIG9mIGV4dGVuc2lvbiBwb2ludHMsIHdoaWNoIHdlIGNhbGwgdGhlIF9RaTRqIENvcmUgRXh0ZW5zaW9uIFNQSV8uIFRoZXNlIGFyZSBkZWZpbmVkCitUaGUgWmVzdOKEoiBDb3JlIFJ1bnRpbWUgaGFzIGEgbnVtYmVyIG9mIGV4dGVuc2lvbiBwb2ludHMsIHdoaWNoIHdlIGNhbGwgdGhlIF9aZXN04oSiIENvcmUgRXh0ZW5zaW9uIFNQSV8uIFRoZXNlIGFyZSBkZWZpbmVkCiBpbnRlcmZhY2VzIHVzZWQgKm9ubHkqIGJ5IHRoZSBDb3JlIFJ1bnRpbWUgYW5kICpuZXZlciogZGlyZWN0bHkgYnkgYXBwbGljYXRpb24gY29kZS4gPDxleHRlbnNpb25zPj4gYXJlIGFzc2VtYmxlZCBpbgogYXBwbGljYXRpb25zIGR1cmluZyB0aGUgYm9vdHN0cmFwIHBoYXNlLgogCkBAIC03OCw4ICs5Nyw4IEBACiAvLyo8PGNvcmUtc3BpLENvcmUgUnVudGltZT4+KgogPT09IENvcmUgUnVudGltZSA9PT0KIC8vX19fXwotWW91ciBjb2RlIHNob3VsZCAqbmV2ZXIqLCAqZXZlciosIGhhdmUgYSBkZXBlbmRlbmN5IG9uIFFpNGogQ29yZSBSdW50aW1lLiBJZiB5b3UgdGhpbmsgeW91IG5lZWQgdGhpcywgeW91IHNob3VsZAotcHJvYmFibHkgY29udGFjdCBxaTRqLWRldiBmb3J1bSBhdCBHb29nbGUgR3JvdXBzIGFuZCBzZWUgaWYgeW91ciB1c2VjYXNlIGNhbiBlaXRoZXIgYmUgc29sdmVkIGluIGEgZXhpc3Rpbmcgd2F5IG9yCitZb3VyIGNvZGUgc2hvdWxkICpuZXZlciosICpldmVyKiwgaGF2ZSBhIGRlcGVuZGVuY3kgb24gWmVzdOKEoiBDb3JlIFJ1bnRpbWUuIElmIHlvdSB0aGluayB5b3UgbmVlZCB0aGlzLCB5b3Ugc2hvdWxkCitwcm9iYWJseSBjb250YWN0IGRldkB6ZXN0LmFwYWNoZS5vcmcgYW5kIHNlZSBpZiB5b3VyIHVzZWNhc2UgY2FuIGVpdGhlciBiZSBzb2x2ZWQgaW4gYSBleGlzdGluZyB3YXkgb3IKIHBlcmhhcHMgdGhhdCBhIG5ldyBDb3JlIEV4dGVuc2lvbiBTUEkgaXMgbmVlZGVkLgogCiA8PGNvcmUtcnVudGltZSxMZWFybiBtb3JlPj4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvZG9jaW5mby54bWwgYi9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2RvY2luZm8ueG1sCmluZGV4IDQ4ZjM2YzYuLmM5NzAxNDUgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvZG9jaW5mby54bWwKKysrIGIvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9kb2NpbmZvLnhtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8YXV0aG9yZ3JvdXA+CiAgIDxjb3JwYXV0aG9yPlRoZSBRaTRqIENvbW11bml0eQogICA8L2NvcnBhdXRob3I+CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2V4dGVuc2lvbnMudHh0IGIvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9leHRlbnNpb25zLnR4dAppbmRleCBhY2QxYjE0Li41MTE1NzhmIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2V4dGVuc2lvbnMudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvZXh0ZW5zaW9ucy50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIDpsZXZlbG9mZnNldDogMQogCiBbW2V4dGVuc2lvbnMsRXh0ZW5zaW9uc11dCkBAIC01LDcgKzI0LDcgQEAKIAogPT0gT3ZlcnZpZXcgPT0KIAotV2UgdHJ5IHRvIGtlZXAgdGhlIFFpNGogQ29yZSBSdW50aW1lIGFzIGxlYW4gYXMgcG9zc2libGUsIGFuZCBhIGxvdCBvZiB0aGUgcG93ZXIgdG8gdGhlIFFpNGogUGxhdGZvcm0gY29tZXMgdmlhIGl0cworV2UgdHJ5IHRvIGtlZXAgdGhlIFplc3TihKIgQ29yZSBSdW50aW1lIGFzIGxlYW4gYXMgcG9zc2libGUsIGFuZCBhIGxvdCBvZiB0aGUgcG93ZXIgdG8gdGhlIFplc3TihKIgUGxhdGZvcm0gY29tZXMgdmlhIGl0cwogRXh0ZW5zaW9uIFNQSSwgd2hpY2ggZGVmaW5lcyBjbGVhciB3YXlzIHRvIGV4dGVuZCB0aGUgcGxhdGZvcm0uIFRoZXJlIGFyZSBjdXJyZW50bHkgdGhlIGZvbGxvd2luZyBFeHRlbnNpb25zIHR5cGVzLAogZWFjaCB3aXRoIHBvc3NpYmx5IG1vcmUgdGhhbiBvbmUgaW1wbGVtZW50YXRpb247CiAKQEAgLTE4LDcgKzM3LDcgQEAKICAgICogTWlncmF0aW9uCiAKIFRoaXMgc2VjdGlvbiB3aWxsIGdvIHRocm91Z2ggZWFjaCBvZiB0aGUgYXZhaWxhYmxlIGV4dGVuc2lvbnMuCi1UaGUgUWk0aiBFeHRlbnNpb25zIGFyZSBvZiB2YXJ5aW5nIG1hdHVyaXR5IGxldmVsIGFuZCB3ZSB0cnkgdG8gbWFpbnRhaW4gYSBTVEFUVVMgKGRldi1zdGF0dXMueG1sKSBmaWxlIGluZGljYXRpbmcKK1RoZSBaZXN04oSiIEV4dGVuc2lvbnMgYXJlIG9mIHZhcnlpbmcgbWF0dXJpdHkgbGV2ZWwgYW5kIHdlIHRyeSB0byBtYWludGFpbiBhIFNUQVRVUyAoZGV2LXN0YXR1cy54bWwpIGZpbGUgaW5kaWNhdGluZwogaG93IGdvb2QgdGhlIGNvZGViYXNlLCBkb2N1bWVudGF0aW9uIGFuZCB1bml0IHRlc3RzIGFyZSBmb3IgZWFjaCBvZiB0aGUgbGlicmFyaWVzLiBUaGlzIGlzIGhpZ2hseSBzdWJqZWN0aXZlIGFuZAogcG90ZW50aWFsbHkgZGlmZmVyZW50IGluZGl2aWR1YWxzIHdpbGwganVkZ2UgdGhpcyBkaWZmZXJlbnRseSwgYnV0IGF0IGxlYXN0IGl0IGdpdmVzIGEgYmFsbHBhcmsgaWRlYSBvZiB0aGUgc2l0dWF0aW9uCiBmb3Igb3VyIHVzZXJzLgpAQCAtNTQsMTAgKzczLDYgQEAKIAogOmxldmVsb2Zmc2V0OiAyCiAKLWluY2x1ZGU6Oi4uLy4uLy4uLy4uL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtZ2FlL3NyYy9kb2NzL2VzLWdhZS50eHRbXQotCi06bGV2ZWxvZmZzZXQ6IDIKLQogaW5jbHVkZTo6Li4vLi4vLi4vLi4vZXh0ZW5zaW9ucy9lbnRpdHlzdG9yZS1oYXplbGNhc3Qvc3JjL2RvY3MvZXMtaGF6ZWxjYXN0LnR4dFtdCiAKIDpsZXZlbG9mZnNldDogMgpAQCAtNzgsMTAgKzkzLDYgQEAKIAogOmxldmVsb2Zmc2V0OiAyCiAKLWluY2x1ZGU6Oi4uLy4uLy4uLy4uL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtbmVvNGovc3JjL2RvY3MvZXMtbmVvNGoudHh0W10KLQotOmxldmVsb2Zmc2V0OiAyCi0KIGluY2x1ZGU6Oi4uLy4uLy4uLy4uL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtcHJlZmVyZW5jZXMvc3JjL2RvY3MvZXMtcHJlZmVyZW5jZXMudHh0W10KIAogOmxldmVsb2Zmc2V0OiAyCkBAIC05OCwxMCArMTA5LDYgQEAKIAogOmxldmVsb2Zmc2V0OiAyCiAKLWluY2x1ZGU6Oi4uLy4uLy4uLy4uL2V4dGVuc2lvbnMvZW50aXR5c3RvcmUtdm9sZGVtb3J0L3NyYy9kb2NzL2VzLXZvbGRlbW9ydC50eHRbXQotCi06bGV2ZWxvZmZzZXQ6IDIKLQogaW5jbHVkZTo6Li4vLi4vLi4vLi4vZXh0ZW5zaW9ucy9pbmRleGluZy1lbGFzdGljc2VhcmNoL3NyYy9kb2NzL2luZGV4LWVsYXN0aWNzZWFyY2gudHh0W10KIAogOmxldmVsb2Zmc2V0OiAyCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2ZhcS50eHQgYi9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2ZhcS50eHQKaW5kZXggZDMxMzZjZS4uYmQ5MzgyOSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9mYXEudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvZmFxLnR4dApAQCAtMSw3ICsxLDI2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tmYXEsRkFRXV0KID0gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgPQogCi1JcyBpdCBwb3NzaWJsZSB0byB1c2UgU2NhbGEgd2l0aCBRaTRqPzo6Ci0gICAgICAgIFNob3J0IEFuc3dlcjogWWVzLiBTY2FsYSB0cmFpdHMgY2FuIGJlIHVzZWQgYXMgUWk0aiBmcmFnbWVudHMsIGFuZCBRaTRqIGNvbXBvc2l0ZXMgY2FuIGJlIHVzZWQgaW4gU2NhbGEuCitJcyBpdCBwb3NzaWJsZSB0byB1c2UgU2NhbGEgd2l0aCBaZXN0Pzo6CisgICAgICAgIFNob3J0IEFuc3dlcjogWWVzLiBTY2FsYSB0cmFpdHMgY2FuIGJlIHVzZWQgYXMgWmVzdOKEoiBmcmFnbWVudHMsIGFuZCBaZXN04oSiIGNvbXBvc2l0ZXMgY2FuIGJlIHVzZWQgaW4gU2NhbGEuCiAKIApkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9nbG9zc2FyeS50eHQgYi9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2dsb3NzYXJ5LnR4dAppbmRleCAyNDRmZDZjLi4zOGExMjA1IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2dsb3NzYXJ5LnR4dAorKysgYi9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2dsb3NzYXJ5LnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogOmxldmVsb2Zmc2V0OiAxCiAKIFtbZ2xvc3NhcnksR2xvc3NhcnkgU2VjdGlvbl1dCkBAIC01LDcgKzI0LDcgQEAKIAogPT0gR2xvc3NhcnkgPT0KIAotVGhlcmUgYXJlIGEgbG90IG9mIGNvbmNlcHRzIGluIFFpNGogd2hpY2ggbWF5IGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzIGluIG90aGVyIGNvbnRleHRzLiBTbyBpbiB0cnVlIERERC1zdHlsZQorVGhlcmUgYXJlIGEgbG90IG9mIGNvbmNlcHRzIGluIFplc3TihKIgd2hpY2ggbWF5IGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzIGluIG90aGVyIGNvbnRleHRzLiBTbyBpbiB0cnVlIERERC1zdHlsZQogdWJpcXVpdG91cyBsYW5ndWFnZSwgd2UgYXJlIGhlcmUgbGlzdGluZyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIHRlcm1zIGFuZCBjb25jZXB0cyB0aGF0IGFyZSBiZWluZyB1c2VkLgogCiBbZ2xvc3NhcnldCkBAIC0xNSw3ICszNCw3IEBACiBBbiBBYnN0cmFjdCBNaXhpbiBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgPDxkZWYtbWl4aW4tdHlwZT4+IGludGVyZmFjZSwgYnV0IGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBoYXMgbm90CiBpbXBsZW1lbnRlZCBhbGwgdGhlIG1ldGhvZHMuCiAKLVRoZSBRaTRqIHJ1bnRpbWUgY2FuIHVzZSBtdWx0aXBsZSA8PGRlZi1taXhpbixNaXhpbnM+PiBmb3IgZWFjaCA8PGRlZi1taXhpbi10eXBlPj4gaW50ZXJmYWNlLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGxldAorVGhlIFplc3TihKIgcnVudGltZSBjYW4gdXNlIG11bHRpcGxlIDw8ZGVmLW1peGluLE1peGlucz4+IGZvciBlYWNoIDw8ZGVmLW1peGluLXR5cGU+PiBpbnRlcmZhY2UuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gbGV0CiBhIDw8ZGVmLWdlbmVyaWMtbWl4aW4+PiBoYW5kbGUgdGhlIHJlbWFpbmluZyBtaXNzaW5nIG1ldGhvZHMuCiAtLQogCkBAIC0zNCwxMCArNTMsMTAgQEAKIFtbZGVmLWFwcGxpY2F0aW9uLEFwcGxpY2F0aW9uXV1BcHBsaWNhdGlvbjo6CiArCiAtLQotQXBwbGljYXRpb24gaXMgdGhlIHRvcCBsZXZlbCBjb25jZXB0IGhhbmRsZWQgYnkgdGhlIFFpNGogcnVudGltZSBpbnN0YW5jZS4gSXQgaG9sZHMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorQXBwbGljYXRpb24gaXMgdGhlIHRvcCBsZXZlbCBjb25jZXB0IGhhbmRsZWQgYnkgdGhlIFplc3TihKIgcnVudGltZSBpbnN0YW5jZS4gSXQgaG9sZHMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQogPDxkZWYtbGF5ZXIsTGF5ZXJzPj4gaW4gdGhlIGFwcGxpY2F0aW9uIGFyY2hpdGVjdHVyZS4gU2VlIDw8ZGVmLXN0cnVjdHVyZT4+IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCi1UaGVyZSBpcyBvbmUgYW5kIG9ubHkgb25lIEFwcGxpY2F0aW9uIGluc3RhbmNlIHBlciBRaTRqIFJ1bnRpbWUgaW5zdGFuY2UuCitUaGVyZSBpcyBvbmUgYW5kIG9ubHkgb25lIEFwcGxpY2F0aW9uIGluc3RhbmNlIHBlciBaZXN04oSiIFJ1bnRpbWUgaW5zdGFuY2UuCiAtLQogCiAKQEAgLTgzLDcgKzEwMiw3IEBACiBbW2RlZi1jb21wb3NpdGUtbWV0YXR5cGUsQ29tcG9zaXRlIE1ldGEgVHlwZV1dQ29tcG9zaXRlIE1ldGEgVHlwZTo6CiArCiAtLQotVGhlcmUgYXJlIDUgQ29tcG9zaXRlIE1ldGEgVHlwZXMgZGVmaW5lZCBpbiBRaTRqLCB3aGljaCBlYWNoIHNoYXJlIHRoZSBjb21wb3NpdGlvbiBmZWF0dXJlcyBidXQgaGF2ZSBkaXN0aW5jdAorVGhlcmUgYXJlIDUgQ29tcG9zaXRlIE1ldGEgVHlwZXMgZGVmaW5lZCBpbiBaZXN0LCB3aGljaCBlYWNoIHNoYXJlIHRoZSBjb21wb3NpdGlvbiBmZWF0dXJlcyBidXQgaGF2ZSBkaXN0aW5jdAogc2VtYW50aWMgZGlmZmVyZW5jZXMuCiAKICogPDxkZWYtZW50aXR5Y29tcG9zaXRlPj4KQEAgLTEwMSw3ICsxMjAsNyBAQAogY3JlYXRlZC4KIAogQ29tcG9zaXRlIFR5cGUgaW50ZXJmYWNlcyBtdXN0IGJlIGEgc3ViLXR5cGUgb2Ygb25lIG9mIHRoZSA1IDw8ZGVmLWNvbXBvc2l0ZS1tZXRhdHlwZSxDb21wb3NpdGUgTWV0YSBUeXBlcz4+IGRlZmluZWQgaW4KLVFpNGogb3RoZXJ3aXNlIGl0IGNhbiBub3QgYmUgaW5zdGFudGlhdGVkLgorWmVzdOKEoiBvdGhlcndpc2UgaXQgY2FuIG5vdCBiZSBpbnN0YW50aWF0ZWQuCiAtLQogCiAKQEAgLTEyMSw3ICsxNDAsNyBAQAogCiBDb25jZXJucyBhcmUgZXN0YWJsaXNoZWQgYnkgdGhlIHVzZSBvZiB0aGUgQENvbmNlcm5zIGFubm90YXRpb24gb24gY29tcG9zaXRlcy4KIAotQ29uY2VybiBpcyBvbmUgb2YgdGhlIDMga2luZHMgb2YgPDxkZWYtbW9kaWZpZXIsTW9kaWZpZXJzPj4gZGVmaW5lZCBpbiBRaTRqLgorQ29uY2VybiBpcyBvbmUgb2YgdGhlIDMga2luZHMgb2YgPDxkZWYtbW9kaWZpZXIsTW9kaWZpZXJzPj4gZGVmaW5lZCBpbiBaZXN0LgogLS0KIAogCkBAIC0xMzQsNyArMTUzLDcgQEAKIHByb3BlcnRpZXMgZmlsZXMgZmlyc3QgdGltZS4gTm90ZSB0aGF0IG9uIGNvbnNlcXVlbnQgc3RhcnQtdXBzIHRoZSBwcm9wZXJ0aWVzIGZpbGUgaXMgbm90IHJlYWQsIGFzIHRoZSBjb25maWd1cmF0aW9uIGlzCiByZWFkIGZyb20gdGhlIEVudGl0eVN0b3JlLgogCi1Db25maWd1cmF0aW9uQ29tcG9zaXRlIGlzIG9uZSBvZiB0aGUgNSA8PGRlZi1jb21wb3NpdGUtbWV0YXR5cGUsQ29tcG9zaXRlIE1ldGEgVHlwZXM+PiBkZWZpbmVkIGluIFFpNGouCitDb25maWd1cmF0aW9uQ29tcG9zaXRlIGlzIG9uZSBvZiB0aGUgNSA8PGRlZi1jb21wb3NpdGUtbWV0YXR5cGUsQ29tcG9zaXRlIE1ldGEgVHlwZXM+PiBkZWZpbmVkIGluIFplc3QuCiAKIFNlZSA8PGhvd3RvLWNvbmZpZ3VyZS1zZXJ2aWNlPj4gdG8gbGVhcm4gaG93IHRvIHVzZSBDb25maWd1cmF0aW9uIENvbXBvc2l0ZXMuCiAtLQpAQCAtMTQzLDcgKzE2Miw3IEBACiBbW2RlZi1jb25zdHJhaW50LENvbnN0cmFpbnRdXUNvbnN0cmFpbnQ6OgogKwogLS0KLUNvbnN0cmFpbnRzIGFyZSBhIGtpbmQgb2YgdmFsaWRhdG9ycywgd2hpY2ggYXJlIGNvbnN1bHRlZCBwcmlvciB0byBpbnZva2luZyB0aGUgbWV0aG9kIGNhbGwuIFFpNGogY3VycmVudGx5IG9ubHkKK0NvbnN0cmFpbnRzIGFyZSBhIGtpbmQgb2YgdmFsaWRhdG9ycywgd2hpY2ggYXJlIGNvbnN1bHRlZCBwcmlvciB0byBpbnZva2luZyB0aGUgbWV0aG9kIGNhbGwuIFplc3TihKIgY3VycmVudGx5IG9ubHkKIHN1cHBvcnRzIFBhcmFtZXRlckNvbnN0cmFpbnRzIG9uIG1ldGhvZHMgYW5kIHZhbHVlIGNvbnN0cmFpbnRzIG9uIDw8ZGVmLXByb3BlcnR5LFByb3BlcnRpZXM+PiwgYnV0IGZ1dHVyZSB2ZXJzaW9ucyB3aWxsCiBpbmNsdWRlIENvbnN0cmFpbnQgdHlwZXMgZm9yIGNoZWNraW5nIGNvbXBsZXRlIG1ldGhvZCBjYWxscyBhbmQgcmV0dXJuIHZhbHVlcy4KIApAQCAtMTUzLDcgKzE3Miw3IEBACiAKIFNlZSA8PGhvd3RvLWNyZWF0ZS1jb25zdHJhaW50Pj4gdG8gbGVhcm4gaG93IHRvIHdyaXRlIHlvdXIgb3duIENvbnN0cmFpbnRzLgogCi1Db25zdHJhaW50IGlzIG9uZSBvZiB0aGUgMyBraW5kcyBvZiA8PGRlZi1tb2RpZmllcixNb2RpZmllcnM+PiBkZWZpbmVkIGluIFFpNGouCitDb25zdHJhaW50IGlzIG9uZSBvZiB0aGUgMyBraW5kcyBvZiA8PGRlZi1tb2RpZmllcixNb2RpZmllcnM+PiBkZWZpbmVkIGluIFplc3QuCiAtLQogCiAKQEAgLTE2Myw3ICsxODIsNyBAQAogQW4gRW50aXR5IENvbXBvc2l0ZSwgb3IganVzdCBFbnRpdHkgZm9yIHNob3J0LCBpcyBhIHBlcnNpc3RlZCBjb21wb3NpdGUgd2l0aCBhbiA8PGRlZi1pZGVudGl0eT4+LiBBbiBlbnRpdHkgb25seSBoYXMKIHNjb3BlIHdpdGhpbiBhbiA8PGRlZi11bml0b2Z3b3JrPj4gYW5kIGlzIHRoZXJlZm9yIGluaGVyZW50bHkgdGhyZWFkLXNhZmUuCiAKLUVudGl0eUNvbXBvc2l0ZSBpcyBvbmUgb2YgdGhlIDUgPDxkZWYtY29tcG9zaXRlLW1ldGF0eXBlLENvbXBvc2l0ZSBNZXRhIFR5cGVzPj4gZGVmaW5lZCBpbiBRaTRqLgorRW50aXR5Q29tcG9zaXRlIGlzIG9uZSBvZiB0aGUgNSA8PGRlZi1jb21wb3NpdGUtbWV0YXR5cGUsQ29tcG9zaXRlIE1ldGEgVHlwZXM+PiBkZWZpbmVkIGluIFplc3QuCiAtLQogCiAKQEAgLTIxNiwxMSArMjM1LDExIEBACiA8PGRlZi1tb2RpZmllcixNb2RpZmllcnM+PiBhbmQgYW4gZW5kLXBvaW50IHRoYXQgd2lsbCBsaW5rIGludG8gdGhlIHN0YXRlZnVsIDw8ZGVmLW1peGluPj4uCiAKIEl0IGlzIGltcG9ydGFudCB0byByZWNvZ25pemUgdGhhdCwgZm9yIG1lbW9yeSBmb290cHJpbnQgcmVhc29ucywgSW52b2NhdGlvbiBTdGFja3MgYXJlIHNoYXJlZCBhY3Jvc3MKLTw8ZGVmLWNvbXBvc2l0ZSxDb21wb3NpdGVzPj4gb2YgdGhlIHNhbWUgPDxkZWYtY29tcG9zaXRlLXR5cGU+Pi4gVGhleSBhcmUgaG93ZXZlciB0aHJlYWQtc2FmZSwgaW4gdGhhdCBRaTRqIHdpbGwgbmV2ZXIKKzw8ZGVmLWNvbXBvc2l0ZSxDb21wb3NpdGVzPj4gb2YgdGhlIHNhbWUgPDxkZWYtY29tcG9zaXRlLXR5cGU+Pi4gVGhleSBhcmUgaG93ZXZlciB0aHJlYWQtc2FmZSwgaW4gdGhhdCBaZXN04oSiIHdpbGwgbmV2ZXIKIGJpbmQgdGhlIHNhbWUgSW52b2NhdGlvbiBTdGFjayB0byBtb3JlIHRoYW4gb25lIDw8ZGVmLWNvbXBvc2l0ZT4+IGluc3RhbmNlIGR1cmluZyBhIG1ldGhvZCBjYWxsLCBidXQgdGhhdCBiZXR3ZWVuIG1ldGhvZAogaW52b2NhdGlvbnMgdGhlIDw8ZGVmLW1vZGlmaWVyLE1vZGlmaWVycz4+IGluIHRoZSBJbnZvY2F0aW9uIFN0YWNrIGNhbiBub3QgYXNzdW1lIHRoYXQgaXQgaXMgYm91bmQgdG8gdGhlIHNhbWUKIDw8ZGVmLWNvbXBvc2l0ZT4+IGluc3RhbmNlLiBUaGVyZWZvciwgPDxkZWYtbW9kaWZpZXIsTW9kaWZpZXJzPj4gYXJlIG5vdCBleHBlY3RlZCB0byBrZWVwIHN0YXRlIGJldHdlZW4gbWV0aG9kCi1pbnZvY2F0aW9ucywgYW5kIHdoZW4gaXQgbmVlZHMgdG8gZG8gdGhhdCwgdGhlbiBpdCBzaG91bGQgcmVmZXJlbmNlIGEgPDxkZWYtbWl4aW4+PiB2aWEgdGhlIEBUaGlzIGFubm90YXRpb24uIFFpNGogd2lsbAoraW52b2NhdGlvbnMsIGFuZCB3aGVuIGl0IG5lZWRzIHRvIGRvIHRoYXQsIHRoZW4gaXQgc2hvdWxkIHJlZmVyZW5jZSBhIDw8ZGVmLW1peGluPj4gdmlhIHRoZSBAVGhpcyBhbm5vdGF0aW9uLiBaZXN04oSiIHdpbGwKIGR1cmluZyB0aGUgYmluZGluZyBvZiB0aGUgSW52b2NhdGlvbiBTdGFjayB0byB0aGUgPDxkZWYtY29tcG9zaXRlPj4sIGFsc28gZW5zdXJlIHRoYXQgYWxsIHJlZmVyZW5jZWQKIDw8ZGVmLW1peGluLE1peGlucz4+IGFyZSBjb3JyZWN0bHkgaW5qZWN0ZWQgaW4gdGhlIEludm9jYXRpb24gU3RhY2suCiAtLQpAQCAtMjI5LDcgKzI0OCw3IEBACiBbW2RlZi1sYXllcixMYXllcl1dTGF5ZXI6OgogKwogLS0KLVFpNGogcHJvbW90ZXMgYSBMYXllcmVkIGFwcGxpY2F0aW9uIGRlc2lnbiwgd2hlcmUgTGF5ZXJzIGNhbiBvbmx5IGFjY2VzcyBsb3dlciBMYXllcnMgYW5kIG5vdCBoaWdoZXIgTGF5ZXJzIG9yIExheWVycyBhdAorWmVzdOKEoiBwcm9tb3RlcyBhIExheWVyZWQgYXBwbGljYXRpb24gZGVzaWduLCB3aGVyZSBMYXllcnMgY2FuIG9ubHkgYWNjZXNzIGxvd2VyIExheWVycyBhbmQgbm90IGhpZ2hlciBMYXllcnMgb3IgTGF5ZXJzIGF0CiB0aGUgc2FtZSBsZXZlbC4KIC0tCiAKQEAgLTMyNiw3ICszNDUsNyBAQAogLS0KIFNlcnZpY2UgQ29tcG9zaXRlIGlzIGEgc3VidHlwZSBvZiA8PGRlZi1jb21wb3NpdGU+PiwgYW5kIGhhcyBhIHJhbmdlIG9mIGZlYXR1cmVzIGJ1aWx0IGludG8gaXQuCiAKLVNlcnZpY2VDb21wb3NpdGUgaXMgb25lIG9mIHRoZSA1IDw8ZGVmLWNvbXBvc2l0ZS1tZXRhdHlwZSxDb21wb3NpdGUgTWV0YSBUeXBlcz4+IGRlZmluZWQgaW4gUWk0ai4KK1NlcnZpY2VDb21wb3NpdGUgaXMgb25lIG9mIHRoZSA1IDw8ZGVmLWNvbXBvc2l0ZS1tZXRhdHlwZSxDb21wb3NpdGUgTWV0YSBUeXBlcz4+IGRlZmluZWQgaW4gWmVzdC4KIAogU2VlIHRoZSA8PGNvcmUtYXBpLXNlcnZpY2UsU2VydmljZSBDb21wb3NpdGUgY2hhcHRlcj4+LgogLS0KQEAgLTM1MSwyNCArMzcwLDI0IEBACiAKIFNpZGVFZmZlY3RzIGFyZSBlc3RhYmxpc2hlZCBieSB0aGUgdXNlIG9mIHRoZSBAU2lkZUVmZmVjdHMgYW5ub3RhdGlvbiBvbiBjb21wb3NpdGVzLgogCi1TaWRlRWZmZWN0IGlzIG9uZSBvZiB0aGUgMyBraW5kcyBvZiA8PGRlZi1tb2RpZmllcixNb2RpZmllcnM+PiBkZWZpbmVkIGluIFFpNGouCitTaWRlRWZmZWN0IGlzIG9uZSBvZiB0aGUgMyBraW5kcyBvZiA8PGRlZi1tb2RpZmllcixNb2RpZmllcnM+PiBkZWZpbmVkIGluIFplc3QuCiAtLQogCiAKIFtbZGVmLXN0cnVjdHVyZSxTdHJ1Y3R1cmVdXVN0cnVjdHVyZTo6CiArCiAtLQotUWk0aiBwcm9tb3RlcyBhIGNvbnZlbnRpb25hbCB2aWV3IG9mIGFwcGxpY2F0aW9uIHN0cnVjdHVyZSwgdGhhdCBjb21wdXRlciBzY2llbmNlIGhhcyBiZWVuIHVzaW5nIGZvciBkZWNhZGVzLgorWmVzdOKEoiBwcm9tb3RlcyBhIGNvbnZlbnRpb25hbCB2aWV3IG9mIGFwcGxpY2F0aW9uIHN0cnVjdHVyZSwgdGhhdCBjb21wdXRlciBzY2llbmNlIGhhcyBiZWVuIHVzaW5nIGZvciBkZWNhZGVzLgogCiBUaGUgZGVmaW5pdGlvbiBpcyBhcyBmb2xsb3dzOwogCi0qIE9uZSA8PGRlZi1hcHBsaWNhdGlvbj4+IHBlciBRaTRqIHJ1bnRpbWUgaW5zdGFuY2UuCisqIE9uZSA8PGRlZi1hcHBsaWNhdGlvbj4+IHBlciBaZXN04oSiIHJ1bnRpbWUgaW5zdGFuY2UuCiAqIE9uZSBvciBtb3JlIDw8ZGVmLWxheWVyLExheWVycz4+IHBlciA8PGRlZi1hcHBsaWNhdGlvbj4+LgogKiBaZXJvLCBvbmUgb3IgbW9yZSA8PGRlZi1tb2R1bGUsTW9kdWxlcz4+IHBlciA8PGRlZi1sYXllcj4+LgogKiBaZXJvLCBvbmUgb3IgbW9yZSBBc3NlbWJsaWVzIHBlciA8PGRlZi1tb2R1bGU+Pi4KIAogVGhlIHByaW5jaXBsZSBvZiB0aGlzIFN0cnVjdHVyZSBpcyB0byBhc3Npc3QgdGhlIHByb2dyYW1tZXIgdG8gY3JlYXRlIHdlbGwgbW9kdWxhcml6ZWQgYXBwbGljYXRpb25zLCB0aGF0IGFyZSBlYXNpbHkKLWV4dGVuZGVkIGFuZCBtYWludGFpbmVkLiBRaTRqIHdpbGwgcmVzdHJpY3QgYWNjZXNzIGJldHdlZW4gPDxkZWYtbW9kdWxlLE1vZHVsZXM+Piwgc28gdGhhdCBjb2RlIGNhbiBvbmx5IHJlYWNoCitleHRlbmRlZCBhbmQgbWFpbnRhaW5lZC4gWmVzdOKEoiB3aWxsIHJlc3RyaWN0IGFjY2VzcyBiZXR3ZWVuIDw8ZGVmLW1vZHVsZSxNb2R1bGVzPj4sIHNvIHRoYXQgY29kZSBjYW4gb25seSByZWFjaAogPDxkZWYtY29tcG9zaXRlLENvbXBvc2l0ZXM+PiBhbmQgT2JqZWN0cyBpbiA8PGRlZi1tb2R1bGUsTW9kdWxlcz4+IChpbmNsdWRpbmcgaXRzZWxmKSBvZiB0aGUgc2FtZSBvciBsb3dlcgogPDxkZWYtbGF5ZXIsTGF5ZXJzPj4uCiAKQEAgLTQwNSw3ICs0MjQsNyBAQAogdGhlIHZhbHVlIGV4aXN0cyBvciBpdCBkb2Vzbid0LCBubyBuZWVkIGZvciBzeW5jaHJvbml6YXRpb24uIFZhbHVlcyBhcmUgdHlwaWNhbGx5IHZlcnkgZWFzeSB0byB0ZXN0IGFuZCB2ZXJ5IHJvYnVzdCB0bwogcmVmYWN0b3JpbmcuCiAKLVFpNGogZGVmaW5lcyB2YWx1ZXMgYXMgYSBwcmltYXJ5IG1ldGEgdHlwZSB0aHJvdWdoIHRoZSBWYWx1ZUNvbXBvc2l0ZSwgYXMgd2UgdGhpbmsgdGhlIGJlbmVmaXRzIG9mIHZhbHVlcyBhcmUgZ3JlYXQuCitaZXN04oSiIGRlZmluZXMgdmFsdWVzIGFzIGEgcHJpbWFyeSBtZXRhIHR5cGUgdGhyb3VnaCB0aGUgVmFsdWVDb21wb3NpdGUsIGFzIHdlIHRoaW5rIHRoZSBiZW5lZml0cyBvZiB2YWx1ZXMgYXJlIGdyZWF0LgogVGhlIFZhbHVlQ29tcG9zaXRlIGlzIHZlcnkgbGlnaHQtd2VpZ2h0IGNvbXBhcmVkIHRvIHRoZSA8PGRlZi1lbnRpdHljb21wb3NpdGU+PiwgYW5kIGl0cyB2YWx1ZSBjYW4gc3RpbGwgYmUgcGVyc2lzdGVkIGFzCiBwYXJ0IG9mIGFuIDw8ZGVmLWVudGl0eWNvbXBvc2l0ZT4+IHZpYSBhIDw8ZGVmLXByb3BlcnR5Pj4uCiAKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvaW5kZXgudHh0IGIvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9pbmRleC50eHQKaW5kZXggN2MzN2QwNy4uNjgzZGVlMCAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9pbmRleC50eHQKKysrIGIvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9pbmRleC50eHQKQEAgLTEsNCArMSwyMyBAQAotPSBRaTRqIHZ7cmV2bnVtYmVyfSBVc2VyIEd1aWRlID0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCis9IFplc3TihKIgdntyZXZudW1iZXJ9IFVzZXIgR3VpZGUgPQogCiA6cWk0ai12ZXJzaW9uOiB7cmV2bnVtYmVyfQogOnFpNGotYnVpbGRudW1iZXI6IHtyZXZudW1iZXJ9CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2xpYnJhcmllcy50eHQgYi9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL2xpYnJhcmllcy50eHQKaW5kZXggY2Q5OGMyNC4uYjEzYWMzOSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9saWJyYXJpZXMudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvbGlicmFyaWVzLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogOmxldmVsb2Zmc2V0OiAxCiAKIFtbbGlicmFyaWVzLExpYnJhcmllc11dCkBAIC01LDExICsyNCwyMiBAQAogCiA9PSBPdmVydmlldyA9PQogCi1UaGUgUWk0aiBMaWJyYXJpZXMgYXJlIG9mIHZhcnlpbmcgbWF0dXJpdHkgbGV2ZWwgYW5kIHdlIHRyeSB0byBtYWludGFpbiBhIFNUQVRVUyAoZGV2LXN0YXR1cy54bWwpIGZpbGUgaW5kaWNhdGluZworVGhlIFplc3TihKIgTGlicmFyaWVzIGFyZSBvZiB2YXJ5aW5nIG1hdHVyaXR5IGxldmVsIGFuZCB3ZSB0cnkgdG8gbWFpbnRhaW4gYSBTVEFUVVMgKGRldi1zdGF0dXMueG1sKSBmaWxlIGluZGljYXRpbmcKIGhvdyBnb29kIHRoZSBjb2RlYmFzZSwgZG9jdW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBhcmUgZm9yIGVhY2ggb2YgdGhlIGxpYnJhcmllcy4gVGhpcyBpcyBoaWdobHkgc3ViamVjdGl2ZSBhbmQKIHBvdGVudGlhbGx5IGRpZmZlcmVudCBpbmRpdmlkdWFscyB3aWxsIGp1ZGdlIHRoaXMgZGlmZmVyZW50bHksIGJ1dCBhdCBsZWFzdCBpdCBnaXZlcyBhIGJhbGxwYXJrIGlkZWEgb2YgdGhlIHNpdHVhdGlvbgogZm9yIG91ciB1c2Vycy4KIAorOmxldmVsb2Zmc2V0OiAyCisKK2luY2x1ZGU6Oi4uLy4uLy4uLy4uL2xpYnJhcmllcy9sYW5nLWdyb292eS9zcmMvZG9jcy9sYW5nLWdyb292eS50eHRbXQorCis6bGV2ZWxvZmZzZXQ6IDIKKworaW5jbHVkZTo6Li4vLi4vLi4vLi4vbGlicmFyaWVzL2xhbmctamF2YXNjcmlwdC9zcmMvZG9jcy9sYW5nLWphdmFzY3JpcHQudHh0W10KKworOmxldmVsb2Zmc2V0OiAyCisKK2luY2x1ZGU6Oi4uLy4uLy4uLy4uL2xpYnJhcmllcy9sYW5nLXNjYWxhL3NyYy9kb2NzL2xhbmctc2NhbGEudHh0W10KIAogOmxldmVsb2Zmc2V0OiAyCiAKQEAgLTI5LDIyICs1OSwxMCBAQAogCiA6bGV2ZWxvZmZzZXQ6IDIKIAotaW5jbHVkZTo6Li4vLi4vLi4vLi4vbGlicmFyaWVzL2N4Zi9zcmMvZG9jcy9jeGYudHh0W10KLQotOmxldmVsb2Zmc2V0OiAyCi0KIGluY2x1ZGU6Oi4uLy4uLy4uLy4uL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nL3NyYy9kb2NzL2V2ZW50c291cmNpbmcudHh0W10KIAogOmxldmVsb2Zmc2V0OiAyCiAKLWluY2x1ZGU6Oi4uLy4uLy4uLy4uL2xpYnJhcmllcy9ldmVudHNvdXJjaW5nLWpkYm0vc3JjL2RvY3MvZXZlbnRzb3VyY2luZy1qZGJtLnR4dFtdCi0KLTpsZXZlbG9mZnNldDogMgotCi1pbmNsdWRlOjouLi8uLi8uLi8uLi9saWJyYXJpZXMvZXZlbnRzb3VyY2luZy1yZXN0L3NyYy9kb2NzL2V2ZW50c291cmNpbmctcmVzdC50eHRbXQotCi06bGV2ZWxvZmZzZXQ6IDIKLQogaW5jbHVkZTo6Li4vLi4vLi4vLi4vbGlicmFyaWVzL2ZpbGVjb25maWcvc3JjL2RvY3MvZmlsZWNvbmZpZy50eHRbXQogCiA6bGV2ZWxvZmZzZXQ6IDIKQEAgLTY5LDcgKzg3LDcgQEAKIAogOmxldmVsb2Zmc2V0OiAyCiAKLWluY2x1ZGU6Oi4uLy4uLy4uLy4uL2xpYnJhcmllcy9uZW80ai9zcmMvZG9jcy9uZW80ai50eHRbXQoraW5jbHVkZTo6Li4vLi4vLi4vLi4vbGlicmFyaWVzL21ldHJpY3Mvc3JjL2RvY3MvbWV0cmljcy50eHRbXQogCiA6bGV2ZWxvZmZzZXQ6IDIKIApAQCAtMTAxLDI2ICsxMTksNiBAQAogCiA6bGV2ZWxvZmZzZXQ6IDIKIAotaW5jbHVkZTo6Li4vLi4vLi4vLi4vbGlicmFyaWVzL2xhbmctYmVhbnNoZWxsL3NyYy9kb2NzL2xhbmctYmVhbnNoZWxsLnR4dFtdCi0KLTpsZXZlbG9mZnNldDogMgotCi1pbmNsdWRlOjouLi8uLi8uLi8uLi9saWJyYXJpZXMvbGFuZy1ncm9vdnkvc3JjL2RvY3MvbGFuZy1ncm9vdnkudHh0W10KLQotOmxldmVsb2Zmc2V0OiAyCi0KLWluY2x1ZGU6Oi4uLy4uLy4uLy4uL2xpYnJhcmllcy9sYW5nLWphdmFzY3JpcHQvc3JjL2RvY3MvbGFuZy1qYXZhc2NyaXB0LnR4dFtdCi0KLTpsZXZlbG9mZnNldDogMgotCi1pbmNsdWRlOjouLi8uLi8uLi8uLi9saWJyYXJpZXMvbGFuZy1qcnVieS9zcmMvZG9jcy9sYW5nLWpydWJ5LnR4dFtdCi0KLTpsZXZlbG9mZnNldDogMgotCi1pbmNsdWRlOjouLi8uLi8uLi8uLi9saWJyYXJpZXMvbGFuZy1zY2FsYS9zcmMvZG9jcy9sYW5nLXNjYWxhLnR4dFtdCi0KLTpsZXZlbG9mZnNldDogMgotCiBpbmNsdWRlOjouLi8uLi8uLi8uLi9saWJyYXJpZXMvc2VydmxldC9zcmMvZG9jcy9zZXJ2bGV0LnR4dFtdCiAKIDpsZXZlbG9mZnNldDogMgpAQCAtMTQxLDE4ICsxMzksNiBAQAogCiA6bGV2ZWxvZmZzZXQ6IDIKIAotaW5jbHVkZTo6Li4vLi4vLi4vLi4vbGlicmFyaWVzL3N0cnV0czItY29kZWJlaGluZC9zcmMvZG9jcy9zdHJ1dHMtY29kZWJlaGluZC50eHRbXQotCi06bGV2ZWxvZmZzZXQ6IDIKLQotaW5jbHVkZTo6Li4vLi4vLi4vLi4vbGlicmFyaWVzL3N0cnV0czItY29udmVudGlvbi9zcmMvZG9jcy9zdHJ1dHMtY29udmVudGlvbi50eHRbXQotCi06bGV2ZWxvZmZzZXQ6IDIKLQotaW5jbHVkZTo6Li4vLi4vLi4vLi4vbGlicmFyaWVzL3N0cnV0czItcGx1Z2luL3NyYy9kb2NzL3N0cnV0cy1wbHVnaW4udHh0W10KLQotOmxldmVsb2Zmc2V0OiAyCi0KIGluY2x1ZGU6Oi4uLy4uLy4uLy4uL2xpYnJhcmllcy91aWQvc3JjL2RvY3MvdWlkLnR4dFtdCiAKIDpsZXZlbG9mZnNldDogMgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9wcmVmYWNlLnR4dCBiL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvcHJlZmFjZS50eHQKaW5kZXggYjE4N2Y1Yy4uNjY4ZDViMSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3VzZXJndWlkZS9wcmVmYWNlLnR4dAorKysgYi9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL3ByZWZhY2UudHh0CkBAIC0xLDE5ICsxLDM4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1twcmVmYWNlLCBQcmVmYWNlXV0KID0gUHJlZmFjZSA9CiAKLVRoaXMgaXMgdGhlIHJlZmVyZW5jZSBtYW51YWwgZm9yIFFpNGogdmVyc2lvbiB7cWk0ai12ZXJzaW9ufSwgd3JpdHRlbiBieSBtZW1iZXJzIG9mIHRoZSBRaTRqIENvbW11bml0eS4KK1RoaXMgaXMgdGhlIHJlZmVyZW5jZSBtYW51YWwgZm9yIFplc3TihKIgdmVyc2lvbiB7cWk0ai12ZXJzaW9ufSwgd3JpdHRlbiBieSBtZW1iZXJzIG9mIHRoZSBaZXN04oSiIENvbW11bml0eS4KIAogVGhlIG1haW4gcGFydHMgb2YgdGhlIG1hbnVhbCBhcmU6CiAKLSogPDxpbnRyb2R1Y3Rpb24+PiAtLSBpbnRyb2R1Y2luZyBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgY29uY2VwdHMgYW5kIFFpNGouCi0qIDw8dHV0b3JpYWxzPj4gLS0gbGVhcm4gaG93IHRvIHVzZSBRaTRqLgotKiA8PGNvcmUtYXBpPj4gLS0gZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBRaTRqLgotKiA8PGxpYnJhcmllcz4+IC0tIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBtYW55IGxpYnJhcmllcyBhdmFpbGFibGUgZm9yIFFpNGouCi0qIDw8ZXh0ZW5zaW9ucz4+IC0tIGRldGFpbGVkIGluZm9ybWF0aW9uIGVhY2ggb2YgdGhlIFFpNGogZXh0ZW5zaW9ucywgc3VjaCBhcyBlbnRpdHkgc3RvcmVzLAorKiA8PGludHJvZHVjdGlvbj4+IC0tIGludHJvZHVjaW5nIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBjb25jZXB0cyBhbmQgWmVzdC4KKyogPDx0dXRvcmlhbHM+PiAtLSBsZWFybiBob3cgdG8gdXNlIFplc3QuCisqIDw8Y29yZS1hcGk+PiAtLSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIFplc3QuCisqIDw8bGlicmFyaWVzPj4gLS0gZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIG1hbnkgbGlicmFyaWVzIGF2YWlsYWJsZSBmb3IgWmVzdC4KKyogPDxleHRlbnNpb25zPj4gLS0gZGV0YWlsZWQgaW5mb3JtYXRpb24gZWFjaCBvZiB0aGUgWmVzdOKEoiBleHRlbnNpb25zLCBzdWNoIGFzIGVudGl0eSBzdG9yZXMsCiBpbmRleGluZywgY2FjaGluZyBhbmQgcnVudGltZSBtZXRyaWNzLgogCiBUaGUgbWF0ZXJpYWwgaXMgcHJhY3RpY2FsLCB0ZWNobmljYWwsIGFuZCBmb2N1c2VkIG9uIGFuc3dlcmluZyBzcGVjaWZpYyBxdWVzdGlvbnMuIAotSXQgYWRkcmVzc2VzIGhvdyB0aGluZ3Mgd29yaywgd2hhdCB0byBkbyBhbmQgd2hhdCB0byBhdm9pZCB0byBzdWNjZXNzZnVsbHkgdXNlIFFpNGogaW4gZG9tYWluIHJpY2ggYXBwbGljYXRpb25zLgorSXQgYWRkcmVzc2VzIGhvdyB0aGluZ3Mgd29yaywgd2hhdCB0byBkbyBhbmQgd2hhdCB0byBhdm9pZCB0byBzdWNjZXNzZnVsbHkgdXNlIFplc3TihKIgaW4gZG9tYWluIHJpY2ggYXBwbGljYXRpb25zLgogIAogVGhlIGdvYWwgaXMgdG8gYmUgdGh1bWItdGhyb3VnaCBhbmQgcnVsZS1vZi10aHVtYiBmcmllbmRseS4KIApAQCAtMjEsNyArNDAsNyBAQAogV2hlbiBwb3NzaWJsZSwgdGhlIHNlY3Rpb25zIGRpc3RpbGwgInJ1bGVzIG9mIHRodW1iIiB3aGljaCB5b3UgY2FuIGtlZXAgaW4gbWluZCB3aGVuZXZlciB5b3Ugd2FuZGVyIG91dCBvZiB0aGUgaG91c2UKIHdpdGhvdXQgdGhpcyBtYW51YWwgaW4geW91ciBiYWNrIHBvY2tldC4KIAotVGhlIGluY2x1ZGVkIGNvZGUgZXhhbXBsZXMgYXJlIGV4ZWN1dGVkIHdoZW4gUWk0aiBpcyBidWlsdCBhbmQgdGVzdGVkLgorVGhlIGluY2x1ZGVkIGNvZGUgZXhhbXBsZXMgYXJlIGV4ZWN1dGVkIHdoZW4gWmVzdOKEoiBpcyBidWlsdCBhbmQgdGVzdGVkLgogCiBfV2hvIHNob3VsZCByZWFkIHRoaXM/XwogCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3MvdXNlcmd1aWRlL3Rvb2xzLnR4dCBiL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvdG9vbHMudHh0CmluZGV4IDViN2ZiZWYuLjJhNGIxZTAgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvdG9vbHMudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy91c2VyZ3VpZGUvdG9vbHMudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiA6bGV2ZWxvZmZzZXQ6IDEKIAogW1t0b29scyxUb29scyBTZWN0aW9uXV0KQEAgLTUsMTggKzI0LDE0IEBACiAKID09IE92ZXJ2aWV3ID09CiAKLVRoZSBRaTRqIFNESyBjb21lcyB3aXRoIHVzZWZ1bGwgZGV2ZWxvcG1lbnQgdG9vbHMuIFRoZXNlcyB0b29scyBjYW4gY29tZSBpbgorVGhlIFplc3TihKIgU0RLIGNvbWVzIHdpdGggdXNlZnVsbCBkZXZlbG9wbWVudCB0b29scy4gVGhlc2VzIHRvb2xzIGNhbiBjb21lIGluCiBoYW5keSB3aGVuIGFzc2VtYmxlZCBpbnRvIHlvdXIgPDxkZWYtYXBwbGljYXRpb24+PiBpbiBkZXZlbG9wbWVudAogPDxkZWYtYXBwbGljYXRpb24tbW9kZT4+LgogCi1UaGUgdG9vbHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgK3Rvb2xzLysgZGlyZWN0b3J5IG9mIHRoZSBRaTRqIFNESy4KK1RoZSB0b29scyBhcmUgYXZhaWxhYmxlIGluIHRoZSArdG9vbHMvKyBkaXJlY3Rvcnkgb2YgdGhlIFplc3TihKIgU0RLLgogCiA6bGV2ZWxvZmZzZXQ6IDIKIAogaW5jbHVkZTo6Li4vLi4vLi4vLi4vdG9vbHMvZW52aXNhZ2Uvc3JjL2RvY3MvZW52aXNhZ2UudHh0W10KIAogOmxldmVsb2Zmc2V0OiAyCi0KLWluY2x1ZGU6Oi4uLy4uLy4uLy4uL3Rvb2xzL2VudGl0eS12aWV3ZXIvc3JjL2RvY3MvZW50aXR5LXZpZXdlci50eHRbXQotCi06bGV2ZWxvZmZzZXQ6IDIKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2RvY2luZm8ueG1sIGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvZG9jaW5mby54bWwKaW5kZXggZTY5ZGUyOS4uYThmNmE4MiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvZG9jaW5mby54bWwKKysrIGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvZG9jaW5mby54bWwKQEAgLTAsMCArMSwxNiBAQAorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvZG93bmxvYWRzLzEuMC50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvMS4wLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBlYjUyYy4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvMS4wLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLQotCi0qUmVsZWFzZSAxLjAqOzsgc2lnbmVkIGJ5IE5pY2xhcyBIZWRobWFuLCBQR1AgSUQ6IDMzRDcwRkMzCi0KLVt3aWR0aD0iODAlIixncmlkPSJyb3dzIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXx8fHx8Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4wL29yZy5xaTRqLTEuMC1iaW4uemlwW3FpNGotc2RrLTEuMC1iaW4uemlwXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMC9vcmcucWk0ai0xLjAtYmluLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4wL29yZy5xaTRqLTEuMC1iaW4uemlwLnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMC9vcmcucWk0ai0xLjAtYmluLnppcC5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4wL29yZy5xaTRqLTEuMC1iaW4udGd6W3FpNGotc2RrLTEuMC1iaW4udGd6XQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMC9vcmcucWk0ai0xLjAtYmluLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4wL29yZy5xaTRqLTEuMC1iaW4udGd6LnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMC9vcmcucWk0ai0xLjAtYmluLnRnei5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4wL29yZy5xaTRqLTEuMC1zcmMuemlwW3FpNGotc2RrLTEuMC1zcmMuemlwXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMC9vcmcucWk0ai0xLjAtc3JjLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4wL29yZy5xaTRqLTEuMC1zcmMuemlwLnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMC9vcmcucWk0ai0xLjAtc3JjLnppcC5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4wL29yZy5xaTRqLTEuMC1zcmMudGd6W3FpNGotc2RrLTEuMC1zcmMudGd6XQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMC9vcmcucWk0ai0xLjAtc3JjLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4wL29yZy5xaTRqLTEuMC1zcmMudGd6LnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMC9vcmcucWk0ai0xLjAtc3JjLnRnei5hc2NbKGFzYyldCi18Ci18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvZG93bmxvYWRzLzEuMS50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvMS4xLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDllYjE1Yy4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvMS4xLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLQotCi0qbGluazouLi8xLjQvcWk0ai80MzkuaHRtbFtSZWxlYXNlIDEuMV0qOzsgc2lnbmVkIGJ5IE5pY2xhcyBIZWRobWFuLCBQR1AgSUQ6IDMzRDcwRkMzCi0KLVt3aWR0aD0iODAlIixncmlkPSJyb3dzIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXx8fHx8Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4xL29yZy5xaTRqLTEuMS1iaW4uemlwW3FpNGotc2RrLTEuMS1iaW4uemlwXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMS9vcmcucWk0ai0xLjEtYmluLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4xL29yZy5xaTRqLTEuMS1iaW4uemlwLnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMS9vcmcucWk0ai0xLjEtYmluLnppcC5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4xL29yZy5xaTRqLTEuMS1iaW4udGd6W3FpNGotc2RrLTEuMS1iaW4udGd6XQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMS9vcmcucWk0ai0xLjEtYmluLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4xL29yZy5xaTRqLTEuMS1iaW4udGd6LnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMS9vcmcucWk0ai0xLjEtYmluLnRnei5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4xL29yZy5xaTRqLTEuMS1zcmMuemlwW3FpNGotc2RrLTEuMS1zcmMuemlwXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMS9vcmcucWk0ai0xLjEtc3JjLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4xL29yZy5xaTRqLTEuMS1zcmMuemlwLnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMS9vcmcucWk0ai0xLjEtc3JjLnppcC5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4xL29yZy5xaTRqLTEuMS1zcmMudGd6W3FpNGotc2RrLTEuMS1zcmMudGd6XQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMS9vcmcucWk0ai0xLjEtc3JjLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4xL29yZy5xaTRqLTEuMS1zcmMudGd6LnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMS9vcmcucWk0ai0xLjEtc3JjLnRnei5hc2NbKGFzYyldCi18Ci18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvZG93bmxvYWRzLzEuMi50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvMS4yLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI5OWU1My4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvMS4yLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLQotCi0qbGluazouLi8xLjQvcWk0ai8zOTkuaHRtbFtSZWxlYXNlIDEuMl0qOzsgc2lnbmVkIGJ5IE5pY2xhcyBIZWRobWFuLCBQR1AgSUQ6IDMzRDcwRkMzCi0KLVt3aWR0aD0iODAlIixncmlkPSJyb3dzIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXx8fHx8Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4yL29yZy5xaTRqLTEuMi1iaW4uemlwW3FpNGotc2RrLTEuMi1iaW4uemlwXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMi9vcmcucWk0ai0xLjItYmluLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4yL29yZy5xaTRqLTEuMi1iaW4uemlwLnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMi9vcmcucWk0ai0xLjItYmluLnppcC5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4yL29yZy5xaTRqLTEuMi1iaW4udGd6W3FpNGotc2RrLTEuMi1iaW4udGd6XQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMi9vcmcucWk0ai0xLjItYmluLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4yL29yZy5xaTRqLTEuMi1iaW4udGd6LnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMi9vcmcucWk0ai0xLjItYmluLnRnei5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4yL29yZy5xaTRqLTEuMi1zcmMuemlwW3FpNGotc2RrLTEuMi1zcmMuemlwXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMi9vcmcucWk0ai0xLjItc3JjLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4yL29yZy5xaTRqLTEuMi1zcmMuemlwLnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMi9vcmcucWk0ai0xLjItc3JjLnppcC5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4yL29yZy5xaTRqLTEuMi1zcmMudGd6W3FpNGotc2RrLTEuMi1zcmMudGd6XQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMi9vcmcucWk0ai0xLjItc3JjLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4yL29yZy5xaTRqLTEuMi1zcmMudGd6LnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMi9vcmcucWk0ai0xLjItc3JjLnRnei5hc2NbKGFzYyldCi18Ci18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvZG93bmxvYWRzLzEuMy50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvMS4zLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1OTg5OS4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvMS4zLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLQotCi0qbGluazouLi8xLjQvcWk0ai80MzkuaHRtbFtSZWxlYXNlIDEuM10qOzsgc2lnbmVkIGJ5IE5pY2xhcyBIZWRobWFuLCBQR1AgSUQ6IDMzRDcwRkMzCi0KLVt3aWR0aD0iODAlIixncmlkPSJyb3dzIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXx8fHx8Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4zL29yZy5xaTRqLTEuMy1iaW4uemlwW3FpNGotc2RrLTEuMy1iaW4uemlwXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMy9vcmcucWk0ai0xLjMtYmluLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4zL29yZy5xaTRqLTEuMy1iaW4uemlwLnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMy9vcmcucWk0ai0xLjMtYmluLnppcC5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4zL29yZy5xaTRqLTEuMy1iaW4udGd6W3FpNGotc2RrLTEuMy1iaW4udGd6XQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMy9vcmcucWk0ai0xLjMtYmluLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4zL29yZy5xaTRqLTEuMy1iaW4udGd6LnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMy9vcmcucWk0ai0xLjMtYmluLnRnei5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4zL29yZy5xaTRqLTEuMy1zcmMuemlwW3FpNGotc2RrLTEuMy1zcmMuemlwXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMy9vcmcucWk0ai0xLjMtc3JjLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4zL29yZy5xaTRqLTEuMy1zcmMuemlwLnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMy9vcmcucWk0ai0xLjMtc3JjLnppcC5hc2NbKGFzYyldCi18Ci18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4zL29yZy5xaTRqLTEuMy1zcmMudGd6W3FpNGotc2RrLTEuMy1zcmMudGd6XQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMy9vcmcucWk0ai0xLjMtc3JjLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS4zL29yZy5xaTRqLTEuMy1zcmMudGd6LnNoYTFbKHNoYTEpXQotfGh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL29yZy5xaTRqLzEuMy9vcmcucWk0ai0xLjMtc3JjLnRnei5hc2NbKGFzYyldCi18Ci18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvZG93bmxvYWRzLzEuNC4xLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2Rvd25sb2Fkcy8xLjQuMS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMjA1ZjIuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvZG93bmxvYWRzLzEuNC4xLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLQotCi0qbGluazouLi8xLjQvcWk0ai80NDEuaHRtbFtSZWxlYXNlIDEuNC4xXSo7OyBzaWduZWQgYnkgTmljbGFzIEhlZGhtYW4sIFBHUCBJRDogMzNENzBGQzMKLQotW3dpZHRoPSI4MCUiLGdyaWQ9InJvd3MiXQotfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotfHx8fHwKLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQuMS9vcmcucWk0ai0xLjQuMS1iaW4uemlwW3FpNGotc2RrLTEuNC4xLWJpbi56aXBdCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40LjEvb3JnLnFpNGotMS40LjEtYmluLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40LjEvb3JnLnFpNGotMS40LjEtYmluLnppcC5zaGExWyhzaGExKV0KLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQuMS9vcmcucWk0ai0xLjQuMS1iaW4uemlwLmFzY1soYXNjKV0KLXwKLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQuMS9vcmcucWk0ai0xLjQuMS1iaW4udGd6W3FpNGotc2RrLTEuNC4xLWJpbi50Z3pdCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40LjEvb3JnLnFpNGotMS40LjEtYmluLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40LjEvb3JnLnFpNGotMS40LjEtYmluLnRnei5zaGExWyhzaGExKV0KLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQuMS9vcmcucWk0ai0xLjQuMS1iaW4udGd6LmFzY1soYXNjKV0KLXwKLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQuMS9vcmcucWk0ai0xLjQuMS1zcmMuemlwW3FpNGotc2RrLTEuNC4xLXNyYy56aXBdCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40LjEvb3JnLnFpNGotMS40LjEtc3JjLnppcC5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40LjEvb3JnLnFpNGotMS40LjEtc3JjLnppcC5zaGExWyhzaGExKV0KLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQuMS9vcmcucWk0ai0xLjQuMS1zcmMuemlwLmFzY1soYXNjKV0KLXwKLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQuMS9vcmcucWk0ai0xLjQuMS1zcmMudGd6W3FpNGotc2RrLTEuNC4xLXNyYy50Z3pdCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40LjEvb3JnLnFpNGotMS40LjEtc3JjLnRnei5tZDVbKG1kNSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40LjEvb3JnLnFpNGotMS40LjEtc3JjLnRnei5zaGExWyhzaGExKV0KLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQuMS9vcmcucWk0ai0xLjQuMS1zcmMudGd6LmFzY1soYXNjKV0KLXwKLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvMS40LnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2Rvd25sb2Fkcy8xLjQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yjk3ZmQ1Li4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2Rvd25sb2Fkcy8xLjQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotCi0KLSpsaW5rOi4uLzEuNC9xaTRqLzQ0MS5odG1sW1JlbGVhc2UgMS40XSo7OyBzaWduZWQgYnkgTmljbGFzIEhlZGhtYW4sIFBHUCBJRDogMzNENzBGQzMKLQotW3dpZHRoPSI4MCUiLGdyaWQ9InJvd3MiXQotfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotfHx8fHwKLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQvb3JnLnFpNGotMS40LWJpbi56aXBbcWk0ai1zZGstMS40LWJpbi56aXBdCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40L29yZy5xaTRqLTEuNC1iaW4uemlwLm1kNVsobWQ1KV0KLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQvb3JnLnFpNGotMS40LWJpbi56aXAuc2hhMVsoc2hhMSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40L29yZy5xaTRqLTEuNC1iaW4uemlwLmFzY1soYXNjKV0KLXwKLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQvb3JnLnFpNGotMS40LWJpbi50Z3pbcWk0ai1zZGstMS40LWJpbi50Z3pdCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40L29yZy5xaTRqLTEuNC1iaW4udGd6Lm1kNVsobWQ1KV0KLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQvb3JnLnFpNGotMS40LWJpbi50Z3ouc2hhMVsoc2hhMSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40L29yZy5xaTRqLTEuNC1iaW4udGd6LmFzY1soYXNjKV0KLXwKLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQvb3JnLnFpNGotMS40LXNyYy56aXBbcWk0ai1zZGstMS40LXNyYy56aXBdCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40L29yZy5xaTRqLTEuNC1zcmMuemlwLm1kNVsobWQ1KV0KLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQvb3JnLnFpNGotMS40LXNyYy56aXAuc2hhMVsoc2hhMSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40L29yZy5xaTRqLTEuNC1zcmMuemlwLmFzY1soYXNjKV0KLXwKLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQvb3JnLnFpNGotMS40LXNyYy50Z3pbcWk0ai1zZGstMS40LXNyYy50Z3pdCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40L29yZy5xaTRqLTEuNC1zcmMudGd6Lm1kNVsobWQ1KV0KLXxodHRwOi8vcmVwb3NpdG9yeS5vcHM0ai5vcmcvbWF2ZW4yL29yZy9vcmcucWk0ai8xLjQvb3JnLnFpNGotMS40LXNyYy50Z3ouc2hhMVsoc2hhMSldCi18aHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvb3JnLnFpNGovMS40L29yZy5xaTRqLTEuNC1zcmMudGd6LmFzY1soYXNjKV0KLXwKLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9kb3dubG9hZHMvZG93bmxvYWRzLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2Rvd25sb2Fkcy9kb3dubG9hZHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDViODBlLi4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2Rvd25sb2Fkcy9kb3dubG9hZHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotW1tkb3dubG9hZHMsRG93bmxvYWRzXV0KLT0gRG93bmxvYWRzID0KLQotPT0gUWk0aiBTREsgPT0KLVdlIGFyZSB3b3JraW5nIHRvd2FyZHMgZGlzdHJpYnV0aW5nIGEgdXNlZnVsIFNESyBmb3IgUWk0aiBkZXZlbG9wbWVudCwgdXNhYmxlIHdpdGhvdXQgY29ubmVjdGl2aXR5LiBUaGlzIHdvcmsgaGFzIG5vdAotYmVlbiBoaWdoZXN0IG9uIHRoZSBsaXN0IGFuZCB3ZSBhcmUgZ2VuZXJhbGx5IGxhZ2dpbmcgaW4gdGhlIHJlbGVhc2Ugb2YgdGhlIFNESyBpbiBjb21wYXJpc29uIHRvIHRoZSBhcnRpZmFjdCByZWxlYXNlcy4KLVdlIHN0cml2ZSB0byBjaGFuZ2UgdGhpcyBpbiB0aGUgZnV0dXJlLgotCi09PT0gVmVyc2lvbmluZyA9PT0KLVFpNGogdmVyc2lvbmluZyB0cmllcyB0byBzdGljayB0bzsKLQotICAgKiBGb3IgY2hhbmdlcyBpbiB0aGUgM3JkIHZlcnNpb24gZGlnaXQsIGZvciBpbnN0YW5jZSBmcm9tIDEuMy4xIHRvIDEuMy4yLCBvbmx5IGJ1ZyBmaXhlcyBoYXZlIG9jY3VycmVkLgotICAgKiBGb3IgY2hhbmdlcyBpbiB0aGUgMm5kIHZlcnNpb24gZGlnaXQsIGZvciBpbnN0YW5jZSBmcm9tIDEuMy4xIHRvIDEuNCwgbW9yZSBmZWF0dXJlcyBoYXZlIGJlZW4gYWRkZWQuCi0gICAqIEZvciBjaGFuZ2VzIGluIHRoZSAxc3QgdmVyc2lvbiBkaWdpdCwgZm9yIGluc3RhbmNlIGZyb20gMS4zLjEgdG8gMi4wLCBpbmNvbXBhdGliaWxpdGllcyBoYXZlIGJlZW4gaW50cm9kdWNlZC4KLQotSG93ZXZlciwgdGhpcyB3aWxsIG9ubHkgYmUgdHJ1ZSBmb3IgdGhlIFFpNGogQVBJLCBpLmUuIHRoZSBjbGFzc2VzIGZvdW5kIGluIG9yZy5xaTRqLmNvcmUuYXBpIEpBUi4gRm9yIFNQSSBhbmQKLWVzcGVjaWFsbHkgdGhlIHJ1bnRpbWUsIHdlIHJlc2VydmUgdGhlIHJpZ2h0IG9mIGluY29tcGF0aWJsZSBjaGFuZ2VzIGJldHdlZW4gcmVsZWFzZXMgaW4gdGhlIHNlY29uZCBkaWdpdC4KLQotUWk0aiBhbHNvIGhhcyBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3lzdGVtcy4gV2UgcmVzZXJ2ZSB0aGUgcmlnaHQgdGhhdCB0aGVzZSBkZXBlbmRlbmNpZXMgbWF5IGNoYW5nZSBiZXR3ZWVuIHJlbGVhc2VzLgotRm9yIGluc3RhbmNlLCBhIGNoYW5nZSBiZXR3ZWVuIDEuMSBhbmQgMS4yIHdhcyB0aGF0IENHTGliIHdhcyBkcm9wcGVkIGFuZCByZXBsYWNlZCBieSBBU00gYXMgYSBuZXcgZGVwZW5kZW5jeS4KLQotPT09IFJlbGVhc2VzID09PQotVXNpbmcgR3JhZGxlLCBNYXZlbiwgU0JULCBJdnkgb3IgYW55IG90aGVyIGJ1aWxkIHN5c3RlbSB0aGF0IHByb3ZpZGUgZGVwZW5kZW5jeSBtYW5hZ2VtZW50PyBMZWFybiBob3cgdG8KLTw8aG93dG8tZGVwZW5kLW9uLXFpNGosIGRlcGVuZCBvbiBRaTRqIGluIHlvdXIgYnVpbGQ+Pi4KLQotVGhlIFFpNGogU0RLIGlzIHNwbGl0IGluIHR3byBkb3dubG9hZHM6IGJpbmFyaWVzIGFuZCBzb3VyY2VzLiBCb3RoIGRvd25sb2FkcyBhcmUgYXZhaWxhYmxlIGluIHRoZSB6aXAgYW5kIHRhci5neiBmb3JtYXRzLgotVGhlIHNvdXJjZSBjb2RlIGlzIGFsc28gYXZhaWxhYmxlIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9xaTRqL3FpNGotc2RrW0dpdGh1Yl0uCi0KLWluY2x1ZGU6OjEuNC4xLnR4dFtdCi1pbmNsdWRlOjoxLjQudHh0W10KLWluY2x1ZGU6OjEuMy50eHRbXQotaW5jbHVkZTo6MS4yLnR4dFtdCi1pbmNsdWRlOjoxLjEudHh0W10KLWluY2x1ZGU6OjEuMC50eHRbXQotCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9ob21lLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2hvbWUudHh0CmluZGV4IGY3MzJmMTkuLjZiODJjZmYgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2hvbWUudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2hvbWUudHh0CkBAIC0xLDIzICsxLDUzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogOmxldmVsb2Zmc2V0OiAxCiAKLVtbaG9tZSxRaTRqIEhvbWUgUGFnZV1dCi09IFFpNGogPQorW1tob21lLFplc3TihKIgSG9tZSBQYWdlXV0KKz0gWmVzdOKEoiA9CiAKLUlNUE9SVEFOVDogVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgKlFpNGoge3Jldm51bWJlcn0qLiBVc2UgdGhlIHZlcnNpb24gc3dpdGNoZXIgb24gdGhlIGxlZnQgdG8gYnJvd3NlIG90aGVyCitbSU1QT1JUQU5UXQorLlplc3TihKIge3Jldm51bWJlcn0KKz09PT0KK1RoaXMgaXMgdGhlIGRvY3VtZW50YXRpb24gZm9yICpaZXN04oSiIHtyZXZudW1iZXJ9Ki4gVXNlIHRoZSB2ZXJzaW9uIHN3aXRjaGVyIG9uIHRoZSBsZWZ0IHRvIGJyb3dzZSBvdGhlcgogdmVyc2lvbnMgZG9jdW1lbnRhdGlvbi4KKz09PT0KIAotPT0gV2hhdCBpcyBRaTRq4oSiPyA9PQotVGhlIHNob3J0IGFuc3dlciBpcyB0aGF0IFFpNGrihKIgaXMgYSBmcmFtZXdvcmsgZm9yIGRvbWFpbiBjZW50cmljIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LCBpbmNsdWRpbmcgZXZvbHZlZCBjb25jZXB0cwotZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FzcGVjdC1vcmllbnRlZF9wcm9ncmFtbWluZ1tBT1BdLAorPT0gV2hhdCBpcyBBcGFjaGUgWmVzdOKEoiA/ID09CitUaGUgc2hvcnQgYW5zd2VyIGlzIHRoYXQgQXBhY2hlIFplc3TihKIgaXMgYSBmcmFtZXdvcmsgZm9yIGRvbWFpbiBjZW50cmljIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LCBpbmNsdWRpbmcgZXZvbHZlZAorY29uY2VwdHMgZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FzcGVjdC1vcmllbnRlZF9wcm9ncmFtbWluZ1tBT1BdLAogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EZXBlbmRlbmN5X2luamVjdGlvbltESV0gYW5kIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRG9tYWluLWRyaXZlbl9kZXNpZ25bREREXS4KIAotUWk0auKEoiBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcsIHVzaW5nIHRoZSBzdGFuZGFyZCBKYXZhIHBsYXRmb3JtLCB3aXRob3V0IHRoZSB1c2Ugb2YKK1plc3TihKIgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nLCB1c2luZyB0aGUgc3RhbmRhcmQgSmF2YSBwbGF0Zm9ybSwgd2l0aG91dCB0aGUgdXNlIG9mCiBhbnkgcHJlLXByb2Nlc3NvcnMgb3IgbmV3IGxhbmd1YWdlIGVsZW1lbnRzLiBFdmVyeXRoaW5nIHlvdSBrbm93IGZyb20gSmF2YSBzdGlsbCBhcHBsaWVzIGFuZCB5b3UgY2FuIGxldmVyYWdlIGJvdGgKIHlvdXIgZXhwZXJpZW5jZSBhbmQgdG9vbGtpdHMgdG8gYmVjb21lIG1vcmUgcHJvZHVjdGl2ZSB3aXRoIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyB0b2RheS4KIAotTW9yZW92ZXIsIFFpNGrihKIgZW5hYmxlcyBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgb24gdGhlIEphdmEgcGxhdGZvcm0sIGluY2x1ZGluZyBib3RoIEphdmEgYW5kIFNjYWxhIGFzIHByaW1hcnkKK01vcmVvdmVyLCBaZXN04oSiIGVuYWJsZXMgQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIG9uIHRoZSBKYXZhIHBsYXRmb3JtLCBpbmNsdWRpbmcgYm90aCBKYXZhIGFuZCBTY2FsYSBhcyBwcmltYXJ5CiBsYW5ndWFnZXMgYXMgd2VsbCBhcyBtYW55IG9mIHRoZSBwbGV0aG9yYSBvZiBsYW5ndWFnZXMgcnVubmluZyBvbiB0aGUgSlZNIGFzIGJyaWRnZWQgbGFuZ3VhZ2VzLgogCitXZSBzdHJvbmdseSByZWNvbW1lbmQgdGhlIDw8aW50cm8sIGludHJvZHVjdGlvbj4+IHNlY3Rpb24uCisKKz09IEJyaWVmIEhpc3RvcnkgPT0KK0FwYWNoZSBaZXN04oSiIHN0YXJ0ZWQgaXRzIGxpZmUgaW4gMjAwNyBhcyBRaTRq4oSiLCBpbml0aWFsbHkgYXQgT1BTNEoncyBpbmZyYXN0cnVjdHVyZSBhbmQgbGF0ZXIgb24gR2l0SHViLgorSW4gTWFyY2ggMjAxNSwgQXBhY2hlIFplc3TihKIgd2FzIGNyZWF0ZWQgd2l0aCB0aGUgUWk0auKEoiBjb2RlYmFzZSBhcyB0aGUgYmFzZSwgZXhpc3RpbmcgQXBhY2hlIE1lbWJlcnMgYXMgdGhlCitib290c3RyYXAgUHJvamVjdCBNYW5hZ2VtZW50IENvbW1pdHRlZSAoUE1DKS4KKwogaW1hZ2U6aW50cm8tcWkucG5nWyJRaSIsYWxpZ249ImNlbnRlciJdCiAKIFFpNGrihKIgaXMgcHJvbm91bmNlZCAiY2hlZSBmb3IgamF5Ii4gVGhpcyB3ZWJzaXRlIGlzIG91dCBvZiBzY29wZSB0byBleHBsYWluIHRoZSBtYW55CkBAIC0yNSw0ICs1NSwzIEBACiBXaWtpcGVkaWEuIEZvciB1cywgUWkgaXMgdGhlIGZvcmNlL2VuZXJneSB3aXRoaW4gdGhlIGJvZHksIGluIHRoaXMgY2FzZSB0aGUgSmF2YSBwbGF0Zm9ybS4gU29tZXRoaW5nIHRoYXQgbWFrZXMgSmF2YQogc28gbXVjaCBiZXR0ZXIsIGlmIGl0IGlzIGZvdW5kIGFuZCBjaGFubmVsZWQgaW50byBhIGdyZWF0ZXIgZ29vZC4KIAotV2Ugc3Ryb25nbHkgcmVjb21tZW5kIHRoZSA8PGludHJvLCBpbnRyb2R1Y3Rpb24+PiBzZWN0aW9uLgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvaW5kZXgudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvaW5kZXgudHh0CmluZGV4IDg4OTAxMTEuLmZhMzIxNzAgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2luZGV4LnR4dAorKysgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9pbmRleC50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIAogOmxldmVsb2Zmc2V0OiAxCiAKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2ludHJvLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2ludHJvLnR4dAppbmRleCBhZDc3ZjI0Li44Yjg2ZDRhIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9pbnRyby50eHQKKysrIGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvaW50cm8udHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiA6bGV2ZWxvZmZzZXQ6IDEKIAogW1tpbnRybyxJbnRyb2R1Y3Rpb24gU2VjdGlvbl1dCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9qYXZhZG9jcy50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9qYXZhZG9jcy50eHQKaW5kZXggYjZmZTI4NS4uNjkwZWUwOSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvamF2YWRvY3MudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2phdmFkb2NzLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogOmxldmVsb2Zmc2V0OiAxCiAKIFtbamF2YWRvY3MsIEphdmFEb2NzXV0KQEAgLTUsMjMgKzI0LDM3IEBACiAKID09IEphdmFEb2NzID09CiAKK0luIHRoaXMgc2VjdGlvbiB5b3Ugd2lsbCBmaW5kIGxpbmtzIHRvIEphdmFEb2NzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBBcGFjaGUgWmVzdOKEoiAoSmF2YSBFZGl0aW9uKSB2ZXJzaW9uICh7cmV2bnVtYmVyfSksIHRvIHNvbWUgYWxpYXMgdmVyc2lvbnMsIGFuZCBmaW5hbGx5LCB0byBwcmV2aW91cyByZWxlYXNlcy4KKworPT09IEFwYWNoZSBaZXN04oSiIChKYXZhIEVkaXRpb24pIHtyZXZudW1iZXJ9ID09PQorCisvLyBKYXZhRG9jcyBmb3IgQXBhY2hlIFplc3TihKIgKEphdmEgRWRpdGlvbikge3Jldm51bWJlcn06CisKKyogbGluazpqYXZhZG9jcy9pbmRleC5odG1sW1JlbGVhc2Uge3Jldm51bWJlcn1dCisKKwogPT09IEFsaWFzIFZlcnNpb25zID09PQogCi0qIGxpbms6Li4vbGF0ZXN0L2phdmFkb2NzL2luZGV4Lmh0bWxbTGF0ZXN0IFJlbGVhc2UgPT0gTWFzdGVyIEJyYW5jaF0KLSogbGluazouLi9kZXZlbG9wL2phdmFkb2NzL2luZGV4Lmh0bWxbRGV2ZWxvcCBCcmFuY2hdCitMaW5rcyB0byBfImFsaWFzIHZlcnNpb25zIl8gSmF2YURvY3M6CiAKLT09PSBSZWxlYXNlcyA9PT0KKyogaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvamF2YS9sYXRlc3QvamF2YWRvY3MvW0xhdGVzdCBSZWxlYXNlIChgbWFzdGVyYCBicmFuY2gpXQorKiBodHRwczovL3plc3QuYXBhY2hlLm9yZy9qYXZhL2RldmVsb3AvamF2YWRvY3MvW0RldmVsb3BtZW50IChgZGV2ZWxvcGAgYnJhbmNoKV0KIAotKiBsaW5rOi4uLzIuMC9qYXZhZG9jcy9pbmRleC5odG1sW1JlbGVhc2UgMi4wXQotKiBsaW5rOi4uLzEuNC4xL2phdmFkb2NzL2luZGV4Lmh0bWxbUmVsZWFzZSAxLjQuMV0KLSogbGluazouLi8xLjQvamF2YWRvY3MvaW5kZXguaHRtbFtSZWxlYXNlIDEuNF0KLSogbGluazouLi8xLjMvamF2YWRvY3MvaW5kZXguaHRtbFtSZWxlYXNlIDEuM10KKworPT09IFByZXZpb3VzIFJlbGVhc2VzID09PQorCitBcmNoaXZlZCBKYXZhRG9jcyBvZiBwcmV2aW91cyByZWxlYXNlczoKKworKiBodHRwczovL3plc3QuYXBhY2hlLm9yZy9qYXZhLzIuMC9qYXZhZG9jcy9bUmVsZWFzZSAyLjBdCisqIGh0dHBzOi8vemVzdC5hcGFjaGUub3JnL2phdmEvMS40LjEvamF2YWRvY3MvW1JlbGVhc2UgMS40LjFdCisqIGh0dHBzOi8vemVzdC5hcGFjaGUub3JnL2phdmEvMS40L2phdmFkb2NzL1tSZWxlYXNlIDEuNF0KKyogaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvamF2YS8xLjMvamF2YWRvY3MvW1JlbGVhc2UgMS4zXQogKiBSZWxlYXNlIDEuMgotKiogbGluazouLi8xLjIvamF2YWRvY3MvYXBpW0NvcmUgQVBJXQotKiogbGluazouLi8xLjIvamF2YWRvY3MvYm9vdHN0cmFwW0NvcmUgQm9vdHN0cmFwXQotKiogbGluazouLi8xLjIvamF2YWRvY3Mvc3BpW0NvcmUgU1BJXQorKiogaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvamF2YS8xLjIvamF2YWRvY3MvYXBpW0NvcmUgQVBJXQorKiogaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvamF2YS8xLjIvamF2YWRvY3MvYm9vdHN0cmFwW0NvcmUgQm9vdHN0cmFwXQorKiogaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvamF2YS8xLjIvamF2YWRvY3Mvc3BpW0NvcmUgU1BJXQogKiBSZWxlYXNlIDEuMAotKiogbGluazouLi8xLjAvamF2YWRvY3MvYXBpW0NvcmUgQVBJXQotKiogbGluazouLi8xLjAvamF2YWRvY3MvYm9vdHN0cmFwW0NvcmUgQm9vdHN0cmFwXQotKiogbGluazouLi8xLjAvamF2YWRvY3Mvc3BpW0NvcmUgU1BJXQorKiogaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvamF2YS8xLjAvamF2YWRvY3MvYXBpW0NvcmUgQVBJXQorKiogaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvamF2YS8xLjAvamF2YWRvY3MvYm9vdHN0cmFwW0NvcmUgQm9vdHN0cmFwXQorKiogaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvamF2YS8xLjAvamF2YWRvY3Mvc3BpW0NvcmUgU1BJXQogCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9qdW5pdFJlcG9ydC50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9qdW5pdFJlcG9ydC50eHQKaW5kZXggZDllOWM0Mi4uMmY5MTExYSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvanVuaXRSZXBvcnQudHh0CisrKyBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL2p1bml0UmVwb3J0LnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogVGhpcyBmaWxlIGlzIHNpbXBseSBhIHBsYWNlaG9sZGVyLgogCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDcxMTEzLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwNzExMTMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjNmNTlkLi4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwNzExMTMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotW1tuZXdzLTIwMDcxMTEzLFFpNGogYXQgw5hyZWRldiAyMDA3IC0gQ09QXV0KLT0gQCDDmHJlZGV2IDIwMDcgLSBDT1AgPQotCi1RaTRKIC0gQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIFRvZGF5Ci0KLU9PUCBuZWdsZWN0cyB0aGUgbmVlZCBvZiBvYmplY3RzIHRvIGFkanVzdCBpdHMgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiAiSm9obiBpcyBhIHBhcmVudCBhbmQgcHJvZ3JhbW1lciBpbiB0aGUgY2l0eSwgYnV0IGEgaHVudGVyIGFuZCBmb29kIGluIHRoZSBqdW5nbGUuIi4gU2FtZSBvYmplY3QsIGRpZmZlcmVudCBjb250ZXh0cy4gT09QIGhhcyBhbHNvIG5vdCBmdWxmaWxsZWQgaXRzIHByb21pc2Ugb2YgcmUtdXNhYmlsaXR5LCBwYXJ0bHkgZHVlIHRvIHN1Y2ggc3RhdGljIGJlaGF2aW9yIGFuZCBwYXJ0bHkgZHVlIHRvIGl0cyBpbmFiaWxpdHkgdG8gZGVhbCB3aXRoIGZpbmUtZ3JhbnVsYXJpdHkgb2Ygc3RhdGVzIGFuZCBiZWhhdmlvcnMuCi0KLUNvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBhZGRyZXNzZXMgdGhlc2UgaXNzdWVzLCBhbmQgUWk0SiBpcyBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gSmF2YSBwcm9ncmFtbWVycyB0b2RheS4KLQotU2VlIHRoZSBodHRwOi8vYXJjaGl2ZS5vcmVkZXYub3JnL3RvcHBtZW55L2NvbmZlcmVuY2UvamF2YS9xaTRqY29tcG9zaXRlb3JpZW50ZWRwcm9nLjQuNzZlOGIxYzYxMTJmMDc4ZGI0OTgwMDAxMjU5NTEuaHRtbFvDmHJlZGV2IGFyY2hpdmVdLgotCi1UaGlzIHByZXNlbnRhdGlvbiBoYXMgYmVlbiBmb2xsb3dlZCBieSBhIDYgaG91cnMgV29ya3Nob3AuCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDgwMTMwLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwODAxMzAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTI2ODE4MTguLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA4MDEzMC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1bW25ld3MtMjAwODAxMzAsUWk0aiBhdCBKRm9rdXMgMjAwOCAtIENPUF1dCi09IEAgSkZva3VzIDIwMDggLSBDT1AgPQotCi1PT1AgbmVnbGVjdHMgdGhlIG5lZWQgb2Ygb2JqZWN0cyB0byBhZGp1c3QgaXRzIGJlaGF2aW9yIGRlcGVuZGluZyBvbiB0aGUKLWNvbnRleHQuICJKb2huIGlzIGEgcGFyZW50IGFuZCBwcm9ncmFtbWVyIGluIHRoZSBjaXR5LCBidXQgYSBodW50ZXIgYW5kIGZvb2QgaW4KLXRoZSBqdW5nbGUuIi4gU2FtZSBvYmplY3QsIGRpZmZlcmVudCBjb250ZXh0cy4gT09QIGhhcyBhbHNvIG5vdCBmdWxmaWxsZWQgaXRzCi1wcm9taXNlIG9mIHJlLXVzYWJpbGl0eSwgcGFydGx5IGR1ZSB0byBzdWNoIHN0YXRpYyBiZWhhdmlvciBhbmQgcGFydGx5IGR1ZSB0bwotaXRzIGluYWJpbGl0eSB0byBkZWFsIHdpdGggZmluZS1ncmFudWxhcml0eSBvZiBzdGF0ZXMgYW5kIGJlaGF2aW9ycy4gQ29tcG9zaXRlCi1PcmllbnRlZCBQcm9ncmFtbWluZyBhZGRyZXNzZXMgdGhlc2UgaXNzdWVzLCBhbmQgUWk0SiBpcyBhbiBpbXBsZW1lbnRhdGlvbgotYXZhaWxhYmxlIHRvIEphdmEgcHJvZ3JhbW1lcnMgdG9kYXkuCi0KLUNoZWNrIHRoZSBwcmVzZW50YXRpb24gc2xpZGVzIG9ubGluZQotaHR0cDovL3d3dy5qZm9rdXMuc2UvamZva3VzMDgvcHJlcy9qZjA4LUNvbXBvc2l0ZU9yaWVudGVkUHJvZ3JhbW1pbmdXaXRoUWk0ai5wZGZbaGVyZV0uCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDgwNDE0LnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwODA0MTQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjIwZWY2Li4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwODA0MTQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1bW25ld3MtMjAwODA0MTQsUWk0aiAwLjEgUmVsZWFzZWRdXQotPSBRaTRqIDAuMSBSZWxlYXNlZCA9Ci0KLUZyZWV6ZSBvZiBDb3JlIEFQSS4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwODA2MDYudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA4MDYwNi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjY2Q4Y2UuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA4MDYwNi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVtbbmV3cy0yMDA4MDYwNixRaTRqIDAuMiBSZWxlYXNlZF1dCi09IFFpNGogMC4yIFJlbGVhc2VkID0KLQotRnVsbCBVbml0IFRlc3QgJiBKYXZhZG9jIG9uIENvcmUgQVBJCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDgwODA4LnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwODA4MDgudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWU4YjE4Li4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwODA4MDgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotW1tuZXdzLTIwMDgwODA4LFFpNGogMC4zIFJlbGVhc2VkXV0KLT0gUWk0aiAwLjMgUmVsZWFzZWQgPQotCi1UaGUgM3JkIHByZS1maW5hbCByZWxlYXNlIGZyb20gdGhlIFFpNGogY29tbXVuaXR5IG1hcmtzIGEgbmV3IHJlbGF0aXZlbHkgc3RhYmxlIG1pbGVzdG9uZSBvbiB0aGUgY29udGludWVkIHBhdGggdG8gYSBwcm9kdWN0aW9uIHJlYWR5IHN5c3RlbS4gVGhlIDAuMyByZWxlYXNlIGlzIHRoZSAzcmQgbWFqb3IgcmUtd3JpdGUgb2YgdGhlIFFpNGogQ29yZSBSdW50aW1lLCBhZnRlciBtYW55IGxlc3NvbnMgbGVhcm5lZCBmcm9tIHByZXZpb3VzIGltcGxlbWVudGF0aW9ucy4KLQotIlRoZSBjdXJyZW50IFFpNGogQ29yZSBSdW50aW1lIGlzIHNvb29vIG11Y2ggbGlnaHRlciBhbmQgZWFzaWVyIHRvIHdvcmsgd2l0aCwgYm90aCBmb3IgdGhlIENvcmUgZGV2ZWxvcGVycyBhcyB3ZWxsIGFzIGV4dGVuc2lvbnMgYW5kIGFkdmFuY2VkIGxpYnJhcmllcyBkZXZlbG9wZXJzLiIsIHNheXMgUmlja2FyZCDDlmJlcmcsIHRoZSBRaTRqIHByb2plY3QgbGVhZC4gIldlIG5vdyBoYXZlIG1vc3Qgb2YgdGhlIGluZ3JlZGllbnRzIGluIHBsYWNlIGZvciBkZXZlbG9wZXJzIHdobyB3YW50IHRvIGRlbHZlIGludG8gREREIHdpdGhvdXQgaGF2aW5nIHRvIGRvIGV2ZXJ5dGhpbmcgZnJvbSBzY3JhdGNoLiBIYXZpbmcgYSB0b29sa2l0IHRvIHdvcmsgd2l0aCB0aGF0IHNwZWFrcyB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGVtc2VsdmVzLCBhbGwgdGhlIHdheSBmcm9tIGxheWVycyBkb3duIHRvIGluZGl2aWR1YWwgcGFyYW1ldGVyIGNvbnN0cmFpbnRzLCBtYWtlcyBsaWZlIHNvIG11Y2ggZWFzaWVyLCBhbmQgbWluaW1pemVzIHRoZSBuZWVkIGZvciB0cmFuc2xhdGlvbiBmcm9tIGlkZWEgdG8gYWN0dWFsIGNvZGUuIgotCi0iV2Ugbm93IGZlZWwgY29uZmlkZW50IHRoYXQgdGhlIFFpNGogQ29yZSBSdW50aW1lIGhhcyBhIGdvb2QgZGVzaWduIGFuZCBpcyBzdGFibGUgZW5vdWdoIHRvIG5vdCBnbyB0aHJvdWdoIGFueSBtb3JlIGRpc3J1cHRpdmUgY2hhbmdlcy4gVGhpcyBlbmFibGVzIHVzIHRvIG1vdmUgYXdheSBmcm9tIGEgZmVhdHVyZS1ib3hlZCByZWxlYXNlIGN5Y2xlIGludG8gYSBtb3JlIGFnaWxlIHRpbWUtYm94ZWQgb25lLiBUaGlzIHdpbGwgZW5hYmxlIG1vcmUgcGVvcGxlIHRvIHBhcnRpY2lwYXRlIGFuZCB1c2UgdGhlIFFpNGogcGxhdGZvcm0uIiwgc2F5cyBOaWNsYXMgSGVkaG1hbi4gSGUgY29udGludWVzOyAiU3RlZmFubyBNYXp6b2NjaGkgKEFwYWNoZSkgb25jZSB0b2xkIG1lOyBPbmx5IHByb2plY3RzIHdpdGggJ0JhZCBDb2RlLCBHcmVhdCBWaXNpb24gd2lsbCBidWlsZCBzdHJvbmcgY29tbXVuaXRpZXMnLiBBbmQgSSB0aGluayBRaTRqIGlzIGV4YWN0bHkgYXQgdGhpcyBwb2ludCByaWdodCBub3cuIFRoZSB2aXNpb24gZm9yIGEgYmV0dGVyIGZ1dHVyZSBpcyBleHRyZW1lbHkgcHJvbWlzaW5nLCBhbmQgd2UgaGF2ZSBzbyBtYW55IGFyZWFzIHRoYXQgd2UgbmVlZCBoZWxwIHRvIGltcGxlbWVudC4gQ29tYmluZWQgd2l0aCBhIG5vIGJhcnJpZXIgdG8gd3JpdGUgYW5kIGNvbW1pdCBjb2RlL2RvY3VtZW50YXRpb24gZm9yIGFsbCBwYXJ0cyBleGNlcHQgUWk0aiBDb3JlLCB3ZSBoYXZlIHRoZSBzZXR1cCBmb3IgYWNjZWxlcmF0ZWQgcGFydGljaXBhdGlvbiBpbiB0aGUgbW9udGhzIHRvIGNvbWUuIgotCi1XaXRoIHRoaXMgcmVsZWFzZSB0aGUgUWk0aiBjb21tdW5pdHkgbW92ZXMgZnJvbSBhIGZlYXR1cmUtYm94ZWQgcmVsZWFzZSBjeWNsZSBpbnRvIGEgdGltZS1ib3hlZCBvbmUuIEZpcnN0IHdlZWsgZXZlcnkgbW9udGgsIHRoZXJlIHdpbGwgYmUgYSByZWxlYXNlIGNvbnRhaW5pbmcgdGhlIHdvcmsgZnJvbSBwcmV2aW91cyByZWxlYXNlLiBJc3N1ZXMgd2lsbCBiZSB3b3JrZWQgb24gaW4gYSBzZW1pLXByaW9yaXRpemVkIG9yZGVyIGFuZCB0aGUgcGFydGljaXBhdGluZyBkZXZlbG9wZXJzIGFyZSB1cmdlZCB0byBrZWVwIHRoZSBjb2RlYmFzZSBzdGFibGUgdG93YXJkcyB0aGUgcmVsZWFzZSBkYXRlLgotCi1SaWNrYXJkIGlzIGtlZW4gdG8gcG9pbnQgb3V0IHRoZSBBcHBsaWNhdGlvbiBWaXN1YWxpemVyIHRoYXQgaGFzIGJlZW4gc3RhcnRlZCBzaW5jZSB0aGUgMC4yIHJlbGVhc2UsICJBbm90aGVyIGtleSB0b29sIHdoaWNoIHRoaXMgcmVsZWFzZSBpbnRyb2R1Y2VzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFwcGxpY2F0aW9uIHZpc3VhbGl6ZXIsIHdoaWNoIGF1dG9tYXRpY2FsbHkgc2hvd3Mgd2hhdCB5b3VyIGFwcGxpY2F0aW9uIGxvb2sgbGlrZS4gT25lIG9mIHRoZSBtYWluIGRpc2FkdmFudGFnZXMgb2YgZWFybGllciBmcmFtZXdvcmtzIGlzIHRoYXQgdGhlIGRldmVsb3BlcnMgdHlwaWNhbGx5IGZlbHQgb3V0IG9mIGNvbnRyb2wgYW5kIHVuYWJsZSB0byBzZWUgd2hhdCB3YXMgZ29pbmcgb24uIFdoZW4geW91IGhhdmUgc28gbWFueSBwaWVjZXMgd29ya2luZyB0b2dldGhlciBpdCBpcyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBiaWcgcGljdHVyZSwgYW5kIHRoaXMgaXMgd2hhdCB3ZSBhcmUgbm93IGVuYWJsaW5nLiIKLQotIk91ciBpbW1lZGlhdGUgbmV4dCBzdGVwcyBpbnZvbHZlcyBhIG5ldyByZW1vdGUgRW50aXR5IFN0b3JlLCBnZXR0aW5nIHRoZSBhcHBsaWNhdGlvbiB2aXN1YWxpemF0aW9uIHRvb2wgcmVhZHksIGNoYW5nZXMgdG8gdGhlIFF1ZXJ5IEFQSSBpbmNsdWRpbmcgbmFtZWQgYW5kIG5hdGl2ZSBxdWVyaWVzLCBhbmQgd2UgYXJlIGxvb2tpbmcgaW50byBpbnRyb2R1Y2luZyBtb3JlIGV4cGxpY2l0IENvbXBvc2l0ZSBhcmNoZXR5cGVzLCBzdWNoIGFzIFRyYW5zaWVudENvbXBvc2l0ZSBhbmQgVmFsdWVDb21wb3NpdGUiLCBzYXlzIFJpY2thcmQgYW5kIHRoZW4gZ29lcyBiYWNrIGNvZGluZy4KLQotVGhlIHJlc3Qgb2YgdXMganVzdCBjYW4ndCB3YWl0IHRvIHNlZSB3aGF0IGlzIGNvbWluZyB1cCBuZXh0LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwODA5MTUudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA4MDkxNS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMTRjYzguLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA4MDkxNS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1bW25ld3MtMjAwODA5MTUsUWk0aiBhdCBKYXZhWm9uZSAyMDA4IC0gQ09QL1FpNGpdXQotPSBAIEphdmFab25lIDIwMDggLSBDT1AvUWk0aiA9Ci0KLUluIHRoZSBjdXJyZW50IHByb2dyYW1taW5nIGN1bHR1cmUgd2UgaGF2ZSBsb3N0IHRoZSBPT1AgaWRlYSBvZiBvYmplY3RzCi1jb250YWluaW5nIGJvdGggbG9naWMgYW5kIHN0YXRlLCB0aGUgaWRlYSBvZiByZXVzZSBoYXMgbGFyZ2VseSBmYWlsZWQgZHVlIHRvCi1pbXByYWN0aWNhbCBtZWNoYW5pc21zLCBhbmQgY29tYmluaW5nIHBpZWNlcyBvZiBjb2RlIGludG8gbGFyZ2VyIHN0cnVjdHVyZXMKLXVzaW5nIEFPUCBoYXMgbm90IHF1aXRlIGRlbGl2ZXJlZCBvbiBpdHMgcHJvbWlzZXMuIEJ1aWxkaW5nIGxhcmdlLXNjYWxlCi1zb2Z0d2FyZSBhbHNvIGdpdmVzIHVzIGNoYWxsZW5nZXMgd2l0aCByZWdhcmQgdG8gY29tcGxleGl0eSwgZW5mb3JjaW5nCi1hcmNoaXRlY3R1cmFsIHJ1bGVzIGFuZCBjb2RlYmFzZSBleHBsb3Npb24uIFdoYXQgaWYgd2UgY291bGQgbG9vayBhdCB3aGF0IHdlCi1oYXZlIGFuZCBmaWd1cmUgb3V0IGEgbmV3IHdheSB0byBhZGRyZXNzIHRoZXNlIHByb2JsZW1zLCB3aGlsZSBwcm9tb3RpbmcgdGhlCi1pZGVhIGZyb20gZG9tYWluIG9yaWVudGVkIG1vZGVsaW5nIGFuZCByZXRhaW5pbmcgd2hhdCB3b3JrcyB3aXRoIHdoYXQgd2UgaGF2ZQotbm93PyBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbWluZyBpcyBhIG5ldyB3YXkgb2YgZGVhbGluZyB3aXRoIHRoZXNlIHByb2JsZW1zLAotYW5kIHRoaXMgcHJlc2VudGF0aW9uIHdpbGwgc2hvdyBob3cgdGhlIFFpNGogaW1wbGVtZW50YXRpb24gb24gdGhlIEphdmEKLXBsYXRmb3JtIHdpbGwgZW5hYmxlIHlvdSB0byBnZXQgbW9yZSBkb25lIHdpdGggbGVzcyB3b3JrLCBhbmQgaW4gYSB3YXkgdGhhdAotYWxsb3dzIHlvdSB0byBhdm9pZCB0aGUgbWVudGlvbmVkIHByb2JsZW1zLiBJdCB3aWxsIGRlc2NyaWJlIHRoZSBDT1AKLXRlcm1pbm9sb2d5IGFuZCBzaG93IGV4YW1wbGVzIG9uIGhvdyB0byB1c2UgUWk0aiB0byBpbXBsZW1lbnQgZG9tYWluIG9yaWVudGVkCi1tb2RlbHMuCi0KLVNlZSB0aGUgd2hvbGUgcHJlc2VudGF0aW9uIG9ubGluZQotaHR0cDovL2phdmF6b25lLm5vL2luY29naXRvL3Nlc3Npb24vUWk0aistK2ErbmV3K2FwcHJvYWNoK3RvK29sZCtwcm9ibGVtcy5odG1sW2hlcmVdLgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA4MDkxOS50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDgwOTE5LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFiZTYyMC4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDgwOTE5LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotW1tuZXdzLTIwMDgwOTE5LFFpNGogMC40IFJlbGVhc2VkXV0KLT0gUWk0aiAwLjQgUmVsZWFzZWQgPQotCi1DbGVhblVwIGFmdGVyIHRoZSAwLjMgY2hhbmdlcy4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwODExMTcudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA4MTExNy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0OTgwNjUuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA4MTExNy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1bW25ld3MtMjAwODExMTcsUWk0aiBhdCDDmHJlZGV2IDIwMDhdXQotPSBAIMOYcmVkZXYgMjAwOCAtIFFpNGogPQotCi1RaTRqIC0gY29kZSwgZXhhbXBsZXMgYW5kIGRlbW8KLQotUWk0aiBpcyBhbiBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBmcmFtZXdvcmsgdGhhdCBwcm9taXNlcyB0byBtYWtlIGl0IGVhc2llciB0bwotY3JlYXRlIGFwcGxpY2F0aW9ucyB1c2luZyBEREQuIEJ1dCBob3cgZG9lcyBpdCBhY2NvbXBsaXNoIHRoaXMsIGFuZCB0byB3aGF0Ci1leHRlbnQ/IFRoaXMgc2Vzc2lvbiB3aWxsIHRha2UgdXMgdGhyb3VnaCB0aGUgY3JlYXRpb24gb2YgYSBzaW1wbGUgYXBwbGljYXRpb24KLXVzaW5nIFFpNGogYW5kIGRpc2N1c3MgdGhlIGRpZmZlcmVudCBmZWF0dXJlcyB0aGF0IHNpbXBsaWZ5IHRoZSBkZXZlbG9wZXJzIGxpZmUKLWFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gYXBwbHkgYWdpbGUgcHJhY3RpY2VzLgotCi1XYXRjaCB0aGUgd2hvbGUgc2Vzc2lvbiBvbmxpbmUKLWh0dHA6Ly9hcmNoaXZlLm9yZWRldi5vcmcvdG9wbWVudS92aWRlby9qYXZhL3JpY2thcmRvYmVyZ3FpNGouNC41YTJkMzBkNDExZWU2ZmZkMjg4ODAwMDExMjIuaHRtbFtoZXJlXS4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwOTAxMDkudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA5MDEwOS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOThjZDYuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA5MDEwOS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVtbbmV3cy0yMDA5MDEwOSwgUWk0aiAwLjUgUmVsZWFzZWRdXQotPSBRaTRqIDAuNSBSZWxlYXNlZCA9Ci0KLVN0YWJpbGl6YXRpb24gb2YgQ29yZQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA5MDExMC50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDkwMTEwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ3ODU3YS4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDkwMTEwLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVtbbmV3cy0yMDA5MDExMCxRaTRqIGF0IMOFcnNrb25mZXJlbmNlIDIwMDldXQotPSBAIMOFcnNrb25mZXJlbmNlIDIwMDkgPQotCi1JdCBpcyBpbmRlZWQgZXhjaXRpbmcgdGltZXMgdG8gYmUgYSBKYXZhIGRldmVsb3BlciBpbi4gTG90cyBvZiBzdHVmZiBpcwotaGFwcGVuaW5nIGluIHRoZSBKYXZhIHNwYWNlIGFuZCBpdOKAmXMgaGFyZCB0byBwcmVkaWN0IHdoYXQga2luZCBvZgotZGV2ZWxvcG1lbnQgc3BhY2Ugd2Ugd2lsbCBiZSB3b3JraW5nIGluIGluIHRoZSBmdXR1cmUuCi0KLVdpbGwgYWxsIG91ciBKYXZhIGNvZGUgcnVuIGluIGEgY2xvdWQgc29tZXdoZXJlID8KLQotSXMg4oCcZG9tYWluIGNlbnRyaWMgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnTigJ0gdGhlIG5ldyBtYWdpYyB3YW5kIHdlIHNob3VsZAotYmUgd2F2aW5nIGF0IG91ciBKYXZhIGNvZGUgPwotCi1Kb2luIHVzIGFuZCBtZWV0IFJpY2thcmQgw5ZiZXJnIGFuZCBnZXQgYW4gaW4tZGVwdGggdmlldyBvbiBoaXMgbmV3IGV4Y2l0aW5nCi1wcm9qZWN0LCBRaTRqIChxaTRqLm9yZykKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwOTAyMTkudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA5MDIxOS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NGUwMmMuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA5MDIxOS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVtbbmV3cy0yMDA5MDIxOSxSaWNrYXJkIGV4cGxhaW5zIERERCBzdXBwb3J0IGluIFFpNGpdXQotPSBEREQgc3VwcG9ydCBpbiBRaTRqIGV4cGxhaW5lZCA9Ci0KLURvbWFpbiBEcml2ZW4gRGVzaWduIGhhcyBhIHNwZWNpYWwgc3RhdHVzIGluIFFpNGosIGFuZCBpdHMgdGFjdGljYWwgYml0cyBhcmUKLWVtYnJhY2VkIGluIFFpNGogaXRzZWxmLiBUaGVzZSBpbmNsdWRlcyBFbnRpdGllcywgU2VydmljZXMgYW5kIFZhbHVlcy4gSW4KLVJpY2thcmQncyBibG9nIGVudHJ5IGh0dHA6Ly93d3cuanJvbGxlci5jb20vcmlja2FyZC9lbnRyeS9xaTRqX2FuZF9zdGF0ZV9tb2RlbGluZ1tRaTRqIGFuZCBzdGF0ZSBtb2RlbGluZ10sCi1oZSBjb3ZlcnMgdGhlc2UgdG9waWNzIGluIGEgcmVsYXRpdmVseSBlYXN5IHRvIHVuZGVyc3RhbmQgYW5kIHBlZGFnb2dpYyBmb3JtYXQuIEEgaGlnaGx5IHJlY29tbWVuZGVkIHJlYWQKLWZvciBwZW9wbGUgd2hvIHdhbnQgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCBRaTRqIGlzIHJlYWxseSBhYm91dC4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwOTAyMjAudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA5MDIyMC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMTU2NzMuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDA5MDIyMC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVtbbmV3cy0yMDA5MDIyMCxRaTRqIDAuNiBSZWxlYXNlZF1dCi09IFFpNGogMC42IFJlbGVhc2VkID0KLQotR29hbCBvZiBGdWxsIFRlc3QgQ292ZXJhZ2UgaW4gQ29yZS4gCi0KLUJyZWFrLXVwIG9mIHByb2plY3QuCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDkwNDIwLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwOTA0MjAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmI1MjQyLi4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwOTA0MjAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1bW25ld3MtMjAwOTA0MjAsUWk0aiAwLjcgUmVsZWFzZWRdXQotPSBRaTRqIDAuNyBSZWxlYXNlZCA9Ci0KLVF1ZXJ5IENsZWFudXAuCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDkwNTEwLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwOTA1MTAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWE4ZjFkLi4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwOTA1MTAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotW1tuZXdzLTIwMDkwNTEwLFFpNGogYXQgSkZva3VzIDIwMDkgLSBDT1AvREREXV0KLT0gQCBKRm9rdXMgMjAwOSAtIENPUC9EREQgPQotCi1BdCBKRm9rdXMgZWFybGllciB0aGlzIHllYXIgUmlja2FyZCDDlmJlcmcgd2FzIGludGVydmlld2VkIGJ5IERhbiBCZXJnaCBKb2huc3NvbgotYWJvdXQgQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIGFuZCBRaTRqLgotCi1UaGUgaW50ZXJ2aWV3IGNvdmVycyBzb21lIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIENvbXBvc2l0ZSBPcmllbnRlZAotUHJvZ3JhbW1pbmcgYW5kIHRoZSBRaTRqIHByb2plY3QsIGl0cyBmb2N1cyBvbiBEREQgYW5kIHdoeSBKYXZhIHdhcyBjaG9zZW4gYXMKLWxhbmd1YWdlIGZvciB0aGUgaW1wbGVtZW50YXRpb24uIFlvdSBjYW4gc2VlIHRoZSBpbnRlcnZpZXcgb25saW5lIG9uCi1odHRwOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9UmNKcWNKTkQ0MnNbWW91VHViZV0uCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMDkwOTAzLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwOTA5MDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDk4MmY1Li4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAwOTA5MDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotW1tuZXdzLTIwMDkwOTAzLFFpNGogUGVyc2lzdGVuY2UgYXQgSmF2YVpvbmUgMjAwOV1dCi09IEAgSmF2YVpvbmUgMjAwOSAtIFBlcnNpc3RlbmNlID0KLQotSmF2YVpvbmUgMjAwOSBpcyBoZWxkIGFzIHVzdWFsIGluIE9zbG8sIE5vcndheSwgb24gdGhlIDl0aCBhbmQgMTB0aCBvZgotU2VwdGVtYmVyIDIwMDkuIEl0IGlzIHNldCB0byBiZSBhbiBleGNpdGluZyBldmVudCwgU2NhbmRpbmF2aWFzIGxhcmdlcyBKYXZhCi1EZXZlbG9wZXIncyBjb25mZXJlbmNlLCBidXQgY292ZXJzIGFkamFjZW50IGxhbmd1YWdlcyBhcyB3ZWxsLCBzdWNoIGFzIFNjYWxhLAotR3Jvb3Z5IGFuZCBKUnVieS4gUWk0aiBpcyByZXByZXNlbnRlZCB3aXRoIGEgcHJlc2VudGF0aW9uIGJ5IE5pY2xhcyBIZWRobWFuCi1hYm91dCAiUWk0aiBQZXJzaXN0ZW5jZSIgKDEwdGggU2VwdCwgMTE6NDUpLiBUaGUgc2hvcnQgdGltZSBhdmFpbGFibGUgd2lsbCBvbmx5Ci1hbGxvdyBmb3IgdGhlIGJhc2ljcyBvZiBRaTRqIFBlcnNpc3RlbmNlIHRvIGJlIGNvdmVyZWQsIGJ1dCB0aGUgYXVkaWVuY2UgaXMKLWV4cGVjdGVkIHRvIGdldCB0YW50YWxpemVkIGFuZCBjdXJpb3VzIGFib3V0IG91ciBncmVhdCBmcmFtZXdvcmsgZm9yIHJpY2gKLWRvbWFpbiBtb2RlbCBkZXZlbG9wbWVudC4KLQotTWFueSBvdGhlciBncmVhdCBzcGVha2VycywgYm90aCBsb2NhbCBOb3J3ZWdpYW5zIGFzIHdlbGwgYXMgSW50ZXJuYXRpb25hbCBvbmVzLAotd2lsbCBiZSBwcmVzZW50IGFuZCBhbGwgaXMgc2V0IGZvciBhIGdyZWF0IGNvbmZlcmVuY2UsIGFnYWluLi4uCi0KLU5pY2xhcyB3aWxsIG9mIGNvdXJzZSBiZSBhdmFpbGFibGUgbW9zdCBvZiB0aGUgY29uZmVyZW5jZSB0aW1lIGZvciBmYWNlLXRvLWZhY2UKLWRpc2N1c3Npb25zLCBmZWVkYmFjayBhbmQgcXVlc3Rpb25zIG9uIFFpNGogdG9waWNzLgotCi1TZWUgeW91IGluIE9zbG8uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMDEyNS0yLnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMDAxMjUtMi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YmVjYmIuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMDEyNS0yLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLVtbbmV3cy0yMDEwMDEyNS0yLFFpNGogYXQgw5hyZWRldiAyMDA5IDogRENJIGluIHByYWN0aWNlXV0KLT0gQCDDmHJlZGV2IDIwMDkgLSBEQ0kgPQotCi1JbiB0aGlzIHByZXNlbnRhdGlvbiB0aGF0IHdhcyByZWNvcmRlZCBkdXJpbmcgw5hyZWRldiAyMDA5LCBSaWNrYXJkIMOWYmVyZwotcHJlc2VudHMgaG93IHRvIHVzZSBRaTRqIHRvIGltcGxlbWVudCB0aGUgRENJIHByaW5jaXBsZXMuIERDSSwgb3IKLURhdGEtQ29udGV4dC1JbnRlcmFjdGlvbiwgaXMgYSBuZXcgcGFyYWRpZ20gY3JlYXRlZCBieSBUcnlndmUgUmVlbnNrdWcsCi1pbnZlbnRvciBvZiB0aGUgTVZDIHBhdHRlcm4uCi0KLVRoZSBwcmVzZW50YXRpb24gY2FuIGJlIGZvdW5kCi1odHRwOi8vd3d3Lm9yZWRldi5vcmcvcHJvZC9vcmVkZXYvc2l0ZS5uc2YvZG9jc2J5Y29kZW5hbWUvc2Vzc2lvbj9vcGVuZG9jdW1lbnQmc2lkPTg4RUY3OTkzMUEwNzRBMUFDMTI1NzU5QTAwM0FCMEVEJnRyYWNrPTI0MTE2NTU2RTQ3MTAxRUFDMTI1NzVBNTAwNDlBMTQxJmRheT01W2hlcmVdLAotYW5kIGl0IHdhcyBwYXJ0IG9mIGEgRENJIHRyYWNrIHdpdGggVHJ5Z3ZlIGFuZCBKaW0gQ29wbGllbiwgd2hvJ3MgcHJlc2VudGF0aW9ucwoteW91IGNhbiBmaW5kCi1odHRwOi8vd3d3Lm9yZWRldi5vcmcvcHJvZC9vcmVkZXYvc2l0ZS5uc2YvZG9jc2J5Y29kZW5hbWUvc2Vzc2lvbj9vcGVuZG9jdW1lbnQmc2lkPUI1RDhCRjMzMkEyODJGRUVDMTI1NzU5OTAwM0U1Njk0JnRyYWNrPTI0MTE2NTU2RTQ3MTAxRUFDMTI1NzVBNTAwNDlBMTQxJmRheT01W2hlcmVdCi1hbmQKLWh0dHA6Ly93d3cub3JlZGV2Lm9yZy9wcm9kL29yZWRldi9zaXRlLm5zZi9kb2NzYnljb2RlbmFtZS9zZXNzaW9uP29wZW5kb2N1bWVudCZzaWQ9OTk4NkMzN0Q3MzlGOEQzOUMxMjU3NTk0MDA2NEYyNzImdHJhY2s9MjQxMTY1NTZFNDcxMDFFQUMxMjU3NUE1MDA0OUExNDEmZGF5PTVbaGVyZV0uCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMTAwMTI1LnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMDAxMjUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2I2MmQwLi4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMDAxMjUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1bW25ld3MtMjAxMDAxMjUsUmlja2FyZCBhYm91dCBRdWlja2VyIEZyYW1ld29ya3Mgb24gdGhlIERERCB3ZWJzaXRlXV0KLT0gUXVpY2tlciBGcmFtZXdvcmtzID0KLQotVXN1YWxseSwgYSBmcmFtZXdvcmsgaXMgY3JlYXRlZCB0byBtYWtlIGRldmVsb3BtZW50IGZhc3RlciBieSBoaWRpbmcgdGhlCi10ZWNobmljYWwgbWFjaGluZXJ5IHVuZGVybmVhdGguIE1vdGl2YXRpb24gYmVoaW5kIFFpNGogd2FzIHZlcnkgZGlmZmVyZW50LiBJbgotdGhpcyBhcnRpY2xlIHdyaXR0ZW4gYnkgUmlja2FyZCDDlmJlcmcgZm9yIGh0dHA6Ly9Eb21haW5Ecml2ZW5EZXNpZ24ub3JnW0RvbWFpbkRyaXZlbkRlc2lnbi5vcmddLAotaGUgdGFsa3MgYWJvdXQgaG93IHRoaXMgZG9tYWluLWNlbnRyaWMgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZnJhbWV3b3JrIG1ha2VzIGl0IHF1aWNrZXIuCi0KLVlvdSBjYW4gZmluZCB0aGUgYXJ0aWNsZSBvbiB0aGUgREREIHdlYnNpdGUgaHR0cDovL2RvbWFpbmRyaXZlbmRlc2lnbi5vcmcvbGlicmFyeS9vYmVyZ18yMDA5W2hlcmVdLgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMDEyOC50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMTAwMTI4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE0ZWUyMC4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMTAwMTI4LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLVtbbmV3cy0yMDEwMDEyOCxRaTRqIFNESyAxLjAgaGFzIGJlZW4gcmVsZWFzZWQhXV0KLT0gUWk0aiBTREsgMS4wIGhhcyBiZWVuIHJlbGVhc2VkISA9Ci0KLVFpNGogU0RLIDEuMCBoYXMgbm93IGJlZW4gcmVsZWFzZWQuIEFmdGVyIDIgeWVhcnMgb2YgaGFyZCB3b3JrLCB3ZSBoYXZlIGZpbmFsbHkKLW1hZGUgYW4gb2ZmaWNpYWwgcmVsZWFzZSBhdmFpbGFibGUuIEl0IGNvbnRhaW5zIGFsbCB0aGUgY29yZSBmZWF0dXJlcyBvZiBRaTRqLAotc3VjaCBhcyBjb21wb3NpdGVzIG1hZGUgZnJvbSBmcmFnbWVudHMgbGlrZSBtaXhpbnMsIGNvbmNlcm5zLCBzaWRlLWVmZmVjdHMgYW5kCi1jb25zdHJhaW50cywgYW5kIGFsc28gdGhlIGxpYnJhcmllcyBhbmQgZXh0ZW5zaW9ucyB0aGF0IGFyZSB1c2VmdWwgZm9yIG1vc3QKLWFwcGxpY2F0aW9uIGRldmVsb3BtZW50LgotCi1EdXJpbmcgdGhpcyB3ZWVrcyBKRm9rdXMgY29uZmVyZW5jZSBpbiBTdG9ja2hvbG0sIFN3ZWRlbiwgdGhlIFFpNGogY29tbXVuaXR5Ci1yZWxlYXNlZCBRaTRqIFNESyAxLjAuIFJpY2thcmQgw5ZiZXJnIG1hZGUgdHdvIHByZXNlbnRhdGlvbnMgaW4gYXNzb2NpYXRpb24gd2l0aAotdGhlIGNvbmZlcmVuY2UsIGZvY3VzaW5nIG9uIGhvdyBRaTRqIGFuZCBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgbWFrZXMKLXdvcmtpbmcgd2l0aCBkb21haW4gbW9kZWxzIG9uIHRoZSBKYXZhIHBsYXRmb3JtIGVhc2llciBjb21wYXJlZCB0byB0aGUgdXN1YWwKLVBPSk8gYXBwcm9hY2ggdHlwaWNhbGx5IHVzZWQgaW4gdG9kYXlzIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LgotCi1RaTRqIGlzIGEgc2lnbmlmaWNhbnQgc3RlcCBmb3J3YXJkIGZvciB0aGUgSmF2YSBwbGF0Zm9ybSwgd2l0aCBpdHMgZm9jdXMgb24KLURvbWFpbiBEcml2ZW4gRGVzaWduIGFuZCBzdXBwb3J0IGZvciB0aGUgCi1odHRwOi8vd3d3LmFydGltYS5jb20vYXJ0aWNsZXMvZGNpX3Zpc2lvbi5odG1sW0RhdGEtQ29udGV4dC1JbnRlcmFjdGlvbl0KLXBhcmFkaWdtIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHdvcmtlZCBvbiBieSBUcnlndmUgUmVlbnNrYXVnIGFzIGEgd2F5IHRvCi1yZXZpdmUgb2JqZWN0LW9yaWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMDYxNy50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMTAwNjE3LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMxY2U3OS4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMTAwNjE3LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLVtbbmV3cy0yMDEwMDYxNyxRaTRqIFNESyAxLjEgaXMgb3V0IV1dCi09IFFpNGogU0RLIDEuMSBpcyBvdXQhID0KLQotUWk0aiBjb21tdW5pdHkgaGVyZWJ5IGFubm91bmNlcyB0aGUgYXZhaWxhYmlsaXR5IG9mIFJlbGVhc2UgMS4xIG9mIFFpNGogQ29yZSwKLVFpNGogTGlicmFyaWVzIGFuZCBRaTRqIEV4dGVuc2lvbnMuCi0KLVFpNGogdmVyc2lvbiAxLjEgaXMgbm93IGF2YWlsYWJsZS4gSXQgaXMgbW9zdGx5IGFuIGJ1ZyBmaXggdXBkYXRlLCBzb21lIFNQSQotY2hhbmdlcyBhbmQgYSBjb250cmlidXRlZCBFbnRpdHlTdG9yZSBmb3IgRUMyL1MzIHVzaW5nIEluZmluaXNwYW4uIFRoZSBhdXRob3IsCi1QaGlsaXBwZSBWYW4gRHljaywgZXhwbGFpbnM7Ci0KLS0gSW5maW5pc3BhbiBtZW1vcnkgY2FjaGUgZXZpY3Rpb24gbWVjaGFuaXNtIGlzIGJhc2VkIG9uIGEgbWVtb3J5IHRocmVzaG9sZCAoaS5lLiB5b3Ugc3BlY2lmeSAxMDBNQiBvZiBtZW1vcnkgZm9yIHRoZSBjYWNoZSBpbiB0aGUgc3RvcmUgY29uZmlnKQotLSBSSFEgbW9uaXRvcmluZyB3aXRoIEluZmluaXNwYW4gcGx1Z2luCi0tIEVudHJpZXMgYXJlIGd6aXBwZWQgb24gUzMKLS0gV2lja2V0IGxvYWQgYmFsYW5jaW5nIGlzIGRvbmUgd2l0aCBpbmZpbmlzcGFuIChjdXN0b20gcGFnZXN0b3JlKQotLSBJIHVzZSBhIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIHFpNGogaWRlbnRpdGllcyAoIkVudGl0eTEva2V5MSIpIHdpdGggYSB3ZWJkYXYgaW50ZXJmYWNlIHRvIGl0LCBzbyBvbmUgY2FuIG1vdW50IFFpNGoncyBzdG9yZSBpbiBNYWMgT1NYIEZpbmRlci4KLS0gRUMyIFMzX1BJTkcgaXMgdXNlZCBpbiBqZ3JvdXBzIHRvIGpvaW4gdGhlIGNsdXN0ZXIgb2YgcWk0aiBzdG9yZXMKLS0gRWFjaCBRaTRqIFVuaXRPZldvcmsgaXMgdHJhbnNhY3Rpb24gYmFja2VkIHdpdGggcm9sbGJhY2sgc3VwcG9ydAotLSBTMyAoYmxvYnN0b3JlKSBhY2Nlc3MgaXMgdXNpbmcgSW5maW5pc3BhbiBzeW5jaHJvbm91cyBhbmQgdHJhbnNhY3RlZCBtb2RlCi0tIEVDMiBpbWFnZXMgb25seSBjb250YWluIHRoZSB3aWNrZXQgd2ViIGludGVyZmFjZSB3aXRoIGEgamV0dHkgaHR0cHMgY29ubmVjdG9yIC8gd2hlbiBhZGRlZCB0byBhbWF6b24gZWxhc3RpYyBsb2FkIGJhbGFuY2VyLCBJbmZpbmlzcGFuIGNvbm5lY3RzIHRvIHRoZSBjYWNoZSBjbHVzdGVyIGFuZCB3aWNrZXQgYmVnaW5zIHRvIHNlcnZlciBsb2FkIGJhbGFuY2VkIHJlcXVlc3RzIC0geWVwLCBqdXN0IGxpa2UgdGhhdAotCi1DdXJyZW50IHBlcmZvcm1hbmNlLCBhcyByZXBvcnRlZCBieSBSSFEsIGZyb20gRUMyIHRvIFMzLCBpcyBhcm91bmQgNjBtcyBwZXIKLXJlYWQvd3JpdGUgZnJvbSBTMyAocm91Z2ggYXZlcmFnZSkuIEVsYXN0aWMgbG9hZCBiYWxhbmNpbmcgbG9hZCB0ZXN0cyB3aXRoCi1sb2FkU3Rvcm0gYXJlIG5vdCBkb25lIHlldC4gQnV0IEkgZG9uJ3Qga25vdyBhbnkgTk9TUUwgYWx0ZXJuYXRpdmUgb2ZmZXJpbmcgYQotKnBlcm1hbmVudCB0cmFuc2FjdGVkIG1vbml0b3JlZCBjb21wcmVzc2VkIEZpbmRlci1tb3VudGVkIGNsdXN0ZXJlZAotbG9hZC1iYWxhbmNlZCBzdG9yZSouCi0KLURldmVsb3BtZW50IGNvbnRpbnVlcyB0b3dhcmRzIDEuMiByZWxlYXNlLCB3aGljaCBpbmNsdWRlcyBiZXR0ZXIgT1NHaSBzdXBwb3J0LAotZHJvcHBpbmcgQ0dMaWIgZGVwZW5kZW5jeSBkdWUgdG8gY2xhc3Nsb2FkaW5nIGlzc3VlcywgR29vZ2xlIEFwcEVuZ2luZSBzdXBwb3J0Ci1hbmQgaG9wZWZ1bGx5IHRoZSBEQ0kgc3VwcG9ydCBhcyBkZXZlbG9wZWQgaW4gdGhlIFN0cmVhbUZsb3cgcHJvamVjdC4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMDA4MzAudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMDgzMC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzY0M2YuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMDgzMC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVtbbmV3cy0yMDEwMDgzMCxRaTRqIGF0IEFwYWNoZSBSb2Fkc2hvdyBTaGFuZ2hhaV1dCi09IEAgQXBhY2hlIFJvYWRzaG93IFNoYW5naGFpID0KLQotUWk0aiB3YXMgaW52aXRlZCB0byBwcmVzZW50IGF0IHRoZSBBcGFjaGUgUm9hZHNob3cgU2hhbmdoYWkgMjAxMCwgbGFyZ2VseSBkdWUKLXRvIE5pY2xhcyBIZWRobWFuIGlzIGN1cnJlbnRseSBsaXZpbmcgdGhlcmUgYW5kIGlzIGFuIEFwYWNoZSBNZW1iZXIuIE5pY2xhcyBoYXMKLXJlZmxlY3RlZCBvdmVyIGhvdyB0aGUgcHJlc2VudGF0aW9uIHdhcyBkb25lIGFuZCBzb21lIHJlYWN0aW9ucyBmcm9tIHRoZQotYXVkaWVuY2UuIFlvdSBjYW4gcmVhZCBhbGwgYWJvdXQgaXQgb24gaGlzCi1odHRwOi8vd3d3Lmpyb2xsZXIuY29tL25pY2xhcy9lbnRyeS9xaTRqX2luX3NoYW5naGFpX3BhcnRfMltibG9nXS4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMDA5MTgudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMDkxOC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyOWM2N2YuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMDkxOC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1bW25ld3MtMjAxMDA5MTgsUWk0aiBhdCBKYXZhWm9uZSAyMDEwIC0gUmVTVC9EQ0ldXQotPSBAIEphdmFab25lIDIwMTAgLSBSZVNUL0RDSSA9Ci0KLVFpNGogYXQgSmF2YVpvbmUgMjAxMCwgT3NsbywgTm9yd2F5LiBSaWNrYXJkIMOWYmVyZyBwcmVzZW50ZWQKLSJJbXBsZW1lbnRpbmcgYSBSZXN0IEFQSSB3aXRoIERDSSBhbmQgUWk0aiIgYXQgSmF2YVpvbmUgb24gdGhlIDggU2VwdCAyMDEwLgotCi1JbXBsZW1lbnRpbmcgYSBSRVNUIEFQSSB0b2RheSBpcyBpbXBvcnRhbnQgaW4gbWFueSBjYXNlcywgYm90aCBhcyBhbgotaW50ZWdyYXRpb24gcG9pbnQgdG8geW91ciBhcHBsaWNhdGlvbiBhbmQgYXMgYSB3YXkgZm9yIGNsaWVudHMgdG8gYWNjZXNzIHRoZQotYXBwbGljYXRpb24uIEJ1dCB0aGVyZSBhcmUgZmV3IGZyYW1ld29ya3Mgb3V0IHRoZXJlIHRoYXQgaGVscCB5b3UgZnVsZmlsIGFsbAotdGhlIGNvbnN0cmFpbnRzIG9mIFJFU1QsIGFuZCB0aGVyZWZvcmUgb25seSBtYWtlcyB5b3VyIEFQSSBhIFJFU1Qtd2FubmFiZS4gVGhpcwotc2Vzc2lvbiB3aWxsIGxvb2sgYXQgaG93IHlvdSBjYW4gdXNlIFFpNGogYWxvbmcgd2l0aCB0aGUgRENJIHBhdHRlcm4gdG8KLWltcGxlbWVudCBhIHRydWx5IFJFU1RmdWwgQVBJLCB0aGF0IGZvbGxvd3MgYWxsIHRoZSBjb25zdHJhaW50cy4gV2Ugd2lsbCBsb29rCi1hdCBob3cgRENJIG1hcHMgdG8gdGhlIFJFU1RmdWwgd2F5IG9mIHRoaW5raW5nIGFib3V0IHdlYiBBUEkncywgYW5kIGhvdyBRaTRqCi1jYW4gaGVscCB3aXRoIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24uCi0KLWh0dHA6Ly9zdHJlYW1pbmcuamF2YS5uby90Y3MvI3BhZ2U6cmVjb3JkaW5nTGlzdCZwYWdlTnVtYmVyOjEmaWQ6REQzOTU1QkMtOTk3Qi00MEMxLUE3REMtNDIxREI4RUU2NTEyW1dhdGNoIHRoZSB2aWRlb10KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMDEwMjMudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMTAyMy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMzMyYzguLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEwMTAyMy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi1bW25ld3MtMjAxMDEwMjMsUWk0aiBTREsgMS4yIFJlbGVhc2VkXV0KLT0gUWk0aiBTREsgMS4yIFJlbGVhc2VkID0KLQotVGhlIFFpNGogY29tbXVuaXR5IHRvZGF5IGFubm91bmNlZCB0aGUgM3JkIGluc3RhbGxtZW50IG9mIHRoZSBpbm5vdmF0aXZlIEphdmEKLWZyYW1ld29yaywgUWk0ai4gVGhlIG1haW4gbmV3IGZlYXR1cmVzIGluY2x1ZGVzLCBTUUwgRW50aXR5U3RvcmUsIFNRTAotSW5kZXhpbmcvUXVlcnlpbmcsIENhY2hpbmcgU1BJIGFuZCBhIFNlcnZpY2UgUXVhbGlmaWVyIEFQSS4KLQotQWRkaXRpb25hbCB0byB0aGUgbmV3IGZlYXR1cmVzLCBudW1lcm91cyBpbXByb3ZlbWVudHMgd2VyZSBtYWRlIGFsb25nIHNpZGUgd2l0aAotc2lnbmlmaWNhbnQgaW50ZXJuYWwgY2hhbmdlcy4gSGVyZSBpcyBhIGJyZWFrIGRvd24gb2YgdGhlIG1vcmUgaW1wb3J0YW50IGlzc3VlczsKLQotVGhlIENhY2hlIFNQSSBpcyBhbm90aGVyIGltcG9ydGFudCBuZXcgZmVhdHVyZS4gVGhlIHBsdWdnYWJsZSBDYWNoZSBTUEkgbWVhbnMKLXRoYXQgaXQgaXMgZXF1YWxseSBzaW1wbGUgdG8gYWRkIG5ldyBjYWNoaW5nIGltcGxlbWVudGF0aW9ucyBhcyBpdCBpcyB0byBhZGQKLUVudGl0eSBTdG9yZSBpbXBsZW1lbnRhdGlvbnMsIGluIGZhY3QgZXZlbiBlYXNpZXIgc2luY2UgdGhlIFNQSSBpcyB2ZXJ5IHNpbXBsZS4KLVRoZSBlbnRpdHkgc3RvcmVzIGltcGxlbWVudGF0aW9ucyB0aGF0IGxldmVyYWdlcyB0aGUgTWFwRW50aXR5U3RvcmUgbGF5ZXIgaW4KLXRoZSBRaTRqIFJ1bnRpbWUgKHdoaWNoIG1vc3QgZG8pLCB3aWxsIGF1dG9tYXRpY2FsbHkgYmVuZWZpdCBmcm9tIHRoZSBwbHVnZ2VkCi1pbiBDYWNoZS4KLQotVGhlIHN1cHBvcnQgb2YgU1FMIGhhcyBiZWVuIGEgbG9uZy1zdGFuZGluZyByZXF1ZXN0ZWQgaXRlbSwgYW5kIHRoYW5rcyB0byBuZXcKLWNvbW11bml0eSBibG9vZCwgd2Ugbm93IGhhdmUgdGhlIGZpcnN0IGdlbmVyYXRpb24gb2YgYm90aCBFbnRpdHlTdG9yZQotaW1wbGVtZW50YXRpb24gYXMgd2VsbCBhcyB1c2luZyBTUUwgYmFja2VuZHMgZm9yIHF1ZXJ5aW5nIGFuZCBpbmRleGluZy4gVGhlc2UKLXR3byBpbXBsZW1lbnRhdGlvbnMgaXMgYSB0ZXN0YW1lbnQgdGhhdCB0aGUgUWk0aiBkYXRhIG1vZGVsIGlzIHRydWx5IGZsZXhpYmxlLgotVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3QsIGhvd2V2ZXIsIHN1cHBvcnQgbWFwcGluZyBvZiBleGlzdGluZwotdGFibGVzIGFuZCBleHBlY3QgdG8gJ293bicgdGhlIHRhYmxlcyBpdCBuZWVkcy4gUG9zdGdyZVNRTCBhbmQgTXlTUUwgYXJlIHRoZQotZmlyc3Qgc3VwcG9ydCBSREJNU2VzLCBhbmQgbW9yZSBhcmUgYm91bmQgdG8gZm9sbG93IGluIHVwY29taW5nIHJlbGVhc2VzLgotCi1TTEY0SiB3YXMgaW50cm9kdWNlZCBhcyBhIGRlcGVuZGVuY3kgaW4gUWk0aiBDb3JlLCBhbmQgc2xvd2x5IHN0YXJ0aW5nIHRvIGFkZAotYWRkaXRpb25hbCBkZWJ1ZyBhbmQgdHJhY2Ugc3RhdGVtZW50cyBpbiB0aGUgaW50ZXJuYWxzIG9mIFFpNGogUnVudGltZSB0byBhaWQKLWluIHRyb3VibGVzaG9vdGluZy4KLQotUWk0aiBjb21tdW5pdHkgaGFzIGFsc28gbm90ZWQgYSBKREsgYnVnLCB3aGljaCBzdXJmYWNlIGFzIGEKLWphdmEubGFuZy5BcnJheVN0b3JlRXhjZXB0aW9uLCBidXQgaXMgcmVhbGx5IGEKLWphdmEubGFuZy5UeXBlTm90UHJlc2VudEV4Y2VwdGlvbiB0aGF0IGdldHMgdHJlYXRlZCBpbmNvcnJlY3RseSBkZWVwIGluc2lkZQotY29tLnN1biBwYWNrYWdlcy4gVGhpcyByZWxlYXNlIGRpZCBub3QgbWFuYWdlIHRvIHdvcmsgYXJvdW5kIHRoaXMsIGJ1dCB3ZSB3aWxsCi1pbiB0aGUgbmV4dCByZWxlYXNlLgotCi1UaGUgYnVncyBmaXhlZCBhcmUgb2YgdmFyaW91cyBuYXR1cmUuIFNvbWUgb2YgdGhlIGJ1Z3MgbGlzdGVkIGluIHRoZSByZWxlYXNlCi1ub3RlcyBhcmUgcG9zc2libHkgZml4ZWQgcHJpb3IgdG8gUWk0aiAxLjEsIGJ1dCBub3QgaWRlbnRpZmllZCBjb3JyZWN0bHkuIFRoZQotdHdvIG1vc3QgaW1wb3J0YW50IGJ1ZyBmaXhlcyBhcmUgUUktMjQ3LCBJbmNvcnJlY3QgZGVsZWdhdGlvbiBvZiBPYmplY3QgbWV0aG9kcwotaW4gVHJhbnNpZW50Q29tcG9zaXRlLCBhbmQgUUktMjQxIHJlZ2FyZGluZyB0aGUgbWF0Y2hpbmcgYWxnb3JpdGhtIGZvcgotQEFwcGxpZXNUby4gVGhlIGxhdHRlciBtYXkgc2VyaW91c2x5IGFmZmVjdCBleGlzdGluZyBhcHBsaWNhdGlvbnMgdG8gaW5jbHVkZQotZnJhZ21lbnRzIHdoZW4gaXQgcHJldmlvdXNseSBkaWRuJ3QuCi0KLT09IFJlbGVhc2UgTm90ZXMgLSBRaTRqIFNESyAxLjIgPT0KLQotKk5ldyBGZWF0dXJlcyoKLQotLSBbUUktMTkyXSAtIFN1cHBvcnQgaW5kZXhpbmcvcXVlcnlpbmcgb2YgY29sbGVjdGlvbiBwcm9wZXJ0aWVzCi0tIFtRSS0yNjBdIC0gSW50cm9kdWNlIGFkdmFuY2VkIGNhY2hlIChlaGNhY2hlPykgYXMgYSBnZW5lcmFsIHB1cnBvc2UgY2FjaGluZyBsYXllciBmb3IgYWxsIEVudGl0eVN0b3JlcwotLSBbUUktMjY2XSAtIEludHJvZHVjdGlvbiBvZiBTZXJ2aWNlIFF1YWxpZmllciBBUEkKLS0gW1FJLTI2OF0gLSBDYWNoZSBTUEkgaW50cm9kdWNlZCBpbiBDb3JlLgotLSBbUUktMjY5XSAtIENhY2hlIEV4dGVuc2lvbiAtIEVoY2FjaGUKLQotKkltcHJvdmVtZW50cyoKLQotLSBbUUktNThdIC0gUHJvcGVydHkgLT4gUHJvcGVydHkgLi4gLT4gLi4gUXVlcnlpbmcKLS0gW1FJLTIzMl0gLSBFbnRpdHkgVHlwZSByZXNvbHV0aW9uIGlzIGZsYXdlZAotLSBbUUktMjQ5XSAtIFZpc2l0b3ItcGF0dGVybiB0byB3b3JrIHdpdGggdGhyb3dzIC1kZWNsYXJhdGlvbgotLSBbUUktMjYzXSAtIFJlcGxhY2UgSkRLIGxvZ2dpbmcgd2l0aCBTTEY0SgotLSBbUUktMjY0XSAtIFVzZSBleGNlcHRpb24gaGFuZGxpbmcgcGF0dGVybiBpbiB2aXNpdG9ycwotLSBbUUktMjY1XSAtIEludHJvZHVjZSBTTEY0SiBhcyBsb2dnaW5nIGZyYW1ld29yay4KLS0gW1FJLTI2N10gLSBFbnRpdHlTdG9yZVNQSS5hcHBseUNoYW5nZXMoKSBzaG91bGQgaGF2ZSB0aGUgRW50aXR5U3RvcmVVbml0T2ZXb3JrIHBhc3NlZCBhbG9uZy4KLQotKkJ1Z3MgRml4ZWQqCi0KLS0gW1FJLTIxNF0gLSBNaXNzaW5nIGltcGxlbWVudGF0aW9ucyBvZiBuZXdFcXVhbHNQcmVkaWNhdGUKLS0gW1FJLTI0MV0gLSBBcHBsaWVzVG8gbWF0Y2ggYWxnb3JpdGhtIHNob3VsZCBiZSBhIE9SIGNvbmRpdGlvbiBpbiB0aGUgdGFyZ2V0ZWQgZWxlbWVudHMgbGlzdAotLSBbUUktMjQ3XSAtIEJyb2tlbiBkZWxlZ2F0aW9uIG9mIE9iamVjdCBtZXRob2RzIGluIFRyYW5zaWVudENvbXBvc2l0ZQotLSBbUUktMjUzXSAtIFJlbWFpbmluZyBidWdzIG9uIG1vdmluZyB0byBBU00KLS0gW1FJLTI1NF0gLSBGcmFnbWVudENsYXNzTG9hZGVyIGNhdXNlcyBVbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9yIGluIG1vc3QgdGVzdHMKLS0gW1FJLTI1NV0gLSBRaTRqIHRlc3RzIGRvIG5vdCB0YWtlIEBRdWVyeWFibGUoZmFsc2UpIGludG8gYWNjb3VudAotLSBbUUktMjU2XSAtIFVuZGVjbGFyZWRUaHJvd2FibGVFeGNlcHRpb24gLSBwb3NzaWJseSByZWxhdGVkIHRvIG5ldyBjbGFzcy1nZW5lcmF0aW9uCi0tIFtRSS0yNTddIC0gQ29uY2Vybk9mL1NpZGVFZmZlY3RPZiBub3Qgd29ya2luZyB3aXRoIDxQcm9wZXJ0eTxTb21lVHlwZT4+Ci0tIFtRSS0yNTldIC0gSlNPTk1hcEVudGl0eVN0b3JlIGRpZCBub3QgdXBkYXRlIGxhc3RNb2RpZmllZCBpbiBlbnRpdHlzdGF0ZQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDExMDIyMS50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMTEwMjIxLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg1NDJiOC4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMTEwMjIxLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLVtbbmV3cy0yMDExMDIyMSxRaTRqIG1vdmVzIHRvIEdyYWRsZV1dCi09IFFpNGogbW92ZXMgdG8gR3JhZGxlID0KLQotVGhlIFFpNGogcHJvamVjdCBoYXMgZGlzY29udGludWVkIGl0cyB1c2Ugb2YgTWF2ZW4gYW5kIGludHJvZHVjZWQgR3JhZGxlIGFzIGl0cwotYnVpbGQgc3lzdGVtLgotCi1BZnRlciBmaWdodGluZyB0aGUgTWF2ZW4gYnVpbGQgc3lzdGVtIGZvciB5ZWFycywgYW5kIGNvbnN0YW50bHkgbG9va2luZyBmb3IKLWFsdGVybmF0aXZlcywgdGhlIFFpNGogY29tbXVuaXR5IGhhcyBmaW5hbGx5IGRlY2lkZWQgdG8gZ3JhYiB0aGUgYnVsbCBieSBpdHMKLWhvcm4gYW5kIHRocm93IGl0IG91dCBvZiB0aGUgYXJlbmEuIE1hdmVuIGltcG9zZXMgYSB2ZXJ5IHJpZ2lkIG1vZGVsIG9uIGhvdyB0bwotZGVmaW5lIHlvdXIgcHJvamVjdCwgYnV0IGhhcyBhIHdlYWsgaW50ZXJuYWwgbW9kZWwgb24gaG93IGEgYnVpbGQgaXMgZXhlY3V0ZWQuCi1XZSB0aGVyZWZvciBvZnRlbiBzZWUgY29uZmxpY3RzIGJldHdlZW4gcGx1Z2lucywgcGx1Z2lucyBtYWtlIHRvbyBtdWNoIAotYXNzdW1wdGlvbnMgYW5kIGlnbm9yaW5nIHNldHRpbmdzIHRoYXQgYXJlIGFjdHVhbGx5IHByb3ZpZGVkIGZvcm1hbGx5LCBhbmQgbm90Ci10byBldmVuIG1lbnRpb24gdGhlIGZ1bmRhbWVudGFsbHkgZmxhd2VkIHZlcnNpb25pbmcgc3lzdGVtLgotCi1BZnRlciBhIGZldyBldmFsdWF0aW9ucyBvZiBhbHRlcm5hdGl2ZXMgKEdyYWRsZSAmIEJ1aWxkciB3ZXJlIHRoZSBzdHJvbmcKLWNvbnRlbmRlcnMpLCB3ZSBoYXZlIGZpbmFsbHkgc2V0dGxlZCBmb3IgR3JhZGxlIChodHRwOi8vd3d3LmdyYWRsZS5vcmcgYW5kCi1odHRwOi8vZ3JhZGxlLmNvZGVoYXVzLm9yZykuIENvbnRyYXJ5IHRvIE1hdmVuLCBHcmFkbGUgcHJvdmlkZXMgYSBzdHJvbmcKLWludGVybmFsIG1vZGVsIGZvciBidWlsZCBzeXN0ZW1zLCBidXQgYSBmbGV4aWJsZSB3YXkgdG8gZXN0YWJsaXNoIHRoYXQgbW9kZWwuCi1JbiBlc3NlbmNlLCBpbiBNYXZlbiwgdGhlIGRlY2xhcmF0aW9uIGlzIHN0YXRpYyBhbmQgdGhlIGV4ZWN1dGlvbiBpcyAKLWlsbC1kZWZpbmVkLCBhbmQgaW4gR3JhZGxlIHRoZSBtb2RlbCBpcyBlc3RhYmxpc2hlZCBwcm9ncmFtbWF0aWNhbGx5IGFuZCB0aGUKLWV4ZWN1dGlvbiBpcyBkb25lIG9mZiB0aGUgbW9kZWwuCi0KLVRoaXMgYWxsb3dzIGZvciBhIGdyZWF0IGRlYWwgbW9yZSBmbGV4aWJpbGl0eS4gR3JhZGxlIGFsc28gaGF2ZSBuaWNlCi1pbnRlZ3JhdGlvbiB3aXRoIEFudCBhbmQgSXZ5LCBzbyBHcmFkbGUncyBkZXBlbmRlbmN5IHN5c3RlbSBpcyBoYW5kbGVkIGJ5IEl2eQotKHdpdGhvdXQgSXZ5J3MgWE1MKSBhbmQgaXQgaXMgZWFzeSB0byB1c2UgYW55IGJ1aWxkIHRvb2wgdGhhdCBwcm92aWRlcyBhbiBBbnQKLXRhc2ssIGFnYWluIHByb2dyYW1tYXRpY2FsbHkuCi0KLVRoZSBhYnNlbmNlIG9mIFhNTCBpcyByZWZyZXNoaW5nLiBTbyBpbnN0ZWFkIG9mOwotCi1bc291cmNlLHhtbF0KLS0tLS0KLTxkZXBlbmRlbmNpZXM+Ci0gIDxkZXBlbmRlbmN5PgotICAgIDxncm91cElkPm9yZy5xaTRqLmNvcmUucnVudGltZTwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5xaTRqLWNvcmUtYXBpPC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjEuMzwvdmVyc2lvbj4KLSAgPC9kZXBlbmRlbmN5PgotICA8ZGVwZW5kZW5jeT4KLSAgICA8Z3JvdXBJZD5vcmcucWk0ai5jb3JlLnJ1bnRpbWU8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+cWk0ai1jb3JlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4zPC92ZXJzaW9uPgotICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgPC9kZXBlbmRlbmN5PgotPC9kZXBlbmRlbmNpZXM+Ci0tLS0tCi0KLVRoZSBkZWNsYXJhdGlvbiBvZiBhIGRlcGVuZGVuY3kgaXMgZG9uZSBwcm9ncmFtbWF0aWNhbGx5IGluIEdyb292eSBjb2RlLCBzbyBpdAotY2FuIGV2ZW4gYmUgY29uZGl0aW9uYWwgYW5kIHNvIGZvcnRoLCBidXQgdGhlIG5vcm1hbCB3YXkgaXM7Ci0KLVtzb3VyY2UsZ3Jvb3Z5XQotLS0tLQotZGVwZW5kZW5jaWVzIHsKLSAgICBjb21waWxlICJvcmcucWk0ai5jb3JlOnFpNGotY29yZS1hcGk6MS4yIgotICAgIHRlc3RSdW50aW1lICJvcmcucWk0ai5jb3JlOnFpNGotY29yZS1ydW50aW1lOjEuMiIKLX0KLS0tLS0KLQotQW5kIFlFUywgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGVzdENvbXBpbGUgYW5kIHRlc3RSdW50aW1lLiAxIGxpbmUKLWluc3RlYWQgb2YgTWF2ZW4ncyA1LTYgbGluZXMgcGVyIGRlcGVuZGVuY3kuIEFuZCBpbiB0cnVlIEl2eSBmYXNoaW9uLCBvbmUgY2FuCi1jcmVhdGUgb25lJ3Mgb3duIHNjb3BlcywgYWx0aG91Z2ggSSBkb3VidCB3ZSBuZWVkIHRoYXQgaW4gdGhlIG5lYXIgZnV0dXJlLgotCi1UaGUgZGVwZW5kZW5jeSBzeXN0ZW0gaXMgd29ydGggbWVudGlvbmluZzsgU2luY2UgR3JhZGxlIHVuZGVyc3RhbmQgbXVsdGkgbW9kdWxlCi1wcm9qZWN0cyB2ZXJ5IHdlbGwsIGFnYWluIHVubGlrZSBNYXZlbiwgaXQgcmVzb2x2ZXMgdGhlIGJ1aWxkIG9yZGVyIGFjY29yZGluZwotdG8gdGhlIHRhc2tzIG5lZWRlZC4gVGhpcyBtZWFucyB0aGF0IGFuIHVwc3RyZWFtIG1vZHVsZSdzIHRlc3RzIGNhbiBkZXBlbmQgb24gYQotZG93bnN0cmVhbSBtb2R1bGUncyBvdXRwdXQuIEFuZCBldmVuIGlmIHRoZSBidWlsZCBpcyBleGVjdXRlZCBpbiB0aGUgdXBzdHJlYW0KLW1vZHVsZSwgdGhlIGRvd25zdHJlYW0gbW9kdWxlIHdpbGwgYmUgcmVjb21waWxlZCBpZiBhbnkgY2hhbmdlcyBoYXBwZW5lZCBpbiBpdC4KLVlvdSBuZXZlciBuZWVkIHRvIHdvcnJ5IGFib3V0ICJPaCwgSSBmb3Jnb3QgdG8gcmVjb21waWxlIFgiIGFnYWluLi4uCi0KLUdyYWRsZSBkb2VzIG5vdCBuZWVkIGFuIGluc3RhbGxhdGlvbi4gVGhlIFFpNGogU0RLIHByb2plY3QgY29tZXMgd2l0aCBhIEdyYWRsZQotYm9vdHN0cmFwcGVyLCBzbyBpdCB3aWxsIGluc3RhbGwgaXRzZWxmLiBWZXJ5IG5pY2UuCi0KLVFpNGogaXMgc3RpbGwgY29tbWl0dGVkIHRvIHByb2R1Y2UgTWF2ZW4gYXJ0aWZhY3RzIGZvciBwdWJsaXNoaW5nIHRvIE1hdmVuCi1yZXBvc2l0b3JpZXMsIGFuZCB0aGUgdXBjb21pbmcgMS4zIHJlbGVhc2Ugd2lsbCBiZSB0aGUgZmlyc3Qgb25lIHVzaW5nIEdyYWRsZSBmb3IgdGhpcy4KLQotV2UgaG9wZSB0aGF0IHRoaXMgd2lsbCBtYWtlIFFpNGogZGV2ZWxvcG1lbnQgbW9yZSBlbmpveWFibGUuCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzLzIwMTEwNDE1LnR4dCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMTA0MTUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGIxMjFmLi4wMDAwMDAwCi0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMTA0MTUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLVtbbmV3cy0yMDExMDQxNSxRaTRqIFNESyBSZWxlYXNlIDEuM11dCi09IFFpNGogU0RLIFJlbGVhc2UgMS4zID0KLQotS3VhbGEgTHVtcHVyLCAxNSBBcHJpbCAyMDExIC0gVGhlIFFpNGogY29tbXVuaXR5IHRvZGF5IGFubm91bmNlZCBSZWxlYXNlIDEuMyBvZiB0aGUgaW5ub3ZhdGl2ZSBKYXZhIGZyYW1ld29yaywgUWk0ai4gVGhpcyByZWxlYXNlIGlzIHNpZ25pZmljYW50IGZvciBzZXZlcmFsIGN1c3RvbWVycywgbW92aW5nIHRvIGRlcGxveSBRaTRqIGluIGJ1c2luZXNzIGNyaXRpY2FsIDI0Lzcgc3lzdGVtcy4gIldlIG5vdyBmZWVsIHRoYXQgdGhlIGNvcmUgZmVhdHVyZXMgb2YgUWk0aiBhcmUgYXMgc3RhYmxlIGFzIHNvZnR3YXJlIHN5c3RlbXMgZXZlciBnZXQuIFFpNGogaXMgbm93IGJlaW5nIGRlcGxveWVkIGF0IGEgbWFqb3IgaW52ZXN0bWVudCBiYW5rIGluIHRoZSByaXNrIHByaWNpbmcgZG9tYWluLiIsIHNhaWQgTmljbGFzIEhlZGhtYW4sIGNvLWludmVudG9yIG9mIFFpNGogdG9nZXRoZXIgd2l0aCBSaWNrYXJkIMOWYmVyZywgd2hvIGFkZGVkICJRaTRqIGhhcyByZWFsbHkgcHJvdmVkIGl0c2VsZiBpbiBTdHJlYW1GbG93LCBhbmQgSSBhbSBjb252aW5jZWQgdGhhdCBtYW55IG9mIG91ciBwYXJhZGlnbXMgd2lsbCBzdGFuZCB0aGUgdGVzdCBvZiB0aW1lLiIKLQotVGhpcyByZWxlYXNlIHNwb3J0cyBtYW55IG5ldyBmZWF0dXJlcywgc3VjaCBhcyBTb2xyIEluZGV4aW5nLCBKTVggaW50ZWdyYXRpb24sIENpcmN1aXQtYnJlYWtlciBsaWJyYXJ5LCBpbm5vdmF0aXZlIEFQSSBmb3IgZGVhbGluZyB3aXRoIEkvTywgZnVuY3Rpb25hbCBwYXJhZGlnbXMgYW5kIG11Y2ggbW9yZSwgYnV0IGFuIGltcG9ydGFudCBmb2N1cyB3YXMgdG8gc3RhYmlsaXplIHRoZSBtYW55IGxpYnJhcmllcyBhbmQgZXh0ZW5zaW9ucy4KLQotVGhlIG1haW4gbmV3IGZlYXR1cmVzIGFyZSBsaXN0ZWQgYmVsb3cuIFRoZSBjb21tdW5pdHkgbm93IHNldHMgaXRzIGV5ZXMgYWhlYWQgdG93YXJkcyB0aGUgbmV4dCByZWxlYXNlKHMpLCB3aGljaCB3aWxsIGluY2x1ZGUgYW4gaW5kdXN0cmlhbCBhdXRvbWF0aW9uIGFsYXJtIHN5c3RlbSwgSk1YIGFnZ3JlZ2F0aW9uIGZvciB0aGUgY2xvdWQsIEVudGl0eSBWaWV3ZXJzIHZpYSB0aGUgUmVzdCBBUEkgYW5kIGEgd2hvbGUgbG90IG1vcmUgZG9jdW1lbnRhdGlvbiBhbmQgdGVzdCBjb3ZlcmFnZS4gV2UgYWxsIGxvb2sgZm9yd2FyZCB0byB0aGlzIGFuZCBtYW55IG90aGVyIHRoaW5ncyB0byBjb21lIGZyb20gUWk0aiwgdGhlIG1vc3QgZXhjaXRpbmcsIHRlY2hub2xvZ3kgY2hhbGxlbmdpbmcgcHJvamVjdCBpbiB0aGUgT3BlbiBTb3VyY2UgSmF2YSB3b3JsZC4KLQotPT0gSS9PIEFQSSA9PQotCi1SaWNrYXJkIMOWYmVyZyBpcyBvbmNlIGFnYWluIGludmVudGluZyBuZXcgd2F5cyB0byBkbyBjb21tb24gdGhpbmdzLiBUaGUgSS9PIEFQSSBjb3JyZWN0bHkgc2VwYXJhdGVzIHRoZSBjb25jZXJucyBvZiByZWFkaW5nLCB3cml0aW5nLCBleGNlcHRpb24gaGFuZGxpbmcsIHRyYW5zZm9ybWF0aW9uIGFuZCBmaWx0ZXJpbmcuIFRoaXMgcmVzdWx0ZWQgaW4gYSBEU0wgbGlrZSB3YXkgb2Ygd3JpdGluZyBzdHJlYW0gaGFuZGxpbmcgY29kZS4gVGhlIEkvTyBBUEkgaXMgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiBldmVyeXRoaW5nIGluIFFpNGogYW5kIG1heSBiZSB1c2VkIHNlcGFyYXRlbHkuIFdlIG1heSByZWxlYXNlIGl0IGFzIGEgc2VwYXJhdGUgYXJ0aWZhY3QgaW4gdGhlIGZ1dHVyZS4KLQotPT0gSk1YIEludGVncmF0aW9uID09Ci0KLUJ5IGFkZGRpbmcgYSBzaW5nbGUgbGluZSBvZiBjb2RlLCB5b3Ugd2lsbCBnZXQgdGhlIGFwcGxpY2F0aW9uIHN0cnVjdHVyZSByZXByZXNlbnRlZCBpbiB5b3VyIEpNWCAidHJlZSB2aWV3Ii4gU3RhcnRpbmcgd2l0aCBhICJRaTRqIiBub2RlLCB1bmRlciB3aGljaCBlYWNoIFFpNGogQXBwbGljYXRpb24gaXMgbGlzdGVkLCBmb2xsb3dlZCBieSBMYXllcnMsIE1vZHVsZXMgYW5kIHRoZSBDb21wb3NpdGVzLiBBbGwgU2VydmljZXMnIGNvbmZpZ3VyYXRpb24gaW5zdGFuY2VzIGFyZSBleHBvc2VkIGFuZCBjYW4gYmUgY2hhbmdlZCB2aWEgSk1YLCBhcyBjYW4gc2VydmljZXMgYmUgc3RvcHBlZCwgc3RhcnRlZCBhbmQgcmVzdGFydGVkLgotCi09PSBPU0dpIEludGVncmF0aW9uID09Ci0KLUFsbCBvZiBRaTRqIGlzIG5vdyBPU0dpLWNvbXBsaWFudC4gVGhhdCBtZWFucyB0aGF0IGFsbCBqYXJzIGFyZSBPU0dpIGJ1bmRsZXMsIHdpdGggaW1wb3J0cyBhbmQgZXhwb3J0cy4gT24gdG9wIG9mIHRoYXQsIHRoaXMgcmVsZWFzZSBhbHNvIGNvbnRhaW5zIHRoZSBiZWdpbm5pbmcgb2YgYSBPU0dpLXNwZWNpZmljIGxpYnJhcnksIHdoaWNoIGFsbG93cyBRaTRqIFNlcnZpY2VzIHRvIGJlIGV4cG9ydGVkIGFzIE9TR2kgc2VydmljZXMgYW5kIHZpY2UgdmVyc2EuIFRoaXMgbGlicmFyeSBpcyBzdGlsbCBpbiBiZXRhLgotCi09PSBDaXJjdWl0IEJyZWFrZXIgPT0KLQotVGhlIENpcmN1aXRCcmVha2VyIGxpYnJhcnkgYWxsb3dzIGV4dGVybmFsIHJlc291cmNlcyB0byBiZSBtb25pdG9yZWQgZm9yIGhlYWx0aCBhbmQgdGFrZW4gJ29mZmxpbmUnIHdoZW4gZmFjaW5nIHRyb3VibGUuIFRoaXMgaXMgYWxzbyBzaWduYWxsZWQgdmlhIEpNWCBmb3IgaHVtYW4gaW50ZXJ2ZW50aW9uLgotCi09PSBTb2xyIEluZGV4aW5nID09Ci0KLVRvIGFsbG93IGZyZWUtdGV4dCBzZWFyY2hlcyBvZiBjb250ZW50IGluIGVudGl0aWVzLCBRaTRqIG5vdyBoYXMgaW50ZWdyYXRlZCBTb2xyIHZpYSB0aGUgUWk0aiBJbmRleGluZy9RdWVyeSBleHRlbnNpb24gbWVjaGFuaXNtLiBJdCBpcyBub3QgcG9zc2libGUgdG8gZG8gZ2VuZXJpYyBxdWVyaWVzIHZpYSB0aGlzIGV4dGVuc2lvbiwgYnV0IGl0IGxldmVyYWdpbmcgdGhlIE5hbWVkIFF1ZXJ5IGZlYXR1cmUuIEZyZWUtdGV4dCBzZWFyY2ggZW5hYmxlIHlvdXIgZGF0YSBpbiBleGlzdGluZyBlbnRpdHlzdG9yZXMgYnkgdXNpbmcgdGhlIFJlaW5kZXhlciBleHRlbnNpb24uCi0KLT09IFVuaXRPZldvcmsgUmV0cnkgPT0KLQotVGhlIFVuaXRPZldvcmtDb25jZXJuIG5vdyBoYW5kbGVzIGFuIG9wdGlvbmFsIFVuaXRPZldvcmtSZXRyeSBhbm5vdGF0aW9uLCBhbGxvd2luZyBmdWxsIHJlLXJ1bnMgb2Ygd29yay4gTGl0ZXJhbGx5IGEgc2luZ2xlIGFubm90YXRpb24gYWxsb3dzIGRldmVsb3BlcnMgdG8gYWRkIHJldHJ5IGxvZ2ljIChvciByZW1vdmUgdGhlIGNvbXBsZXggcmV0cnkgbG9naWMgYWxyZWFkeSBpbiBwbGFjZSkuCi0KLT09IEpTT04gZm9ybWF0IG5vdyBoYW5kbGVzIE1hcHMgPT0KLQotVGhlIEpTT04gc2VyaWFsaXplci9kZXNlcmlhbGl6ZXIgaGFzIGJlZW4gZXF1aXBwZWQgdG8gaGFuZGxlIE1hcHMsIGJ5IG5hbWVkIHByb3BlcnRpZXMgaW5zdGVhZCBvZiBhIGphdmEgc2VyaWFsaXplZCBtYXAgYXMgd2FzIHByZXZlaW91c2x5IHRoZSBjYXNlLiBUaGUgbmV3IGRlc2VyaWFsaXplciBsb2dpYyBpcyBzdGlsbCBjb21wYXRpYmxlIHdpdGggdGhlIG9sZCBmb3JtYXQuCi0KLT09IEpvYiBTY2hlZHVsZXIgPT0KLQotQSBuZXcgbGlicmFyeSwgb3JnLnFpNGoubGlicmFyeS5zY2hlZHVsZXIsIGNhbiBub3cgbGF1bmNoIGpvYnMgYWNjb3JkaW5nIHRvIENST04gZm9ybWF0dGVkIHNjaGVkdWxlcy4KLQotPT0gU3BlY2lmaWNhdGlvbnMgaW4gQXNzZW1ibHkgPT0KLQotVGhlIE1vZHVsZUFzc2VtYmx5IHN5c3RlbSBoYXMgYmVlbiByZXZpc2VkIGhlYXZpbHksIHRvIGFsbG93IGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgYXBwbGljYXRpb24gdG8gYXBwbHkgYXNzZW1ibHkgaW5mb3JtYXRpb24gdG8gY29tcG9zaXRlcy4gVGhpcyBhbGxvd3MgZm9yIG5lYXIgZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBzdHlsZSBvZiBzZXR0aW5nIHVwIGNvbXBvc2l0ZXMuCi0KLT09IEl0ZXJhYmxlcyBVdGlsaXR5ID09Ci0KLVFpNGogaXMgaW5ub3ZhdGluZyBhZ2Fpbiwgd2l0aCBhIHV0aWxpdHkgdG8gZG8gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBzdHlsZSBpbiBKYXZhIGZvciBJdGVyYWJsZXMuIEluIHRoaXMgZmlyc3QgcmVsZWFzZSwgdGhlIHV0aWxpdHkgb25seSBjb250YWlucyB0aGUgbW9zdCBiYXNpYyBvcGVyYXRpb25zLCBidXQgd2lsbCBiZSBleHRlbmRlZCBvdmVyIHRpbWUuCi0KLT09IFJlbGVhc2UgTm90ZXMgLSBRaTRqIC0gVmVyc2lvbiAxLjMgPT0KLQotKk5ldyBGZWF0dXJlcyoKLQotLSBbUUktMjc3XSAtIEpNWCBzZXJ2aWNlcwotLSBbUUktMjgxXSAtIFNvbHIgcXVlcnkvaW5kZXhpbmcKLS0gW1FJLTI4NF0gLSBDaXJjdWl0IGJyZWFrZXIgbGlicmFyeQotLSBbUUktMjg1XSAtIEFjdGl2ZSAtPiBBdmFpbGFibGUKLS0gW1FJLTI4OF0gLSBBZGQgYSBjb25jZXJuIGZvciBoYW5kbGluZyByZXRyeSBvbiBDb25jdXJlbnRNb2RpZmljYXRpb24KLS0gW1FJLTI4OV0gLSBDcmVhdGUgYSBsaWJyYXJ5IGZvciBhIGpvYiBzY2hlZHVsZXIKLS0gW1FJLTI5MV0gLSBOZXcgQVBJIGZvciBkb2luZyBJL08KLS0gW1FJLTI5NV0gLSBFeHBvcnRlciBvZiBRaTRqIFNlcnZpY2VzIHRvIE9TR2kKLS0gW1FJLTI5Nl0gLSBJbXBvcnRlciBvZiBPU0dpIHNlcnZpY2VzIGludG8gdGhlIFFpNGogd29ybGQuCi0tIFtRSS0zMDBdIC0gQWRkIHRlc3QgaGVscGVyIGZvciBzY2VuYXJpb3MKLS0gW1FJLTMwOV0gLSBDb25jZXJuIHRvIGhhbmRsZSBDb25jdXJlbnRFbnRpdHlNb2RpZmljYXRpb25FeGNlcHRpb24gYW5kIHJldHJ5IHRoZSBVbml0T2ZXb3JrCi0tIFtRSS0zMjBdIC0gTWFwcyBpbiBKU09OIGZvcm1hdAotLSBbUUktMzIxXSAtIFNwZWNpZmljYXRpb24gZHJpdmVuIGFzc2VtYmx5Ci0tIFtRSS0zNDFdIC0gU3VwcG9ydCBKb2RhVGltZSBuYXRpdmVseSBpbiB0aGUgdG9KU09OKCkgc3lzdGVtLgotCi0qSW1wcm92ZW1lbnRzKgotCi0tIFtRSS0yNzVdIC0gRW5oYW5jZSB0aGUgY29tbXVuaXR5IGRvY3VtZW50YXRpb24gdG8gc3BlbGwgb3V0IHRoZSAndHJ1c3QgaXNzdWVzJyBpbiBDb3JlLgotLSBbUUktMjk3XSAtIENhcHR1cmUgTnVsbFBvaW50ZXJFeGNlcHRpb24gc2xpZ2h0bHkgbW9yZSBncmFjZWZ1bGx5IGluIFZhbHVlQnVpbGRlckZhY3RvcnkKLS0gW1FJLTI5OV0gLSBSZXBsYWNlIFNlcnZpY2VRdWFsaWZpZXIgbWV0aG9kIHdpdGggU3BlY2lmaWNhdGlvbgotLSBbUUktMzAyXSAtIENhcHR1cmUgd2hpY2ggY2xhc3MgaXMgZGVjbGFyZWQgZmluYWwKLS0gW1FJLTMwNV0gLSBPYmplY3REZXNjcmlwdG9yIGluIE1vZHVsZVNQSQotLSBbUUktMzEyXSAtIFBhdGNoIGZvciBHcmFkbGUgYnVpbGQgc3lzdGVtCi0tIFtRSS0zMTNdIC0gVXBncmFkZSBOZW80aiBleHRlbnNpb24gdG8gdmVyIDEuMiAKLS0gW1FJLTMxN10gLSBPYnNjdXJlIEV4Y2VwdGlvbiBjYW4gYmUgaW1wcm92ZWQuCi0tIFtRSS0zMjZdIC0gQ29iZXJ0dXJhIHJlcG9ydHMgaW4gdGhlIGJ1aWxkLgotLSBbUUktMzM5XSAtIEFkZCBzdXBwb3J0IGZvciB2YXJpYWJsZXMgaW4gUkRGIG5hbWVkIHF1ZXJpZXMKLQotKkJ1ZyoKLQotLSBbUUktMjcyXSAtIENoYW5naW5nIHByb3BlcnRpZXMgaW4gTGlmZWN5Y2xlIHNvbWV0aW1lcyBkb2Vzbid0IHdvcmsKLS0gW1FJLTI5Ml0gLSBTZXJ2aWNlTG9hZGVyIG1lY2hhbmlzbSBmb3IgUWk0aiBSdW50aW1lIGltcGxlbWVudGF0aW9uIGlzIHJlYWxseSBhd2t3YXJkLgotLSBbUUktMjk0XSAtIHFpNGotbGlicmFyaWVzOiByZGYvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3JkZi9tb2RlbC9BcHBsaWNhdGlvblZpc2l0b3IuamF2YSBpcyBub3QgY29tcGlsYWJsZQotLSBbUUktMzAzXSAtIEluY29ycmVjdCBnZW5lcmljcyB0eXBlIGZvciBpbXBvcnRlZCBzZXJ2aWNlcy4KLS0gW1FJLTMwNF0gLSBDb21wb3NpdGUgZXh0ZW5kcyBTZXJpYWxpemFibGUKLS0gW1FJLTMwNl0gLSBFeGNlcHRpb24gdGhyb3duIHdoZW4gQFVzaW5nIG9uIGNvbXBsZXggZ2VuZXJpYyB0eXBlcwotLSBbUUktMzA4XSAtIFRoZSBAVW5pdE9mV29ya0Rpc2NhcmRPbiBhbm5vdGF0aW9uIGRvZXMgbm90IGhhdmUgcnVudGltZSBSZXRlbnRpb24KLS0gW1FJLTMzMV0gLSBCdWlsZFZlcnNpb24gY2xhc3MgaXMgaW4gd3JvbmcgcGFja2FnZS4KLS0gW1FJLTMzMl0gLSBHZW5lcmF0ZWQgUE9NcyBkb2Vzbid0IGluY2x1ZGUgdGhlIDxyZXBvc2l0b3J5PiBzZWN0aW9ucyBuZWVkZWQuCi0tIFtRSS0zMzNdIC0gUWk0aiBSdW50aW1lIG5lZWRzIGEgd2F5IHRvIGJvb3RzdHJhcCBpbiBPU0dpCi0tIFtRSS0zMzRdIC0gTWF2ZW4gc291cmNlIGphcnMgYXJlIG5vdCBnZW5lcmF0ZWQgYW5kIHVwbG9hZGVkLgotLSBbUUktMzM1XSAtIE1hdmVuIGphdmFkb2MgamFycyBhcmUgbm90IGdlbmVyYXRlZCBhbmQgdXBsb2FkZWQKLS0gW1FJLTMzN10gLSBQYWNrYWdlIG9yZy5xaTRqLmFwaS5zcGVjaWZpY2F0aW9uIGlzIGltcG9ydGVkIG1vcmUgdGhhbiBvbmNlIGluIENvcmUgUnVudGltZSBPU0dpIGJ1bmRsZSBkZWNsYXJhdGlvbi4KLS0gW1FJLTM0MF0gLSBOUEUgaW4gTW9kdWxlVW5pdE9mV29yayB3aGljaCBzaG91bGQgYmUgYSBpbmZvcm1hdGl2ZSBFeGNlcHRpb24KLQotKlRhc2sqCi0KLS0gW1FJLTMxNF0gLSBDcmVhdGlvbiBvZiBwcm9wZXIgU0RLCi0tIFtRSS0zMTVdIC0gRGVmaW5lIGJpbmFyeSB0YXJiYWxsIGxheW91dAotLSBbUUktMzE2XSAtIERlZmluZSBzb3VyY2UgdGFyYmFsbCBsYXlvdXQKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMTA4MDYudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDExMDgwNi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MTdkNWYuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDExMDgwNi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1bW25ld3MtMjAxMTA4MDYsUWk0aiBTREsgUmVsZWFzZSAxLjRdXQotPSBRaTRqIFNESyBSZWxlYXNlIDEuNCA9Ci0KLVNoYW5naGFpLCA1IEF1ZyAyMDExIC0gVGhlIFFpNGogY29tbXVuaXR5IHRvZGF5IGFubm91bmNlZCBSZWxlYXNlIDEuNCBvZiB0aGUgaW5ub3ZhdGl2ZSBKYXZhIGZyYW1ld29yaywgUWk0ai4gVGhpcyByZWxlYXNlIGlzIGEgY29uc29saWRhdGlvbiByZWxlYXNlIG9mIHRoZSAxLnggZGV2ZWxvcG1lbnQgYnJhbmNoLCBhcyBkZXZlbG9wbWVudCBmb2N1cyBub3cgaXMgZGlyZWN0ZWQgdG93YXJkcyAyLjAuIFRoZSBtYWluIG5ldyBmZWF0dXJlcyBpbiB2ZXJzaW9uIDEuNCBpcyBOYW1lZCBBc3NvY2lhdGlvbnMgYW5kIGluY2x1c2lvbiBvZiBhbiBpbmR1c3RyaWFsIGF1dG9tYXRpb24gaW5zcGlyZWQgYWxhcm0gc3lzdGVtLgotCi09PSBTdW1tYXJ5ID09Ci0KLVRoZSBRaTRqIFJlbGVhc2UgMS40IGlzIGEgY29uc29saWRhdGlvbiByZWxlYXNlLCB0byBicmluZyB0b2dldGhlciB1bi1yZWxlYXNlZCBmZWF0dXJlcyBpbiB0aGUgMS54IGRldmVsb3BtZW50IGJyYW5jaC4gVGhpcyBpcyB0aGUgbGFzdCBmZWF0dXJlIHJlbGVhc2UgaW4gMS54LCBhbmQgb25seSBzZXJpb3VzIGJ1Z3Mgd2lsbCBiZSBmaXhlZCBhbmQgcmVsZWFzZWQuIFRoZSBRaTRqIGNvbW11bml0eSB3aWxsIG5vdyBmb2N1cyBvbiB2ZXJzaW9uIDIuMCBvZiBRaTRqLCB3aGljaCB3aWxsIGFnYWluIHNwb3J0IG1hbnkgZ3JvdW5kPWJyZWFraW5nIGZlYXR1cmVzLgotCi09PSBOYW1lZCBBc3NvY2lhdGlvbnMgPT0KLQotSW4gMS40IGl0IGlzIG5vdyBwb3NzaWJsZSB0byBtYXAgYXNzb2NpYXRpb25zIGJ5IG5hbWUsIGFuZCBub3Qgb25seSBhcyBhIGxpc3QuIFRoZSBuYW1lIGlzIGxvY2FsIHRvIHRoZSBhc3NvY2lhdGlvbiBpdHNlbGYsIGFuZCBvcGVyYXRlcyB2ZXJ5IG11Y2ggbGlrZSBhIE1hcC4gVGhlIGVudGl0aWVzIHJlZmVyZW5jZWQgYXJlIGFzIHVzdWFsIGxvYWRlZCBsYXppbHkgdXBvbiBnZXQoKSBtZXRob2QuCi0KLT09IEFsYXJtIFN5c3RlbSA9PQotCi1JbmR1c3RyaWFsIGF1dG9tYXRpb24gc3lzdGVtcyBoYXZlIGxvbmcgaGFkIGFsYXJtIHN5c3RlbXMgYXMgdGhlIG1haW4gbWVjaGFuaXNtIGZvciByZXBvcnRpbmcgcHJvYmxlbXMgaW4gYSBsYXJnZSBzeXN0ZW0uIFRoaXMgbWV0YXBob3IgaXMgYWN0dWFsbHkgdmVyeSB3ZWxsIHN1aXRlZCBpbiB0b2RheSdzIGNvbXBsZXggZW50ZXJwcmlzZSBzeXN0ZW1zIGFzIHdlbGwuIEFsYXJtcyBhcmUgaW4gUWk0aiBpbXBsZW1lbnRlZCBhcyBhbiBlbnRpdHkgd2l0aCBhIHNtYWxsIHN0YXRlIG1hY2hpbmUsIGRpY3RhdGVkIGJ5IGFuIEFsYXJtIE1vZGVsLiBUaGUgU3RhbmRhcmQgQWxhcm0gbW9kZWwgaGFzIGZvdXIgc3RhdGVzOyBOb3JtYWwsIEFjdGl2YXRlZCwgRGVhY3RpdmF0ZSBhbmQgQWNrbm93bGVkZ2VkLiBBZnRlciBhbiBhbGFybSBpcyBhY3RpdmF0ZWQsIGFuIGluZGl2aWR1YWwgcGVyc29uIGhhcyB0byBhY2tub3dsZWRnZSB0aGUgYWxhcm0gYmVmb3JlIGl0cyBzdGF0ZSByZXR1cm4gdG8gbm9ybWFsLgotCi1GdXJ0aGVyIHdvcmsgd2lsbCBiZSBkb25lIGluIHRoaXMgYXJlYSBmb3IgYWdncmVnYXRpb24sIG5vdGZpY2lhdGlvbiwgcmVwb3J0aW5nIGFuZCB2aXN1YWxpemF0aW9uLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMjAyMTUudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEyMDIxNS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMzMxNjcuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEyMDIxNS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1bW25ld3MtMjAxMjAyMTUsUWk0aiBhdCBKRm9rdXMgMjAxMiAtIFJlU1RdXQotPSBAIEpGb2t1cyAyMDEyIC0gUmVTVCA9Ci0KLUltcGxlbWVudGluZyBhIFJFU1QgQVBJIHRvZGF5IGlzIGltcG9ydGFudCBpbiBtYW55IGNhc2VzLCBib3RoIGFzIGFuIGludGVncmF0aW9uIHBvaW50IHRvIHlvdXIgYXBwbGljYXRpb24gYW5kIGFzIGEgd2F5Ci1mb3IgY2xpZW50cyB0byBhY2Nlc3MgdGhlIGFwcGxpY2F0aW9uLiBCdXQgdGhlcmUgYXJlIGZldyBmcmFtZXdvcmtzIG91dCB0aGVyZSB0aGF0IGhlbHAgeW91IGZ1bGZpbCBhbGwgdGhlIGNvbnN0cmFpbnRzCi1vZiBSRVNULCBhbmQgdGhlcmVmb3JlIG9ubHkgbWFrZXMgeW91ciBBUEkgYSBSRVNULXdhbm5hYmUuIFRoZSBpZGlvbSB0aGF0J3Mgb2Z0ZW4gbWlzc2luZyBpcyBIQVRFT0FTLiBUaGlzIHNlc3Npb24gd2lsbAotbG9vayBhdCBob3cgeW91IGNhbiBidWlsZCBhIFJlU1RmdWwgYXBpIGFuZCBhcHBseWluZyBIQVRFT0FTLiBUaGUgYmFja2dyb3VuZCBvZiB0aGlzIHNlc3Npb24gaXMgdGhlIDw8bmV3cy0yMDEwMDkxOD4+Ci1wcmVzZW50YXRpb24uCi0KLWh0dHA6Ly93d3cucGFybGV5cy5jb20vI3N0PTUmaWQ9MzA1OSZzbD02W1dhdGNoIHRoZSB2aWRlb10KLQotQ2hlY2sgdGhlIHByZXNlbnRhdGlvbiBzbGlkZXMgb25saW5lCi1odHRwOi8vd3d3Lmpmb2t1cy5zZS9qZm9rdXMxMi9wcmVzby9qZjEyX1RoZVJvYWRUb1Jlc3QucGRmCi0KLU9uIGEgcmVsYXRlZCBub3RlLCBiYWNrIGluIGRlY2VtYmVyIDIwMTIsIFJpY2thcmQgcG9zdGVkICJUaGUgZG9tYWluIG1vZGVsIGFzIFJFU1QgYW50aS1wYXR0ZXJuIiBpbiBoaXMKLWJsb2c6IGh0dHA6Ly93d3cuanJvbGxlci5jb20vcmlja2FyZC9lbnRyeS90aGVfZG9tYWluX21vZGVsX2FzX3Jlc3QKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMjA1MDIudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEyMDUwMi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNjYyMzMuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEyMDUwMi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0KLVtbbmV3cy0yMDEyMDUwMixRaTRqIEZ1dHVyZV1dCi09IFFpNGoncyBGdXR1cmUgPQotCi1MYXRlbHksIHRoZSBhY3Rpdml0eSBpbiBRaTRqIGNvbW11bml0eSBoYXMgYmVlbiBmYWRpbmcuIEtleSBtZW1iZXJzIG9mIHRoZSBjb21tdW5pdHkgaGF2ZSBiZWVuIGNhdWdodCB1cCBpbiBtYW55Ci1kaWZmZXJlbnQgYWN0aXZpdGllcyBvdXRzaWRlIHRoaXMgY29tbXVuaXR5LCBmcm9tIGNoYW5naW5nIGpvYnMgdG8gaGF2ZSBhZGRpdGlvbmFsIHBlcnNvbmFsIGNvbW1pdG1lbnRzIHBpbGluZyB1cC4KLQotU3BlY3VsYXRpb24gaGFzIGJlZW4gY2lyY3VsYXRpbmcgd2hldGhlciBRaTRqIHdpbGwgc2ltcGx5IGRpZS4KLQotVG9kYXksIHNvbWUgb2YgdGhlIGNvbW11bml0eSBsZWFkZXJzIG1ldCBhbmQgZGVjaWRlZCB0byBzdGVwIHVwIGFuZCBzdGFydCBmb3JnaW5nIHRoaXMgcHJvamVjdCBmb3J3YXJkLiBUaGVyZSBhcmUKLWEgZmV3IGltbWVkaWF0ZSBwb2ludHMgd2hpY2ggd2lsbCBiZSBhZGRyZXNzZWQgZmlyc3Q7Ci0KLSogTmV3IHdlYnNpdGUuIFNpdGV2aXNpb24gaXMgY2F1c2luZyBtb3JlIHByb2JsZW1zIHRoYW4gaXQgc29sdmVzIGZvciB1cy4KLQotKiBEb2N1bWVudGF0aW9uLiBJdCBoYXMgYWx3YXlzIGJlZW4gbGFja2luZywgcGFydGx5IGR1ZSB0byBTaXRldmlzaW9uJ3MgYmFycmllciB0byBlZGl0aW5nLiBXaXRoIHBsYWluIHRleHQgZG9jdW1lbnRhdGlvbgotZGV2ZWxvcGVycyBubyBsb25nZXIgaGF2ZSBhbiBleGN1c2Ugbm90IHRvIGRvY3VtZW50IHRoZSBmZWF0dXJlcyBpbiBRaTRqLgotCi0qIFJvYWRtYXAgdG8gMi4wLiBFc3RhYmxpc2ggdGhlIGZlYXR1cmVzIHdlIHdhbnQgdG8gaW5jb3Jwb3JhdGUgYW5kIGhhdmUgZG9uZSBiZWZvcmUgMi4wLiBFZmZlY3RpdmVseSBlbnN1cmluZyB0aGF0Ci1hbGwgY29tcGF0aWJpbGl0eSBicmVha2luZyBmZWF0dXJlcyBhcmUgaW5jbHVkZWQuCi0KLVdlIGhvcGUgdGhhdCB0aGVzZSBmdXR1cmUgZWZmb3J0cyB3aWxsIHJlLWluc3RpbGwgY29uZmlkZW5jZSBpbiB0aGUgdmlhYmlsaXR5IG9mIFFpNGogaW4geW91ciBwcm9qZWN0cy4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL25ld3MvMjAxMjA1MjUudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEyMDUyNS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMzE4ZmQuLjAwMDAwMDAKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy8yMDEyMDUyNS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1bW25ld3MtMjAxMjA1MjUsUWk0aiBsYXVuY2hlcyBuZXcgd2Vic2l0ZV1dCi09IE5ldyBRaTRqIHdlYnNpdGUhID0KLQotQWZ0ZXIgeWVhcnMgd2l0aCBTaXRlVmlzaW9uIGZyb20gU2Vuc2Vsb2dpYywgdGhlIFFpNGogY29tbXVuaXR5IGhhcyBkZWNpZGVkIHRoYXQgU2l0ZVZpc2lvbiBkb2VzIG5vdCBmdWxmaWxsIHRoZSBuZWVkcwotb2YgdGhpcyBjb21tdW5pdHkuIFByaW1hcmlseSwgU2l0ZVZpc2lvbiBjYW4gbm90IHNhdGlzZnkgc29tZSByZWFsbHkgY2VudHJhbCBuZWVkcyBvZiBvcGVuIHNvdXJjZSBjb21tdW5pdGllczsKLQotKiBMZWFybmluZyBjdXJ2ZSBmb3IgU2l0ZVZpc2lvbiBpcyBoaWdoZXIgdGhhbiBwbGFpbiB0ZXh0IHRvb2wgY2hhaW5zLgotCi0qIE9mZmxpbmUgZWRpdGluZyBpcyBub3QgcG9zc2libGUuCi0KLSogRGlzdGFuY2UgYmV0d2VlbiBTaXRldmlzaW9uIHNlcnZlciBhbmQgdXNlcnMgaW50cm9kdWNlIG5ldHdvcmsgbGF0ZW5jaWVzIHRoYXQgbWFrZXMgdGhlIFNpdGVWaXNpb24gZXhwZXJpZW5jZSBsZXNzCi10aGFuIG9wdGltYWwuCi0KLSogVmVyc2lvbmluZyBpcyBub24tdHJpdmlhbC4gS2VlcGluZyBvbGQgdmVyc2lvbnMgb2YgdGhlIHNpdGUgdXAgYW5kIHJ1bm5pbmcgaW4gcGFyYWxsZWwgd2lsbCBiZSBpbXBvcnRhbnQgYXMgdXNlcnMKLXNlZWsgaW5mb3JtYXRpb24gYWJvdXQgb2xkZXIgdmVyc2lvbnMgb2YgdGhlIFFpNGogU0RLIG9ubGluZS4KLQotKiBJbnRlZ3JhdGlvbiB3aXRoIGJ1aWxkIHN5c3RlbSBhbmQgY29kZWJhc2UgaW4gZ2VuZXJhbCBpcyBmYWlybHkgY29tcGxleCBwcm9jZXNzLgotCi0KLVdlIGFyZSB0aGVyZWZvciBzYXlpbmcgYSAqQmlnIFRIQU5LIFlPVSogdG8gU2Vuc2Vsb2dpYyBhbmQgU2l0ZVZpc2lvbiBmb3IgdGhlIHRpbWUgcGFzdCwgYnV0IHdlIGFyZSBub3cgZXhjaXRlZCBpbgotbW92aW5nIGZvcndhcmQgd2l0aCBhIG5ldyB3ZWJzaXRlIGFuZCBhbiB1bmRlcmx5aW5nIHRvb2xjaGFpbiBmb3IgaXQuCi0KLQotVGhlIHNpdGUgaXMgY29tcGxldGVseSBzdGF0aWMgKGZvciBub3cpLCBhbmQgaXMgYnVpbHQgZnJvbSBBc2NpaURvYyBwbGFpbiB0ZXh0IGRvY3VtZW50cywgcGx1cyB2YXJpb3VzIGJ1aWxkLXRpbWUKLWludGVncmF0aW9ucyB3aXRoIHRoZSBjb2RlYmFzZSwgc3VjaCBhcyBjb2RlIHNuaXBwZXRzLCBhbmQgd2Ugd2lsbCBleHBhbmQgb24gdGhpcyBpbiB0aGUgZnV0dXJlLCBpbmNsdWRpbmcKLV9kZXZlbG9wbWVudCBzdGF0dXNfIChkZXYtc3RhdHVzLnhtbCksIGFueSB2ZXJzaW9uIGF2YWlsYWJsZSBvbiB3ZWJzaXRlLCBhdXRvbWF0aWMgZXhhbXBsZSBvdXRwdXQgY2FwdHVyaW5nIGFuZAotbXVjaCBtb3JlLiBXZSBhbHNvIGhvcGUgdG8gYmUgYWJsZSB0byBpbnRlZ3JhdGUgKkRpc3F1cyogZm9yIHVzZXIgY29tbWVudGFyeSBvbiBldmVyeSBwYWdlLgotCi1BbHJlYWR5LCBwcmlvciB0byBsYXVuY2hpbmcgdGhlIG5ldyBzaXRlLCB0aGUgbmV3IHRvb2xjaGFpbiBoYXMgYWxyZWFkeSBwcm92ZW4gaXRzZWxmIHdvcnRoeSwgYXMgbXVjaCBtb3JlIGNvbnRlbnQKLWhhcyBiZWVuIGdlbmVyYXRlZCBieSB0aGUgY29tbXVuaXR5IHdpdGhpbiBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLgotCi0iSSB0aGluayB0aGlzIGlzIGEgZ3JlYXQgbGVhcCBmb3J3YXJkIGZvciB1cy4gQWx0aG91Z2ggY29udGVudCBtYW5hZ2VtZW50IHN5c3RlbXMgYXJlIHBvd2VyZnVsLCB0aGV5IGRvbid0IHNlcnZlCi10aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IG5lZWRzIHZlcnkgd2VsbC4iLCBzYXlzIE5pY2xhcyBIZWRobWFuLCBvbmUgb2YgdGhlIFFpNGogQ29yZSBUZWFtIG1lbWJlcnMuCi0KLSJXZSBoYXZlIHRyaWVkIHRvIHByb3ZpZGUgYSBzdHlsaW5nIGZvcm1hdCB0aGF0IHdvcmtzIGFjcm9zcyBhIGxhcmdlIHNldCBvZiBicm93c2Vycywgb3BlcmF0aW5nIHN5c3RlbXMgYW5kIGRldmljZXMuIiwKLXNheXMgUGF1bCBNZXJsaW4sIGFub3RoZXIgQ29yZSBUZWFtIG1lbWJlciB3aG8gcGxhY2VkIHRoZSBmaW5hbCB0b3VjaGVzIG9uIHRoZSBkZXNpZ24uCi0KLT09IEVuam95IHRoZSBuZXcgd2Vic2l0ZSA9PQotCi1BbnkgZmVlZGJhY2sgaXMgd2VsY29tZSwgZWl0aGVyIG9uIEdpdEh1YiBvciBxaTRqLWRldiBmb3J1bSBhdCBHb29nbGUgR3JvdXBzLgotCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzL25ld3MudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvbmV3cy9uZXdzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJkNGM1MC4uMDAwMDAwMAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9uZXdzL25ld3MudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTpsZXZlbG9mZnNldDogMQotCi1bW25ld3MsTmV3c3dvcnRoeV1dCi09ICBOZXdzID0KLQotPT0gTmV3cyAmIEV2ZW50cyA9PQotCi1bb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxEYXRlIHxBbm5vdW5jZW1lbnQKLQotfDIwMTItTWF5LTI1IHw8PG5ld3MtMjAxMjA1MjU+PgotfDIwMTItTWF5LTA3IHw8PG5ld3MtMjAxMjA1MDI+PgotfDIwMTItRmViLTE1IHw8PG5ld3MtMjAxMjAyMTU+PgotfDIwMTEtQXVnLTA2IHw8PG5ld3MtMjAxMTA4MDY+PgotfDIwMTEtQXByLTE1IHw8PG5ld3MtMjAxMTA0MTU+PgotfDIwMTEtRmViLTIxIHw8PG5ld3MtMjAxMTAyMjE+PgotfDIwMTAtT2N0LTIzIHw8PG5ld3MtMjAxMDEwMjM+PgotfDIwMTAtU2VwLTE4IHw8PG5ld3MtMjAxMDA5MTg+PgotfDIwMTAtQXVnLTMwIHw8PG5ld3MtMjAxMDA4MzA+PgotfDIwMTAtSnVuLTE3IHw8PG5ld3MtMjAxMDA2MTc+PgotfDIwMTAtSmFuLTI4IHw8PG5ld3MtMjAxMDAxMjg+PgotfDIwMTAtSmFuLTI1IHw8PG5ld3MtMjAxMDAxMjUtMj4+Ci18MjAxMC1KYW4tMjUgfDw8bmV3cy0yMDEwMDEyNT4+Ci18MjAwOS1TZXAtMDMgfDw8bmV3cy0yMDA5MDkwMz4+Ci18MjAwOS1NYXktMTAgfDw8bmV3cy0yMDA5MDUxMD4+Ci18MjAwOS1BcHItMjAgfDw8bmV3cy0yMDA5MDQyMD4+Ci18MjAwOS1GZWItMjAgfDw8bmV3cy0yMDA5MDIyMD4+Ci18MjAwOS1GZWItMTkgfDw8bmV3cy0yMDA5MDIxOT4+Ci18MjAwOS1KYW4tMTAgfDw8bmV3cy0yMDA5MDExMD4+Ci18MjAwOS1KYW4tMDkgfDw8bmV3cy0yMDA5MDEwOT4+Ci18MjAwOC1Ob3YtMTcgfDw8bmV3cy0yMDA4MTExNz4+Ci18MjAwOC1TZXAtMTkgfDw8bmV3cy0yMDA4MDkxOT4+Ci18MjAwOC1TZXAtMTUgfDw8bmV3cy0yMDA4MDkxNT4+Ci18MjAwOC1BdWctMDggfDw8bmV3cy0yMDA4MDgwOD4+Ci18MjAwOC1KdW4tMDYgfDw8bmV3cy0yMDA4MDYwNj4+Ci18MjAwOC1BcHItMTQgfDw8bmV3cy0yMDA4MDQxND4+Ci18MjAwOC1KYW4tMzAgfDw8bmV3cy0yMDA4MDEzMD4+Ci18MjAwNy1Ob3YtMTMgfDw8bmV3cy0yMDA3MTExMz4+Ci18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLTpsZXZlbG9mZnNldDogMgotCi1pbmNsdWRlOjoyMDEyMDUyNS50eHRbXQotCi1pbmNsdWRlOjoyMDEyMDUwMi50eHRbXQotCi1pbmNsdWRlOjoyMDEyMDIxNS50eHRbXQotCi1pbmNsdWRlOjoyMDExMDgwNi50eHRbXQotCi1pbmNsdWRlOjoyMDExMDQxNS50eHRbXQotCi1pbmNsdWRlOjoyMDExMDIyMS50eHRbXQotCi1pbmNsdWRlOjoyMDEwMTAyMy50eHRbXQotCi1pbmNsdWRlOjoyMDEwMDkxOC50eHRbXQotCi1pbmNsdWRlOjoyMDEwMDgzMC50eHRbXQotCi1pbmNsdWRlOjoyMDEwMDYxNy50eHRbXQotCi1pbmNsdWRlOjoyMDEwMDEyOC50eHRbXQotCi1pbmNsdWRlOjoyMDEwMDEyNS0yLnR4dFtdCi0KLWluY2x1ZGU6OjIwMTAwMTI1LnR4dFtdCi0KLWluY2x1ZGU6OjIwMDkwOTAzLnR4dFtdCi0KLWluY2x1ZGU6OjIwMDkwNTEwLnR4dFtdCi0KLWluY2x1ZGU6OjIwMDkwNDIwLnR4dFtdCi0KLWluY2x1ZGU6OjIwMDkwMjIwLnR4dFtdCi0KLWluY2x1ZGU6OjIwMDkwMjE5LnR4dFtdCi0KLWluY2x1ZGU6OjIwMDkwMTEwLnR4dFtdCi0KLWluY2x1ZGU6OjIwMDkwMTA5LnR4dFtdCi0KLWluY2x1ZGU6OjIwMDgxMTE3LnR4dFtdCi0KLWluY2x1ZGU6OjIwMDgwOTE5LnR4dFtdCi0KLWluY2x1ZGU6OjIwMDgwOTE1LnR4dFtdCi0KLWluY2x1ZGU6OjIwMDgwODA4LnR4dFtdCi0KLWluY2x1ZGU6OjIwMDgwNjA2LnR4dFtdCi0KLWluY2x1ZGU6OjIwMDgwNDE0LnR4dFtdCi0KLWluY2x1ZGU6OjIwMDgwMTMwLnR4dFtdCi0KLWluY2x1ZGU6OjIwMDcxMTEzLnR4dFtdCi0KLTpsZXZlbG9mZnNldDogMgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvcmVsYXRlZC50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9yZWxhdGVkLnR4dAppbmRleCBiYWM0MzdjLi40NTNkMDc4IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9yZWxhdGVkLnR4dAorKysgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9yZWxhdGVkLnR4dApAQCAtMSw5ICsxLDI4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tyZWxhdGVkLFJlbGF0ZWQgcHVibGljYXRpb25zIGFuZCBwcm9qZWN0c11dCiA9IFJlbGF0ZWQgcHVibGljYXRpb25zICYgcHJvamVjdHMgPQogCi1RaTRqIGFkZHJlc3NlcyBhIHdpZGUgcmFuZ2Ugb2YgY29uY2VwdHMsIHRoZSByZWxhdGVkIHB1YmxpY2F0aW9ucyBhbmQgcHJvamVjdHMgeW91J2xsIGZpbmQgaW4gdGhpcyBzZWN0aW9uIHNwYW4gYWNjcm9zcworWmVzdOKEoiBhZGRyZXNzZXMgYSB3aWRlIHJhbmdlIG9mIGNvbmNlcHRzLCB0aGUgcmVsYXRlZCBwdWJsaWNhdGlvbnMgYW5kIHByb2plY3RzIHlvdSdsbCBmaW5kIGluIHRoaXMgc2VjdGlvbiBzcGFuIGFjY3Jvc3MKIGFsbCB0aGVzZXMgY29uY2VwdHMuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0IGJ1dCBvbmx5IHNvbWUgcG9pbnRlcnMgdG8gaGVscCB5b3UgdW5kZXJzdGFuZCB3aGljaAotcHJpbmNpcGxlcyBRaTRqIGlzIGJhc2VkIG9uLgorcHJpbmNpcGxlcyBaZXN04oSiIGlzIGJhc2VkIG9uLgogCiAKID09IFB1YmxpY2F0aW9ucyA9PQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvcmVzb3VyY2VzL2Nzcy9xaTRqLmNzcyBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL3Jlc291cmNlcy9jc3MvcWk0ai5jc3MKaW5kZXggOTJhMGYzZC4uZDMwMmFhZSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvcmVzb3VyY2VzL2Nzcy9xaTRqLmNzcworKysgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9yZXNvdXJjZXMvY3NzL3FpNGouY3NzCkBAIC0xLDMgKzEsMjIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKIHNwYW4ucmVtYXJrCiB7CiAgICAgYmFja2dyb3VuZDogeWVsbG93OwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvcmVzb3VyY2VzL2Nzcy9zdHlsZS5jc3MgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9yZXNvdXJjZXMvY3NzL3N0eWxlLmNzcwppbmRleCBhZDdjYWU5Li44NjM3NGYxIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9yZXNvdXJjZXMvY3NzL3N0eWxlLmNzcworKysgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS9yZXNvdXJjZXMvY3NzL3N0eWxlLmNzcwpAQCAtMjMzLDYgKzIzMyw5IEBACiAgICAgY29sb3I6ICM5YTlhOWE7CiAgICAgZm9udC1zaXplOiA4MCU7CiB9CisuZm9vdGVyIHAgeworICAgIHRleHQtc2hhZG93OiBub25lOyAgICAKK30KIAogZGl2LmluZm9ybWFsdGFibGUKIHsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL3NhbXBsZXMudHh0IGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvc2FtcGxlcy50eHQKaW5kZXggNWJmYmFhYS4uYjRkZTJmZiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvc2FtcGxlcy50eHQKKysrIGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvc2FtcGxlcy50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIDpsZXZlbG9mZnNldDogMQogCiBbW3NhbXBsZXMsU2FtcGxlcyBTZWN0aW9uXV0KQEAgLTUsMzcgKzI0LDM3IEBACiAKID09IE92ZXJ2aWV3ID09CiAKLVRoZSBRaTRqIFNESyBjb21lcyB3aXRoIHNldmVyYWwgc2FtcGxlIGFwcGxpY2F0aW9ucy4gVGhpcyBpcyBhIHZlcnkgZ29vZCBwbGFjZQorVGhlIFplc3TihKIgU0RLIGNvbWVzIHdpdGggc2V2ZXJhbCBzYW1wbGUgYXBwbGljYXRpb25zLiBUaGlzIGlzIGEgdmVyeSBnb29kIHBsYWNlCiB0byBsb29rIGZvciBjb2RlIGV4YW1wbGVzIGFuZCByZWNpcGVzLgogCi1UaGUgc2FtcGxlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSArc2FtcGxlcy8rIGRpcmVjdG9yeSBvZiB0aGUgUWk0aiBTREsuCitUaGUgc2FtcGxlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSArc2FtcGxlcy8rIGRpcmVjdG9yeSBvZiB0aGUgWmVzdOKEoiBTREsuCiAKIFtbc2FtcGxlLWRjaSwgRENJIFNhbXBsZV1dCiA9PSBEQ0kgU2FtcGxlID09CiAKIFNhbXBsZSBvZiBob3cgRENJIChEYXRhLCBDb250ZXh0ICYgSW50ZXJhY3Rpb24pIHBhdHRlcm4gaXMgaW1wbGVtZW50ZWQgdXNpbmcKLVFpNGogY29yZSBvbmx5LgorWmVzdOKEoiBjb3JlIG9ubHkuCiAKLWh0dHBzOi8vZ2l0aHViLmNvbS9RaTRqL3FpNGotc2RrL3RyZWUvZGV2ZWxvcC9zYW1wbGVzL2RjaVtCcm93c2UgU291cmNlXQoraHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS96ZXN0LWphdmEvdHJlZS9kZXZlbG9wL3NhbXBsZXMvZGNpW0Jyb3dzZSBTb3VyY2VdCiAKIFtbc2FtcGxlLWRjaS1jYXJnbyxEQ0kgQ2FyZ28gU2FtcGxlXV0KID09IERDSSBDYXJnbyBTYW1wbGUgPT0KIAogU2FtcGxlIG9mIGhvdyBEQ0kgKERhdGEsIENvbnRleHQgJiBJbnRlcmFjdGlvbikgcGF0dGVybiBpcyBpbXBsZW1lbnRlZCB3aXRoCi1RaTRqLCBmb3IgRXJpYyBFdmFucyBEREQgc2FtcGxlLgorWmVzdOKEoiwgZm9yIEVyaWMgRXZhbnMgREREIHNhbXBsZS4KIAogVGhpcyBzYW1wbGUsIGNvbnRyaWJ1dGVkIGJ5IE1hcmMgR3J1ZSwgaXMgZGVzY3JpYmVkIGluIGRldGFpbHMgb24gaGlzCiB3ZWJzaXRlOiBodHRwOi8vbWFyY2dydWUuY29tLwogCi1odHRwczovL2dpdGh1Yi5jb20vUWk0ai9xaTRqLXNkay90cmVlL2RldmVsb3Avc2FtcGxlcy9kY2ktY2FyZ29bQnJvd3NlIFNvdXJjZV0KK2h0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvemVzdC1qYXZhL3RyZWUvZGV2ZWxvcC9zYW1wbGVzL2RjaS1jYXJnb1tCcm93c2UgU291cmNlXQogCiBbW3NhbXBsZS1mb3J1bSxGb3J1bSBTYW1wbGVdXQogPT0gRm9ydW0gU2FtcGxlID09CiAKIFNhbXBsZSBvZiBob3cgdG8gYnVpbGQgYSB3ZWIgZm9ydW0gdXNpbmcgPDxsaWJyYXJ5LXJlc3Qtc2VydmVyPj4sCi08PGV4dGVuc2lvbi1lcy1uZW80aj4+IGFuZCA8PGxpYnJhcnktZmlsZWNvbmZpZz4+LgorPDxleHRlbnNpb24tZXMtZmlsZT4+IGFuZCA8PGxpYnJhcnktZmlsZWNvbmZpZz4+LgogCi1odHRwczovL2dpdGh1Yi5jb20vUWk0ai9xaTRqLXNkay90cmVlL2RldmVsb3Avc2FtcGxlcy9mb3J1bVtCcm93c2UgU291cmNlXQoraHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS96ZXN0LWphdmEvdHJlZS9kZXZlbG9wL3NhbXBsZXMvZm9ydW1bQnJvd3NlIFNvdXJjZV0KIAogW1tzYW1wbGUtY2FyLXJlbnRhbCxDYXIgUmVudGFsIFNhbXBsZV1dCiA9PSBDYXIgUmVudGFsIFNhbXBsZSA9PQpAQCAtNDMsMjMgKzYyLDIzIEBACiBTYW1wbGUgb2YgaW1wbGVtZW50YXRpb24gb2YgYSBDYXIgUmVudGFsIGFwcGxpY2F0aW9uIGltcGxlbWVudGVkIGFzIGEgU2VydmxldAogYmFzZWQgV2ViYXBwIHBhY2thZ2VkIGFzIGEgV0FSLgogCi1odHRwczovL2dpdGh1Yi5jb20vUWk0ai9xaTRqLXNkay90cmVlL2RldmVsb3Avc2FtcGxlcy9yZW50YWxbQnJvd3NlIFNvdXJjZV0KK2h0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvemVzdC1qYXZhL3RyZWUvZGV2ZWxvcC9zYW1wbGVzL3JlbnRhbFtCcm93c2UgU291cmNlXQogCiAvLyBbW3NhbXBsZS1zY2FsYSxTY2FsYSBTYW1wbGVdXQogLy8gPT0gU2NhbGEgU2FtcGxlID09CiAvLwotLy8gU2FtcGxlIG9mIGhvdyB0byB1c2UgU2NhbGEgd2l0aCBRaTRqLgorLy8gU2FtcGxlIG9mIGhvdyB0byB1c2UgU2NhbGEgd2l0aCBaZXN04oSiLgogLy8KLS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9RaTRqL3FpNGotc2RrL3RyZWUvZGV2ZWxvcC9zYW1wbGVzL3NjYWxhW0Jyb3dzZSBTb3VyY2VdCisvLyBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3plc3QtamF2YS90cmVlL2RldmVsb3Avc2FtcGxlcy9zY2FsYVtCcm93c2UgU291cmNlXQogCiBbW3NhbXBsZS1zcWwtc3VwcG9ydCxTUUwgU3VwcG9ydCBTYW1wbGVdXQogPT0gU1FMIFN1cHBvcnQgU2FtcGxlID09CiAKIE5PVEU6IFRoaXMgc2FtcGxlIHVzZSBQb3N0Z3JlU1FMIGFuZCBkcm9wIGFsbCBvZiBpdHMgZGF0YSBvbmNlIHJ1biBpbiBvcmRlciB0byBiZSBydW5uYWJsZSBtdWx0aXBsZSB0aW1lcy4KIAotU2FtcGxlIG9mIGhvdyB0byBmdWxseSB1c2UgUWk0aiBTUUwgc3VwcG9ydCA6IDw8bGlicmFyeS1zcWw+PiwgPDxleHRlbnNpb24tZXMtc3FsPj4gYW5kIDw8ZXh0ZW5zaW9uLWluZGV4aW5nLXNxbD4+LgorU2FtcGxlIG9mIGhvdyB0byBmdWxseSB1c2UgWmVzdOKEoiBTUUwgc3VwcG9ydCA6IDw8bGlicmFyeS1zcWw+PiwgPDxleHRlbnNpb24tZXMtc3FsPj4gYW5kIDw8ZXh0ZW5zaW9uLWluZGV4aW5nLXNxbD4+LgogCi1odHRwczovL2dpdGh1Yi5jb20vUWk0ai9xaTRqLXNkay90cmVlL2RldmVsb3Avc2FtcGxlcy9zcWwtc3VwcG9ydFtCcm93c2UgU291cmNlXQoraHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS96ZXN0LWphdmEvdHJlZS9kZXZlbG9wL3NhbXBsZXMvc3FsLXN1cHBvcnRbQnJvd3NlIFNvdXJjZV0KIAogSGVyZSBhcmUgdGhlIHN0ZXBzIG5lZWRlZCB0byBzZXR1cCB0aGUgZGF0YWJhc2UgdXNpbmcgdGhlIGBwc3FsYCB1dGlsaXR5IGNvbW1hbmQ6CiAKQEAgLTgyLDE2ICsxMDEsOSBAQAogCiBBIGdyYWRsZSB0YXNrIGBydW5TYW1wbGVgIGlzIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUgYXMgYSBzaG9ydGN1dCB0byBydW4gdGhlIGV4YW1wbGUuIFNlZSA8PGJ1aWxkLXN5c3RlbT4+LgogCi1bW3NhbXBsZS1zdHJ1dHMyLFN0cnV0czIgU2FtcGxlXV0KLT09IFN0cnV0czIgU2FtcGxlID09Ci0KLVNhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBTdHJ1dHMyIGludGVncmF0aW9uLgotCi1odHRwczovL2dpdGh1Yi5jb20vUWk0ai9xaTRqLXNkay90cmVlL2RldmVsb3Avc2FtcGxlcy9zdHJ1dHMySGVsbG9bQnJvd3NlIFNvdXJjZV0KLQogW1tzYW1wbGUtc3dpbmcsU3dpbmcgQmluZGluZ3MgU2FtcGxlXV0KID09IFN3aW5nIEJpbmRpbmdzIFNhbXBsZSA9PQogCiBTYW1wbGUgb2YgaG93IHRvIHdyaXRlIGN1c3RvbSBiaW5kZXJzLgogCi1odHRwczovL2dpdGh1Yi5jb20vUWk0ai9xaTRqLXNkay90cmVlL2RldmVsb3Avc2FtcGxlcy9zd2luZ1tCcm93c2UgU291cmNlXQoraHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS96ZXN0LWphdmEvdHJlZS9kZXZlbG9wL3NhbXBsZXMvc3dpbmdbQnJvd3NlIFNvdXJjZV0KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL3R1dG9yaWFscy50eHQgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS90dXRvcmlhbHMudHh0CmluZGV4IDNiN2Q1NWYuLjI1NmQ4ZTggMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL3R1dG9yaWFscy50eHQKKysrIGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUvdHV0b3JpYWxzLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogOmxldmVsb2Zmc2V0OiAxCiAKIFtbdHV0b3JpYWxzLFR1dG9yaWFscyBTZWN0aW9uXV0KQEAgLTYsMTUgKzI1LDE1IEBACiA9PSBPdmVydmlldyA9PQogCiBUSVA6IFRoZXNlcyB0dXRvcmlhbHMgYXJlIGJhc2VkIG9uIGFjdHVhbCBjb2RlIGZvdW5kIGluIHRoZSBgdHV0b3JpYWxzL2AgZGlyZWN0b3J5IG9mIHRoZQotaHR0cDovL3FpNGoub3JnL2Rvd25sb2Fkcy5odG1sW1FpNGogU0RLIHNvdXJjZXNdLiBZb3Ugc2hvdWxkIHN0YXJ0IHlvdXIgZmF2b3JpdGUgZWRpdG9yIGFuZCBmaW5kIHRoZSBjb2RlIHJlbGF0ZWQgdG8KK2h0dHBzOi8vemVzdC5hcGFjaGUub3JnL2Rvd25sb2FkLmh0bWxbWmVzdOKEoiBTREsgc291cmNlc10uIFlvdSBzaG91bGQgc3RhcnQgeW91ciBmYXZvcml0ZSBlZGl0b3IgYW5kIGZpbmQgdGhlIGNvZGUgcmVsYXRlZCB0bwogdGhpcyB0dXRvcmlhbCwgcnVuIGl0IGFuZCBwbGF5IHdpdGggaXQuCiAKLUluIHRoaXMgc2VjdGlvbiB5b3Ugd2lsbCBmaW5kIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgdHV0b3JpYWxzIGFib3V0IENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyB1c2luZyBRaTRqLgorSW4gdGhpcyBzZWN0aW9uIHlvdSB3aWxsIGZpbmQgYSBjb21wcmVoZW5zaXZlIHNldCBvZiB0dXRvcmlhbHMgYWJvdXQgQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIHVzaW5nIFplc3TihKIuCiAKLVtbdHV0b3JpYWxzLWludHJvLFFpNGogaW4gMiBob3VycyA0MiBtaW51dGVzXV0KLT09PSBRaTRqIGluIDIgaG91cnMgNDIgbWludXRlcyA9PT0KK1tbdHV0b3JpYWxzLWludHJvLFplc3TihKIgaW4gMiBob3VycyA0MiBtaW51dGVzXV0KKz09PSBaZXN04oSiIGluIDIgaG91cnMgNDIgbWludXRlcyA9PT0KIAotVGhpcyBxdWl0ZSBsb25nIGludHJvZHVjdGlvbiB0byBRaTRqIHdpbGwgc3RhcnQgYnkgYnJ1c2hpbmcgdXAgYW4gb3ZlcnZpZXcgb2YgdGhlIHByb2JsZW1zIFFpNGogc29sdmUsIHRlYWNoIHlvdSB3aGF0CitUaGlzIHF1aXRlIGxvbmcgaW50cm9kdWN0aW9uIHRvIFplc3TihKIgd2lsbCBzdGFydCBieSBicnVzaGluZyB1cCBhbiBvdmVydmlldyBvZiB0aGUgcHJvYmxlbXMgWmVzdOKEoiBzb2x2ZSwgdGVhY2ggeW91IHdoYXQKIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBpcyBhbmQgZ3VpZGUgeW91IHRocm91Z2ggdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyBhIGNvbXBsZXRlIEFwcGxpY2F0aW9uIGFyb3VuZCBhbiBhZGFwdGVkCiBIZWxsbyBXb3JsZCBleGFtcGxlLgogCkBAIC0yMywxMyArNDIsMTMgQEAKIC0gPDx0aGlydHktbWludXRlcy1pbnRybz4+CiAtIDw8dHdvLWhvdXJzLWludHJvPj4KIAotPT09IEdldHRpbmcgcmVhbCB3aXRoIFFpNGogPT09Cis9PT0gR2V0dGluZyByZWFsIHdpdGggWmVzdOKEoiA9PT0KIAotVGhyb3VnaG91dCB0aGlzIHNldCBvZiB0dXRvcmlhbHMgaXQgd2lsbCBiZSBzaG93biBob3cgdG8gZGVwZW5kIG9uIFFpNGogaW4geW91ciBidWlsZCwgaG93IHRvIGFzc2VtYmxlIGEgY29tcGxldGUKK1Rocm91Z2hvdXQgdGhpcyBzZXQgb2YgdHV0b3JpYWxzIGl0IHdpbGwgYmUgc2hvd24gaG93IHRvIGRlcGVuZCBvbiBaZXN04oSiIGluIHlvdXIgYnVpbGQsIGhvdyB0byBhc3NlbWJsZSBhIGNvbXBsZXRlCiBhcHBsaWNhdGlvbiwgaG93IHRvIGNyZWF0ZSBhbmQgd29yayB3aXRoIENvbXBvc2l0ZXMgYW5kIFNlcnZpY2VzLCBob3cgdG8gdXNlIGNvbnRleHR1YWwgZnJhZ21lbnRzIGFuZCBsZXZlcmFnZQogcHJvcGVydGllcy4KIAotLSA8PGhvd3RvLWRlcGVuZC1vbi1xaTRqPj4KKy0gPDxob3d0by1kZXBlbmQtb24temVzdD4+CiAtIDw8aG93dG8tYXNzZW1ibGUtYXBwbGljYXRpb24+PgogLSA8PHR1dC1jb21wb3NpdGVzPj4KIC0gPDx0dXQtc2VydmljZXM+PgpAQCAtNDgsMTMgKzY3LDE0IEBACiAtIDw8aG93dG8tY29uZmlndXJlLXNlcnZpY2U+PgogLSA8PGhvd3RvLXVzZS1pbz4+CiAKLT09PSBRaTRqIERldmVsb3BtZW50ID09PQorPT09IFplc3TihKIgRGV2ZWxvcG1lbnQgPT09CiAKLVRoaXMgbGFzdCBzZXQgb2YgdHV0b3JpYWxzIHlvdSdsbCBsZWFybiBob3cgdG8gYnVpbGQgdGhlIFFpNGogU0RLIGZyb20gc291cmNlcyBpbmNsdWRpbmcgdGhpcyB2ZXJ5IGRvY3VtZW50YXRpb24gd2Vic2l0ZQotLCB0aGUgUWk0aiBtYW51YWwsIGJpbmFyaWVzIGFuZCBzb3VyY2VzIGRpc3RyaWJ1dGlvbnMuCitUaGlzIGxhc3Qgc2V0IG9mIHR1dG9yaWFscyB5b3UnbGwgbGVhcm4gaG93IHRvIGJ1aWxkIHRoZSBaZXN04oSiIFNESyBmcm9tIHNvdXJjZXMgaW5jbHVkaW5nIHRoaXMgdmVyeSBkb2N1bWVudGF0aW9uIHdlYnNpdGUKKywgdGhlIFplc3TihKIgbWFudWFsLCBiaW5hcmllcyBhbmQgc291cmNlcyBkaXN0cmlidXRpb25zLgogCiAtIDw8YnVpbGQtc3lzdGVtPj4KIC0gPDxjb21tdW5pdHktZG9jcz4+CistIDw8cmVsZWFzaW5nLWFwYWNoZT4+CiAKIAogOmxldmVsb2Zmc2V0OiAyCkBAIC03NSw3ICs5NSw3IEBACiAKIDpsZXZlbG9mZnNldDogMgogCi1pbmNsdWRlOjouLi90dXRvcmlhbHMvaG93dG8tZGVwZW5kLW9uLXFpNGoudHh0W10KK2luY2x1ZGU6Oi4uL3R1dG9yaWFscy9ob3d0by1kZXBlbmQtb24temVzdC50eHRbXQogCiA6bGV2ZWxvZmZzZXQ6IDIKIApAQCAtMTE5LDYgKzEzOSwxMCBAQAogCiA6bGV2ZWxvZmZzZXQ6IDIKIAoraW5jbHVkZTo6Li4vdHV0b3JpYWxzL2hvd3RvLWludm9jYXRpb24tYW5ub3RhdGlvbi50eHRbXQorCis6bGV2ZWxvZmZzZXQ6IDIKKwogaW5jbHVkZTo6Li4vdHV0b3JpYWxzL2hvd3RvLXVzZS1pby50eHRbXQogCiA6bGV2ZWxvZmZzZXQ6IDIKQEAgLTEzMCwzICsxNTQsNyBAQAogaW5jbHVkZTo6Li4vdHV0b3JpYWxzL2hvd3RvLXdyaXRpbmctZG9jcy50eHRbXQogCiA6bGV2ZWxvZmZzZXQ6IDIKKworaW5jbHVkZTo6Li4vdHV0b3JpYWxzL2hvd3RvLXJlbGVhc2luZy1hcGFjaGUudHh0W10KKworOmxldmVsb2Zmc2V0OiAyCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS94c2wvY2h1bmtlZC54c2wgYi9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS94c2wvY2h1bmtlZC54c2wKaW5kZXggNjJjN2YxMy4uODg0OGE4ZSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUveHNsL2NodW5rZWQueHNsCisrKyBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL3hzbC9jaHVua2VkLnhzbApAQCAtNTMsNyArNTMsMTYgQEAKICAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIHNlbGVjdD0iJyciLz4KIAogICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvb3Rlci5uYXZpZ2F0aW9uIj4KLSAgICA8ZGl2IGNsYXNzPSJmb290ZXIiPihjKSAyMDEyIFRoZSBRaTRqIENvbW11bml0eTwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImZvb3RlciI+CisgICAgICA8cD4KKyAgICAgICAgQ29weXJpZ2h0IMKpIDIwMTUgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBMaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLyIgdGFyZ2V0PSJfYmxhbmsiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uCisgICAgICAgIDxici8+CisgICAgICAgIDxzbWFsbD4KKyAgICAgICAgICAgIEFwYWNoZSBaZXN0LCBaZXN0LCBBcGFjaGUsIHRoZSBBcGFjaGUgZmVhdGhlciBsb2dvLCBhbmQgdGhlIEFwYWNoZSBaZXN0IHByb2plY3QgbG9nbyBhcmUgdHJhZGVtYXJrcyBvZiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyLz4KKyAgICAgICAgICAgIEFsbCBvdGhlciBtYXJrcyBtZW50aW9uZWQgbWF5IGJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLgorICAgICAgICA8L3NtYWxsPgorICAgICAgPC9wPgorICAgIDwvZGl2PgogICA8L3hzbDp0ZW1wbGF0ZT4KIAogICA8eHNsOnRlbXBsYXRlIG5hbWU9ImhlYWRlci5uYXZpZ2F0aW9uIj4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL3hzbC9oZWFkLnhzbCBiL21hbnVhbC9zcmMvZG9jcy93ZWJzaXRlL3hzbC9oZWFkLnhzbAppbmRleCA0ZDJjMDZjLi4yOTdkNjdlIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL2RvY3Mvd2Vic2l0ZS94c2wvaGVhZC54c2wKKysrIGIvbWFudWFsL3NyYy9kb2NzL3dlYnNpdGUveHNsL2hlYWQueHNsCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KIAogICA8eHNsOnRlbXBsYXRlIG5hbWU9InVzZXIuaGVhZC5jb250ZW50Ij4KQEAgLTU4LDcgKzc0LDcgQEAKIDwhLS0gQW5hbHl0aWNzIC0tPgogIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgdmFyIF9nYXEgPSBfZ2FxIHx8IFtdOwotICBfZ2FxLnB1c2goWydfc2V0QWNjb3VudCcsICdVQS0zMTE4NDk2LTEnXSk7CisgIF9nYXEucHVzaChbJ19zZXRBY2NvdW50JywgJ1VBLTYyMDA3MzUyLTEnXSk7CiAgIF9nYXEucHVzaChbJ190cmFja1BhZ2V2aWV3J10pOwogCiAgIChmdW5jdGlvbigpIHsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2Fzc2VtYmxlL0RvY3MuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2Fzc2VtYmxlL0RvY3MuamF2YQppbmRleCAyNWI3M2ZmLi5iYzlhNWJkIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9hc3NlbWJsZS9Eb2NzLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvYXNzZW1ibGUvRG9jcy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmFzc2VtYmxlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5UaGlzOwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvYXNzZW1ibGUvTWFpbi5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvYXNzZW1ibGUvTWFpbi5qYXZhCmluZGV4IDg1YzRmMzQuLjg3YzM3YzcgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2Fzc2VtYmxlL01haW4uamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9hc3NlbWJsZS9NYWluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMuYXNzZW1ibGU7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tbW9uLlZpc2liaWxpdHk7CkBAIC0xNSw4ICszMyw4IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQogICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgLy8gQm9vdHN0cmFwIFFpNGogUnVudGltZQotICAgICAgICAvLyBDcmVhdGUgYSBRaTRqIFJ1bnRpbWUKKyAgICAgICAgLy8gQm9vdHN0cmFwIFplc3QgUnVudGltZQorICAgICAgICAvLyBDcmVhdGUgYSBaZXN0IFJ1bnRpbWUKICAgICAgICAgcWk0aiA9IG5ldyBFbmVyZ3k0SmF2YSgpOwogCiAgICAgICAgIC8vIEluc3RhbnRpYXRlIHRoZSBBcHBsaWNhdGlvbiBNb2RlbC4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vQW55TWl4aW5UeXBlLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb25jZXJuL0FueU1peGluVHlwZS5qYXZhCmluZGV4IDM0MjhhMmYuLmYxMWI3NmYgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vQW55TWl4aW5UeXBlLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY29uY2Vybi9BbnlNaXhpblR5cGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jb25jZXJuOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbmNlcm4uQ29uY2VybnM7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb25jZXJuL0ludmVudG9yeUNvbmNlcm4uamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vSW52ZW50b3J5Q29uY2Vybi5qYXZhCmluZGV4IDkzMjhkZDAuLjdkNDEwMDYgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vSW52ZW50b3J5Q29uY2Vybi5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vSW52ZW50b3J5Q29uY2Vybi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNvbmNlcm47CiAKIHB1YmxpYyBjbGFzcyBJbnZlbnRvcnlDb25jZXJuCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb25jZXJuL0xpbmVJdGVtLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb25jZXJuL0xpbmVJdGVtLmphdmEKaW5kZXggMjUwM2E3Ny4uMzlhZTMwNiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY29uY2Vybi9MaW5lSXRlbS5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vTGluZUl0ZW0uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jb25jZXJuOwogCiAKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vTXlBbm5vdGF0aW9uLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb25jZXJuL015QW5ub3RhdGlvbi5qYXZhCmluZGV4IDJiNThkYmUuLjFhOTVjNWYgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vTXlBbm5vdGF0aW9uLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY29uY2Vybi9NeUFubm90YXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jb25jZXJuOwogCiBwdWJsaWMgQGludGVyZmFjZSBNeUFubm90YXRpb24KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vTXlBcHBsaWVzVG9GaWx0ZXIuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vTXlBcHBsaWVzVG9GaWx0ZXIuamF2YQppbmRleCBiZDQ4ZjQ5Li40N2E3MmQzIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb25jZXJuL015QXBwbGllc1RvRmlsdGVyLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY29uY2Vybi9NeUFwcGxpZXNUb0ZpbHRlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNvbmNlcm47CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb25jZXJuL015R2VuZXJpY0NvbmNlcm4uamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vTXlHZW5lcmljQ29uY2Vybi5qYXZhCmluZGV4IGNjYWU5MjEuLjU4ZWE0OGUgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vTXlHZW5lcmljQ29uY2Vybi5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vTXlHZW5lcmljQ29uY2Vybi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNvbmNlcm47CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb25jZXJuL09yZGVyLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb25jZXJuL09yZGVyLmphdmEKaW5kZXggZTk1MDM5Yy4uNjcwYjJhNiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY29uY2Vybi9PcmRlci5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbmNlcm4vT3JkZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jb25jZXJuOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbmNlcm4uQ29uY2VybnM7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb250ZXh0dWFsRnJhZ21lbnRzL1RyYWNlQWxsLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jb250ZXh0dWFsRnJhZ21lbnRzL1RyYWNlQWxsLmphdmEKaW5kZXggMGQ5ODVmYy4uMjczZjk1ZCAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY29udGV4dHVhbEZyYWdtZW50cy9UcmFjZUFsbC5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NvbnRleHR1YWxGcmFnbWVudHMvVHJhY2VBbGwuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jb250ZXh0dWFsRnJhZ21lbnRzOwogCiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlQ29uc3RyYWludC9EaWFsZXIuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvRGlhbGVyLmphdmEKaW5kZXggYzVlNThkNC4uOWNiOGFlZCAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlQ29uc3RyYWludC9EaWFsZXIuamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVDb25zdHJhaW50L0RpYWxlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUNvbnN0cmFpbnQ7CiAKIC8vIFNUQVJUIFNOSVBQRVQ6IGRpYWxlcgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlQ29uc3RyYWludC9EaWFsZXJDb21wb3NpdGUuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvRGlhbGVyQ29tcG9zaXRlLmphdmEKaW5kZXggZGQzYTljZS4uZWQ1NjllMiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlQ29uc3RyYWludC9EaWFsZXJDb21wb3NpdGUuamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVDb25zdHJhaW50L0RpYWxlckNvbXBvc2l0ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUNvbnN0cmFpbnQ7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uc3RyYWludC5Db25zdHJhaW50czsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvSGFzUGhvbmVOdW1iZXIuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvSGFzUGhvbmVOdW1iZXIuamF2YQppbmRleCA4ZDEyZGQ0Li44MTAxNTRkIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVDb25zdHJhaW50L0hhc1Bob25lTnVtYmVyLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlQ29uc3RyYWludC9IYXNQaG9uZU51bWJlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUNvbnN0cmFpbnQ7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVDb25zdHJhaW50L1BhcmFtZXRlclZpb2xhdGlvbkNvbmNlcm4uamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvUGFyYW1ldGVyVmlvbGF0aW9uQ29uY2Vybi5qYXZhCmluZGV4IDNjYWMzZGIuLmU1ZWY4MmQgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvUGFyYW1ldGVyVmlvbGF0aW9uQ29uY2Vybi5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvUGFyYW1ldGVyVmlvbGF0aW9uQ29uY2Vybi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUNvbnN0cmFpbnQ7CiAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlQ29uc3RyYWludC9QaG9uZU51bWJlci5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlQ29uc3RyYWludC9QaG9uZU51bWJlci5qYXZhCmluZGV4IDQ5MWI1OGIuLjA1NDBkNjIgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvUGhvbmVOdW1iZXIuamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVDb25zdHJhaW50L1Bob25lTnVtYmVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMuY3JlYXRlQ29uc3RyYWludDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25zdHJhaW50LkNvbnN0cmFpbnREZWNsYXJhdGlvbjsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvUGhvbmVOdW1iZXJDb25zdHJhaW50LmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVDb25zdHJhaW50L1Bob25lTnVtYmVyQ29uc3RyYWludC5qYXZhCmluZGV4IDMzYTQ2YTAuLjdlZDNmZGUgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvUGhvbmVOdW1iZXJDb25zdHJhaW50LmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlQ29uc3RyYWludC9QaG9uZU51bWJlckNvbnN0cmFpbnQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jcmVhdGVDb25zdHJhaW50OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbnN0cmFpbnQuQ29uc3RyYWludDsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvUGhvbmVOdW1iZXJQYXJhbWV0ZXJWaW9sYXRpb25Db25jZXJuLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVDb25zdHJhaW50L1Bob25lTnVtYmVyUGFyYW1ldGVyVmlvbGF0aW9uQ29uY2Vybi5qYXZhCmluZGV4IDZmMTJmN2IuLjEzMDNiMDggMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUNvbnN0cmFpbnQvUGhvbmVOdW1iZXJQYXJhbWV0ZXJWaW9sYXRpb25Db25jZXJuLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlQ29uc3RyYWludC9QaG9uZU51bWJlclBhcmFtZXRlclZpb2xhdGlvbkNvbmNlcm4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jcmVhdGVDb25zdHJhaW50OwogCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvQWNjaWRlbnQuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9BY2NpZGVudC5qYXZhCmluZGV4IDgyNzY1MTAuLjYwNmUzOTYgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9BY2NpZGVudC5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9BY2NpZGVudC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUVudGl0eTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9BY2NpZGVudFZhbHVlLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvQWNjaWRlbnRWYWx1ZS5qYXZhCmluZGV4IGJhMTliYTkuLjU5Mjg2MzAgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9BY2NpZGVudFZhbHVlLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L0FjY2lkZW50VmFsdWUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jcmVhdGVFbnRpdHk7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkudmFsdWUuVmFsdWVDb21wb3NpdGU7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvQ2FyLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvQ2FyLmphdmEKaW5kZXggOTA4ZThhMC4uNzJjYzMwZCAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L0Nhci5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9DYXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jcmVhdGVFbnRpdHk7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb247CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvQ2FyRW50aXR5LmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvQ2FyRW50aXR5LmphdmEKaW5kZXggYTU5ZDUxMy4uZmIxMjIzOSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L0NhckVudGl0eS5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9DYXJFbnRpdHkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jcmVhdGVFbnRpdHk7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9DYXJFbnRpdHlGYWN0b3J5LmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvQ2FyRW50aXR5RmFjdG9yeS5qYXZhCmluZGV4IDdkNDY4MWIuLjc4MGU5ZmYgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9DYXJFbnRpdHlGYWN0b3J5LmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L0NhckVudGl0eUZhY3RvcnkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jcmVhdGVFbnRpdHk7CiAKIC8vIFNUQVJUIFNOSVBQRVQ6IGNhckZhY3RvcnkKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9DYXJFbnRpdHlGYWN0b3J5TWl4aW4uamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9DYXJFbnRpdHlGYWN0b3J5TWl4aW4uamF2YQppbmRleCBhMDRjNGEyLi4yMDU0MmI4IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvQ2FyRW50aXR5RmFjdG9yeU1peGluLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L0NhckVudGl0eUZhY3RvcnlNaXhpbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUVudGl0eTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5QnVpbGRlcjsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9DYXJFbnRpdHlGYWN0b3J5U2VydmljZS5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L0NhckVudGl0eUZhY3RvcnlTZXJ2aWNlLmphdmEKaW5kZXggNWM0NjQyNy4uNjgzNDdlZCAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L0NhckVudGl0eUZhY3RvcnlTZXJ2aWNlLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L0NhckVudGl0eUZhY3RvcnlTZXJ2aWNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMuY3JlYXRlRW50aXR5OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYWluLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvTWFpbi5qYXZhCmluZGV4IDY0ODA2ZjMuLmQ2NWVmYjIgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYWluLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L01haW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5jcmVhdGVFbnRpdHk7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkFwcGxpY2F0aW9uOwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L01hbnVmYWN0dXJlci5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L01hbnVmYWN0dXJlci5qYXZhCmluZGV4IDhlMjZmOGEuLmMyMDg3Y2EgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYW51ZmFjdHVyZXIuamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvTWFudWZhY3R1cmVyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMuY3JlYXRlRW50aXR5OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbW1vbi5Vc2VEZWZhdWx0czsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYW51ZmFjdHVyZXJFbnRpdHkuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYW51ZmFjdHVyZXJFbnRpdHkuamF2YQppbmRleCBmY2VhYmExLi45NGIyZTFhIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvTWFudWZhY3R1cmVyRW50aXR5LmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L01hbnVmYWN0dXJlckVudGl0eS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUVudGl0eTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5Q29tcG9zaXRlOwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L01hbnVmYWN0dXJlclJlcG9zaXRvcnkuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYW51ZmFjdHVyZXJSZXBvc2l0b3J5LmphdmEKaW5kZXggYWU0NGYxMi4uMmEwODBmMSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L01hbnVmYWN0dXJlclJlcG9zaXRvcnkuamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvTWFudWZhY3R1cmVyUmVwb3NpdG9yeS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUVudGl0eTsKIAogLy8gU1RBUlQgU05JUFBFVDogcmVwbwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L01hbnVmYWN0dXJlclJlcG9zaXRvcnlNaXhpbi5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvY3JlYXRlRW50aXR5L01hbnVmYWN0dXJlclJlcG9zaXRvcnlNaXhpbi5qYXZhCmluZGV4IGY1OTNhMzYuLjkzODllMGYgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYW51ZmFjdHVyZXJSZXBvc2l0b3J5TWl4aW4uamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvTWFudWZhY3R1cmVyUmVwb3NpdG9yeU1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMuY3JlYXRlRW50aXR5OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TdHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvTWFudWZhY3R1cmVyUmVwb3NpdG9yeVNlcnZpY2UuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYW51ZmFjdHVyZXJSZXBvc2l0b3J5U2VydmljZS5qYXZhCmluZGV4IGY1MWM3ZDIuLjMxYzhkNmIgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYW51ZmFjdHVyZXJSZXBvc2l0b3J5U2VydmljZS5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NYW51ZmFjdHVyZXJSZXBvc2l0b3J5U2VydmljZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUVudGl0eTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9jcmVhdGVFbnRpdHkvTXlBc3NlbWJsZXIuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NeUFzc2VtYmxlci5qYXZhCmluZGV4IDUxYWE4NjQuLmZlOWEwYmQgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NeUFzc2VtYmxlci5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2NyZWF0ZUVudGl0eS9NeUFzc2VtYmxlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmNyZWF0ZUVudGl0eTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2lvL0RvY3MuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL2lvL0RvY3MuamF2YQppbmRleCAyZmIyNzQ2Li43MWEyMWFhIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9pby9Eb2NzLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvaW8vRG9jcy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLmlvOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9Cb29rLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9wcm9wZXJ0aWVzL0Jvb2suamF2YQppbmRleCBjZWU2ZDAwLi44MWZiYTIwIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9wcm9wZXJ0aWVzL0Jvb2suamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9wcm9wZXJ0aWVzL0Jvb2suamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5wcm9wZXJ0aWVzOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LkltbXV0YWJsZTsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3Byb3BlcnRpZXMvQm9va0ZhY3RvcnkuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3Byb3BlcnRpZXMvQm9va0ZhY3RvcnkuamF2YQppbmRleCA3Yzk0YjQwLi41MjdhYjhhIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9wcm9wZXJ0aWVzL0Jvb2tGYWN0b3J5LmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9Cb29rRmFjdG9yeS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLnByb3BlcnRpZXM7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlRyYW5zaWVudEJ1aWxkZXI7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9wcm9wZXJ0aWVzL1N3aW5nSW5mby5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9Td2luZ0luZm8uamF2YQppbmRleCAxZTExYmNiLi4wNzgyYWRmIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9wcm9wZXJ0aWVzL1N3aW5nSW5mby5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3Byb3BlcnRpZXMvU3dpbmdJbmZvLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMucHJvcGVydGllczsKIAogaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3Byb3BlcnRpZXMvU3dpbmdQYW5lbC5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9Td2luZ1BhbmVsLmphdmEKaW5kZXggZDZmNWI3Yy4uOTczNmQxMSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9Td2luZ1BhbmVsLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9Td2luZ1BhbmVsLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMucHJvcGVydGllczsKIAogaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3Byb3BlcnRpZXMvcG9qby9Cb29rLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9wcm9wZXJ0aWVzL3Bvam8vQm9vay5qYXZhCmluZGV4IDE1NDYzM2EuLmEzOTQ2NTcgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3Byb3BlcnRpZXMvcG9qby9Cb29rLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9wb2pvL0Jvb2suamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5wcm9wZXJ0aWVzLnBvam87CiAKIC8vIFNUQVJUIFNOSVBQRVQ6IGJvb2sKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3Byb3BlcnRpZXMvcG9qby9NdXRhYmxlQm9vay5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9wb2pvL011dGFibGVCb29rLmphdmEKaW5kZXggNzgxNTAxMi4uMjNhOGZhOSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9wb2pvL011dGFibGVCb29rLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvcHJvcGVydGllcy9wb2pvL011dGFibGVCb29rLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMucHJvcGVydGllcy5wb2pvOwogCiAKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL0FueU1peGluVHlwZS5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvQW55TWl4aW5UeXBlLmphdmEKaW5kZXggNGUwNzU3Mi4uMWM3ZTg0MSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvQW55TWl4aW5UeXBlLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvQW55TWl4aW5UeXBlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMuc2lkZWVmZmVjdHM7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uY2Vybi5Db25jZXJuczsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL0NvbmZpcm1hYmxlLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9Db25maXJtYWJsZS5qYXZhCmluZGV4IGE1ZDk2MzkuLjI3MjM0NzIgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL0NvbmZpcm1hYmxlLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvQ29uZmlybWFibGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5zaWRlZWZmZWN0czsKIAogcHVibGljIGludGVyZmFjZSBDb25maXJtYWJsZQpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvSGFzQ3VzdG9tZXIuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL0hhc0N1c3RvbWVyLmphdmEKaW5kZXggNmVjOTEzMi4uZWNmYzliMyAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvSGFzQ3VzdG9tZXIuamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9IYXNDdXN0b21lci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLnNpZGVlZmZlY3RzOwogCiBwdWJsaWMgaW50ZXJmYWNlIEhhc0N1c3RvbWVyCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9IYXNMaW5lSXRlbXMuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL0hhc0xpbmVJdGVtcy5qYXZhCmluZGV4IGY1NTIyYzUuLjliZDJkZTEgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL0hhc0xpbmVJdGVtcy5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL0hhc0xpbmVJdGVtcy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLnNpZGVlZmZlY3RzOwogCiBwdWJsaWMgaW50ZXJmYWNlIEhhc0xpbmVJdGVtcwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvSGFzU2VxdWVuY2VOdW1iZXIuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL0hhc1NlcXVlbmNlTnVtYmVyLmphdmEKaW5kZXggZDk1NWE2Yi4uY2JiNTNlZSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvSGFzU2VxdWVuY2VOdW1iZXIuamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9IYXNTZXF1ZW5jZU51bWJlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLnNpZGVlZmZlY3RzOwogCiBwdWJsaWMgaW50ZXJmYWNlIEhhc1NlcXVlbmNlTnVtYmVyCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9NYWlsTm90aWZ5U2lkZUVmZmVjdC5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvTWFpbE5vdGlmeVNpZGVFZmZlY3QuamF2YQppbmRleCA3NzAwYjcyLi4wNWI2ZGRkIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9NYWlsTm90aWZ5U2lkZUVmZmVjdC5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL01haWxOb3RpZnlTaWRlRWZmZWN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMuc2lkZWVmZmVjdHM7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuc2lkZWVmZmVjdC5TaWRlRWZmZWN0T2Y7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9NeUFubm90YXRpb24uamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL015QW5ub3RhdGlvbi5qYXZhCmluZGV4IDEzYjJhNjYuLmMyNjY0YmQgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL015QW5ub3RhdGlvbi5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL015QW5ub3RhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLnNpZGVlZmZlY3RzOwogCiBwdWJsaWMgQGludGVyZmFjZSBNeUFubm90YXRpb24KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL015QXBwbGllc1RvRmlsdGVyLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9NeUFwcGxpZXNUb0ZpbHRlci5qYXZhCmluZGV4IDZkOTk2NmIuLmYwOWU0ZTUgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL015QXBwbGllc1RvRmlsdGVyLmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvTXlBcHBsaWVzVG9GaWx0ZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwucmVjaXBlcy5zaWRlZWZmZWN0czsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL015R2VuZXJpY1NpZGVFZmZlY3QuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL015R2VuZXJpY1NpZGVFZmZlY3QuamF2YQppbmRleCBkMTQ3YTYxLi44OTQzMmQ1IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9NeUdlbmVyaWNTaWRlRWZmZWN0LmphdmEKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvTXlHZW5lcmljU2lkZUVmZmVjdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLnNpZGVlZmZlY3RzOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvT3JkZXIuamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL09yZGVyLmphdmEKaW5kZXggM2UzMjZiNi4uMzYyNDgzNSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvT3JkZXIuamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9PcmRlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC5yZWNpcGVzLnNpZGVlZmZlY3RzOwogCiBwdWJsaWMgaW50ZXJmYWNlIE9yZGVyCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9PcmRlckVudGl0eS5qYXZhIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3JlY2lwZXMvc2lkZWVmZmVjdHMvT3JkZXJFbnRpdHkuamF2YQppbmRleCA1YjhjZTg1Li44ODc1ZmYwIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvcmVjaXBlcy9zaWRlZWZmZWN0cy9PcmRlckVudGl0eS5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC9yZWNpcGVzL3NpZGVlZmZlY3RzL09yZGVyRW50aXR5LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnJlY2lwZXMuc2lkZWVmZmVjdHM7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC90cmF2ZWwvRXhwZWRpYVNlcnZpY2UucHJvcGVydGllcyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC90cmF2ZWwvRXhwZWRpYVNlcnZpY2UucHJvcGVydGllcwppbmRleCAxZmNiYzVmLi41ZTAwNDMwIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL0V4cGVkaWFTZXJ2aWNlLnByb3BlcnRpZXMKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3RyYXZlbC9FeHBlZGlhU2VydmljZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKICMvLyBTVEFSVCBTTklQUEVUOiBwYXJhbXMKICMgSG9zdG5hbWUgdG8gdGhlIFRyYXZlbFBsYW4gc2VydmljZQogaG9zdE5hbWU9ZXhwZWRpYS5oZWRobWFuLm9yZwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3RyYXZlbC9NYWluLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL01haW4uamF2YQppbmRleCAzYzhiNDk5Li4xNjdiMjg2IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL01haW4uamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL01haW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwudHJhdmVsOwogCiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkFzc2VtYmx5RXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3RyYXZlbC9PcmJpdHpTZXJ2aWNlLnByb3BlcnRpZXMgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL09yYml0elNlcnZpY2UucHJvcGVydGllcwppbmRleCBhODQzM2MxLi41ZjQxMGY4IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL09yYml0elNlcnZpY2UucHJvcGVydGllcworKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL09yYml0elNlcnZpY2UucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiAjLy8gU1RBUlQgU05JUFBFVDogcGFyYW1zCiAjIEhvc3RuYW1lIHRvIHRoZSBUcmF2ZWxQbGFuIHNlcnZpY2UKIGhvc3ROYW1lPW9yYml0ei5oZWRobWFuLm9yZwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3RyYXZlbC9UcmF2ZWxQbGFuLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL1RyYXZlbFBsYW4uamF2YQppbmRleCA4YmQxM2ViLi42MDY3YjgyIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL1RyYXZlbFBsYW4uamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL1RyYXZlbFBsYW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwudHJhdmVsOwogCiAvLyBTVEFSVCBTTklQUEVUOiBzZXJ2aWNlCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL1RyYXZlbFBsYW5Db25maWd1cmF0aW9uLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL1RyYXZlbFBsYW5Db25maWd1cmF0aW9uLmphdmEKaW5kZXggNWFiMWFiZC4uNTVhN2NjOSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3RyYXZlbC9UcmF2ZWxQbGFuQ29uZmlndXJhdGlvbi5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC90cmF2ZWwvVHJhdmVsUGxhbkNvbmZpZ3VyYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5tYW51YWwudHJhdmVsOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OwpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3RyYXZlbC9UcmF2ZWxQbGFuTWl4aW4uamF2YSBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC90cmF2ZWwvVHJhdmVsUGxhbk1peGluLmphdmEKaW5kZXggNzg4Nzk0OC4uZjViYmE5OCAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3RyYXZlbC9UcmF2ZWxQbGFuTWl4aW4uamF2YQorKysgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL1RyYXZlbFBsYW5NaXhpbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLm1hbnVhbC50cmF2ZWw7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlRoaXM7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL1RyYXZlbFBsYW5TZXJ2aWNlLmphdmEgYi9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL1RyYXZlbFBsYW5TZXJ2aWNlLmphdmEKaW5kZXggZDMzMzJiYy4uYmU3NzJhZSAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3RyYXZlbC9UcmF2ZWxQbGFuU2VydmljZS5qYXZhCisrKyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC90cmF2ZWwvVHJhdmVsUGxhblNlcnZpY2UuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogLy8gU1RBUlQgU05JUFBFVDogc2VydmljZUNvbXBvc2l0ZQogLy8gVGhlIHBhY2thZ2UgaXMgcmVsZXZhbnQgdG8gdGhlIEluaXRpYWwgVmFsdWVzIGRpc2N1c3NlZCBsYXRlci4KIHBhY2thZ2Ugb3JnLnFpNGoubWFudWFsLnRyYXZlbDsKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC90cmF2ZWwvVHJhdmVsUGxhblNlcnZpY2UucHJvcGVydGllcyBiL21hbnVhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL21hbnVhbC90cmF2ZWwvVHJhdmVsUGxhblNlcnZpY2UucHJvcGVydGllcwppbmRleCA5MGRkYWFjLi4wYTJiOWQwIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai9tYW51YWwvdHJhdmVsL1RyYXZlbFBsYW5TZXJ2aWNlLnByb3BlcnRpZXMKKysrIGIvbWFudWFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbWFudWFsL3RyYXZlbC9UcmF2ZWxQbGFuU2VydmljZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKICMvLyBTVEFSVCBTTklQUEVUOiBwYXJhbXMKICMgSG9zdG5hbWUgdG8gdGhlIFRyYXZlbFBsYW4gc2VydmljZQogaG9zdE5hbWU9bmljbGFzLmhlZGhtYW4ub3JnCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL3Jlc291cmNlcy9jc3MvcHJvZ3Jlc3NpdmUtZW5oYW5jZW1lbnQuY3NzIGIvbWFudWFsL3NyYy9yZXNvdXJjZXMvY3NzL3Byb2dyZXNzaXZlLWVuaGFuY2VtZW50LmNzcwppbmRleCBiYWYwMjUzLi41OTBlYzZkIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL3Jlc291cmNlcy9jc3MvcHJvZ3Jlc3NpdmUtZW5oYW5jZW1lbnQuY3NzCisrKyBiL21hbnVhbC9zcmMvcmVzb3VyY2VzL2Nzcy9wcm9ncmVzc2l2ZS1lbmhhbmNlbWVudC5jc3MKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAogLyoqCiAgKiBDb250aW51b3VzIEludGVncmF0aW9uIC0gSmVua2lucyBXaWRnZXQKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvcmVzb3VyY2VzL2ltYWdlcy9sb2dvLXN0YW5kYXJkLnBuZyBiL21hbnVhbC9zcmMvcmVzb3VyY2VzL2ltYWdlcy9sb2dvLXN0YW5kYXJkLnBuZwppbmRleCBjNDA1ZDM0Li5jOGIyNTVmIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL3Jlc291cmNlcy9pbWFnZXMvbG9nby1zdGFuZGFyZC5wbmcKKysrIGIvbWFudWFsL3NyYy9yZXNvdXJjZXMvaW1hZ2VzL2xvZ28tc3RhbmRhcmQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMvcmVzb3VyY2VzL2pzL3Byb2dyZXNzaXZlLWVuaGFuY2VtZW50LmpzIGIvbWFudWFsL3NyYy9yZXNvdXJjZXMvanMvcHJvZ3Jlc3NpdmUtZW5oYW5jZW1lbnQuanMKaW5kZXggODk3ZTU0My4uYmJmNmY4NiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9yZXNvdXJjZXMvanMvcHJvZ3Jlc3NpdmUtZW5oYW5jZW1lbnQuanMKKysrIGIvbWFudWFsL3NyYy9yZXNvdXJjZXMvanMvcHJvZ3Jlc3NpdmUtZW5oYW5jZW1lbnQuanMKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAogCiAvKioKQEAgLTUsNiArMjMsOCBAQAogICovCiAkKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigkKXsKIAorICAgIHZhciBhdEhvbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT0gInplc3QuYXBhY2hlLm9yZyIKKwogICAgIC8qKgogICAgICAqIEdsb3NzYXJ5LgogICAgICAqLwpAQCAtMjUsOSArNDUsNyBAQAogICAgICAgICAgICAgICAgIHZhciBkdCA9IHRhcmdldC5wYXJlbnQoKTsKICAgICAgICAgICAgICAgICB2YXIgZGQgPSBkdC5uZXh0KCk7CiAgICAgICAgICAgICAgICAgLy8gU2Nyb2xsCi0gICAgICAgICAgICAgICAgJC5zY3JvbGxUbyggZHQsIDIwMCwgewotICAgICAgICAgICAgICAgICAgICAnb2Zmc2V0JzogLTk2Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgJC5zY3JvbGxUbyggZHQsIDIwMCwgeyAnb2Zmc2V0JzogLTk2IH0pOwogICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodAogICAgICAgICAgICAgICAgIGRkLmZhZGVPdXQoNTApLmZhZGVJbigyMDApOwogICAgICAgICAgICAgfQpAQCAtNzAsMTMgKzg4LDEzIEBACiAgICAgICAgICAgICAkKCAiZGl2LmxvZ28iICkuYXBwZW5kKCBzd2l0Y2hlcl9odG1sICk7CiAgICAgICAgICAgICB2YXIgdG9VUkwgPSBmdW5jdGlvbiggZGlzcGxheU5hbWUgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT0gInFpNGoub3JnIiB8fCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT0gInd3dy5xaTRqLm9yZyIgKQorICAgICAgICAgICAgICAgIGlmKCBhdEhvbWUgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIuLi8iICsgdmVyc2lvbnNbIGRpc3BsYXlOYW1lIF07CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiaHR0cDovL3FpNGoub3JnLyIgKyB2ZXJzaW9uc1sgZGlzcGxheU5hbWUgXTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJodHRwczovL3plc3QuYXBhY2hlLm9yZy9qYXZhLyIgKyB2ZXJzaW9uc1sgZGlzcGxheU5hbWUgXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkKCAiZGl2LmxvZ28gc2VsZWN0IiApLmNoYW5nZSggZnVuY3Rpb24oKQpAQCAtOTAsMjAgKzEwOCw2MiBAQAogICAgICAgICB9CiAgICAgfSApOwogCi0gICAgLy8gQWRkIHNlcGFyYXRvciBzcGFjZSBiZXR3ZWVuIHR1dG9yaWFscyBzZXJpZXMKKyAgICAvLyBUaXRsZSBsaW5rcyB0byB0aGVpciBvd24gYW5jaG9yCisgICAgJCggImJvZHkgPiBkaXYuc2VjdGlvbiAudGl0bGUiICkuZWFjaCggZnVuY3Rpb24oIGlkeCwgdGl0bGUgKSB7CisgICAgICAgIHZhciAkdGl0bGUgPSAkKCB0aXRsZSApOworICAgICAgICB2YXIgaWQgPSAkdGl0bGUuZmluZCggJ2EnICkuYXR0ciggJ2lkJyApOworICAgICAgICBpZiggaWQgKSB7CisgICAgICAgICAgICAkdGl0bGUuY2xpY2soIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gaWQ7CisgICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKyAgICB9ICk7CisKKyAgICAvLyBTY3JvbGwgZG93biBhIGJpdCBvbiBoYXNoIGNoYW5nZSBzbyB0aGF0IHRhcmdldCBpcyBub3QgaGlkZGVuIHVuZGVyIHRoZSBmbG9hdGluZyB0b3AgbWVudQorICAgIGZ1bmN0aW9uIHNjcm9sbFRvSGFzaCggaGFzaCApIHsKKyAgICAgICAgaWYoIGhhc2ggKSB7CisgICAgICAgICAgICB2YXIgJHRhcmdldCA9ICQoIGhhc2ggKTsKKyAgICAgICAgICAgIGlmKCAkdGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeyAkLnNjcm9sbFRvKCAkdGFyZ2V0LCAxMDAsIHsgJ29mZnNldCc6IC05NiB9KSB9LCA1MCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAkKCB3aW5kb3cgKS5iaW5kKCAnaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgICAgICBzY3JvbGxUb0hhc2goIHdpbmRvdy5sb2NhdGlvbi5oYXNoICk7CisgICAgfSk7CisgICAgc2Nyb2xsVG9IYXNoKCB3aW5kb3cubG9jYXRpb24uaGFzaCApOworCisgICAgLy8gRW5oYW5jZSBsZWZ0IG5hdgogICAgICQoICJkaXYuc3ViLW5hdiBkaXYudG9jIGR0IiApLmVhY2goIGZ1bmN0aW9uKCBpZHgsIGR0ICkgewogICAgICAgICB2YXIgJGR0ID0gJCggZHQgKTsKICAgICAgICAgdmFyIGl0ZW0gPSAkZHQuZmluZCggInNwYW4uc2VjdGlvbjpmaXJzdC1jaGlsZCIgKS50ZXh0KCkudHJpbSgpOwogICAgICAgICBzd2l0Y2goIGl0ZW0gKQogICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlICJRaTRqIGluIDIgbWludXRlcyI6Ci0gICAgICAgICAgICAgICAgJGR0LmF0dHIoICJzdHlsZSIsICJtYXJnaW4tdG9wOiAyNHB4IiApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAiUWk0aiBpbiAyIGhvdXJzIjoKKyAgICAgICAgICAgIC8vIE92ZXJ2aWV3IGV2ZXJ5d2hlcmUKKyAgICAgICAgICAgIGNhc2UgIk92ZXJ2aWV3IjoKKyAgICAgICAgICAgICAgICAkZHQuYXR0ciggInN0eWxlIiwgIm1hcmdpbi1ib3R0b206IDI0cHgiICk7CisgICAgICAgICAgICAvLyBUdXRvcmlhbHMKKyAgICAgICAgICAgIGNhc2UgIlplc3RcdTIxMjIgaW4gMiBob3VycyI6CiAgICAgICAgICAgICBjYXNlICJMZXZlcmFnZSBQcm9wZXJ0aWVzIjoKICAgICAgICAgICAgIGNhc2UgIlVzZSBJL08gQVBJIjoKICAgICAgICAgICAgICAgICAkZHQuYXR0ciggInN0eWxlIiwgIm1hcmdpbi1ib3R0b206IDI0cHgiICk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBKYXZhRG9jcworICAgICAgICAgICAgY2FzZSAiSmF2YURvY3MiOgorICAgICAgICAgICAgICAgICRkdC5oaWRlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBMaWJyYXJpZXMKKyAgICAgICAgICAgIGNhc2UgIkFsYXJtcyI6CisgICAgICAgICAgICAgICAgJGR0LmF0dHIoICJzdHlsZSIsICJtYXJnaW4tdG9wOiAyNHB4IiApOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRXh0ZW5zaW9ucworICAgICAgICAgICAgY2FzZSAiRWhjYWNoZSBDYWNoZSI6CisgICAgICAgICAgICBjYXNlICJNZW1vcnkgRW50aXR5U3RvcmUiOgorICAgICAgICAgICAgY2FzZSAiRWxhc3RpY1NlYXJjaCBJbmRleC9RdWVyeSI6CisgICAgICAgICAgICBjYXNlICJZYW1tZXIgTWV0cmljcyI6CisgICAgICAgICAgICBjYXNlICJNaWdyYXRpb24iOgorICAgICAgICAgICAgICAgICRkdC5hdHRyKCAic3R5bGUiLCAibWFyZ2luLXRvcDogMjRweCIgKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgIH0gKTsKIApkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy9yZXNvdXJjZXMvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZCBiL21hbnVhbC9zcmMvcmVzb3VyY2VzL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEvZGV2LXN0YXR1cy54c2QKaW5kZXggNTM3YWU4Ni4uMTE3NGZkZiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy9yZXNvdXJjZXMvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMS9kZXYtc3RhdHVzLnhzZAorKysgYi9tYW51YWwvc3JjL3Jlc291cmNlcy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xL2Rldi1zdGF0dXMueHNkCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8eHM6c2NoZW1hIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCiAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy94c2wvY2h1bmtlZC1iYXNpYy54c2wgYi9tYW51YWwvc3JjL3hzbC9jaHVua2VkLWJhc2ljLnhzbAppbmRleCBjZTQ0MjAyLi4wYjYwODIxIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL3hzbC9jaHVua2VkLWJhc2ljLnhzbAorKysgYi9tYW51YWwvc3JjL3hzbC9jaHVua2VkLWJhc2ljLnhzbApAQCAtMSw0ICsxLDIwIEBACiA8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tCiAgIEdlbmVyYXRlcyBjaHVua2VkIFhIVE1MIGRvY3VtZW50cyBmcm9tIERvY0Jvb2sgWE1MIHNvdXJjZSB1c2luZyBEb2NCb29rIFhTTAogICBzdHlsZXNoZWV0cy4KIApkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy94c2wvY2h1bmtlZC1vZmZsaW5lLnhzbCBiL21hbnVhbC9zcmMveHNsL2NodW5rZWQtb2ZmbGluZS54c2wKaW5kZXggNzU2ODNhMC4uNDQ1OWJhMiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy94c2wvY2h1bmtlZC1vZmZsaW5lLnhzbAorKysgYi9tYW51YWwvc3JjL3hzbC9jaHVua2VkLW9mZmxpbmUueHNsCkBAIC0xLDQgKzEsMjAgQEAKIDwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzwhLS0KICAgR2VuZXJhdGVzIGNodW5rZWQgWEhUTUwgZG9jdW1lbnRzIGZyb20gRG9jQm9vayBYTUwgc291cmNlIHVzaW5nIERvY0Jvb2sgWFNMCiAgIHN0eWxlc2hlZXRzLgogCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL3hzbC9jb21tb24ueHNsIGIvbWFudWFsL3NyYy94c2wvY29tbW9uLnhzbAppbmRleCAzNGMwYjU1Li5iY2UzNTZkIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL3hzbC9jb21tb24ueHNsCisrKyBiL21hbnVhbC9zcmMveHNsL2NvbW1vbi54c2wKQEAgLTEsNCArMSwyMCBAQAogPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPCEtLQogICBJbmxjdWRlZCBpbiB4aHRtbC54c2wsIHhodG1sLmNodW5rZWQueHNsLCBodG1saGVscC54c2wuCiAgIENvbnRhaW5zIGNvbW1vbiBYU0wgc3R5bGVzaGVldHMgcGFyYW1ldGVycy4KICAgT3V0cHV0IGRvY3VtZW50cyBzdHlsZWQgYnkgZG9jYm9vay5jc3MuCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL3hzbC9kaXNxdXMtZm9vdGVyLnhzbCBiL21hbnVhbC9zcmMveHNsL2Rpc3F1cy1mb290ZXIueHNsCmluZGV4IGZmNzZiNjEuLmM1Njk1ZGIgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMveHNsL2Rpc3F1cy1mb290ZXIueHNsCisrKyBiL21hbnVhbC9zcmMveHNsL2Rpc3F1cy1mb290ZXIueHNsCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KIAogICA8eHNsOnRlbXBsYXRlIG5hbWU9InVzZXIuZm9vdGVyLmNvbnRlbnQiPgpAQCAtMTA2LDcgKzEyMiw3IEBACiAKIC8vIEdBCiAgIHZhciBfZ2FxID0gX2dhcSB8fCBbXTsKLSAgX2dhcS5wdXNoKFsnX3NldEFjY291bnQnLCAnVUEtMzExODQ5Ni0xJ10pOworICBfZ2FxLnB1c2goWydfc2V0QWNjb3VudCcsICdVQS02MjAwNzM1Mi0xJ10pOwogICBfZ2FxLnB1c2goWydfdHJhY2tQYWdldmlldyddKTsKIAogICAoZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL3hzbC9mby54c2wgYi9tYW51YWwvc3JjL3hzbC9mby54c2wKaW5kZXggMTdhN2I4OC4uZDEyNWM5NCAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy94c2wvZm8ueHNsCisrKyBiL21hbnVhbC9zcmMveHNsL2ZvLnhzbApAQCAtMSw0ICsxLDIwIEBACiA8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tCiAgIEdlbmVyYXRlcyBzaW5nbGUgRk8gZG9jdW1lbnQgZnJvbSBEb2NCb29rIFhNTCBzb3VyY2UgdXNpbmcgRG9jQm9vayBYU0wKICAgc3R5bGVzaGVldHMuCiAKZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMveHNsL2Zvb3Rlci54c2wgYi9tYW51YWwvc3JjL3hzbC9mb290ZXIueHNsCmluZGV4IGZhZjZkZmMuLjJlNmQ2ZTAgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMveHNsL2Zvb3Rlci54c2wKKysrIGIvbWFudWFsL3NyYy94c2wvZm9vdGVyLnhzbApAQCAtMSwzICsxLDE5IEBACis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+CiAKICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJ1c2VyLmZvb3Rlci5jb250ZW50Ij4KQEAgLTUsNyArMjEsNyBAQAogPCFbQ0RBVEFbCiAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICB2YXIgX2dhcSA9IF9nYXEgfHwgW107Ci0gIF9nYXEucHVzaChbJ19zZXRBY2NvdW50JywgJ1VBLTMxMTg0OTYtMSddKTsKKyAgX2dhcS5wdXNoKFsnX3NldEFjY291bnQnLCAnVUEtNjIwMDczNTItMSddKTsKICAgX2dhcS5wdXNoKFsnX3RyYWNrUGFnZXZpZXcnXSk7CiAKICAgKGZ1bmN0aW9uKCkgewpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy94c2wvaGVhZC1vZmZsaW5lLnhzbCBiL21hbnVhbC9zcmMveHNsL2hlYWQtb2ZmbGluZS54c2wKaW5kZXggZjVkMTFmYS4uNGU4YTEyMCAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy94c2wvaGVhZC1vZmZsaW5lLnhzbAorKysgYi9tYW51YWwvc3JjL3hzbC9oZWFkLW9mZmxpbmUueHNsCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KIAogICA8eHNsOnRlbXBsYXRlIG5hbWU9InVzZXIuaGVhZC5jb250ZW50Ij4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMveHNsL2h0bWwtcGFyYW1zLnhzbCBiL21hbnVhbC9zcmMveHNsL2h0bWwtcGFyYW1zLnhzbAppbmRleCAxMDJkN2VhLi45NzBkZjBhIDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL3hzbC9odG1sLXBhcmFtcy54c2wKKysrIGIvbWFudWFsL3NyYy94c2wvaHRtbC1wYXJhbXMueHNsCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKICAgICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjAiPgogCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL3hzbC9vZmZsaW5lLWZvb3Rlci54c2wgYi9tYW51YWwvc3JjL3hzbC9vZmZsaW5lLWZvb3Rlci54c2wKaW5kZXggNmU1YmNjMy4uZDgxMDYzMiAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy94c2wvb2ZmbGluZS1mb290ZXIueHNsCisrKyBiL21hbnVhbC9zcmMveHNsL29mZmxpbmUtZm9vdGVyLnhzbApAQCAtMSwzICsxLDE5IEBACis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+CiAKICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJ1c2VyLmZvb3Rlci5jb250ZW50Ij4KZGlmZiAtLWdpdCBhL21hbnVhbC9zcmMveHNsL3N5bnRheGhpZ2hsaWdodC54c2wgYi9tYW51YWwvc3JjL3hzbC9zeW50YXhoaWdobGlnaHQueHNsCmluZGV4IDNhODQ1YWYuLmM2MjAxM2YgMTAwNjQ0Ci0tLSBhL21hbnVhbC9zcmMveHNsL3N5bnRheGhpZ2hsaWdodC54c2wKKysrIGIvbWFudWFsL3NyYy94c2wvc3ludGF4aGlnaGxpZ2h0LnhzbApAQCAtMSwzICsxLDE5IEBACis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+CiAKICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKi9wcm9ncmFtbGlzdGluZyIgbW9kZT0iY2xhc3MudmFsdWUiPgpkaWZmIC0tZ2l0IGEvbWFudWFsL3NyYy94c2wvdGV4dC54c2wgYi9tYW51YWwvc3JjL3hzbC90ZXh0LnhzbAppbmRleCA5OGVjZTZiLi41MmUwMjY2IDEwMDY0NAotLS0gYS9tYW51YWwvc3JjL3hzbC90ZXh0LnhzbAorKysgYi9tYW51YWwvc3JjL3hzbC90ZXh0LnhzbApAQCAtMSwzICsxLDE5IEBACis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8P3htbCB2ZXJzaW9uPSIxLjAiPz4KIDwhLS0KICAgVXNlZCBieSBBc2NpaURvYyBhMngoMSkgZm9yIHczbSgxKSBiYXNlZCB0ZXh0IGdlbmVyYXRpb24uCmRpZmYgLS1naXQgYS9tYW51YWwvc3JjL3hzbC94aHRtbC54c2wgYi9tYW51YWwvc3JjL3hzbC94aHRtbC54c2wKaW5kZXggYjdkZmVhYS4uMjk0NTY0ZCAxMDA2NDQKLS0tIGEvbWFudWFsL3NyYy94c2wveGh0bWwueHNsCisrKyBiL21hbnVhbC9zcmMveHNsL3hodG1sLnhzbApAQCAtMSw0ICsxLDIwIEBACiA8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tCiAgIEdlbmVyYXRlcyBzaW5nbGUgWEhUTUwgZG9jdW1lbnQgZnJvbSBEb2NCb29rIFhNTCBzb3VyY2UgdXNpbmcgRG9jQm9vayBYU0wKICAgc3R5bGVzaGVldHMuCiAKZGlmZiAtLWdpdCBhL21hdmVuLWNvbXBhdC5ncmFkbGUgYi9tYXZlbi1jb21wYXQuZ3JhZGxlCmluZGV4IDgyMDg3ZjYuLjAzODc4MTggMTAwNjQ0Ci0tLSBhL21hdmVuLWNvbXBhdC5ncmFkbGUKKysrIGIvbWF2ZW4tY29tcGF0LmdyYWRsZQpAQCAtMSwyMjUgKzEsMjgyIEBACi1hcHBseSBwbHVnaW46ICdtYXZlbicKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLXBvbSB7CisvLyBTZWUgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvcG9tL2FzZi8KIAotICBwcm9qZWN0IHsKLSAgICB1cmwgJ2h0dHA6Ly93d3cucWk0ai5vcmcnCi0gICAgb3JnYW5pemF0aW9uIHsKLSAgICAgIG5hbWUgJ1FpNGogQ29tbXVuaXR5JwotICAgICAgdXJsICdodHRwOi8vd3d3LnFpNGoub3JnJwotICAgIH0KLSAgICBpbmNlcHRpb25ZZWFyICcyMDA3JwotICAgIGlzc3VlTWFuYWdlbWVudCB7Ci0gICAgICBzeXN0ZW0gJ2ppcmEnCi0gICAgICB1cmwgJ2h0dHA6Ly90ZWFtLm9wczRqLm9yZy9icm93c2UvUUknCi0gICAgfQotICAgIHNjbSB7Ci0gICAgICB1cmwgImh0dHA6Ly9naXRodWIuY29tL1FpNGovcWk0ai1zZGsiCi0gICAgICBjb25uZWN0aW9uICJzY206Z2l0Omh0dHA6Ly9naXRodWIuY29tL1FpNGovcWk0ai1zZGsuZ2l0IgotICAgICAgZGV2ZWxvcGVyQ29ubmVjdGlvbiAic2NtOmdpdDpnaXRAZ2l0aHViLmNvbTpRaTRqL3FpNGotc2RrLmdpdCIKLSAgICB9Ci0gICAgbGljZW5zZXMgewotICAgICAgbGljZW5zZSB7Ci0gICAgICAgIG5hbWUgJ0FwYWNoZSBMaWNlbnNlIHZlcnNpb24gMi4wJwotICAgICAgICB1cmwgJ2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCcKK3VwbG9hZEFyY2hpdmVzIHsKKyAgcmVwb3NpdG9yaWVzLm1hdmVuRGVwbG95ZXIgeworCisgICAgcG9tIHsKKworICAgICAgcHJvamVjdCB7CisgICAgICAgIHVybCAnaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvJworICAgICAgICBvcmdhbml6YXRpb24geworICAgICAgICAgIG5hbWUgJ1RoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicKKyAgICAgICAgICB1cmwgJ2h0dHBzOi8vYXBhY2hlLm9yZy8nCisgICAgICAgIH0KKyAgICAgICAgaW5jZXB0aW9uWWVhciAnMjAwNycKKyAgICAgICAgaXNzdWVNYW5hZ2VtZW50IHsKKyAgICAgICAgICBzeXN0ZW0gJ2ppcmEnCisgICAgICAgICAgdXJsICdodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1pFU1QnCisgICAgICAgIH0KKyAgICAgICAgc2NtIHsKKyAgICAgICAgICB1cmwgImh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvemVzdC1qYXZhIgorICAgICAgICAgIGNvbm5lY3Rpb24gInNjbTpnaXQ6aHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3plc3QtamF2YS5naXQiCisgICAgICAgICAgZGV2ZWxvcGVyQ29ubmVjdGlvbiAic2NtOmdpdDpodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvemVzdC1qYXZhLmdpdCIKKyAgICAgICAgfQorICAgICAgICBsaWNlbnNlcyB7CisgICAgICAgICAgbGljZW5zZSB7CisgICAgICAgICAgICBuYW1lICdBcGFjaGUgTGljZW5zZSwgdmVyc2lvbiAyLjAuJworICAgICAgICAgICAgdXJsICdodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAnCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1haWxpbmdMaXN0cyB7CisgICAgICAgICAgbWFpbGluZ0xpc3QgeworICAgICAgICAgICAgbmFtZSAnVXNlcnMgTGlzdCcKKyAgICAgICAgICAgIHN1YnNjcmliZSAndXNlcnMtc3Vic2NyaWJlQHplc3QuYXBhY2hlLm9yZycKKyAgICAgICAgICAgIHVuc3Vic2NyaWJlICd1c2Vycy11bnN1YnNjcmliZUB6ZXN0LmFwYWNoZS5vcmcnCisgICAgICAgICAgICBwb3N0ICd1c2Vyc0B6ZXN0LmFwYWNoZS5vcmcnCisgICAgICAgICAgICBhcmNoaXZlICdodHRwczovL21haWwtYXJjaGl2ZXMuYXBhY2hlLm9yZy9tb2RfbWJveC96ZXN0LXVzZXJzLycKKyAgICAgICAgICAgIG90aGVyQXJjaGl2ZXMgeworICAgICAgICAgICAgICBvdGhlckFyY2hpdmUgJ2h0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9tYWlsaW5nbGlzdHMuaHRtbCNhcmNoaXZlcycKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgbWFpbGluZ0xpc3QgeworICAgICAgICAgICAgbmFtZSAnRGV2ZWxvcG1lbnQgTGlzdCcKKyAgICAgICAgICAgIHN1YnNjcmliZSAnZGV2LXN1YnNjcmliZUB6ZXN0LmFwYWNoZS5vcmcnCisgICAgICAgICAgICB1bnN1YnNjcmliZSAnZGV2LXVuc3Vic2NyaWJlQHplc3QuYXBhY2hlLm9yZycKKyAgICAgICAgICAgIHBvc3QgJ2RldkB6ZXN0LmFwYWNoZS5vcmcnCisgICAgICAgICAgICBhcmNoaXZlICdodHRwczovL21haWwtYXJjaGl2ZXMuYXBhY2hlLm9yZy9tb2RfbWJveC96ZXN0LWRldi8nCisgICAgICAgICAgICBvdGhlckFyY2hpdmVzIHsKKyAgICAgICAgICAgICAgb3RoZXJBcmNoaXZlICdodHRwczovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vbWFpbGluZ2xpc3RzLmh0bWwjYXJjaGl2ZXMnCisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIG1haWxpbmdMaXN0IHsKKyAgICAgICAgICAgIG5hbWUgJ0NvbW1pdHMgTGlzdCcKKyAgICAgICAgICAgIHN1YnNjcmliZSAnY29tbWl0cy1zdWJzY3JpYmVAemVzdC5hcGFjaGUub3JnJworICAgICAgICAgICAgdW5zdWJzY3JpYmUgJ2NvbW1pdHMtdW5zdWJzY3JpYmVAemVzdC5hcGFjaGUub3JnJworICAgICAgICAgICAgcG9zdCAnY29tbWl0c0B6ZXN0LmFwYWNoZS5vcmcnCisgICAgICAgICAgICBhcmNoaXZlICdodHRwczovL21haWwtYXJjaGl2ZXMuYXBhY2hlLm9yZy9tb2RfbWJveC96ZXN0LWNvbW1pdHMvJworICAgICAgICAgICAgb3RoZXJBcmNoaXZlcyB7CisgICAgICAgICAgICAgIG90aGVyQXJjaGl2ZSAnaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL21haWxpbmdsaXN0cy5odG1sI2FyY2hpdmVzJworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZXZlbG9wZXJzIHsKKyAgICAgICAgICBkZXZlbG9wZXIgeworICAgICAgICAgICAgaWQgJ25pY2xhc0BoZWRobWFuLm9yZycKKyAgICAgICAgICAgIG5hbWUgJ05pY2xhcyBIZWRobWFuJworICAgICAgICAgICAgZW1haWwgJ25pY2xhc0BoZWRobWFuLm9yZycKKyAgICAgICAgICAgIHJvbGVzIHsKKyAgICAgICAgICAgICAgcm9sZSAnQ29yZSBUZWFtJworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3JnYW5pemF0aW9uVXJsICdodHRwOi8vd3d3LnFpNGoub3JnJworICAgICAgICAgICAgdGltZXpvbmUgJ1VUQys4JworICAgICAgICAgIH0KKyAgICAgICAgICBkZXZlbG9wZXIgeworICAgICAgICAgICAgaWQgJ3JpY2thcmRvYmVyZycKKyAgICAgICAgICAgIG5hbWUgJ1JpY2thcmQgXHUwMEY2YmVyZycKKyAgICAgICAgICAgIGVtYWlsICdyaWNrYXJkLm9iZXJnQGpheXdheS5zZScKKyAgICAgICAgICAgIHJvbGVzIHsKKyAgICAgICAgICAgICAgcm9sZSAnQ29yZSBUZWFtJworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXJsICdodHRwOi8vd3d3Lm5lb3RlY2hub2xvZ3kuY29tJworICAgICAgICAgICAgb3JnYW5pemF0aW9uICdOZW8gVGVjaG5vbG9neSBBQicKKyAgICAgICAgICAgIG9yZ2FuaXphdGlvblVybCAnaHR0cDovL3d3dy5uZW90ZWNobm9sb2d5LmNvbScKKyAgICAgICAgICAgIHRpbWV6b25lICdVVEMrOCcKKyAgICAgICAgICB9CisgICAgICAgICAgZGV2ZWxvcGVyIHsKKyAgICAgICAgICAgIGlkICdlZHdhcmQueWFrb3BAZ21haWwuY29tJworICAgICAgICAgICAgbmFtZSAnRWR3YXJkIFlha29wJworICAgICAgICAgICAgZW1haWwgJ2VmeUBjb2RlZHJhZ29ucy5jb20nCisgICAgICAgICAgICByb2xlcyB7CisgICAgICAgICAgICAgIHJvbGUgJ0NvcmUgVGVhbScKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9yZ2FuaXphdGlvblVybCAnaHR0cDovL3d3dy5xaTRqLm9yZycKKyAgICAgICAgICAgIHRpbWV6b25lICdVVEMrOCcKKyAgICAgICAgICB9CisgICAgICAgICAgZGV2ZWxvcGVyIHsKKyAgICAgICAgICAgIGlkICdhZHJlZ2hpY2l1QGdtYWlsLmNvbScKKyAgICAgICAgICAgIG5hbWUgJ0FsaW4gRHJlZ2hpY2l1JworICAgICAgICAgICAgZW1haWwgJ2FkcmVnaGljaXVAY29kZWRyYWdvbnMuY29tJworICAgICAgICAgICAgcm9sZXMgeworICAgICAgICAgICAgICByb2xlICdDb3JlIFRlYW0nCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcmdhbml6YXRpb25VcmwgJ2h0dHA6Ly93d3cucWk0ai5vcmcnCisgICAgICAgICAgICB0aW1lem9uZSAnVVRDKzInCisgICAgICAgICAgfQorICAgICAgICAgIGRldmVsb3BlciB7CisgICAgICAgICAgICBpZCAnbWVzaXJpaScKKyAgICAgICAgICAgIG5hbWUgJ01pY2hhZWwgSHVuZ2VyJworICAgICAgICAgICAgZW1haWwgJ3FpNGpAamV4cC5kZScKKyAgICAgICAgICAgIHJvbGVzIHsKKyAgICAgICAgICAgICAgcm9sZSAnQ29yZSBUZWFtJworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZXpvbmUgJ0NFVCcKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZXZlbG9wZXIgeworICAgICAgICAgICAgaWQgIm11aGRrYW1pbCIKKyAgICAgICAgICAgIG5hbWUgIk11aGQgS2FtaWwgYmluIE1vaGQgQmFraSIKKyAgICAgICAgICAgIHJvbGVzIHsKKyAgICAgICAgICAgICAgcm9sZSAnUGxhdGZvcm0gVGVhbScKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRpbWV6b25lICJVVEMrOCIKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZXZlbG9wZXIgeworICAgICAgICAgICAgaWQgIm9wczRqQGxlYW5nZW4ubmV0IgorICAgICAgICAgICAgbmFtZSAiRGF2aWQgTGVhbmdlbiIKKyAgICAgICAgICAgIG9yZ2FuaXphdGlvbiAiQmlvc2NlbmUiCisgICAgICAgICAgICBlbWFpbCAib3BzNGpAbGVhbmdlbi5uZXQiCisgICAgICAgICAgICByb2xlcyB7CisgICAgICAgICAgICAgIHJvbGUgJ1BsYXRmb3JtIFRlYW0nCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aW1lem9uZSAiVVRDKzkiCisgICAgICAgICAgfQorCisgICAgICAgICAgZGV2ZWxvcGVyIHsKKyAgICAgICAgICAgIGlkICJzb25ueS5naWxsQGpheXdheS5uZXQiCisgICAgICAgICAgICBuYW1lICJTb25ueSBHaWxsIgorICAgICAgICAgICAgZW1haWwgInNvbm55LnB1YmxpY0BnbWFpbC5jb20iCisgICAgICAgICAgICByb2xlcyB7CisgICAgICAgICAgICAgIHJvbGUgJ0NvbW11bml0eSBUZWFtJworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZXpvbmUgIlVUQys4IgorICAgICAgICAgIH0KKworICAgICAgICAgIGRldmVsb3BlciB7CisgICAgICAgICAgICBpZCAidGFvd2VuIgorICAgICAgICAgICAgbmFtZSAiVGFvIFdlbiIKKyAgICAgICAgICAgIG9yZ2FuaXphdGlvbiAiIgorICAgICAgICAgICAgZW1haWwgInRhb3dlbkBnbWFpbC5jb20iCisgICAgICAgICAgICByb2xlcyB7CisgICAgICAgICAgICAgIHJvbGUgJ0NvbW11bml0eSBUZWFtJworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZXpvbmUgIlVUQys4IgorICAgICAgICAgIH0KKworICAgICAgICAgIGRldmVsb3BlciB7CisgICAgICAgICAgICBpZCAidGhvYmUiCisgICAgICAgICAgICBuYW1lICJUb2JpYXMgSXZhcnNzb24iCisgICAgICAgICAgICBlbWFpbCAidG9iaWFzQG5lb3RlY2hub2xvZ3kuY29tIgorICAgICAgICAgICAgdXJsICJodHRwOi8vd3d3Lm5lb3RlY2hub2xvZ3kuY29tIgorICAgICAgICAgICAgb3JnYW5pemF0aW9uICJOZW9UZWNobm9sb2d5IgorICAgICAgICAgICAgb3JnYW5pemF0aW9uVXJsICJodHRwOi8vd3d3Lm5lb3RlY2hub2xvZ3kuY29tIgorICAgICAgICAgICAgcm9sZXMgeworICAgICAgICAgICAgICByb2xlICJQbGF0Zm9ybSBUZWFtIgorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZXpvbmUgIkNFVCIKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZXZlbG9wZXIgeworICAgICAgICAgICAgaWQgImJvb24iCisgICAgICAgICAgICBuYW1lICJMYW4gQm9vbiBQaW5nIgorICAgICAgICAgICAgZW1haWwgImJvb25waW5nODFAZ21haWwuY29tIgorICAgICAgICAgICAgcm9sZXMgeworICAgICAgICAgICAgICByb2xlICdQbGF0Zm9ybSBUZWFtJworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZXpvbmUgIlVUQys4IgorICAgICAgICAgIH0KKworICAgICAgICAgIGRldmVsb3BlciB7CisgICAgICAgICAgICBpZCAiamFuLmtyb25xdWlzdEBnbWFpbC5jb20iCisgICAgICAgICAgICBuYW1lICJKYW4gS3JvbnF1aXN0IgorICAgICAgICAgICAgZW1haWwgImphbi5rcm9ucXVpc3RAZ21haWwuY29tIgorICAgICAgICAgICAgb3JnYW5pemF0aW9uICJKYXl3YXkiCisgICAgICAgICAgICByb2xlcyB7CisgICAgICAgICAgICAgIHJvbGUgJ1BsYXRmb3JtIFRlYW0nCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aW1lem9uZSAiQ0VUIgorICAgICAgICAgIH0KKworICAgICAgICAgIGRldmVsb3BlciB7CisgICAgICAgICAgICBpZCAibm13YWVsIgorICAgICAgICAgICAgbmFtZSAiTmlubyBTYXR1cm5pbm8gTWFydGluZXogVmF6cXVleiBXYWVsIgorICAgICAgICAgICAgcm9sZXMgeworICAgICAgICAgICAgICByb2xlICdQbGF0Zm9ybSBUZWFtJworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZXpvbmUgIkNFVCIKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZXZlbG9wZXIgeworICAgICAgICAgICAgaWQgInBldGVyQG5ldWJhdWVyLnNlIgorICAgICAgICAgICAgbmFtZSAiUGV0ZXIgTmV1YmF1ZXIiCisgICAgICAgICAgICBlbWFpbCAicGV0ZXJAbmV1YmF1ZXIuc2UiCisgICAgICAgICAgICByb2xlcyB7CisgICAgICAgICAgICAgIHJvbGUgJ1BsYXRmb3JtIFRlYW0nCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aW1lem9uZSAiQ0VUIgorICAgICAgICAgIH0KKworICAgICAgICAgIGRldmVsb3BlciB7CisgICAgICAgICAgICBpZCAicndhbGxhY2UiCisgICAgICAgICAgICBuYW1lICJSaWNoYXJkIFdhbGxhY2UiCisgICAgICAgICAgICBlbWFpbCAicndhbGxhY2VAdGhld2FsbGFjZXBhY2submV0IgorICAgICAgICAgICAgcm9sZXMgeworICAgICAgICAgICAgICByb2xlICdQbGF0Zm9ybSBUZWFtJworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZXpvbmUgIlVUQy03IgorICAgICAgICAgIH0KKworICAgICAgICAgIGRldmVsb3BlciB7CisgICAgICAgICAgICBpZCAic2lhbm55aGFsaW1AZ21haWwuY29tIgorICAgICAgICAgICAgbmFtZSAiU2lhbm55IEhhbGltIgorICAgICAgICAgICAgZW1haWwgInNpYW5ueWhhbGltQGdtYWlsLmNvbSIKKyAgICAgICAgICAgIHJvbGVzIHsKKyAgICAgICAgICAgICAgcm9sZSAnUGxhdGZvcm0gVGVhbScKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRpbWV6b25lICJVVEMrOCIKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZXZlbG9wZXIgeworICAgICAgICAgICAgaWQgInBhdWxAbm9zcGhlcmUub3JnIgorICAgICAgICAgICAgbmFtZSAiUGF1bCBNZXJsaW4iCisgICAgICAgICAgICBlbWFpbCAicGF1bEBub3NwaGVyZS5vcmciCisgICAgICAgICAgICByb2xlcyB7CisgICAgICAgICAgICAgIHJvbGUgJ0NvcmUgVGVhbScKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRpbWV6b25lICJDRVQiCisgICAgICAgICAgfQorCisgICAgICAgICAgZGV2ZWxvcGVyIHsKKyAgICAgICAgICAgIGlkICJzdGFzLmRlditxaTRqQGdtYWlsLmNvbSIKKyAgICAgICAgICAgIG5hbWUgIlN0YW5pc2xhdiBNdWhhbWV0c2luIgorICAgICAgICAgICAgZW1haWwgInN0YXMuZGV2K3FpNGpAZ21haWwuY29tIgorICAgICAgICAgICAgcm9sZXMgeworICAgICAgICAgICAgICByb2xlICdQbGF0Zm9ybSBUZWFtJworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZXpvbmUgIlVUQysyIgorICAgICAgICAgIH0KKworICAgICAgICAgIGRldmVsb3BlciB7CisgICAgICAgICAgICBpZCAidG9ubnkiCisgICAgICAgICAgICBuYW1lICJUb25ueSBLb2hhciIKKyAgICAgICAgICAgIHJvbGVzIHsKKyAgICAgICAgICAgICAgcm9sZSAiQ29tbXVuaXR5IFRlYW0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbWFpbCAidG9ubnkua29oYXJAZ21haWwuY29tIgorICAgICAgICAgICAgdGltZXpvbmUgIlVUQys3IgorICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgIH0KLSAgICBkZXZlbG9wZXJzIHsKLSAgICAgIGRldmVsb3BlciB7Ci0gICAgICAgIGlkICduaWNsYXNAaGVkaG1hbi5vcmcnCi0gICAgICAgIG5hbWUgJ05pY2xhcyBIZWRobWFuJwotICAgICAgICBlbWFpbCAnbmljbGFzQGhlZGhtYW4ub3JnJwotICAgICAgICByb2xlcyB7Ci0gICAgICAgICAgcm9sZSAnQ29yZSBUZWFtJwotICAgICAgICB9Ci0gICAgICAgIG9yZ2FuaXphdGlvblVybCAnaHR0cDovL3d3dy5xaTRqLm9yZycKLSAgICAgICAgdGltZXpvbmUgJ1VUQys4JwotICAgICAgfQotICAgICAgZGV2ZWxvcGVyIHsKLSAgICAgICAgaWQgJ3JpY2thcmRvYmVyZycKLSAgICAgICAgbmFtZSAnUmlja2FyZCBcdTAwRjZiZXJnJwotICAgICAgICBlbWFpbCAncmlja2FyZC5vYmVyZ0BqYXl3YXkuc2UnCi0gICAgICAgIHJvbGVzIHsKLSAgICAgICAgICByb2xlICdDb3JlIFRlYW0nCi0gICAgICAgIH0KLSAgICAgICAgdXJsICdodHRwOi8vd3d3Lm5lb3RlY2hub2xvZ3kuY29tJwotICAgICAgICBvcmdhbml6YXRpb24gJ05lbyBUZWNobm9sb2d5IEFCJwotICAgICAgICBvcmdhbml6YXRpb25VcmwgJ2h0dHA6Ly93d3cubmVvdGVjaG5vbG9neS5jb20nCi0gICAgICAgIHRpbWV6b25lICdVVEMrOCcKLSAgICAgIH0KLSAgICAgIGRldmVsb3BlciB7Ci0gICAgICAgIGlkICdlZHdhcmQueWFrb3BAZ21haWwuY29tJwotICAgICAgICBuYW1lICdFZHdhcmQgWWFrb3AnCi0gICAgICAgIGVtYWlsICdlZnlAY29kZWRyYWdvbnMuY29tJwotICAgICAgICByb2xlcyB7Ci0gICAgICAgICAgcm9sZSAnQ29yZSBUZWFtJwotICAgICAgICB9Ci0gICAgICAgIG9yZ2FuaXphdGlvblVybCAnaHR0cDovL3d3dy5xaTRqLm9yZycKLSAgICAgICAgdGltZXpvbmUgJ1VUQys4JwotICAgICAgfQotICAgICAgZGV2ZWxvcGVyIHsKLSAgICAgICAgaWQgJ2FkcmVnaGljaXVAZ21haWwuY29tJwotICAgICAgICBuYW1lICdBbGluIERyZWdoaWNpdScKLSAgICAgICAgZW1haWwgJ2FkcmVnaGljaXVAY29kZWRyYWdvbnMuY29tJwotICAgICAgICByb2xlcyB7Ci0gICAgICAgICAgcm9sZSAnQ29yZSBUZWFtJwotICAgICAgICB9Ci0gICAgICAgIG9yZ2FuaXphdGlvblVybCAnaHR0cDovL3d3dy5xaTRqLm9yZycKLSAgICAgICAgdGltZXpvbmUgJ1VUQysyJwotICAgICAgfQotICAgICAgZGV2ZWxvcGVyIHsKLSAgICAgICAgaWQgJ21lc2lyaWknCi0gICAgICAgIG5hbWUgJ01pY2hhZWwgSHVuZ2VyJwotICAgICAgICBlbWFpbCAncWk0akBqZXhwLmRlJwotICAgICAgICByb2xlcyB7Ci0gICAgICAgICAgcm9sZSAnQ29yZSBUZWFtJwotICAgICAgICB9Ci0gICAgICAgIHRpbWV6b25lICdDRVQnCi0gICAgICB9CiAKLSAgICAgIGRldmVsb3BlciB7Ci0gICAgICAgIGlkICJtdWhka2FtaWwiCi0gICAgICAgIG5hbWUgIk11aGQgS2FtaWwgYmluIE1vaGQgQmFraSIKLSAgICAgICAgcm9sZXMgewotICAgICAgICAgIHJvbGUgJ1BsYXRmb3JtIFRlYW0nCi0gICAgICAgIH0KLSAgICAgICAgdGltZXpvbmUgIlVUQys4IgotICAgICAgfQotCi0gICAgICBkZXZlbG9wZXIgewotICAgICAgICBpZCAib3BzNGpAbGVhbmdlbi5uZXQiCi0gICAgICAgIG5hbWUgIkRhdmlkIExlYW5nZW4iCi0gICAgICAgIG9yZ2FuaXphdGlvbiAiQmlvc2NlbmUiCi0gICAgICAgIGVtYWlsICJvcHM0akBsZWFuZ2VuLm5ldCIKLSAgICAgICAgcm9sZXMgewotICAgICAgICAgIHJvbGUgJ1BsYXRmb3JtIFRlYW0nCi0gICAgICAgIH0KLSAgICAgICAgdGltZXpvbmUgIlVUQys5IgotICAgICAgfQotCi0gICAgICBkZXZlbG9wZXIgewotICAgICAgICBpZCAic29ubnkuZ2lsbEBqYXl3YXkubmV0IgotICAgICAgICBuYW1lICJTb25ueSBHaWxsIgotICAgICAgICBlbWFpbCAic29ubnkucHVibGljQGdtYWlsLmNvbSIKLSAgICAgICAgcm9sZXMgewotICAgICAgICAgIHJvbGUgJ0NvbW11bml0eSBUZWFtJwotICAgICAgICB9Ci0gICAgICAgIHRpbWV6b25lICJVVEMrOCIKLSAgICAgIH0KLQotICAgICAgZGV2ZWxvcGVyIHsKLSAgICAgICAgaWQgInRhb3dlbiIKLSAgICAgICAgbmFtZSAiVGFvIFdlbiIKLSAgICAgICAgb3JnYW5pemF0aW9uICIiCi0gICAgICAgIGVtYWlsICJ0YW93ZW5AZ21haWwuY29tIgotICAgICAgICByb2xlcyB7Ci0gICAgICAgICAgcm9sZSAnQ29tbXVuaXR5IFRlYW0nCi0gICAgICAgIH0KLSAgICAgICAgdGltZXpvbmUgIlVUQys4IgotICAgICAgfQotCi0gICAgICBkZXZlbG9wZXIgewotICAgICAgICBpZCAidGhvYmUiCi0gICAgICAgIG5hbWUgIlRvYmlhcyBJdmFyc3NvbiIKLSAgICAgICAgZW1haWwgInRvYmlhc0BuZW90ZWNobm9sb2d5LmNvbSIKLSAgICAgICAgdXJsICJodHRwOi8vd3d3Lm5lb3RlY2hub2xvZ3kuY29tIgotICAgICAgICBvcmdhbml6YXRpb24gIk5lb1RlY2hub2xvZ3kiCi0gICAgICAgIG9yZ2FuaXphdGlvblVybCAiaHR0cDovL3d3dy5uZW90ZWNobm9sb2d5LmNvbSIKLSAgICAgICAgcm9sZXMgewotICAgICAgICAgIHJvbGUgIlBsYXRmb3JtIFRlYW0iCi0gICAgICAgIH0KLSAgICAgICAgdGltZXpvbmUgIkNFVCIKLSAgICAgIH0KLQotICAgICAgZGV2ZWxvcGVyIHsKLSAgICAgICAgaWQgImJvb24iCi0gICAgICAgIG5hbWUgIkxhbiBCb29uIFBpbmciCi0gICAgICAgIGVtYWlsICJib29ucGluZzgxQGdtYWlsLmNvbSIKLSAgICAgICAgcm9sZXMgewotICAgICAgICAgIHJvbGUgJ1BsYXRmb3JtIFRlYW0nCi0gICAgICAgIH0KLSAgICAgICAgdGltZXpvbmUgIlVUQys4IgotICAgICAgfQotCi0gICAgICBkZXZlbG9wZXIgewotICAgICAgICBpZCAiamFuLmtyb25xdWlzdEBnbWFpbC5jb20iCi0gICAgICAgIG5hbWUgIkphbiBLcm9ucXVpc3QiCi0gICAgICAgIGVtYWlsICJqYW4ua3JvbnF1aXN0QGdtYWlsLmNvbSIKLSAgICAgICAgb3JnYW5pemF0aW9uICJKYXl3YXkiCi0gICAgICAgIHJvbGVzIHsKLSAgICAgICAgICByb2xlICdQbGF0Zm9ybSBUZWFtJwotICAgICAgICB9Ci0gICAgICAgIHRpbWV6b25lICJDRVQiCi0gICAgICB9Ci0KLSAgICAgIGRldmVsb3BlciB7Ci0gICAgICAgIGlkICJubXdhZWwiCi0gICAgICAgIG5hbWUgIk5pbm8gU2F0dXJuaW5vIE1hcnRpbmV6IFZhenF1ZXogV2FlbCIKLSAgICAgICAgcm9sZXMgewotICAgICAgICAgIHJvbGUgJ1BsYXRmb3JtIFRlYW0nCi0gICAgICAgIH0KLSAgICAgICAgdGltZXpvbmUgIkNFVCIKLSAgICAgIH0KLQotICAgICAgZGV2ZWxvcGVyIHsKLSAgICAgICAgaWQgInBldGVyQG5ldWJhdWVyLnNlIgotICAgICAgICBuYW1lICJQZXRlciBOZXViYXVlciIKLSAgICAgICAgZW1haWwgInBldGVyQG5ldWJhdWVyLnNlIgotICAgICAgICByb2xlcyB7Ci0gICAgICAgICAgcm9sZSAnUGxhdGZvcm0gVGVhbScKLSAgICAgICAgfQotICAgICAgICB0aW1lem9uZSAiQ0VUIgotICAgICAgfQotCi0gICAgICBkZXZlbG9wZXIgewotICAgICAgICBpZCAicndhbGxhY2UiCi0gICAgICAgIG5hbWUgIlJpY2hhcmQgV2FsbGFjZSIKLSAgICAgICAgZW1haWwgInJ3YWxsYWNlQHRoZXdhbGxhY2VwYWNrLm5ldCIKLSAgICAgICAgcm9sZXMgewotICAgICAgICAgIHJvbGUgJ1BsYXRmb3JtIFRlYW0nCi0gICAgICAgIH0KLSAgICAgICAgdGltZXpvbmUgIlVUQy03IgotICAgICAgfQotCi0gICAgICBkZXZlbG9wZXIgewotICAgICAgICBpZCAic2lhbm55aGFsaW1AZ21haWwuY29tIgotICAgICAgICBuYW1lICJTaWFubnkgSGFsaW0iCi0gICAgICAgIGVtYWlsICJzaWFubnloYWxpbUBnbWFpbC5jb20iCi0gICAgICAgIHJvbGVzIHsKLSAgICAgICAgICByb2xlICdQbGF0Zm9ybSBUZWFtJwotICAgICAgICB9Ci0gICAgICAgIHRpbWV6b25lICJVVEMrOCIKLSAgICAgIH0KLQotICAgICAgZGV2ZWxvcGVyIHsKLSAgICAgICAgaWQgInBhdWxAbm9zcGhlcmUub3JnIgotICAgICAgICBuYW1lICJQYXVsIE1lcmxpbiIKLSAgICAgICAgZW1haWwgInBhdWxAbm9zcGhlcmUub3JnIgotICAgICAgICByb2xlcyB7Ci0gICAgICAgICAgcm9sZSAnQ29yZSBUZWFtJwotICAgICAgICB9Ci0gICAgICAgIHRpbWV6b25lICJDRVQiCi0gICAgICB9Ci0KLSAgICAgIGRldmVsb3BlciB7Ci0gICAgICAgIGlkICJzdGFzLmRlditxaTRqQGdtYWlsLmNvbSIKLSAgICAgICAgbmFtZSAiU3RhbmlzbGF2IE11aGFtZXRzaW4iCi0gICAgICAgIGVtYWlsICJzdGFzLmRlditxaTRqQGdtYWlsLmNvbSIKLSAgICAgICAgcm9sZXMgewotICAgICAgICAgIHJvbGUgJ1BsYXRmb3JtIFRlYW0nCi0gICAgICAgIH0KLSAgICAgICAgdGltZXpvbmUgIlVUQysyIgotICAgICAgfQotCi0gICAgICBkZXZlbG9wZXIgewotICAgICAgICBpZCAidG9ubnkiCi0gICAgICAgIG5hbWUgIlRvbm55IEtvaGFyIgotICAgICAgICByb2xlcyB7Ci0gICAgICAgICAgcm9sZSAiQ29tbXVuaXR5IFRlYW0iCi0gICAgICAgIH0KLSAgICAgICAgZW1haWwgInRvbm55LmtvaGFyQGdtYWlsLmNvbSIKLSAgICAgICAgdGltZXpvbmUgIlVUQys3IgotICAgICAgfQotICAgIH0KLSAgfQorICB9ICAKIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL1JFQURNRS50eHQgYi9zYW1wbGVzL2RjaS1jYXJnby9SRUFETUUudHh0CmluZGV4IDI0ZjEyZmMuLmI1ODgxNTYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL1JFQURNRS50eHQKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vUkVBRE1FLnR4dApAQCAtMSw3ICsxLDcgQEAKIERDSSBTYW1wbGUKID09PT09PT09PT0KIAotVGhpcyBpcyBhIHBvcnQgb2YgdGhlIERERCBTYW1wbGUgYXBwbGljYXRpb24gdG8gdGhlIERDSSBwYXJhZGlnbSB1c2luZyBKYXZhLCBRaTRqIGFuZCBXaWNrZXQuCitUaGlzIGlzIGEgcG9ydCBvZiB0aGUgREREIFNhbXBsZSBhcHBsaWNhdGlvbiB0byB0aGUgRENJIHBhcmFkaWdtIHVzaW5nIEphdmEsIFplc3TihKIgYW5kIFdpY2tldC4KIAogVGhlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCBhbmQgbGFzdGVzdCByZXZpc2lvbnMgYXJlCiBhdmFpbGFibGUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZGNpLgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2EvYnVpbGQuZ3JhZGxlIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2EvYnVpbGQuZ3JhZGxlCmluZGV4IDI2YzFiOWMuLjYzOTI3YjQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL2J1aWxkLmdyYWRsZQorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9idWlsZC5ncmFkbGUKQEAgLTEsMjcgKzEsNDYgQEAKLWRlc2NyaXB0aW9uID0gIlNhbXBsZSBvZiBob3cgRENJIChEYXRhLCBDb250ZXh0ICYgSW50ZXJhY3Rpb24pIHBhdHRlcm4gaXMgaW1wbGVtZW50ZWQgd2l0aCBRaTRqLCBmb3IgRXJpYyBFdmFucyBEREQgc2FtcGxlLiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIFNhbXBsZSBEQ0kgQ2FyZ28gLSBTYW1wbGUgQSIgfX0KK2Rlc2NyaXB0aW9uID0gIlNhbXBsZSBvZiBob3cgRENJIChEYXRhLCBDb250ZXh0ICYgSW50ZXJhY3Rpb24pIHBhdHRlcm4gaXMgaW1wbGVtZW50ZWQgd2l0aCBBcGFjaGUgWmVzdOKEoiwgZm9yIEVyaWMgRXZhbnMgREREIHNhbXBsZS4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBTYW1wbGUgRENJIENhcmdvIC0gU2FtcGxlIEEiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50cyIpKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5jb252ZXJzaW9uIikpCi0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LnJkZiIpKQorICBjb21waWxlIHByb2plY3QoICc6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCcgKQorICBjb21waWxlIHByb2plY3QoICc6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMnICkKKyAgY29tcGlsZSBwcm9qZWN0KCAnOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LmNvbnZlcnNpb24nICkKICAgY29tcGlsZSBwcm9qZWN0KCAnOm9yZy5xaTRqLmV4dGVuc2lvbnM6b3JnLnFpNGouZXh0ZW5zaW9uLnZhbHVlc2VyaWFsaXphdGlvbi1vcmdqc29uJyApCi0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmV4dGVuc2lvbnM6b3JnLnFpNGouZXh0ZW5zaW9uLmluZGV4aW5nLXJkZiIpKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai50b29sczpvcmcucWk0ai50b29sLmVudmlzYWdlIikpCi0gIGNvbXBpbGUobGlicmFyaWVzLmpldHR5X3dlYmFwcCkKLSAgY29tcGlsZShsaWJyYXJpZXMud2lja2V0KQotICBjb21waWxlKGxpYnJhcmllcy53aWNrZXRfZGV2dXRpbHMpCi0gIGNvbXBpbGUobGlicmFyaWVzLndpY2tldF9zdGF0ZWxlc3MpCisgIGNvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi5pbmRleGluZy1yZGYnICkKKyAgY29tcGlsZSBwcm9qZWN0KCAnOm9yZy5xaTRqLnRvb2xzOm9yZy5xaTRqLnRvb2wuZW52aXNhZ2UnICkKKyAgY29tcGlsZSBsaWJyYXJpZXMuamV0dHlfd2ViYXBwCisgIGNvbXBpbGUgbGlicmFyaWVzLndpY2tldAorICBjb21waWxlIGxpYnJhcmllcy53aWNrZXRfZGV2dXRpbHMKKyAgY29tcGlsZSBsaWJyYXJpZXMud2lja2V0X3N0YXRlbGVzcworICBjb21waWxlIGxpYnJhcmllcy5zbGY0al9hcGkKIAotICBydW50aW1lKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpKQorICBydW50aW1lIHByb2plY3QoICc6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUnICkKIAotICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikpCi0gIHRlc3RDb21waWxlKGxpYnJhcmllcy5lYXN5bW9jaykKKyAgdGVzdENvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQnICkKKyAgdGVzdENvbXBpbGUgbGlicmFyaWVzLmVhc3ltb2NrCiAKLSAgdGVzdFJ1bnRpbWUobGlicmFyaWVzLmxvZ2JhY2spCisgIHRlc3RSdW50aW1lIGxpYnJhcmllcy5sb2diYWNrCiAKIH0KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9hL2FwaS9wYWNrYWdlLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2EvYXBpL3BhY2thZ2UuaHRtbAppbmRleCAzMjFmOGU1Li4wMTkyMWU1IDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2EvYXBpL3BhY2thZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2EvYXBpL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogPGJvZHk+CiA8cD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYS9pbnRlcm5hbC9wYWNrYWdlLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2EvaW50ZXJuYWwvcGFja2FnZS5odG1sCmluZGV4IDI1ZDE2NWEuLjNjNGYwNDkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYS9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9hL2ludGVybmFsL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogPGJvZHk+CiA8cD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYS9wYWNrYWdlLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2EvcGFja2FnZS5odG1sCmluZGV4IDY2ZDYzMDQuLmFmMWIxNDQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYS9wYWNrYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9hL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogPGJvZHk+CiA8cD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2Jvb3RzdHJhcC9EQ0lTYW1wbGVBcHBsaWNhdGlvbl9hLmphdmEgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9ib290c3RyYXAvRENJU2FtcGxlQXBwbGljYXRpb25fYS5qYXZhCmluZGV4IDY5MDI2MWQuLjI5MjY4NGEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2Jvb3RzdHJhcC9EQ0lTYW1wbGVBcHBsaWNhdGlvbl9hLmphdmEKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvYm9vdHN0cmFwL0RDSVNhbXBsZUFwcGxpY2F0aW9uX2EuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogLyoqCiAgKiBEQ0kgU2FtcGxlIGFwcGxpY2F0aW9uIGluc3RhbmNlCiAgKgotICogQSBXaWNrZXQgYXBwbGljYXRpb24gYmFja2VkIGJ5IFFpNGouCisgKiBBIFdpY2tldCBhcHBsaWNhdGlvbiBiYWNrZWQgYnkgWmVzdC4KICAqLwogcHVibGljIGNsYXNzIERDSVNhbXBsZUFwcGxpY2F0aW9uX2EKICAgICBleHRlbmRzIFdpY2tldFFpNGpBcHBsaWNhdGlvbgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvYm9vdHN0cmFwL2Fzc2VtYmx5L0Fzc2VtYmxlci5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvYm9vdHN0cmFwL2Fzc2VtYmx5L0Fzc2VtYmxlci5qYXZhCmluZGV4IGQ0ZGNhMTUuLjYxOTEzNzcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2Jvb3RzdHJhcC9hc3NlbWJseS9Bc3NlbWJsZXIuamF2YQorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9ib290c3RyYXAvYXNzZW1ibHkvQXNzZW1ibGVyLmphdmEKQEAgLTcwLDEzICs3MCwxMyBAQAogaW1wb3J0IHN0YXRpYyBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkFwcGxpY2F0aW9uLk1vZGUuZGV2ZWxvcG1lbnQ7CiAKIC8qKgotICogUWk0aiBhc3NlbWJseSBvZiB0aGUgRENJIFNhbXBsZSBhcHBsaWNhdGlvbiAodmVyc2lvbiBBKQorICogWmVzdCBhc3NlbWJseSBvZiB0aGUgRENJIFNhbXBsZSBhcHBsaWNhdGlvbiAodmVyc2lvbiBBKQogICoKLSAqIEEgUWk0aiBhcHBsaWNhdGlvbiBzdHJ1Y3R1cmUgaXMgZGVjbGFyZWQgYnkgYW4gYXNzZW1ibHkgdGhhdCBkZWZpbmVzIHdoaWNoIGxheWVycyBhbmQgbW9kdWxlcworICogQSBaZXN0IGFwcGxpY2F0aW9uIHN0cnVjdHVyZSBpcyBkZWNsYXJlZCBieSBhbiBhc3NlbWJseSB0aGF0IGRlZmluZXMgd2hpY2ggbGF5ZXJzIGFuZCBtb2R1bGVzCiAgKiB0aGUgYXBwbGljYXRpb24gaGFzIGFuZCBob3cgdGhleSBhcmUgYWxsb3dlZCB0byBkZXBlbmQgb24gZWFjaCBvdGhlci4gRWFjaCBsYXllciBjb3VsZCBoYXZlIGl0J3MKICAqIG93biBhc3NlbWJseSBmaWxlIGluIGxhcmdlciBhcHBsaWNhdGlvbnMgKHJlYWQgbW9yZSBhdCBodHRwOi8vcWk0ai5vcmcvbGF0ZXN0L2NvcmUtYm9vdHN0cmFwLWFzc2VtYmx5Lmh0bWwpLgogICoKLSAqIFRoZSBRaTRqIGFzc2VtYmx5IGRvZXNuJ3QgZm9sbG93IGEgc3RyaWN0IDEtMSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5IGFuZAorICogVGhlIFplc3QgYXNzZW1ibHkgZG9lc24ndCBmb2xsb3cgYSBzdHJpY3QgMS0xIGNvcnJlbGF0aW9uIGJldHdlZW4gdGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkgYW5kCiAgKiB0aGUgYXNzZW1ibHkgc3RydWN0dXJlcy4gQW4gZXhhbXBsZSBpcyB0aGUgRW50aXRpZXM6CiAgKgogICogRW50aXRpZXMgY2FuIGJlIHByb21vdGVkIHRvIFJvbGUgUGxheWVycyB3aGVuIHRoZXkgYXJlIG5lZWRlZCB0byBwbGF5IGEgUm9sZSBpbiBhIENvbnRleHQuCkBAIC04OCw3ICs4OCw3IEBACiAgKiBDb250ZXh0IGxheWVyLiBOb3RlIHRoYXQgdGhlcmUgYXJlIHN0aWxsIG5vICJwaHlzaWNhbCIgdXB3YXJkIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBFbnRpdGllcyB0bwogICogbGF5ZXJzIGFib3ZlLgogICoKLSAqIFNvIGRlcGVuZGVuY3kgc3RydWN0dXJlIGxheWVycyAoaWUuIGFzIHNob3duIGJ5IFN0cnVjdHVyZTEwMSkgYXJlIG5vdCB0aGUgc2FtZSBhcyBRaTRqIGxheWVycy4KKyAqIFNvIGRlcGVuZGVuY3kgc3RydWN0dXJlIGxheWVycyAoaWUuIGFzIHNob3duIGJ5IFN0cnVjdHVyZTEwMSkgYXJlIG5vdCB0aGUgc2FtZSBhcyBaZXN0IGxheWVycy4KICAqIFNlZSBtb3JlIGF0IGh0dHA6Ly9xaTRqLm9yZy9sYXRlc3QvY29yZS1ib290c3RyYXAtYXNzZW1ibHkuaHRtbAogICoKICAqIFRSWSBUSElTOiBSdW4gVmlzdWFsaXplQXBwbGljYXRpb25TdHJ1Y3R1cmUgdG8gc2VlIGEgY29vbCB2aXN1YWxpemF0aW9uIG9mIHRoZSBhc3NlbWJseSBiZWxvdyEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vcXVlcnkvQm9va2luZ1F1ZXJpZXMuamF2YSBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vcXVlcnkvQm9va2luZ1F1ZXJpZXMuamF2YQppbmRleCBkNGU1YjMzLi42YTA0N2YzIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3F1ZXJ5L0Jvb2tpbmdRdWVyaWVzLmphdmEKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi9xdWVyeS9Cb29raW5nUXVlcmllcy5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAvKioKICAqIEJvb2tpbmcgcXVlcmllcwogICoKLSAqIFRoaXMgaXMgaW4gYSBRaTRqIGNvbXBvc2l0ZSBzaW5jZSB3ZSBjYW4gdGhlbiBjb252ZW5pZW50bHkgZ2V0IHRoZSByb3V0aW5nIHNlcnZpY2UgaW5qZWN0ZWQuCisgKiBUaGlzIGlzIGluIGEgWmVzdCBjb21wb3NpdGUgc2luY2Ugd2UgY2FuIHRoZW4gY29udmVuaWVudGx5IGdldCB0aGUgcm91dGluZyBzZXJ2aWNlIGluamVjdGVkLgogICogV2UgY291bGQgY2hvb3NlIHRvIGltcGxlbWVudCBhbGwgcXVlcnkgY2xhc3NlcyBsaWtlIHRoaXMgdG9vLgogICoKICAqIFVzZWQgYnkgdGhlIGNvbW11bmljYXRpb24gbGF5ZXIgb25seS4gQ2FuIGNoYW5nZSBhY2NvcmRpbmcgdG8gdWkgbmVlZHMuCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb250ZXh0L3NoaXBwaW5nL2Jvb2tpbmcvUm91dGVFeGNlcHRpb24uamF2YSBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbnRleHQvc2hpcHBpbmcvYm9va2luZy9Sb3V0ZUV4Y2VwdGlvbi5qYXZhCmluZGV4IDNhOGRiYTIuLjM5NTU3OTQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbnRleHQvc2hpcHBpbmcvYm9va2luZy9Sb3V0ZUV4Y2VwdGlvbi5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbnRleHQvc2hpcHBpbmcvYm9va2luZy9Sb3V0ZUV4Y2VwdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZS5kY2ljYXJnby5zYW1wbGVfYS5jb250ZXh0LnNoaXBwaW5nLmJvb2tpbmc7CiAKIHB1YmxpYyBjbGFzcyBSb3V0ZUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2luZnJhc3RydWN0dXJlL1dpY2tldFFpNGpBcHBsaWNhdGlvbi5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvV2lja2V0UWk0akFwcGxpY2F0aW9uLmphdmEKaW5kZXggMDhkYmE0MS4uMjBlMzcwMCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvV2lja2V0UWk0akFwcGxpY2F0aW9uLmphdmEKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvV2lja2V0UWk0akFwcGxpY2F0aW9uLmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKIAogLyoqCi0gKiBCYXNlIFdpY2tldCBXZWIgQXBwbGljYXRpb24gY29udGFpbmluZyB0aGUgUWk0aiBhcHBsaWNhdGlvbi4KKyAqIEJhc2UgV2lja2V0IFdlYiBBcHBsaWNhdGlvbiBjb250YWluaW5nIHRoZSBaZXN0IGFwcGxpY2F0aW9uLgogICovCiBwdWJsaWMgY2xhc3MgV2lja2V0UWk0akFwcGxpY2F0aW9uCiAgICAgZXh0ZW5kcyBXZWJBcHBsaWNhdGlvbgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgcHJvdGVjdGVkIEVudGl0eVRvRFRPU2VydmljZSB2YWx1ZUNvbnZlcnRlcjsKIAogICAgIC8qKgotICAgICAqIFFpNGogQXNzZW1ibGVyCisgICAgICogWmVzdCBBc3NlbWJsZXIKICAgICAgKgogICAgICAqIFRvIGxldCB0aGUgY3VzdG9tIGFwcGxpY2F0aW9uIGNsYXNzIChEQ0lTYW1wbGVBcHBsaWNhdGlvbl94KSBmb2N1cyBvbiBzdGFydGluZyB1cCB0aGUKLSAgICAgKiBXaWNrZXQgZW52aXJvbm1lbnQsIEkgbWFkZSBhIGNvbnZlbnRpb24gb2YgaGF2aW5nIFFpNGogQXNzZW1ibGVyIGZpbGVzIGluIGFuICdhc3NlbWJseScKKyAgICAgKiBXaWNrZXQgZW52aXJvbm1lbnQsIEkgbWFkZSBhIGNvbnZlbnRpb24gb2YgaGF2aW5nIFplc3QgQXNzZW1ibGVyIGZpbGVzIGluIGFuICdhc3NlbWJseScKICAgICAgKiBmb2xkZXIgYmVzaWRlIHRoZSBjdXN0b20gYXBwbGljYXRpb24gY2xhc3MuCiAgICAgICoKICAgICAgKiBUaGVyZSdzIGFsd2F5cyBvbmx5IG9uZSBhcHBsaWNhdGlvbiBmaWxlLCBidXQgd2UgY291bGQgc3BsaXQgdGhlIGFzc2VtYmxhZ2UgaW50byBzZXZlcmFsCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXRjaCggQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlICkKICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbiggIkNvdWxkbid0IGZpbmQgUWk0aiBhc3NlbWJsZXIgaW4gcGF0aCAnIiArIGFzc2VtYmxlclBhdGggKyAiJyIgKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oICJDb3VsZG4ndCBmaW5kIFplc3QgYXNzZW1ibGVyIGluIHBhdGggJyIgKyBhc3NlbWJsZXJQYXRoICsgIiciICk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0MSwyMSArMTQxLDIxIEBACiAgICAgewogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgbG9nZ2VyLmluZm8oICJTdGFydGluZyBRaTRqIGFwcGxpY2F0aW9uIiApOworICAgICAgICAgICAgbG9nZ2VyLmluZm8oICJTdGFydGluZyBaZXN0IGFwcGxpY2F0aW9uIiApOwogICAgICAgICAgICAgRW5lcmd5NEphdmEgcWk0aiA9IG5ldyBFbmVyZ3k0SmF2YSgpOwogICAgICAgICAgICAgcWk0akFwcCA9IHFpNGoubmV3QXBwbGljYXRpb24oIGdldEFzc2VtYmxlcigpICk7CiAgICAgICAgICAgICBxaTRqQXBwLmFjdGl2YXRlKCk7CiAgICAgICAgICAgICBxaTRqTW9kdWxlID0gcWk0akFwcC5maW5kTW9kdWxlKCBkZWZhdWx0TGF5ZXJOYW1lKCksIGRlZmF1bHRNb2R1bGVOYW1lKCkgKTsKIAotICAgICAgICAgICAgLy8gUWk0aiBpbmplY3RzIEBTdHJ1Y3R1cmUgYW5kIEBTZXJ2aWNlIGVsZW1lbnRzIGludG8gdGhpcyBhcHBsaWNhdGlvbiBpbnN0YW5jZQorICAgICAgICAgICAgLy8gWmVzdCBpbmplY3RzIEBTdHJ1Y3R1cmUgYW5kIEBTZXJ2aWNlIGVsZW1lbnRzIGludG8gdGhpcyBhcHBsaWNhdGlvbiBpbnN0YW5jZQogICAgICAgICAgICAgLy9xaTRqTW9kdWxlLm5ld09iamVjdCggV2lja2V0UWk0akFwcGxpY2F0aW9uLmNsYXNzICk7CiAgICAgICAgICAgICBxaTRqTW9kdWxlLmluamVjdFRvKCB0aGlzICk7CiAKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCAiU3RhcnRlZCBRaTRqIGFwcGxpY2F0aW9uIiApOworICAgICAgICAgICAgbG9nZ2VyLmluZm8oICJTdGFydGVkIFplc3QgYXBwbGljYXRpb24iICk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKICAgICAgICAgewotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCAiQ291bGQgbm90IHN0YXJ0IFFpNGogYXBwbGljYXRpb24uIiApOworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCAiQ291bGQgbm90IHN0YXJ0IFplc3QgYXBwbGljYXRpb24uIiApOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KCAxMDAgKTsKICAgICAgICAgfQpAQCAtMjIwLDcgKzIyMCw3IEBACiAgICAgICAgIH0gKTsKICAgICB9CiAKLSAgICAvLyBTaW5jZSBRaTRqIGNhbiBvbmx5IGFkZCBjb25jcmV0ZSBjbGFzc2VzIGluIHRoZSBhc3NlbWJseSwgd2UgbmVlZCB0byBpbXBsZW1lbnQgYSAoZHVtbXkpIGdldEhvbWVQYWdlKCkKKyAgICAvLyBTaW5jZSBaZXN0IGNhbiBvbmx5IGFkZCBjb25jcmV0ZSBjbGFzc2VzIGluIHRoZSBhc3NlbWJseSwgd2UgbmVlZCB0byBpbXBsZW1lbnQgYSAoZHVtbXkpIGdldEhvbWVQYWdlKCkKICAgICAvLyBtZXRob2QgaGVyZS4gT3ZlcnJpZGUgaW4gd2lja2V0IGFwcGxpY2F0aW9uIGNsYXNzIHdpdGggYSByZWFsIHJldHVybmVkIHBhZ2UgY2xhc3MuCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBQYWdlPiBnZXRIb21lUGFnZSgpCkBAIC0yMzgsNyArMjM4LDcgQEAKIAogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgbG9nZ2VyLmluZm8oICJQYXNzaXZhdGluZyBRaTRqIGFwcGxpY2F0aW9uIiApOworICAgICAgICAgICAgbG9nZ2VyLmluZm8oICJQYXNzaXZhdGluZyBaZXN0IGFwcGxpY2F0aW9uIiApOwogICAgICAgICAgICAgcWk0akFwcC5wYXNzaXZhdGUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUgKQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvbW9kZWwvRW50aXR5TW9kZWwuamF2YSBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2luZnJhc3RydWN0dXJlL21vZGVsL0VudGl0eU1vZGVsLmphdmEKaW5kZXggMGI4NDQyOC4uMGE5ZjEzOCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvbW9kZWwvRW50aXR5TW9kZWwuamF2YQorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS9tb2RlbC9FbnRpdHlNb2RlbC5qYXZhCkBAIC0yMiw2ICsyMiw3IEBACiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlDb21wb3NpdGU7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CiBpbXBvcnQgb3JnLnFpNGouYXBpLnVuaXRvZndvcmsuTm9TdWNoRW50aXR5RXhjZXB0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS51c2VjYXNlLlVzZWNhc2U7CiBpbXBvcnQgb3JnLnFpNGouc2FtcGxlLmRjaWNhcmdvLnNhbXBsZV9hLmluZnJhc3RydWN0dXJlLmNvbnZlcnNpb24uRFRPOwogCiAvKioKQEAgLTY5LDcgKzcwLDggQEAKICAgICAgICAgVSBlbnRpdHkgPSBtb2R1bGUuY3VycmVudFVuaXRPZldvcmsoKS5nZXQoIGVudGl0eUNsYXNzLCBpZGVudGl0eSApOwogICAgICAgICBpZiggZW50aXR5ID09IG51bGwgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICksIGVudGl0eUNsYXNzICk7CisgICAgICAgICAgICBVc2VjYXNlIHVzZWNhc2UgPSBtb2R1bGUuY3VycmVudFVuaXRPZldvcmsoKS51c2VjYXNlKCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCBFbnRpdHlSZWZlcmVuY2UucGFyc2VFbnRpdHlSZWZlcmVuY2UoIGlkZW50aXR5ICksIGVudGl0eUNsYXNzLCB1c2VjYXNlICk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGVudGl0eTsKICAgICB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS9tb2RlbC9RdWVyeU1vZGVsLmphdmEgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS9tb2RlbC9RdWVyeU1vZGVsLmphdmEKaW5kZXggY2IwNjM5ZC4uOWYzNzRhYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvbW9kZWwvUXVlcnlNb2RlbC5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2luZnJhc3RydWN0dXJlL21vZGVsL1F1ZXJ5TW9kZWwuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5xdWVyeS5RdWVyeTsKIAogLyoqCi0gKiBDYWxsYmFjayBXaWNrZXQgbW9kZWwgdGhhdCBob2xkcyBhIFFpNGogUXVlcnkgb2JqZWN0IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIG5lZWRlZCB0bworICogQ2FsbGJhY2sgV2lja2V0IG1vZGVsIHRoYXQgaG9sZHMgYSBaZXN0IFF1ZXJ5IG9iamVjdCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiBuZWVkZWQgdG8KICAqIHJldHJpZXZlIGZyZXNoIGRhdGEuCiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBRdWVyeU1vZGVsPFQsIFUgZXh0ZW5kcyBFbnRpdHlDb21wb3NpdGU+CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHJldHVybiBkdG9MaXN0OwogICAgIH0KIAotICAgIC8vIENhbGxiYWNrIHRvIHJldHJpZXZlIHRoZSAodW5zZXJpYWxpemFibGUpIFFpNGogUXVlcnkgb2JqZWN0CisgICAgLy8gQ2FsbGJhY2sgdG8gcmV0cmlldmUgdGhlICh1bnNlcmlhbGl6YWJsZSkgWmVzdCBRdWVyeSBvYmplY3QKICAgICBwdWJsaWMgYWJzdHJhY3QgUXVlcnk8VT4gZ2V0UXVlcnkoKTsKIAogICAgIHB1YmxpYyBUIGdldFZhbHVlKCBVIGVudGl0eSApCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS9tb2RlbC9SZWFkT25seU1vZGVsLmphdmEgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS9tb2RlbC9SZWFkT25seU1vZGVsLmphdmEKaW5kZXggN2U3NmYwYy4uZjM1NzM1NiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvbW9kZWwvUmVhZE9ubHlNb2RlbC5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2luZnJhc3RydWN0dXJlL21vZGVsL1JlYWRPbmx5TW9kZWwuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IG9yZy5xaTRqLnNhbXBsZS5kY2ljYXJnby5zYW1wbGVfYS5pbmZyYXN0cnVjdHVyZS5jb252ZXJzaW9uLkVudGl0eVRvRFRPU2VydmljZTsKIAogLyoqCi0gKiBBYnN0cmFjdCBiYXNlIG1vZGVsIGZvciBXaWNrZXQgbW9kZWwgb2JqZWN0cyB0YWtpbmcgUWk0aiBvYmplY3RzLgorICogQWJzdHJhY3QgYmFzZSBtb2RlbCBmb3IgV2lja2V0IG1vZGVsIG9iamVjdHMgdGFraW5nIFplc3Qgb2JqZWN0cy4KICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIFJlYWRPbmx5TW9kZWw8VD4KICAgICBpbXBsZW1lbnRzIElNb2RlbDxUPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwppbmRleCAwNGRjYTUzLi4wMmM1NzU5IDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcworKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBsb2c0ai5hcHBlbmRlci5TdGRvdXQ9b3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXIKIGxvZzRqLmFwcGVuZGVyLlN0ZG91dC5sYXlvdXQ9b3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0CiBsb2c0ai5hcHBlbmRlci5TdGRvdXQubGF5b3V0LmNvbnZlcnNpb25QYXR0ZXJuPSUtNXAgLSAlLTI2LjI2Y3sxfSAtICVtXG4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvQmFzZVBhZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvQmFzZVBhZ2UuaHRtbAppbmRleCAzNWJhZDlmLi44N2VjNGY2IDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL0Jhc2VQYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9CYXNlUGFnZS5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxoZWFkPgogICAgIDx0aXRsZT5EQ0kgc2FtcGxlICh2ZXJzaW9uIEEpPC90aXRsZT4KICAgICA8bGluayBocmVmPSJjc3Mvc3R5bGUuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CkBAIC0zOSwxMSArNTUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3RlY2guZ3JvdXBzLnlhaG9vLmNvbS9ncm91cC9kb21haW5kcml2ZW5kZXNpZ24vIiB0YXJnZXQ9Il9ibGFuayI+Rm9ydW08L2E+CiAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnFpNGoub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPldlYnNpdGU8L2E+PGJyPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vb2xkLm5hYmJsZS5jb20vUWk0ai1kZXYtZjMzMTM3Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5Gb3J1bTwvYT48YnI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cucWk0ai5vcmcvcWk0ai9kb3dubG9hZHMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPkRvd25sb2FkPC9hPjxicj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3JlcG9zaXRvcnkub3BzNGoub3JnL21hdmVuMi9vcmcvcWk0ai8iIHRhcmdldD0iX2JsYW5rIj5NYXZlbjwvYT48YnI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9xaTRqIiB0YXJnZXQ9Il9ibGFuayI+R2l0aHViPC9hPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3plc3QuYXBhY2hlLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5XZWJzaXRlPC9hPjxicj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvY29tbXVuaXR5L2dldF9oZWxwLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5Gb3J1bTwvYT48YnI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vemVzdC5hcGFjaGUub3JnL2Rvd25sb2FkLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5Eb3dubG9hZDwvYT48YnI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vemVzdC5hcGFjaGUub3JnL2phdmEvbGF0ZXN0L2hvd3RvLWRlcGVuZC1vbi16ZXN0Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5NYXZlbjwvYT48YnI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvemVzdC1qYXZhIiB0YXJnZXQ9Il9ibGFuayI+R2l0aHViPC9hPgogICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4KICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3dpY2tldC5hcGFjaGUub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPldlYnNpdGU8L2E+PGJyPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0Jvb2tOZXdDYXJnb1BhZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Cb29rTmV3Q2FyZ29QYWdlLmh0bWwKaW5kZXggM2E5YTYwMS4uODBmOWRjMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0Jvb2tOZXdDYXJnb1BhZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQm9va05ld0NhcmdvUGFnZS5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6ZXh0ZW5kPgogICAgIDxkaXYgY2xhc3M9ImhlYWRlck1lbnUiPgogICAgICAgICBCb29rIG5ldyBjYXJnbwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0Jvb2tpbmdCYXNlUGFnZS5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0Jvb2tpbmdCYXNlUGFnZS5odG1sCmluZGV4IDhlZWU3NjAuLjBhZjk4NjAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Cb29raW5nQmFzZVBhZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQm9va2luZ0Jhc2VQYWdlLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpleHRlbmQ+CiAgICAgPGRpdiBpZD0iYm94Ij4KICAgICAgICAgPHdpY2tldDpjaGlsZC8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQ2FyZ29EZXRhaWxzUGFnZS5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0NhcmdvRGV0YWlsc1BhZ2UuaHRtbAppbmRleCBjNmUzZmZhLi44YjNiMWIyIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQ2FyZ29EZXRhaWxzUGFnZS5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9DYXJnb0RldGFpbHNQYWdlLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpleHRlbmQ+CiAKICAgICA8ZGl2IHdpY2tldDppZD0icHJldk5leHQiPjwvZGl2PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0NhcmdvTGlzdFBhZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9DYXJnb0xpc3RQYWdlLmh0bWwKaW5kZXggNDNhZDJkNi4uODUwNzczYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0NhcmdvTGlzdFBhZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQ2FyZ29MaXN0UGFnZS5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6ZXh0ZW5kPgogICAgIDxkaXYgY2xhc3M9ImhlYWRlck1lbnUiPgogICAgICAgICBMaXN0IG9mIENhcmdvcwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0NoYW5nZURlc3RpbmF0aW9uUGFnZS5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0NoYW5nZURlc3RpbmF0aW9uUGFnZS5odG1sCmluZGV4IGJhZmE5YjUuLjg5MjcyMmEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9DaGFuZ2VEZXN0aW5hdGlvblBhZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQ2hhbmdlRGVzdGluYXRpb25QYWdlLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpleHRlbmQ+CiAKICAgICA8ZGl2IGNsYXNzPSJoZWFkZXJNZW51Ij4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Sb3V0ZUNhcmdvUGFnZS5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL1JvdXRlQ2FyZ29QYWdlLmh0bWwKaW5kZXggNTMyYTc1Ni4uNzU2MWYxZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL1JvdXRlQ2FyZ29QYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL1JvdXRlQ2FyZ29QYWdlLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpleHRlbmQ+CiAKICAgICA8ZGl2IGNsYXNzPSJoZWFkZXJNZW51Ij4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Sb3V0ZVBhbmVsLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvUm91dGVQYW5lbC5odG1sCmluZGV4IDhiNGYyMzcuLmY3YjhkODIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Sb3V0ZVBhbmVsLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL1JvdXRlUGFuZWwuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8aHRtbCB4bWxuczp3aWNrZXQ+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2lja2V0OnBhbmVsPgogICAgIDxoNCB3aWNrZXQ6aWQ9InJvdXRlSGVhZGVyIj48L2g0PgogICAgIDxzcGFuIHdpY2tldDppZD0icm91dGVGZWVkYmFjayI+PC9zcGFuPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi9oYW5kbGluZy9SZWdpc3RlckhhbmRsaW5nRXZlbnRQYWdlLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2hhbmRsaW5nL1JlZ2lzdGVySGFuZGxpbmdFdmVudFBhZ2UuaHRtbAppbmRleCBhMmFjNDE3Li41MzdiM2IwIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2hhbmRsaW5nL1JlZ2lzdGVySGFuZGxpbmdFdmVudFBhZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2hhbmRsaW5nL1JlZ2lzdGVySGFuZGxpbmdFdmVudFBhZ2UuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8aHRtbCB4bWxuczp3aWNrZXQ+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2lja2V0OmV4dGVuZD4KICAgICA8ZGl2IGlkPSJib3giPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL2hhbmRsaW5nL1JlZ2lzdGVySGFuZGxpbmdFdmVudFBhZ2UucHJvcGVydGllcyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvaGFuZGxpbmcvUmVnaXN0ZXJIYW5kbGluZ0V2ZW50UGFnZS5wcm9wZXJ0aWVzCmluZGV4IGYxY2ZlZjAuLmQ4YTc1NTIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvaGFuZGxpbmcvUmVnaXN0ZXJIYW5kbGluZ0V2ZW50UGFnZS5wcm9wZXJ0aWVzCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvaGFuZGxpbmcvUmVnaXN0ZXJIYW5kbGluZ0V2ZW50UGFnZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGhhbmRsaW5nRXZlbnQuVU5LTk9XTj1FUlJPUjogKioqIFVOS05PV04gRVZFTlQgVFlQRSAqKioKIGhhbmRsaW5nRXZlbnQuUkVDRUlWRT1SZWNlaXZlZCBpbiAke2xvY2F0aW9ufS4KIGhhbmRsaW5nRXZlbnQuTE9BRD1Mb2FkZWQgb250byB2b3lhZ2UgJHt2b3lhZ2V9IGluIHBvcnQgJHtsb2NhdGlvbn0uCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL0hhbmRsaW5nSGlzdG9yeVBhbmVsLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL0hhbmRsaW5nSGlzdG9yeVBhbmVsLmh0bWwKaW5kZXggMWJlODQ5MC4uZjg5ZTNhZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9IYW5kbGluZ0hpc3RvcnlQYW5lbC5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvSGFuZGxpbmdIaXN0b3J5UGFuZWwuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8aHRtbCB4bWxuczp3aWNrZXQ+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2lja2V0OnBhbmVsPgogICAgIDxoND5IYW5kbGluZyBoaXN0b3J5PC9oND4KICAgICA8dGFibGU+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL0hhbmRsaW5nSGlzdG9yeVBhbmVsLnByb3BlcnRpZXMgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL0hhbmRsaW5nSGlzdG9yeVBhbmVsLnByb3BlcnRpZXMKaW5kZXggNTNjY2FiMS4uYTkyYzdjZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9IYW5kbGluZ0hpc3RvcnlQYW5lbC5wcm9wZXJ0aWVzCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvSGFuZGxpbmdIaXN0b3J5UGFuZWwucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBoYW5kbGluZ0V2ZW50LlVOS05PV049RVJST1I6ICoqKiBVTktOT1dOIEVWRU5UIFRZUEUgKioqCiBoYW5kbGluZ0V2ZW50LlJFQ0VJVkU9UmVjZWl2ZWQgaW4gJHtsb2NhdGlvbn0KIGhhbmRsaW5nRXZlbnQuTE9BRD1Mb2FkZWQgb250byB2b3lhZ2UgJHt2b3lhZ2V9IGluICR7bG9jYXRpb259CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL05leHRIYW5kbGluZ0V2ZW50UGFuZWwuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvTmV4dEhhbmRsaW5nRXZlbnRQYW5lbC5odG1sCmluZGV4IDczNWU4NzguLmUzN2I4Y2UgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvTmV4dEhhbmRsaW5nRXZlbnRQYW5lbC5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvTmV4dEhhbmRsaW5nRXZlbnRQYW5lbC5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6cGFuZWw+CiAgICAgPHAgd2lja2V0OmlkPSJ0ZXh0IiBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6IGJvbGQ7Ij48L3A+CiA8L3dpY2tldDpwYW5lbD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvTmV4dEhhbmRsaW5nRXZlbnRQYW5lbC5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9OZXh0SGFuZGxpbmdFdmVudFBhbmVsLnByb3BlcnRpZXMKaW5kZXggMDhiMGEzNi4uZWVmYTM5NiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9OZXh0SGFuZGxpbmdFdmVudFBhbmVsLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9OZXh0SGFuZGxpbmdFdmVudFBhbmVsLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogZXhwZWN0ZWRFdmVudC5VTktOT1dOPU5leHQgZXhwZWN0ZWQgYWN0aXZpdHk6IFVua25vd24uLi4KIGV4cGVjdGVkRXZlbnQuUk9VVEU9TmV4dCBleHBlY3RlZCBhY3Rpdml0eTogUm91dGluZyBvZiBjYXJnbwogZXhwZWN0ZWRFdmVudC5SRUNFSVZFPU5leHQgZXhwZWN0ZWQgYWN0aXZpdHk6IFJlY2VpcHQgb2YgY2FyZ28gaW4gJHtsb2NhdGlvbn0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvVHJhY2tDYXJnb1BhZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvVHJhY2tDYXJnb1BhZ2UuaHRtbAppbmRleCA0ZGI3NjdkLi4yNmRlNmI4IDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL1RyYWNrQ2FyZ29QYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9UcmFja0NhcmdvUGFnZS5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6ZXh0ZW5kPgogICAgIDxkaXYgaWQ9ImJveCI+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvVHJhY2tDYXJnb1BhZ2UucHJvcGVydGllcyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvVHJhY2tDYXJnb1BhZ2UucHJvcGVydGllcwppbmRleCA2ZTk5MTcxLi4xZjZhNTFmIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL1RyYWNrQ2FyZ29QYWdlLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9UcmFja0NhcmdvUGFnZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGNhcmdvRHJvcERvd24ubnVsbD1UcmFjayBrbm93biBjYXJnbwogCiBldGE9RXN0aW1hdGVkIHRpbWUgb2YgYXJyaXZhbCBpbiB7MH06IHsxfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS93aWNrZXQvbGluay9MaW5rUGFuZWwuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvd2lja2V0L2xpbmsvTGlua1BhbmVsLmh0bWwKaW5kZXggMjRjMWI1NS4uYTYyOGNmYiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS93aWNrZXQvbGluay9MaW5rUGFuZWwuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2luZnJhc3RydWN0dXJlL3dpY2tldC9saW5rL0xpbmtQYW5lbC5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6cGFuZWw+CiAJPGEgd2lja2V0OmlkPSJsaW5rIj48c3BhbiB3aWNrZXQ6aWQ9ImxhYmVsIj48L3NwYW4+PC9hPgogPC93aWNrZXQ6cGFuZWw+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2luZnJhc3RydWN0dXJlL3dpY2tldC9wcmV2bmV4dC9QcmV2TmV4dC5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS93aWNrZXQvcHJldm5leHQvUHJldk5leHQuaHRtbAppbmRleCA3NGUyOGY5Li5jYTQ2OTE1IDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2luZnJhc3RydWN0dXJlL3dpY2tldC9wcmV2bmV4dC9QcmV2TmV4dC5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvd2lja2V0L3ByZXZuZXh0L1ByZXZOZXh0Lmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpoZWFkPgogICAgIDxsaW5rIGhyZWY9ImNzcy9wcmV2LW5leHQuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CiA8L3dpY2tldDpoZWFkPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS93aWNrZXQvdGFicy9UYWJzUGFuZWwuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2EvaW5mcmFzdHJ1Y3R1cmUvd2lja2V0L3RhYnMvVGFic1BhbmVsLmh0bWwKaW5kZXggMzAwY2Y2Ni4uN2ZjMDM0YSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYS9pbmZyYXN0cnVjdHVyZS93aWNrZXQvdGFicy9UYWJzUGFuZWwuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9hL2luZnJhc3RydWN0dXJlL3dpY2tldC90YWJzL1RhYnNQYW5lbC5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6aGVhZD4KICAgICA8bGluayBocmVmPSJjc3MvdGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KIDwvd2lja2V0OmhlYWQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBjYTM0MTgzLi43MjBhOGJmIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTEsNSArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vd2ViYXBwL2Nzcy9wcmV2LW5leHQuY3NzIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vd2ViYXBwL2Nzcy9wcmV2LW5leHQuY3NzCmluZGV4IGEwNWU5ZTEuLmQ2ZTg1Y2UgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3dlYmFwcC9jc3MvcHJldi1uZXh0LmNzcworKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi93ZWJhcHAvY3NzL3ByZXYtbmV4dC5jc3MKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAogLnByZXZOZXh0SWNvbnMgewogICAvKiBNb2RpZnkgY3VzdG9tIHBvc2l0aW9uaW5nIGhlcmUgKi8KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3dlYmFwcC9jc3Mvc3R5bGUuY3NzIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vd2ViYXBwL2Nzcy9zdHlsZS5jc3MKaW5kZXggNTI3ODZjMS4uZWM5YTQ5ZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vd2ViYXBwL2Nzcy9zdHlsZS5jc3MKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vd2ViYXBwL2Nzcy9zdHlsZS5jc3MKQEAgLTEsMyArMSwyMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwogYm9keSB7CiAgICAgbWFyZ2luOiAyZW07CiAgICAgZm9udC1mYW1pbHk6ICdMdWNpZGEgU2FucycsICdIZWx2ZXRpY2EnLCAnU2Fucy1zZXJpZicsICdzYW5zJywgc2Fucy1zZXJpZjsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3dlYmFwcC9jc3MvdGFicy5jc3MgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYS9zcmMvbWFpbi93ZWJhcHAvY3NzL3RhYnMuY3NzCmluZGV4IDYxOWYxN2EuLjE4NGI5YzcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9hL3NyYy9tYWluL3dlYmFwcC9jc3MvdGFicy5jc3MKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Evc3JjL21haW4vd2ViYXBwL2Nzcy90YWJzLmNzcwpAQCAtMSwzICsxLDIyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCiAjdGFicyB7CiAgIG1hcmdpbi10b3A6MTJweDsKICAgZmxvYXQ6bGVmdDsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL2J1aWxkLmdyYWRsZSBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL2J1aWxkLmdyYWRsZQppbmRleCBlYmVhMWQyLi5jYTk5NjFhIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9idWlsZC5ncmFkbGUKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2IvYnVpbGQuZ3JhZGxlCkBAIC0xLDI3ICsxLDQ2IEBACi1kZXNjcmlwdGlvbiA9ICJTYW1wbGUgb2YgaG93IERDSSAoRGF0YSwgQ29udGV4dCAmIEludGVyYWN0aW9uKSBwYXR0ZXJuIGlzIGltcGxlbWVudGVkIHdpdGggUWk0aiwgZm9yIEVyaWMgRXZhbnMgREREIHNhbXBsZS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBTYW1wbGUgRENJIENhcmdvIC0gU2FtcGxlIEIiIH19CitkZXNjcmlwdGlvbiA9ICJTYW1wbGUgb2YgaG93IERDSSAoRGF0YSwgQ29udGV4dCAmIEludGVyYWN0aW9uKSBwYXR0ZXJuIGlzIGltcGxlbWVudGVkIHdpdGggQXBhY2hlIFplc3TihKIsIGZvciBFcmljIEV2YW5zIERERCBzYW1wbGUuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgU2FtcGxlIERDSSBDYXJnbyAtIFNhbXBsZSBCIiB9fQogCiBkZXBlbmRlbmNpZXMgewogCi0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMiKSkKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuY29udmVyc2lvbiIpKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5yZGYiKSkKKyAgY29tcGlsZSBwcm9qZWN0KCAnOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAnICkKKyAgY29tcGlsZSBwcm9qZWN0KCAnOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzJyApCisgIGNvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5jb252ZXJzaW9uJyApCiAgIGNvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi52YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbicgKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi5pbmRleGluZy1yZGYiKSkKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoudG9vbHM6b3JnLnFpNGoudG9vbC5lbnZpc2FnZSIpKQotICBjb21waWxlKGxpYnJhcmllcy5qZXR0eV93ZWJhcHApCi0gIGNvbXBpbGUobGlicmFyaWVzLndpY2tldCkKLSAgY29tcGlsZShsaWJyYXJpZXMud2lja2V0X2RldnV0aWxzKQotICBjb21waWxlKGxpYnJhcmllcy53aWNrZXRfc3RhdGVsZXNzKQorICBjb21waWxlIHByb2plY3QoICc6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24uaW5kZXhpbmctcmRmJyApCisgIGNvbXBpbGUgcHJvamVjdCggJzpvcmcucWk0ai50b29sczpvcmcucWk0ai50b29sLmVudmlzYWdlJyApCisgIGNvbXBpbGUgbGlicmFyaWVzLmpldHR5X3dlYmFwcAorICBjb21waWxlIGxpYnJhcmllcy53aWNrZXQKKyAgY29tcGlsZSBsaWJyYXJpZXMud2lja2V0X2RldnV0aWxzCisgIGNvbXBpbGUgbGlicmFyaWVzLndpY2tldF9zdGF0ZWxlc3MKKyAgY29tcGlsZSBsaWJyYXJpZXMuc2xmNGpfYXBpCiAKLSAgcnVudGltZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnJ1bnRpbWUiKSkKKyAgcnVudGltZSBwcm9qZWN0KCAnOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ydW50aW1lJyApCiAKLSAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQotICB0ZXN0Q29tcGlsZShsaWJyYXJpZXMuZWFzeW1vY2spCisgIHRlc3RDb21waWxlIHByb2plY3QoICc6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0JyApCisgIHRlc3RDb21waWxlIGxpYnJhcmllcy5lYXN5bW9jawogCi0gIHRlc3RSdW50aW1lKGxpYnJhcmllcy5sb2diYWNrKQorICB0ZXN0UnVudGltZSBsaWJyYXJpZXMubG9nYmFjawogCiB9CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYi9hcGkvcGFja2FnZS5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9iL2FwaS9wYWNrYWdlLmh0bWwKaW5kZXggMzIxZjhlNS4uMDE5MjFlNSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9iL2FwaS9wYWNrYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9iL2FwaS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KIDxib2R5PgogPHA+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2IvaW50ZXJuYWwvR3JhcGhEQU8uamF2YSBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYi9pbnRlcm5hbC9HcmFwaERBTy5qYXZhCmluZGV4IDE1ZTg2ZWEuLmYxOTI5ZDQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYi9pbnRlcm5hbC9HcmFwaERBTy5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYi9pbnRlcm5hbC9HcmFwaERBTy5qYXZhCkBAIC04NSwxMCArODUsNiBAQAogICAgICAgICAgICAgdm95YWdlcy5hZGQoIG5ldyBUcmFuc2l0UGF0aCggdHJhbnNpdEVkZ2VzICkgKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIE91dHB1dCBmb3IgdGVzdGluZy4uLgotLy8gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdm95YWdlcy5zaXplKCk7IGkrKykKLS8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBpICsgIiAiICsgdm95YWdlcy5nZXQoIGkgKS5wcmludCgpICk7Ci0KICAgICAgICAgcmV0dXJuIHZveWFnZXM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2IvaW50ZXJuYWwvR3JhcGhUcmF2ZXJzYWxTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9iL2ludGVybmFsL0dyYXBoVHJhdmVyc2FsU2VydmljZUltcGwuamF2YQppbmRleCAyYzU5YzUzLi45ZGIwZTQ0IDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2IvaW50ZXJuYWwvR3JhcGhUcmF2ZXJzYWxTZXJ2aWNlSW1wbC5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYi9pbnRlcm5hbC9HcmFwaFRyYXZlcnNhbFNlcnZpY2VJbXBsLmphdmEKQEAgLTY4LDEwICs2OCw2IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxUcmFuc2l0UGF0aD4gdm95YWdlcyA9IGdldFNodWZmbGVkVm95YWdlcyggZGFvLnZveWFnZXMoKSApOwogCi0gICAgICAgICAgICAgICAgLy8gT3V0cHV0IGZvciB0ZXN0aW5nLi4uCi0vLyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZveWFnZXMuc2l6ZSgpOyBpKyspCi0vLyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBpICsgIiAiICsgdm95YWdlcy5nZXQoIGkgKS5wcmludCgpICk7Ci0KICAgICAgICAgICAgICAgICBmb3IoIFRyYW5zaXRQYXRoIHZveWFnZSA6IHZveWFnZXMgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYoIGRlcHRoID49IHZveWFnZS5nZXRUcmFuc2l0RWRnZXMoKS5zaXplKCkgKQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9iL2ludGVybmFsL3BhY2thZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYi9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKaW5kZXggMjVkMTY1YS4uM2M0ZjA0OSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9iL2ludGVybmFsL3BhY2thZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2IvaW50ZXJuYWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiA8Ym9keT4KIDxwPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9iL3BhY2thZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3BhdGhmaW5kZXJfYi9wYWNrYWdlLmh0bWwKaW5kZXggNjZkNjMwNC4uYWYxYjE0NCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vcGF0aGZpbmRlcl9iL3BhY2thZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9wYXRoZmluZGVyX2IvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiA8Ym9keT4KIDxwPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvYm9vdHN0cmFwL0RDSVNhbXBsZUFwcGxpY2F0aW9uX2IuamF2YSBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2Jvb3RzdHJhcC9EQ0lTYW1wbGVBcHBsaWNhdGlvbl9iLmphdmEKaW5kZXggNGU1YTM2Zi4uMzIyNWU1YiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvYm9vdHN0cmFwL0RDSVNhbXBsZUFwcGxpY2F0aW9uX2IuamF2YQorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9ib290c3RyYXAvRENJU2FtcGxlQXBwbGljYXRpb25fYi5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAvKioKICAqIERDSSBTYW1wbGUgYXBwbGljYXRpb24gaW5zdGFuY2UKICAqCi0gKiBBIFdpY2tldCBhcHBsaWNhdGlvbiBiYWNrZWQgYnkgUWk0ai4KKyAqIEEgV2lja2V0IGFwcGxpY2F0aW9uIGJhY2tlZCBieSBaZXN0LgogICovCiBwdWJsaWMgY2xhc3MgRENJU2FtcGxlQXBwbGljYXRpb25fYgogICAgIGV4dGVuZHMgV2lja2V0UWk0akFwcGxpY2F0aW9uCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9ib290c3RyYXAvYXNzZW1ibHkvQXNzZW1ibGVyLmphdmEgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9ib290c3RyYXAvYXNzZW1ibHkvQXNzZW1ibGVyLmphdmEKaW5kZXggY2UzNTRkYi4uZjFkMDc3NiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvYm9vdHN0cmFwL2Fzc2VtYmx5L0Fzc2VtYmxlci5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2Jvb3RzdHJhcC9hc3NlbWJseS9Bc3NlbWJsZXIuamF2YQpAQCAtNzIsMTMgKzcyLDEzIEBACiBpbXBvcnQgc3RhdGljIG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb24uTW9kZS5kZXZlbG9wbWVudDsKIAogLyoqCi0gKiBRaTRqIGFzc2VtYmx5IG9mIHRoZSBEQ0kgU2FtcGxlIGFwcGxpY2F0aW9uICh2ZXJzaW9uIEIpCisgKiBaZXN0IGFzc2VtYmx5IG9mIHRoZSBEQ0kgU2FtcGxlIGFwcGxpY2F0aW9uICh2ZXJzaW9uIEIpCiAgKgotICogQSBRaTRqIGFwcGxpY2F0aW9uIHN0cnVjdHVyZSBpcyBkZWNsYXJlZCBieSBhbiBhc3NlbWJseSB0aGF0IGRlZmluZXMgd2hpY2ggbGF5ZXJzIGFuZCBtb2R1bGVzCisgKiBBIFplc3QgYXBwbGljYXRpb24gc3RydWN0dXJlIGlzIGRlY2xhcmVkIGJ5IGFuIGFzc2VtYmx5IHRoYXQgZGVmaW5lcyB3aGljaCBsYXllcnMgYW5kIG1vZHVsZXMKICAqIHRoZSBhcHBsaWNhdGlvbiBoYXMgYW5kIGhvdyB0aGV5IGFyZSBhbGxvd2VkIHRvIGRlcGVuZCBvbiBlYWNoIG90aGVyLiBFYWNoIGxheWVyIGNvdWxkIGhhdmUgaXQncwogICogb3duIGFzc2VtYmx5IGZpbGUgaW4gbGFyZ2VyIGFwcGxpY2F0aW9ucy4KICAqCi0gKiBUaGUgUWk0aiBhc3NlbWJseSBkb2Vzbid0IHN0cmljdGx5IG1hcCAxLTEgdG8gdGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkgYW5kIHRoZSBhc3NlbWJseQorICogVGhlIFplc3QgYXNzZW1ibHkgZG9lc24ndCBzdHJpY3RseSBtYXAgMS0xIHRvIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5IGFuZCB0aGUgYXNzZW1ibHkKICAqIHN0cnVjdHVyZXMuIEFuIGV4YW1wbGUgaXMgdGhlIEVudGl0aWVzOgogICoKICAqIERhdGEgb2JqZWN0cyAoRW50aXRpZXMgYW5kIFZhbHVlc0NvbXBvc2l0ZXMpIGNhbiBiZSBwcm9tb3RlZCB0byBSb2xlIFBsYXllcnMgd2hlbiB0aGV5IGFyZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi9xdWVyeS9Cb29raW5nUXVlcmllcy5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi9xdWVyeS9Cb29raW5nUXVlcmllcy5qYXZhCmluZGV4IDEyYzNiYmIuLmEyMjRmMTcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vcXVlcnkvQm9va2luZ1F1ZXJpZXMuamF2YQorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3F1ZXJ5L0Jvb2tpbmdRdWVyaWVzLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIC8qKgogICogQm9va2luZyBxdWVyaWVzCiAgKgotICogSW1wbGVtZW50ZWQgYXMgYSBRaTRqIGNvbXBvc2l0ZSBzaW5jZSB3ZSBjYW4gdGhlbiBjb252ZW5pZW50bHkgZ2V0IHRoZSByb3V0aW5nIHNlcnZpY2UgaW5qZWN0ZWQuCisgKiBJbXBsZW1lbnRlZCBhcyBhIFplc3QgY29tcG9zaXRlIHNpbmNlIHdlIGNhbiB0aGVuIGNvbnZlbmllbnRseSBnZXQgdGhlIHJvdXRpbmcgc2VydmljZSBpbmplY3RlZC4KICAqIFdlIGNvdWxkIGNob29zZSB0byBpbXBsZW1lbnQgYWxsIHF1ZXJ5IGNsYXNzZXMgbGlrZSB0aGlzIHRvby4KICAqCiAgKiBVc2VkIGJ5IHRoZSBjb21tdW5pY2F0aW9uIGxheWVyIG9ubHkuIENhbiBjaGFuZ2UgYWNjb3JkaW5nIHRvIHVpIG5lZWRzLgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi9xdWVyeS9kdG8vQ2FyZ29EVE8uamF2YSBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vcXVlcnkvZHRvL0NhcmdvRFRPLmphdmEKaW5kZXggZWIyNGY2ZS4uZDljYTRlZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi9xdWVyeS9kdG8vQ2FyZ29EVE8uamF2YQorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3F1ZXJ5L2R0by9DYXJnb0RUTy5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAvKioKICAqIENhcmdvIERUTwogICoKLSAqIFFpNGotY29tbWVudDoKKyAqIFplc3QtY29tbWVudDoKICAqIFdlIG5lZWQgdGhlIEBVbnF1YWxpZmllZCBhbm5vdGF0aW9uIHNpbmNlIHRoZSBDYXJnb0RUTyBpbnRlcmZhY2UgaGFzIG90aGVyIHByb3BlcnRpZXMgdGhhbiB7QGxpbmsgQ2FyZ299CiAgKiBzbyB0aGF0IHByb3BlcnRpZXMgY2FuIG5vdCBiZSBkaXJlY3RseSBtYXBwZWQgd2hlbiB3ZSBjb252ZXJ0IGZyb20gZW50aXR5IHRvIGltbXV0YWJsZSB2YWx1ZSBEVE8uCiAgKiBXaXRoIHRoZSBhbm5vdGF0aW9uLCBwcm9wZXJ0eSBhY2Nlc3MgbWV0aG9kcyBhcmUgY29tcGFyZWQgYnkgbmFtZSBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi9xdWVyeS9kdG8vSGFuZGxpbmdFdmVudERUTy5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi9xdWVyeS9kdG8vSGFuZGxpbmdFdmVudERUTy5qYXZhCmluZGV4IDA4YTllYTIuLmMwYTIxYjIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vcXVlcnkvZHRvL0hhbmRsaW5nRXZlbnREVE8uamF2YQorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3F1ZXJ5L2R0by9IYW5kbGluZ0V2ZW50RFRPLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIC8qKgogICogSGFuZGxpbmdFdmVudCBEVE8KICAqCi0gKiBRaTRqLWNvbW1lbnQ6CisgKiBaZXN0LWNvbW1lbnQ6CiAgKiBXZSBuZWVkIHRoZSBAVW5xdWFsaWZpZWQgYW5ub3RhdGlvbiBzaW5jZSB0aGUgSGFuZGxpbmdFdmVudERUTyBpbnRlcmZhY2UgaGFzIG90aGVyIHByb3BlcnRpZXMgdGhhbgogICoge0BsaW5rIEhhbmRsaW5nRXZlbnR9IHNvIHRoYXQgcHJvcGVydGllcyBjYW4gbm90IGJlIGRpcmVjdGx5IG1hcHBlZCB3aGVuIHdlIGNvbnZlcnQgZnJvbSBlbnRpdHkgdG8KICAqIGltbXV0YWJsZSB2YWx1ZSBEVE8uIFdpdGggdGhlIGFubm90YXRpb24sIHByb3BlcnR5IGFjY2VzcyBtZXRob2RzIGFyZSBjb21wYXJlZCBieSBuYW1lIGluc3RlYWQuCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb250ZXh0L2ludGVyYWN0aW9uL2hhbmRsaW5nL2luc3BlY3Rpb24vZXZlbnQvSW5zcGVjdEFycml2ZWRDYXJnby5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RBcnJpdmVkQ2FyZ28uamF2YQppbmRleCA1NjNkNjM3Li5iYTkwYjE3IDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb250ZXh0L2ludGVyYWN0aW9uL2hhbmRsaW5nL2luc3BlY3Rpb24vZXZlbnQvSW5zcGVjdEFycml2ZWRDYXJnby5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbnRleHQvaW50ZXJhY3Rpb24vaGFuZGxpbmcvaW5zcGVjdGlvbi9ldmVudC9JbnNwZWN0QXJyaXZlZENhcmdvLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKIC8qKgogICogSW5zcGVjdCBBcnJpdmVkIENhcmdvIChzdWJmdW5jdGlvbiB1c2UgY2FzZSkKICAqCi0gKiBUaGlzIGlzIG9uZSB0aGUgdmFyaWF0aW9ucyBvZiB0aGUge0BsaW5rIGNvbS5tYXJjZ3J1ZS5kY2lzYW1wbGVfYi5jb250ZXh0LmludGVyYWN0aW9uLmhhbmRsaW5nLmluc3BlY3Rpb24uSW5zcGVjdENhcmdvRGVsaXZlcnlTdGF0dXN9IHVzZSBjYXNlLgorICogVGhpcyBpcyBvbmUgdGhlIHZhcmlhdGlvbnMgb2YgdGhlIHtAbGluayBvcmcucWk0ai5zYW1wbGUuZGNpY2FyZ28uc2FtcGxlX2IuY29udGV4dC5pbnRlcmFjdGlvbi5oYW5kbGluZy5pbnNwZWN0aW9uLkluc3BlY3RDYXJnb0RlbGl2ZXJ5U3RhdHVzfSB1c2UgY2FzZS4KICAqLwogcHVibGljIGNsYXNzIEluc3BlY3RBcnJpdmVkQ2FyZ28gZXh0ZW5kcyBDb250ZXh0CiB7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb250ZXh0L2ludGVyYWN0aW9uL2hhbmRsaW5nL2luc3BlY3Rpb24vZXZlbnQvSW5zcGVjdENhcmdvSW5DdXN0b21zLmphdmEgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb250ZXh0L2ludGVyYWN0aW9uL2hhbmRsaW5nL2luc3BlY3Rpb24vZXZlbnQvSW5zcGVjdENhcmdvSW5DdXN0b21zLmphdmEKaW5kZXggOGI2NzA2Ny4uMWJiZmI3OCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RDYXJnb0luQ3VzdG9tcy5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbnRleHQvaW50ZXJhY3Rpb24vaGFuZGxpbmcvaW5zcGVjdGlvbi9ldmVudC9JbnNwZWN0Q2FyZ29JbkN1c3RvbXMuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogLyoqCiAgKiBJbnNwZWN0IENhcmdvIEluIEN1c3RvbXMgKHN1YmZ1bmN0aW9uIHVzZSBjYXNlKQogICoKLSAqIFRoaXMgaXMgb25lIHRoZSB2YXJpYXRpb25zIG9mIHRoZSB7QGxpbmsgY29tLm1hcmNncnVlLmRjaXNhbXBsZV9iLmNvbnRleHQuaW50ZXJhY3Rpb24uaGFuZGxpbmcuaW5zcGVjdGlvbi5JbnNwZWN0Q2FyZ29EZWxpdmVyeVN0YXR1c30gdXNlIGNhc2UuCisgKiBUaGlzIGlzIG9uZSB0aGUgdmFyaWF0aW9ucyBvZiB0aGUge0BsaW5rIG9yZy5xaTRqLnNhbXBsZS5kY2ljYXJnby5zYW1wbGVfYi5jb250ZXh0LmludGVyYWN0aW9uLmhhbmRsaW5nLmluc3BlY3Rpb24uSW5zcGVjdENhcmdvRGVsaXZlcnlTdGF0dXN9IHVzZSBjYXNlLgogICoKICAqIENhbiB0aGUgY2FyZ28gZ2V0IGhhbmRsZWQgYnkgY3VzdG9tcyBvbmx5IGluIHRoZSBjdXJyZW50IHBvcnQgbG9jYXRpb24/ISBOb3RoaW5nIG5vdyBwcmV2ZW50cwogICogYW4gdW5leHBlY3RlZCBjYXJnbyBpbiBjdXN0b21zIGluIHNvbWUgcmFuZG9tIGxvY2F0aW9uLiBBIGRvbWFpbiBleHBlcnQgaXMgbmVlZGVkIHRvIGV4cGxhaW4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbnRleHQvaW50ZXJhY3Rpb24vaGFuZGxpbmcvaW5zcGVjdGlvbi9ldmVudC9JbnNwZWN0Q2xhaW1lZENhcmdvLmphdmEgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb250ZXh0L2ludGVyYWN0aW9uL2hhbmRsaW5nL2luc3BlY3Rpb24vZXZlbnQvSW5zcGVjdENsYWltZWRDYXJnby5qYXZhCmluZGV4IDExMGE0NDEuLmYwMDkxNDAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbnRleHQvaW50ZXJhY3Rpb24vaGFuZGxpbmcvaW5zcGVjdGlvbi9ldmVudC9JbnNwZWN0Q2xhaW1lZENhcmdvLmphdmEKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RDbGFpbWVkQ2FyZ28uamF2YQpAQCAtMzksNyArMzksNyBAQAogLyoqCiAgKiBJbnNwZWN0IENsYWltZWQgQ2FyZ28gKHN1YmZ1bmN0aW9uIHVzZSBjYXNlKQogICoKLSAqIFRoaXMgaXMgb25lIHRoZSB2YXJpYXRpb25zIG9mIHRoZSB7QGxpbmsgY29tLm1hcmNncnVlLmRjaXNhbXBsZV9iLmNvbnRleHQuaW50ZXJhY3Rpb24uaGFuZGxpbmcuaW5zcGVjdGlvbi5JbnNwZWN0Q2FyZ29EZWxpdmVyeVN0YXR1c30gdXNlIGNhc2UuCisgKiBUaGlzIGlzIG9uZSB0aGUgdmFyaWF0aW9ucyBvZiB0aGUge0BsaW5rIG9yZy5xaTRqLnNhbXBsZS5kY2ljYXJnby5zYW1wbGVfYi5jb250ZXh0LmludGVyYWN0aW9uLmhhbmRsaW5nLmluc3BlY3Rpb24uSW5zcGVjdENhcmdvRGVsaXZlcnlTdGF0dXN9IHVzZSBjYXNlLgogICoKICAqIE5PVEU6IFdlIGRvbid0IHRocm93IGFueSBtaXNyb3V0ZWQvbWlzZGlyZWN0ZWQgZXhjZXB0aW9ucyBldmVuIHRob3VnaCB0aGUgY2FyZ28gbWlnaHQgbm90IGhhdmUKICAqIGZvbGxvd2VkIHRoZSBvcmlnaW5hbCBpdGluZXJhcnkuIFRoZSBjYXJnbyBoYXMgYmVlbiBkZWxpdmVyZWQgYXQgZGVzdGluYXRpb24gYW5kIGNsYWltZWQgYnkKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbnRleHQvaW50ZXJhY3Rpb24vaGFuZGxpbmcvaW5zcGVjdGlvbi9ldmVudC9JbnNwZWN0UmVjZWl2ZWRDYXJnby5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RSZWNlaXZlZENhcmdvLmphdmEKaW5kZXggM2NhYTUwOS4uMTkxNDYzNiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RSZWNlaXZlZENhcmdvLmphdmEKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RSZWNlaXZlZENhcmdvLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKIC8qKgogICogSW5zcGVjdCBSZWNlaXZlZCBDYXJnbyAoc3ViZnVuY3Rpb24gdXNlIGNhc2UpCiAgKgotICogVGhpcyBpcyBvbmUgdGhlIHZhcmlhdGlvbnMgb2YgdGhlIHtAbGluayBjb20ubWFyY2dydWUuZGNpc2FtcGxlX2IuY29udGV4dC5pbnRlcmFjdGlvbi5oYW5kbGluZy5pbnNwZWN0aW9uLkluc3BlY3RDYXJnb0RlbGl2ZXJ5U3RhdHVzfSB1c2UgY2FzZS4KKyAqIFRoaXMgaXMgb25lIHRoZSB2YXJpYXRpb25zIG9mIHRoZSB7QGxpbmsgb3JnLnFpNGouc2FtcGxlLmRjaWNhcmdvLnNhbXBsZV9iLmNvbnRleHQuaW50ZXJhY3Rpb24uaGFuZGxpbmcuaW5zcGVjdGlvbi5JbnNwZWN0Q2FyZ29EZWxpdmVyeVN0YXR1c30gdXNlIGNhc2UuCiAgKgogICogTm90ZSB0aGF0IHdlIGNvbnNpZGVyIHRoZSBjYXJnbyBzdGlsbCBvbiB0cmFjayBpZiBpdCdzIHJlY2VpdmVkIGluIGNhcmdvIG9yaWdpbiByZWdhcmRsZXNzIG9mIHJvdXRpbmcgc3RhdHVzIQogICovCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb250ZXh0L2ludGVyYWN0aW9uL2hhbmRsaW5nL2luc3BlY3Rpb24vZXZlbnQvSW5zcGVjdFVuaGFuZGxlZENhcmdvLmphdmEgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb250ZXh0L2ludGVyYWN0aW9uL2hhbmRsaW5nL2luc3BlY3Rpb24vZXZlbnQvSW5zcGVjdFVuaGFuZGxlZENhcmdvLmphdmEKaW5kZXggNDc2NTg2Yy4uZmY2NjdjMSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RVbmhhbmRsZWRDYXJnby5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbnRleHQvaW50ZXJhY3Rpb24vaGFuZGxpbmcvaW5zcGVjdGlvbi9ldmVudC9JbnNwZWN0VW5oYW5kbGVkQ2FyZ28uamF2YQpAQCAtMzksNyArMzksNyBAQAogLyoqCiAgKiBJbnNwZWN0IFVuaGFuZGxlZCBDYXJnbyAoc3ViZnVuY3Rpb24gdXNlIGNhc2UpCiAgKgotICogVGhpcyBpcyBvbmUgdGhlIHZhcmlhdGlvbnMgb2YgdGhlIHtAbGluayBjb20ubWFyY2dydWUuZGNpc2FtcGxlX2IuY29udGV4dC5pbnRlcmFjdGlvbi5oYW5kbGluZy5pbnNwZWN0aW9uLkluc3BlY3RDYXJnb0RlbGl2ZXJ5U3RhdHVzfSB1c2UgY2FzZS4KKyAqIFRoaXMgaXMgb25lIHRoZSB2YXJpYXRpb25zIG9mIHRoZSB7QGxpbmsgb3JnLnFpNGouc2FtcGxlLmRjaWNhcmdvLnNhbXBsZV9iLmNvbnRleHQuaW50ZXJhY3Rpb24uaGFuZGxpbmcuaW5zcGVjdGlvbi5JbnNwZWN0Q2FyZ29EZWxpdmVyeVN0YXR1c30gdXNlIGNhc2UuCiAgKgogICogSGVyZSB3ZSBjYW4gY2hlY2sgYSBjYXJnbyB0aGF0IGhhc24ndCBiZWVuIHJlY2VpdmVkIGluIG9yaWdpbiB5ZXQuCiAgKi8KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbnRleHQvaW50ZXJhY3Rpb24vaGFuZGxpbmcvaW5zcGVjdGlvbi9ldmVudC9JbnNwZWN0VW5sb2FkZWRDYXJnby5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RVbmxvYWRlZENhcmdvLmphdmEKaW5kZXggZmU2NGUxMi4uNjg5M2M1OSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RVbmxvYWRlZENhcmdvLmphdmEKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29udGV4dC9pbnRlcmFjdGlvbi9oYW5kbGluZy9pbnNwZWN0aW9uL2V2ZW50L0luc3BlY3RVbmxvYWRlZENhcmdvLmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKIC8qKgogICogSW5zcGVjdCBVbmxvYWRlZCBDYXJnbyAoc3ViZnVuY3Rpb24gdXNlIGNhc2UpCiAgKgotICogVGhpcyBpcyBvbmUgdGhlIHZhcmlhdGlvbnMgb2YgdGhlIHtAbGluayBjb20ubWFyY2dydWUuZGNpc2FtcGxlX2IuY29udGV4dC5pbnRlcmFjdGlvbi5oYW5kbGluZy5pbnNwZWN0aW9uLkluc3BlY3RDYXJnb0RlbGl2ZXJ5U3RhdHVzfSB1c2UgY2FzZS4KKyAqIFRoaXMgaXMgb25lIHRoZSB2YXJpYXRpb25zIG9mIHRoZSB7QGxpbmsgb3JnLnFpNGouc2FtcGxlLmRjaWNhcmdvLnNhbXBsZV9iLmNvbnRleHQuaW50ZXJhY3Rpb24uaGFuZGxpbmcuaW5zcGVjdGlvbi5JbnNwZWN0Q2FyZ29EZWxpdmVyeVN0YXR1c30gdXNlIGNhc2UuCiAgKi8KIHB1YmxpYyBjbGFzcyBJbnNwZWN0VW5sb2FkZWRDYXJnbyBleHRlbmRzIENvbnRleHQKIHsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL1dpY2tldFFpNGpBcHBsaWNhdGlvbi5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvV2lja2V0UWk0akFwcGxpY2F0aW9uLmphdmEKaW5kZXggMTA1N2JjNi4uNjNkY2YwZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvV2lja2V0UWk0akFwcGxpY2F0aW9uLmphdmEKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvV2lja2V0UWk0akFwcGxpY2F0aW9uLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKIC8qKgogICogV2lja2V0UWk0akFwcGxpY2F0aW9uCiAgKgotICogQmFzZSBXaWNrZXQgV2ViIEFwcGxpY2F0aW9uIGNvbnRhaW5pbmcgdGhlIFFpNGogYXBwbGljYXRpb24uCisgKiBCYXNlIFdpY2tldCBXZWIgQXBwbGljYXRpb24gY29udGFpbmluZyB0aGUgWmVzdCBhcHBsaWNhdGlvbi4KICAqLwogcHVibGljIGNsYXNzIFdpY2tldFFpNGpBcHBsaWNhdGlvbgogICAgIGV4dGVuZHMgV2ViQXBwbGljYXRpb24KQEAgLTYzLDEwICs2MywxMCBAQAogICAgIHByb3RlY3RlZCBFbnRpdHlUb0RUT1NlcnZpY2UgdmFsdWVDb252ZXJ0ZXI7CiAKICAgICAvKioKLSAgICAgKiBRaTRqIEFzc2VtYmxlcgorICAgICAqIFplc3QgQXNzZW1ibGVyCiAgICAgICoKICAgICAgKiBUbyBsZXQgdGhlIGN1c3RvbSBhcHBsaWNhdGlvbiBjbGFzcyAoRENJU2FtcGxlQXBwbGljYXRpb25feCkgZm9jdXMgb24gc3RhcnRpbmcgdXAgdGhlCi0gICAgICogV2lja2V0IGVudmlyb25tZW50LCBJIG1hZGUgYSBjb252ZW50aW9uIG9mIGhhdmluZyBRaTRqIEFzc2VtYmxlciBmaWxlcyBpbiBhbiAnYXNzZW1ibHknCisgICAgICogV2lja2V0IGVudmlyb25tZW50LCBJIG1hZGUgYSBjb252ZW50aW9uIG9mIGhhdmluZyBaZXN0IEFzc2VtYmxlciBmaWxlcyBpbiBhbiAnYXNzZW1ibHknCiAgICAgICogZm9sZGVyIGJlc2lkZSB0aGUgY3VzdG9tIGFwcGxpY2F0aW9uIGNsYXNzLgogICAgICAqCiAgICAgICogVGhlcmUncyBhbHdheXMgb25seSBvbmUgYXBwbGljYXRpb24gZmlsZSwgYnV0IHdlIGNvdWxkIHNwbGl0IHRoZSBhc3NlbWJsYWdlIGludG8gc2V2ZXJhbApAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGNhdGNoKCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCAiQ291bGRuJ3QgZmluZCBRaTRqIGFzc2VtYmxlciBpbiBwYXRoICciICsgYXNzZW1ibGVyUGF0aCArICInIiApOworICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbiggIkNvdWxkbid0IGZpbmQgWmVzdCBhc3NlbWJsZXIgaW4gcGF0aCAnIiArIGFzc2VtYmxlclBhdGggKyAiJyIgKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMwLDIwICsxMzAsMjAgQEAKICAgICB7CiAgICAgICAgIHRyeQogICAgICAgICB7Ci0gICAgICAgICAgICBsb2dnZXIuaW5mbyggIlN0YXJ0aW5nIFFpNGogYXBwbGljYXRpb24iICk7CisgICAgICAgICAgICBsb2dnZXIuaW5mbyggIlN0YXJ0aW5nIFplc3QgYXBwbGljYXRpb24iICk7CiAgICAgICAgICAgICBFbmVyZ3k0SmF2YSBxaTRqID0gbmV3IEVuZXJneTRKYXZhKCk7CiAgICAgICAgICAgICBxaTRqQXBwID0gcWk0ai5uZXdBcHBsaWNhdGlvbiggZ2V0QXNzZW1ibGVyKCkgKTsKICAgICAgICAgICAgIHFpNGpBcHAuYWN0aXZhdGUoKTsKICAgICAgICAgICAgIHFpNGpNb2R1bGUgPSBxaTRqQXBwLmZpbmRNb2R1bGUoIGRlZmF1bHRMYXllck5hbWUoKSwgZGVmYXVsdE1vZHVsZU5hbWUoKSApOwogCi0gICAgICAgICAgICAvLyBRaTRqIGluamVjdHMgQFN0cnVjdHVyZSBhbmQgQFNlcnZpY2UgZWxlbWVudHMgaW50byB0aGlzIGFwcGxpY2F0aW9uIGluc3RhbmNlCisgICAgICAgICAgICAvLyBaZXN0IGluamVjdHMgQFN0cnVjdHVyZSBhbmQgQFNlcnZpY2UgZWxlbWVudHMgaW50byB0aGlzIGFwcGxpY2F0aW9uIGluc3RhbmNlCiAgICAgICAgICAgICBxaTRqTW9kdWxlLmluamVjdFRvKCB0aGlzICk7CiAKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCAiU3RhcnRlZCBRaTRqIGFwcGxpY2F0aW9uIiApOworICAgICAgICAgICAgbG9nZ2VyLmluZm8oICJTdGFydGVkIFplc3QgYXBwbGljYXRpb24iICk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKICAgICAgICAgewotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCAiQ291bGQgbm90IHN0YXJ0IFFpNGogYXBwbGljYXRpb24uIiApOworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCAiQ291bGQgbm90IHN0YXJ0IFplc3QgYXBwbGljYXRpb24uIiApOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KCAxMDAgKTsKICAgICAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBACiAgICAgICAgIH0gKTsKICAgICB9CiAKLSAgICAvLyBTaW5jZSBRaTRqIGNhbiBvbmx5IGFkZCBjb25jcmV0ZSBjbGFzc2VzIGluIHRoZSBhc3NlbWJseSwgd2UgbmVlZCB0byBpbXBsZW1lbnQgYSAoZHVtbXkpIGdldEhvbWVQYWdlKCkKKyAgICAvLyBTaW5jZSBaZXN0IGNhbiBvbmx5IGFkZCBjb25jcmV0ZSBjbGFzc2VzIGluIHRoZSBhc3NlbWJseSwgd2UgbmVlZCB0byBpbXBsZW1lbnQgYSAoZHVtbXkpIGdldEhvbWVQYWdlKCkKICAgICAvLyBtZXRob2QgaGVyZS4gT3ZlcnJpZGUgaW4gd2lja2V0IGFwcGxpY2F0aW9uIGNsYXNzIHdpdGggYSByZWFsIHJldHVybmVkIHBhZ2UgY2xhc3MuCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBQYWdlPiBnZXRIb21lUGFnZSgpCkBAIC0yMjAsNyArMjIwLDcgQEAKIAogICAgICAgICB0cnkKICAgICAgICAgewotICAgICAgICAgICAgbG9nZ2VyLmluZm8oICJQYXNzaXZhdGluZyBRaTRqIGFwcGxpY2F0aW9uIiApOworICAgICAgICAgICAgbG9nZ2VyLmluZm8oICJQYXNzaXZhdGluZyBaZXN0IGFwcGxpY2F0aW9uIiApOwogICAgICAgICAgICAgcWk0akFwcC5wYXNzaXZhdGUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUgKQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvY29udmVyc2lvbi9EVE8uamF2YSBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL2NvbnZlcnNpb24vRFRPLmphdmEKaW5kZXggNmQ4ZTk3My4uMWVlNzhiMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvY29udmVyc2lvbi9EVE8uamF2YQorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9pbmZyYXN0cnVjdHVyZS9jb252ZXJzaW9uL0RUTy5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgKgogICogQmFzZSBjbGFzcyBmb3IgRFRPcwogICoKLSAqIFFpNGotY29tbWVudDoKKyAqIFplc3QtY29tbWVudDoKICAqIFZhbHVlQ29tcG9zaXRlcyB0aGF0IGV4dGVuZCBEVE8gYXJlIGNhbmRpZGF0ZXMgdG8gaGF2ZSBhc3NvY2lhdGlvbiB0eXBlcyBjb252ZXJ0ZWQgYW5kCiAgKiBhc3NpZ25lZCBpbiB0aGUgRW50aXR5VG9EVE9TZXJ2aWNlLgogICovCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9pbmZyYXN0cnVjdHVyZS9tb2RlbC9FbnRpdHlNb2RlbC5qYXZhIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvbW9kZWwvRW50aXR5TW9kZWwuamF2YQppbmRleCBjNGMyNjdjLi5mYzMwM2UwIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9pbmZyYXN0cnVjdHVyZS9tb2RlbC9FbnRpdHlNb2RlbC5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL21vZGVsL0VudGl0eU1vZGVsLmphdmEKQEAgLTIyLDE1ICsyMiwxNiBAQAogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5Q29tcG9zaXRlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLk5vU3VjaEVudGl0eUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcucWk0ai5hcGkudXNlY2FzZS5Vc2VjYXNlOwogaW1wb3J0IG9yZy5xaTRqLnNhbXBsZS5kY2ljYXJnby5zYW1wbGVfYi5pbmZyYXN0cnVjdHVyZS5jb252ZXJzaW9uLkRUTzsKIAogLyoqCiAgKiBFbnRpdHlNb2RlbAogICoKLSAqIEEgV2lja2V0IE1vZGVsIHRoYXQgYnJpZGdlcyB0byBvdXIgUWk0aiBkYXRhIHN0b3JlLgorICogQSBXaWNrZXQgTW9kZWwgdGhhdCBicmlkZ2VzIHRvIG91ciBaZXN0IGRhdGEgc3RvcmUuCiAgKgogICogSW4gV2lja2V0IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBwYXNzIGFyb3VuZCBzZXJpYWxpemFibGUgZGF0YSB0aGF0IGNhbiBiZSAiZGV0YWNoYWJsZSIuCi0gKiBRaTRqIGVudGl0aWVzIGFyZSB0aGVyZWZvcmUgbGF6eSBsb2FkZWQgd2l0aCBhIGNsYXNzIGFuZCBpZGVudGl0eSB0aHJvdWdoIG91ciBVbml0T2ZXb3JrCisgKiBaZXN0IGVudGl0aWVzIGFyZSB0aGVyZWZvcmUgbGF6eSBsb2FkZWQgd2l0aCBhIGNsYXNzIGFuZCBpZGVudGl0eSB0aHJvdWdoIG91ciBVbml0T2ZXb3JrCiAgKiBhbmQgdGhlbiBjb252ZXJ0ZWQgdG8gYSBEVE8gVmFsdWVDb21wb3NpdGUuCiAgKi8KIHB1YmxpYyBjbGFzcyBFbnRpdHlNb2RlbDxUIGV4dGVuZHMgRFRPLCBVIGV4dGVuZHMgRW50aXR5Q29tcG9zaXRlPgpAQCAtNzUsNyArNzYsOCBAQAogICAgICAgICBVIGVudGl0eSA9IG1vZHVsZS5jdXJyZW50VW5pdE9mV29yaygpLmdldCggZW50aXR5Q2xhc3MsIGlkZW50aXR5ICk7CiAgICAgICAgIGlmKCBlbnRpdHkgPT0gbnVsbCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggaWRlbnRpdHkgKSwgZW50aXR5Q2xhc3MgKTsKKyAgICAgICAgICAgIFVzZWNhc2UgdXNlY2FzZSA9IG1vZHVsZS5jdXJyZW50VW5pdE9mV29yaygpLnVzZWNhc2UoKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIEVudGl0eVJlZmVyZW5jZS5wYXJzZUVudGl0eVJlZmVyZW5jZSggaWRlbnRpdHkgKSwgZW50aXR5Q2xhc3MsIHVzZWNhc2UgKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL21vZGVsL1F1ZXJ5TW9kZWwuamF2YSBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL21vZGVsL1F1ZXJ5TW9kZWwuamF2YQppbmRleCBiMjVmMjVkLi5lYWJmNzAzIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9pbmZyYXN0cnVjdHVyZS9tb2RlbC9RdWVyeU1vZGVsLmphdmEKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvbW9kZWwvUXVlcnlNb2RlbC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAvKioKICAqIFF1ZXJ5TW9kZWwKICAqCi0gKiBDYWxsYmFjayBXaWNrZXQgbW9kZWwgdGhhdCBob2xkcyBhIFFpNGogUXVlcnkgb2JqZWN0IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIG5lZWRlZCB0bworICogQ2FsbGJhY2sgV2lja2V0IG1vZGVsIHRoYXQgaG9sZHMgYSBaZXN0IFF1ZXJ5IG9iamVjdCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiBuZWVkZWQgdG8KICAqIHJldHJpZXZlIGZyZXNoIGRhdGEuCiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBRdWVyeU1vZGVsPFQsIFUgZXh0ZW5kcyBFbnRpdHlDb21wb3NpdGU+CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgIHJldHVybiBkdG9MaXN0OwogICAgIH0KIAotICAgIC8vIENhbGxiYWNrIHRvIHJldHJpZXZlIHRoZSAodW5zZXJpYWxpemFibGUpIFFpNGogUXVlcnkgb2JqZWN0CisgICAgLy8gQ2FsbGJhY2sgdG8gcmV0cmlldmUgdGhlICh1bnNlcmlhbGl6YWJsZSkgWmVzdCBRdWVyeSBvYmplY3QKICAgICBwdWJsaWMgYWJzdHJhY3QgUXVlcnk8VT4gZ2V0UXVlcnkoKTsKIAogICAgIHB1YmxpYyBUIGdldFZhbHVlKCBVIGVudGl0eSApCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9pbmZyYXN0cnVjdHVyZS9tb2RlbC9SZWFkT25seU1vZGVsLmphdmEgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9pbmZyYXN0cnVjdHVyZS9tb2RlbC9SZWFkT25seU1vZGVsLmphdmEKaW5kZXggODYyNjYzZi4uOGVhZGI0ZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvbW9kZWwvUmVhZE9ubHlNb2RlbC5qYXZhCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL21vZGVsL1JlYWRPbmx5TW9kZWwuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogLyoqCiAgKiBSZWFkT25seU1vZGVsCiAgKgotICogQWJzdHJhY3QgYmFzZSBtb2RlbCBmb3IgV2lja2V0IG1vZGVsIG9iamVjdHMgdGFraW5nIFFpNGogb2JqZWN0cy4KKyAqIEFic3RyYWN0IGJhc2UgbW9kZWwgZm9yIFdpY2tldCBtb2RlbCBvYmplY3RzIHRha2luZyBaZXN0IG9iamVjdHMuCiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZWFkT25seU1vZGVsPFQ+CiAgICAgaW1wbGVtZW50cyBJTW9kZWw8VD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMKaW5kZXggMTU2NWFhNS4uZjIxMmZlNSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogbG9nNGouYXBwZW5kZXIuU3Rkb3V0PW9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyCiBsb2c0ai5hcHBlbmRlci5TdGRvdXQubGF5b3V0PW9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dAogbG9nNGouYXBwZW5kZXIuU3Rkb3V0LmxheW91dC5jb252ZXJzaW9uUGF0dGVybj0lLTVwIC0gJS0zNi4zNmN7MX0gLSAlbVxuCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL0Jhc2VQYWdlLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL0Jhc2VQYWdlLmh0bWwKaW5kZXggNWE3ODhiOC4uMDEwYjZmOCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9CYXNlUGFnZS5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvQmFzZVBhZ2UuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8aHRtbCB4bWxuczp3aWNrZXQ+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aGVhZD4KICAgICA8dGl0bGU+RENJIHNhbXBsZSAodmVyc2lvbiBCKTwvdGl0bGU+CiAgICAgPGxpbmsgaHJlZj0iY3NzL3N0eWxlLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgpAQCAtNDAsMTEgKzU2LDExIEBACiAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly90ZWNoLmdyb3Vwcy55YWhvby5jb20vZ3JvdXAvZG9tYWluZHJpdmVuZGVzaWduLyIgdGFyZ2V0PSJfYmxhbmsiPkZvcnVtPC9hPgogICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5xaTRqLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5XZWJzaXRlPC9hPjxicj4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL29sZC5uYWJibGUuY29tL1FpNGotZGV2LWYzMzEzNy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+Rm9ydW08L2E+PGJyPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnFpNGoub3JnL3FpNGovZG93bmxvYWRzLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5Eb3dubG9hZDwvYT48YnI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9yZXBvc2l0b3J5Lm9wczRqLm9yZy9tYXZlbjIvb3JnL3FpNGovIiB0YXJnZXQ9Il9ibGFuayI+TWF2ZW48L2E+PGJyPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcWk0aiIgdGFyZ2V0PSJfYmxhbmsiPkdpdGh1YjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+V2Vic2l0ZTwvYT48YnI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vemVzdC5hcGFjaGUub3JnL2NvbW11bml0eS9nZXRfaGVscC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+Rm9ydW08L2E+PGJyPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3plc3QuYXBhY2hlLm9yZy9kb3dubG9hZC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+RG93bmxvYWQ8L2E+PGJyPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3plc3QuYXBhY2hlLm9yZy9qYXZhL2xhdGVzdC9ob3d0by1kZXBlbmQtb24temVzdC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+TWF2ZW48L2E+PGJyPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3plc3QtamF2YSIgdGFyZ2V0PSJfYmxhbmsiPkdpdGh1YjwvYT4KICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+CiAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93aWNrZXQuYXBhY2hlLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5XZWJzaXRlPC9hPjxicj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Cb29rTmV3Q2FyZ29QYWdlLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQm9va05ld0NhcmdvUGFnZS5odG1sCmluZGV4IDNhOWE2MDEuLjgwZjlkYzMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Cb29rTmV3Q2FyZ29QYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0Jvb2tOZXdDYXJnb1BhZ2UuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8aHRtbCB4bWxuczp3aWNrZXQ+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2lja2V0OmV4dGVuZD4KICAgICA8ZGl2IGNsYXNzPSJoZWFkZXJNZW51Ij4KICAgICAgICAgQm9vayBuZXcgY2FyZ28KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Cb29raW5nQmFzZVBhZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Cb29raW5nQmFzZVBhZ2UuaHRtbAppbmRleCA4ZWVlNzYwLi4wYWY5ODYwIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQm9va2luZ0Jhc2VQYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0Jvb2tpbmdCYXNlUGFnZS5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6ZXh0ZW5kPgogICAgIDxkaXYgaWQ9ImJveCI+CiAgICAgICAgIDx3aWNrZXQ6Y2hpbGQvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0NhcmdvRGV0YWlsc1BhZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9DYXJnb0RldGFpbHNQYWdlLmh0bWwKaW5kZXggMjExZDU0OGMuLmM3OGYxYzUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9DYXJnb0RldGFpbHNQYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0NhcmdvRGV0YWlsc1BhZ2UuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8aHRtbCB4bWxuczp3aWNrZXQ+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2lja2V0OmV4dGVuZD4KIAogICAgIDxkaXYgd2lja2V0OmlkPSJwcmV2TmV4dCI+PC9kaXY+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQ2FyZ29MaXN0UGFnZS5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0NhcmdvTGlzdFBhZ2UuaHRtbAppbmRleCA0M2FkMmQ2Li44NTA3NzNhIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQ2FyZ29MaXN0UGFnZS5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9DYXJnb0xpc3RQYWdlLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpleHRlbmQ+CiAgICAgPGRpdiBjbGFzcz0iaGVhZGVyTWVudSI+CiAgICAgICAgIExpc3Qgb2YgQ2FyZ29zCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQ2hhbmdlRGVzdGluYXRpb25QYWdlLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvQ2hhbmdlRGVzdGluYXRpb25QYWdlLmh0bWwKaW5kZXggYmFmYTliNS4uODkyNzIyYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL0NoYW5nZURlc3RpbmF0aW9uUGFnZS5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9DaGFuZ2VEZXN0aW5hdGlvblBhZ2UuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8aHRtbCB4bWxuczp3aWNrZXQ+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2lja2V0OmV4dGVuZD4KIAogICAgIDxkaXYgY2xhc3M9ImhlYWRlck1lbnUiPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL1JlUm91dGVDYXJnb1BhZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9SZVJvdXRlQ2FyZ29QYWdlLmh0bWwKaW5kZXggMWViN2Q5ZS4uN2QxYTRiMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL1JlUm91dGVDYXJnb1BhZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvUmVSb3V0ZUNhcmdvUGFnZS5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6ZXh0ZW5kPgogCiAgICAgPGRpdiBjbGFzcz0iaGVhZGVyTWVudSI+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvUm91dGVDYXJnb1BhZ2UuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Sb3V0ZUNhcmdvUGFnZS5odG1sCmluZGV4IGFjZWU3MjQuLjA2OTAwNGUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Sb3V0ZUNhcmdvUGFnZS5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Sb3V0ZUNhcmdvUGFnZS5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6ZXh0ZW5kPgogCiAgICAgPGRpdiBjbGFzcz0iaGVhZGVyTWVudSI+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvUm91dGVQYW5lbC5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9ib29raW5nL1JvdXRlUGFuZWwuaHRtbAppbmRleCA4YjRmMjM3Li5mN2I4ZDgyIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2Jvb2tpbmcvUm91dGVQYW5lbC5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvYm9va2luZy9Sb3V0ZVBhbmVsLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpwYW5lbD4KICAgICA8aDQgd2lja2V0OmlkPSJyb3V0ZUhlYWRlciI+PC9oND4KICAgICA8c3BhbiB3aWNrZXQ6aWQ9InJvdXRlRmVlZGJhY2siPjwvc3Bhbj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvaGFuZGxpbmcvSW5jaWRlbnRMb2dnaW5nQXBwbGljYXRpb25Nb2NrdXBQYWdlLmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2hhbmRsaW5nL0luY2lkZW50TG9nZ2luZ0FwcGxpY2F0aW9uTW9ja3VwUGFnZS5odG1sCmluZGV4IDQ3YzI5NmEuLjM4MjdjZWQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvaGFuZGxpbmcvSW5jaWRlbnRMb2dnaW5nQXBwbGljYXRpb25Nb2NrdXBQYWdlLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9oYW5kbGluZy9JbmNpZGVudExvZ2dpbmdBcHBsaWNhdGlvbk1vY2t1cFBhZ2UuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8aHRtbCB4bWxuczp3aWNrZXQ+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2lja2V0OmV4dGVuZD4KICAgICA8ZGl2IGlkPSJib3giPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2hhbmRsaW5nL0luY2lkZW50TG9nZ2luZ0FwcGxpY2F0aW9uTW9ja3VwUGFnZS5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi9oYW5kbGluZy9JbmNpZGVudExvZ2dpbmdBcHBsaWNhdGlvbk1vY2t1cFBhZ2UucHJvcGVydGllcwppbmRleCAxMzE4MTlkLi44YzA1YjRkIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL2hhbmRsaW5nL0luY2lkZW50TG9nZ2luZ0FwcGxpY2F0aW9uTW9ja3VwUGFnZS5wcm9wZXJ0aWVzCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvaGFuZGxpbmcvSW5jaWRlbnRMb2dnaW5nQXBwbGljYXRpb25Nb2NrdXBQYWdlLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogaGFuZGxpbmdFdmVudC5VTktOT1dOPUVSUk9SOiAqKiogVU5LTk9XTiBFVkVOVCBUWVBFICoqKgogaGFuZGxpbmdFdmVudC5SRUNFSVZFPVJlY2VpdmVkIGluICR7bG9jYXRpb259LgogaGFuZGxpbmdFdmVudC5MT0FEPUxvYWRlZCBvbnRvIHZveWFnZSAke3ZveWFnZX0gaW4gcG9ydCAke2xvY2F0aW9ufS4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvSGFuZGxpbmdIaXN0b3J5UGFuZWwuaHRtbCBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvSGFuZGxpbmdIaXN0b3J5UGFuZWwuaHRtbAppbmRleCAxYmU4NDkwLi5mODllM2FlIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL0hhbmRsaW5nSGlzdG9yeVBhbmVsLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9IYW5kbGluZ0hpc3RvcnlQYW5lbC5odG1sCkBAIC0xLDQgKzEsMjAgQEAKIDxodG1sIHhtbG5zOndpY2tldD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDx3aWNrZXQ6cGFuZWw+CiAgICAgPGg0PkhhbmRsaW5nIGhpc3Rvcnk8L2g0PgogICAgIDx0YWJsZT4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvSGFuZGxpbmdIaXN0b3J5UGFuZWwucHJvcGVydGllcyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvSGFuZGxpbmdIaXN0b3J5UGFuZWwucHJvcGVydGllcwppbmRleCA0MzIyNTI4Li4wODllYmIxIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL0hhbmRsaW5nSGlzdG9yeVBhbmVsLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9IYW5kbGluZ0hpc3RvcnlQYW5lbC5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGhhbmRsaW5nRXZlbnQuVU5LTk9XTj1FUlJPUjogKioqIFVOS05PV04gRVZFTlQgVFlQRSAqKioKIGhhbmRsaW5nRXZlbnQuUkVDRUlWRT1SZWNlaXZlZCBpbiAke2xvY2F0aW9ufQogaGFuZGxpbmdFdmVudC5MT0FEPUxvYWRlZCBvbnRvIHZveWFnZSAke3ZveWFnZX0gaW4gJHtsb2NhdGlvbn0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvTmV4dEhhbmRsaW5nRXZlbnRQYW5lbC5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9OZXh0SGFuZGxpbmdFdmVudFBhbmVsLmh0bWwKaW5kZXggNzM1ZTg3OC4uZTM3YjhjZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9OZXh0SGFuZGxpbmdFdmVudFBhbmVsLmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9OZXh0SGFuZGxpbmdFdmVudFBhbmVsLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpwYW5lbD4KICAgICA8cCB3aWNrZXQ6aWQ9InRleHQiIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDogYm9sZDsiPjwvcD4KIDwvd2lja2V0OnBhbmVsPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9OZXh0SGFuZGxpbmdFdmVudFBhbmVsLnByb3BlcnRpZXMgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL05leHRIYW5kbGluZ0V2ZW50UGFuZWwucHJvcGVydGllcwppbmRleCA3NTBmZGZhLi41MDZjZDIwIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL05leHRIYW5kbGluZ0V2ZW50UGFuZWwucHJvcGVydGllcworKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL05leHRIYW5kbGluZ0V2ZW50UGFuZWwucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBuZXh0RXZlbnQuVU5LTk9XTj1OZXh0IGV4cGVjdGVkIGFjdGl2aXR5OiBVbmtub3duLi4uCiBuZXh0RXZlbnQuUk9VVEU9TmV4dCBleHBlY3RlZCBhY3Rpdml0eTogUm91dGluZyBvZiBjYXJnbwogbmV4dEV2ZW50LlJFQ0VJVkU9TmV4dCBleHBlY3RlZCBhY3Rpdml0eTogUmVjZWlwdCBvZiBjYXJnbyBpbiAke2xvY2F0aW9ufQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9UcmFja0NhcmdvUGFnZS5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9UcmFja0NhcmdvUGFnZS5odG1sCmluZGV4IDRkYjc2N2QuLjI2ZGU2YjggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvVHJhY2tDYXJnb1BhZ2UuaHRtbAorKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL1RyYWNrQ2FyZ29QYWdlLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpleHRlbmQ+CiAgICAgPGRpdiBpZD0iYm94Ij4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9UcmFja0NhcmdvUGFnZS5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9jb21tdW5pY2F0aW9uL3dlYi90cmFja2luZy9UcmFja0NhcmdvUGFnZS5wcm9wZXJ0aWVzCmluZGV4IDVmZWY4NGUuLjNlOTkyMjkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvY29tbXVuaWNhdGlvbi93ZWIvdHJhY2tpbmcvVHJhY2tDYXJnb1BhZ2UucHJvcGVydGllcworKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2NvbW11bmljYXRpb24vd2ViL3RyYWNraW5nL1RyYWNrQ2FyZ29QYWdlLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogY2FyZ29Ecm9wRG93bi5udWxsPVRyYWNrIGtub3duIGNhcmdvCiAKIGV0YT1Fc3RpbWF0ZWQgdGltZSBvZiBhcnJpdmFsIGluIHswfTogezF9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL3dpY2tldC9saW5rL0xpbmtQYW5lbC5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9pbmZyYXN0cnVjdHVyZS93aWNrZXQvbGluay9MaW5rUGFuZWwuaHRtbAppbmRleCAyNGMxYjU1Li5hNjI4Y2ZiIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL3dpY2tldC9saW5rL0xpbmtQYW5lbC5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvd2lja2V0L2xpbmsvTGlua1BhbmVsLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpwYW5lbD4KIAk8YSB3aWNrZXQ6aWQ9ImxpbmsiPjxzcGFuIHdpY2tldDppZD0ibGFiZWwiPjwvc3Bhbj48L2E+CiA8L3dpY2tldDpwYW5lbD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvd2lja2V0L3ByZXZuZXh0L1ByZXZOZXh0Lmh0bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL3dpY2tldC9wcmV2bmV4dC9QcmV2TmV4dC5odG1sCmluZGV4IDc0ZTI4ZjkuLmNhNDY5MTUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvd2lja2V0L3ByZXZuZXh0L1ByZXZOZXh0Lmh0bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9pbmZyYXN0cnVjdHVyZS93aWNrZXQvcHJldm5leHQvUHJldk5leHQuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8aHRtbCB4bWxuczp3aWNrZXQ+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2lja2V0OmhlYWQ+CiAgICAgPGxpbmsgaHJlZj0iY3NzL3ByZXYtbmV4dC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KIDwvd2lja2V0OmhlYWQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL3dpY2tldC90YWJzL1RhYnNQYW5lbC5odG1sIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9kY2ljYXJnby9zYW1wbGVfYi9pbmZyYXN0cnVjdHVyZS93aWNrZXQvdGFicy9UYWJzUGFuZWwuaHRtbAppbmRleCAzMDBjZjY2Li43ZmMwMzRhIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL2RjaWNhcmdvL3NhbXBsZV9iL2luZnJhc3RydWN0dXJlL3dpY2tldC90YWJzL1RhYnNQYW5lbC5odG1sCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvZGNpY2FyZ28vc2FtcGxlX2IvaW5mcmFzdHJ1Y3R1cmUvd2lja2V0L3RhYnMvVGFic1BhbmVsLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWwgeG1sbnM6d2lja2V0PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPHdpY2tldDpoZWFkPgogICAgIDxsaW5rIGhyZWY9ImNzcy90YWJzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgogPC93aWNrZXQ6aGVhZD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IGM2NTJlYzguLjkzYjQ3ZDUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMSw1ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi93ZWJhcHAvY3NzL3ByZXYtbmV4dC5jc3MgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi93ZWJhcHAvY3NzL3ByZXYtbmV4dC5jc3MKaW5kZXggYTA1ZTllMS4uZDZlODVjZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vd2ViYXBwL2Nzcy9wcmV2LW5leHQuY3NzCisrKyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3dlYmFwcC9jc3MvcHJldi1uZXh0LmNzcwpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCiAucHJldk5leHRJY29ucyB7CiAgIC8qIE1vZGlmeSBjdXN0b20gcG9zaXRpb25pbmcgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vd2ViYXBwL2Nzcy9zdHlsZS5jc3MgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi93ZWJhcHAvY3NzL3N0eWxlLmNzcwppbmRleCA2NzIzMGFmLi4xYmQ1OWFhIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi93ZWJhcHAvY3NzL3N0eWxlLmNzcworKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi93ZWJhcHAvY3NzL3N0eWxlLmNzcwpAQCAtMSwzICsxLDIyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCiBib2R5IHsKICAgICBtYXJnaW46IDJlbTsKICAgICBmb250LWZhbWlseTogJ0x1Y2lkYSBTYW5zJywgJ0hlbHZldGljYScsICdTYW5zLXNlcmlmJywgJ3NhbnMnLCBzYW5zLXNlcmlmOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vd2ViYXBwL2Nzcy90YWJzLmNzcyBiL3NhbXBsZXMvZGNpLWNhcmdvL2RjaXNhbXBsZV9iL3NyYy9tYWluL3dlYmFwcC9jc3MvdGFicy5jc3MKaW5kZXggNjE5ZjE3YS4uMTg0YjljNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kY2ktY2FyZ28vZGNpc2FtcGxlX2Ivc3JjL21haW4vd2ViYXBwL2Nzcy90YWJzLmNzcworKysgYi9zYW1wbGVzL2RjaS1jYXJnby9kY2lzYW1wbGVfYi9zcmMvbWFpbi93ZWJhcHAvY3NzL3RhYnMuY3NzCkBAIC0xLDMgKzEsMjIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKICN0YWJzIHsKICAgbWFyZ2luLXRvcDoxMnB4OwogICBmbG9hdDpsZWZ0OwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kY2kvYnVpbGQuZ3JhZGxlIGIvc2FtcGxlcy9kY2kvYnVpbGQuZ3JhZGxlCmluZGV4IGVhZTBlMWIuLjJkOWVlODYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGNpL2J1aWxkLmdyYWRsZQorKysgYi9zYW1wbGVzL2RjaS9idWlsZC5ncmFkbGUKQEAgLTEsNyArMSwyNiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotZGVzY3JpcHRpb24gPSAiU2FtcGxlIG9mIGhvdyBEQ0kgKERhdGEsIENvbnRleHQgJiBJbnRlcmFjdGlvbikgcGF0dGVybiBpcyBpbXBsZW1lbnRlZCB3aXRoIFFpNGouIgogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBTYW1wbGUgLSBEQ0kiIH19CitkZXNjcmlwdGlvbiA9ICJTYW1wbGUgb2YgaG93IERDSSAoRGF0YSwgQ29udGV4dCAmIEludGVyYWN0aW9uKSBwYXR0ZXJuIGlzIGltcGxlbWVudGVkIHdpdGggQXBhY2hlIFplc3TihKIuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgU2FtcGxlIC0gRENJIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RjaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RjaS9tb25leXRyYW5zZmVyL2NvbnRleHQvUm9sZS5qYXZhIGIvc2FtcGxlcy9kY2kvc3JjL21haW4vamF2YS9vcmcvcWk0ai9kY2kvbW9uZXl0cmFuc2Zlci9jb250ZXh0L1JvbGUuamF2YQppbmRleCA2ODk1YjIwLi44Y2QzMmJmIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RjaS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RjaS9tb25leXRyYW5zZmVyL2NvbnRleHQvUm9sZS5qYXZhCisrKyBiL3NhbXBsZXMvZGNpL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGNpL21vbmV5dHJhbnNmZXIvY29udGV4dC9Sb2xlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouZGNpLm1vbmV5dHJhbnNmZXIuY29udGV4dDsKIAogLyoqCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RkZHNhbXBsZTIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2NhcmdvL2FwcDEvbW9kZWwvY2FyZ28vQ2FyZ28uamF2YSBiL3NhbXBsZXMvZGRkc2FtcGxlMi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvY2FyZ28vYXBwMS9tb2RlbC9jYXJnby9DYXJnby5qYXZhCmluZGV4IDRjYTJhODMuLjc5NmMwZWIgMTAwNzU1Ci0tLSBhL3NhbXBsZXMvZGRkc2FtcGxlMi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvY2FyZ28vYXBwMS9tb2RlbC9jYXJnby9DYXJnby5qYXZhCisrKyBiL3NhbXBsZXMvZGRkc2FtcGxlMi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvY2FyZ28vYXBwMS9tb2RlbC9jYXJnby9DYXJnby5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuY2FyZ28uYXBwMS5tb2RlbC5jYXJnbzsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uT3B0aW9uYWw7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL2J1aWxkLmdyYWRsZSBiL3NhbXBsZXMvZm9ydW0vYnVpbGQuZ3JhZGxlCmluZGV4IGExMzZlMzAuLmMzZTlkZGQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vYnVpbGQuZ3JhZGxlCisrKyBiL3NhbXBsZXMvZm9ydW0vYnVpbGQuZ3JhZGxlCkBAIC0xLDEzICsxLDMyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCiBkZXNjcmlwdGlvbiA9ICJTYW1wbGUgb2YgaG93IHRvIGJ1aWxkIGEgd2ViIGZvcnVtIgogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBTYW1wbGUgLSBGb3J1bSIgfX0KK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBTYW1wbGUgLSBGb3J1bSIgfX0KIAogZGVwZW5kZW5jaWVzIHsKIAogICBjb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIgKQogICBjb21waWxlIHByb2plY3QoICI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkucmVzdC1zZXJ2ZXIiICkKICAgY29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LmZpbGVjb25maWciICkKLSAgY29tcGlsZSBwcm9qZWN0KCAiOm9yZy5xaTRqLmV4dGVuc2lvbnM6b3JnLnFpNGouZXh0ZW5zaW9uLmVudGl0eXN0b3JlLW5lbzRqIiApCisgIGNvbXBpbGUgcHJvamVjdCggIjpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi5lbnRpdHlzdG9yZS1maWxlIiApCiAgIGNvbXBpbGUgcHJvamVjdCggIjpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi52YWx1ZXNlcmlhbGl6YXRpb24tb3JnanNvbiIgKQogICBjb21waWxlIGxpYnJhcmllcy5zZXJ2bGV0X2FwaQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9hc3NlbWJsZXIvRm9ydW1Bc3NlbWJsZXIuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2Fzc2VtYmxlci9Gb3J1bUFzc2VtYmxlci5qYXZhCmluZGV4IDgwNzg4NmQuLmE2ZmU4MTQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2Fzc2VtYmxlci9Gb3J1bUFzc2VtYmxlci5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2Fzc2VtYmxlci9Gb3J1bUFzc2VtYmxlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uYXNzZW1ibGVyOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CkBAIC0xMyw5ICszMSw4IEBACiBpbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLkNsYXNzU2Nhbm5lcjsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTGF5ZXJBc3NlbWJseTsKIGltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7CitpbXBvcnQgb3JnLnFpNGouZW50aXR5c3RvcmUuZmlsZS5hc3NlbWJseS5GaWxlRW50aXR5U3RvcmVBc3NlbWJsZXI7CiBpbXBvcnQgb3JnLnFpNGouZW50aXR5c3RvcmUubWVtb3J5Lk1lbW9yeUVudGl0eVN0b3JlU2VydmljZTsKLWltcG9ydCBvcmcucWk0ai5lbnRpdHlzdG9yZS5uZW80ai5OZW9Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmVudGl0eXN0b3JlLm5lbzRqLk5lb0VudGl0eVN0b3JlU2VydmljZTsKIGltcG9ydCBvcmcucWk0ai5mdW5jdGlvbmFsLkZ1bmN0aW9uOwogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuZmlsZWNvbmZpZy5GaWxlQ29uZmlndXJhdGlvblNlcnZpY2U7CiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5yZXN0LmNvbW1vbi5WYWx1ZUFzc2VtYmxlcjsKQEAgLTU1LDEwICs3MiwxMCBAQAogCiAgICAgICAgIGFzc2VtYmx5LnNldE5hbWUoICJGb3J1bSIgKTsKIAorICAgICAgICBNb2R1bGVBc3NlbWJseSBjb25maWdNb2R1bGU7CiAgICAgICAgIExheWVyQXNzZW1ibHkgY29uZmlndXJhdGlvbiA9IGFzc2VtYmx5LmxheWVyKCAiQ29uZmlndXJhdGlvbiIgKTsKICAgICAgICAgewotICAgICAgICAgICAgTW9kdWxlQXNzZW1ibHkgY29uZmlnTW9kdWxlID0gY29uZmlndXJhdGlvbi5tb2R1bGUoICJDb25maWd1cmF0aW9uIiApOwotICAgICAgICAgICAgY29uZmlnTW9kdWxlLmVudGl0aWVzKCBOZW9Db25maWd1cmF0aW9uLmNsYXNzICkudmlzaWJsZUluKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICk7CisgICAgICAgICAgICBjb25maWdNb2R1bGUgPSBjb25maWd1cmF0aW9uLm1vZHVsZSggIkNvbmZpZ3VyYXRpb24iICk7CiAgICAgICAgICAgICBjb25maWdNb2R1bGUuc2VydmljZXMoIE1lbW9yeUVudGl0eVN0b3JlU2VydmljZS5jbGFzcyApOwogICAgICAgICAgICAgY29uZmlnTW9kdWxlLnNlcnZpY2VzKCBVdWlkSWRlbnRpdHlHZW5lcmF0b3JTZXJ2aWNlLmNsYXNzICk7CiAgICAgICAgICAgICBuZXcgT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcigpLmFzc2VtYmxlKCBjb25maWdNb2R1bGUgKTsKQEAgLTY4LDcgKzg1LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgTW9kdWxlQXNzZW1ibHkgZW50aXR5U3RvcmUgPSBpbmZyYXN0cnVjdHVyZS5tb2R1bGUoICJFbnRpdHlTdG9yZSIgKTsKICAgICAgICAgICAgIGVudGl0eVN0b3JlLnNlcnZpY2VzKCBGaWxlQ29uZmlndXJhdGlvblNlcnZpY2UuY2xhc3MgKTsKLSAgICAgICAgICAgIGVudGl0eVN0b3JlLnNlcnZpY2VzKCBOZW9FbnRpdHlTdG9yZVNlcnZpY2UuY2xhc3MgKS52aXNpYmxlSW4oIFZpc2liaWxpdHkuYXBwbGljYXRpb24gKTsKKyAgICAgICAgICAgIG5ldyBGaWxlRW50aXR5U3RvcmVBc3NlbWJsZXIoKS53aXRoQ29uZmlnKCBjb25maWdNb2R1bGUsIFZpc2liaWxpdHkuYXBwbGljYXRpb24gKS5hc3NlbWJsZSggZW50aXR5U3RvcmUgKTsKICAgICAgICAgICAgIGVudGl0eVN0b3JlLnNlcnZpY2VzKCBVdWlkSWRlbnRpdHlHZW5lcmF0b3JTZXJ2aWNlLmNsYXNzICkudmlzaWJsZUluKCBWaXNpYmlsaXR5LmFwcGxpY2F0aW9uICk7CiAgICAgICAgICAgICBuZXcgT3JnSnNvblZhbHVlU2VyaWFsaXphdGlvbkFzc2VtYmxlcigpLgogICAgICAgICAgICAgICAgIHZpc2libGVJbiggVmlzaWJpbGl0eS5hcHBsaWNhdGlvbiApLgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9Db250ZXh0LmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L0NvbnRleHQuamF2YQppbmRleCAxMjBjMmIzLi5lMzM4ODMzIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L0NvbnRleHQuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L0NvbnRleHQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmNvbnRleHQ7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuUWk0ajsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvRXZlbnRzLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L0V2ZW50cy5qYXZhCmluZGV4IDMyMzJlZGIuLjFmZGFlMzUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvRXZlbnRzLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9FdmVudHMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmNvbnRleHQ7CiAKIGltcG9ydCBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmNvbnRleHQuc2lnbnVwLlJlZ2lzdHJhdGlvbjsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvRXZlbnRzU2VydmljZS5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9FdmVudHNTZXJ2aWNlLmphdmEKaW5kZXggYzA0MGIyYS4uMDQ3ODkwYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9FdmVudHNTZXJ2aWNlLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9FdmVudHNTZXJ2aWNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5jb250ZXh0OwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvbkhhbmRsZXI7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FjY291bnQvVXBkYXRlUHJvZmlsZS5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9hY2NvdW50L1VwZGF0ZVByb2ZpbGUuamF2YQppbmRleCAzZmIwZmQ2Li5iODc3NjZjIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FjY291bnQvVXBkYXRlUHJvZmlsZS5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvYWNjb3VudC9VcGRhdGVQcm9maWxlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5jb250ZXh0LmFjY291bnQ7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uc3RyYWludC5OYW1lOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9hZG1pbmlzdHJhdGlvbi9Cb2FyZEFkbWluaXN0cmF0aW9uLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL0JvYXJkQWRtaW5pc3RyYXRpb24uamF2YQppbmRleCA0YTZhNWFhLi4yNzk3MDU4IDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL0JvYXJkQWRtaW5pc3RyYXRpb24uamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL0JvYXJkQWRtaW5pc3RyYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmNvbnRleHQuYWRtaW5pc3RyYXRpb247CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uc3RyYWludC5OYW1lOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9hZG1pbmlzdHJhdGlvbi9Gb3J1bUFkbWluaXN0cmF0aW9uLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL0ZvcnVtQWRtaW5pc3RyYXRpb24uamF2YQppbmRleCBlN2MyMWJmLi5iZTViM2ZkIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL0ZvcnVtQWRtaW5pc3RyYXRpb24uamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL0ZvcnVtQWRtaW5pc3RyYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmNvbnRleHQuYWRtaW5pc3RyYXRpb247CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uc3RyYWludC5OYW1lOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9hZG1pbmlzdHJhdGlvbi9Gb3J1bXNBZG1pbmlzdHJhdGlvbi5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9hZG1pbmlzdHJhdGlvbi9Gb3J1bXNBZG1pbmlzdHJhdGlvbi5qYXZhCmluZGV4IGUxNjZmMWIuLjEwZGZiOTYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvYWRtaW5pc3RyYXRpb24vRm9ydW1zQWRtaW5pc3RyYXRpb24uamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL0ZvcnVtc0FkbWluaXN0cmF0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5jb250ZXh0LmFkbWluaXN0cmF0aW9uOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbnN0cmFpbnQuTmFtZTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvYWRtaW5pc3RyYXRpb24vTW9kZXJhdG9yQWRtaW5pc3RyYXRpb24uamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvYWRtaW5pc3RyYXRpb24vTW9kZXJhdG9yQWRtaW5pc3RyYXRpb24uamF2YQppbmRleCA4MzY3ODhkLi41NjFjMDE2IDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL01vZGVyYXRvckFkbWluaXN0cmF0aW9uLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9hZG1pbmlzdHJhdGlvbi9Nb2RlcmF0b3JBZG1pbmlzdHJhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uY29udGV4dC5hZG1pbmlzdHJhdGlvbjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9hZG1pbmlzdHJhdGlvbi9Nb2RlcmF0b3JzQWRtaW5pc3RyYXRpb24uamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvYWRtaW5pc3RyYXRpb24vTW9kZXJhdG9yc0FkbWluaXN0cmF0aW9uLmphdmEKaW5kZXggYzVkOWZmYS4uMDYzMjM2OCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9hZG1pbmlzdHJhdGlvbi9Nb2RlcmF0b3JzQWRtaW5pc3RyYXRpb24uamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL01vZGVyYXRvcnNBZG1pbmlzdHJhdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uY29udGV4dC5hZG1pbmlzdHJhdGlvbjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9hZG1pbmlzdHJhdGlvbi9Vc2Vyc0FkbWluaXN0cmF0aW9uLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL1VzZXJzQWRtaW5pc3RyYXRpb24uamF2YQppbmRleCAxN2E0MTg0Li44MzI5ZGIzIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL1VzZXJzQWRtaW5pc3RyYXRpb24uamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2FkbWluaXN0cmF0aW9uL1VzZXJzQWRtaW5pc3RyYXRpb24uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmNvbnRleHQuYWRtaW5pc3RyYXRpb247CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvbG9naW4vTG9naW4uamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvbG9naW4vTG9naW4uamF2YQppbmRleCAxOGJiYjA0Li40Njk0MzY3IDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L2xvZ2luL0xvZ2luLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9sb2dpbi9Mb2dpbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uY29udGV4dC5sb2dpbjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25zdHJhaW50Lk5hbWU7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L21vZGVyYXRpb24vTW9kZXJhdGlvbkNvbnRleHQuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvbW9kZXJhdGlvbi9Nb2RlcmF0aW9uQ29udGV4dC5qYXZhCmluZGV4IGFlMjBjM2EuLmU4Njc0MGIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvbW9kZXJhdGlvbi9Nb2RlcmF0aW9uQ29udGV4dC5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvbW9kZXJhdGlvbi9Nb2RlcmF0aW9uQ29udGV4dC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uY29udGV4dC5tb2RlcmF0aW9uOwogCiAvKioKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvc2lnbnVwL1JlZ2lzdHJhdGlvbi5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9zaWdudXAvUmVnaXN0cmF0aW9uLmphdmEKaW5kZXggYmY3OWY3Mi4uODExMGJhNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9zaWdudXAvUmVnaXN0cmF0aW9uLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9zaWdudXAvUmVnaXN0cmF0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5jb250ZXh0LnNpZ251cDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvc2lnbnVwL1NpZ251cC5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9zaWdudXAvU2lnbnVwLmphdmEKaW5kZXggOTIxMmM3My4uYTA3ZWMyZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9zaWdudXAvU2lnbnVwLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC9zaWdudXAvU2lnbnVwLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5jb250ZXh0LnNpZ251cDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50Q29tcG9zaXRlOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC92aWV3L1ZpZXdCb2FyZC5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC92aWV3L1ZpZXdCb2FyZC5qYXZhCmluZGV4IDEyMGRjZWEuLjYzZjNkOTEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvdmlldy9WaWV3Qm9hcmQuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L3ZpZXcvVmlld0JvYXJkLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5jb250ZXh0LnZpZXc7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvdmlldy9WaWV3Rm9ydW0uamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvdmlldy9WaWV3Rm9ydW0uamF2YQppbmRleCA4YjY2MzhkLi41NzBiM2NiIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L3ZpZXcvVmlld0ZvcnVtLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC92aWV3L1ZpZXdGb3J1bS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uY29udGV4dC52aWV3OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TdHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L3ZpZXcvVmlld1Bvc3QuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvdmlldy9WaWV3UG9zdC5qYXZhCmluZGV4IDkzYzhjNjQuLmU5MjdhNDIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvdmlldy9WaWV3UG9zdC5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvdmlldy9WaWV3UG9zdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uY29udGV4dC52aWV3OwogCiBpbXBvcnQgamF2YS51dGlsLkRhdGU7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L3ZpZXcvVmlld1RvcGljLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9jb250ZXh0L3ZpZXcvVmlld1RvcGljLmphdmEKaW5kZXggODYyNTViMS4uNGRkMzNkYiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vY29udGV4dC92aWV3L1ZpZXdUb3BpYy5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2NvbnRleHQvdmlldy9WaWV3VG9waWMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmNvbnRleHQudmlldzsKIAogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkucmVzdC5zZXJ2ZXIuYXBpLlJlc291cmNlSW5kZXg7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL0FkbWluaXN0cmF0b3JzLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL0FkbWluaXN0cmF0b3JzLmphdmEKaW5kZXggMDc2ZGQyZi4uNTEzYzZkZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9BZG1pbmlzdHJhdG9ycy5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvQWRtaW5pc3RyYXRvcnMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmRhdGE7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9Nb2RlcmF0b3JzLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL01vZGVyYXRvcnMuamF2YQppbmRleCAyZDg5ZTYxLi40MjAzZDFlIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL01vZGVyYXRvcnMuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL01vZGVyYXRvcnMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmRhdGE7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uTWFueUFzc29jaWF0aW9uOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9lbnRpdHkvQm9hcmQuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L0JvYXJkLmphdmEKaW5kZXggMjYxNDc0OS4uM2I4ZThiZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9lbnRpdHkvQm9hcmQuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL2VudGl0eS9Cb2FyZC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uZGF0YS5lbnRpdHk7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb247CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL2VudGl0eS9Gb3J1bS5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9lbnRpdHkvRm9ydW0uamF2YQppbmRleCBkMTM4NmI3Li45M2Y5MjNlIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL2VudGl0eS9Gb3J1bS5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L0ZvcnVtLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5kYXRhLmVudGl0eTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5NYW55QXNzb2NpYXRpb247CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL2VudGl0eS9Gb3J1bXMuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L0ZvcnVtcy5qYXZhCmluZGV4IGM4ODFiYTkuLjUxMmE0MWYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L0ZvcnVtcy5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L0ZvcnVtcy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uZGF0YS5lbnRpdHk7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L1Bvc3QuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L1Bvc3QuamF2YQppbmRleCA2NzU3MzMyLi5kYjc4MGQ3IDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL2VudGl0eS9Qb3N0LmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9lbnRpdHkvUG9zdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uZGF0YS5lbnRpdHk7CiAKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L1RvcGljLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL2VudGl0eS9Ub3BpYy5qYXZhCmluZGV4IGM3ZjVjOGYuLjM5MjNkNjEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L1RvcGljLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9lbnRpdHkvVG9waWMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmRhdGEuZW50aXR5OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9lbnRpdHkvVXNlci5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9lbnRpdHkvVXNlci5qYXZhCmluZGV4IDNmMGQzYTYuLmEwYTc2MDEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L1VzZXIuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL2VudGl0eS9Vc2VyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5kYXRhLmVudGl0eTsKIAogaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L1VzZXJzLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kYXRhL2VudGl0eS9Vc2Vycy5qYXZhCmluZGV4IDRiMjVhMTIuLjhiNTkxYzQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RhdGEvZW50aXR5L1VzZXJzLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZGF0YS9lbnRpdHkvVXNlcnMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmRhdGEuZW50aXR5OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlCdWlsZGVyOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZG9tYWluZXZlbnQvRG9tYWluQ29tbWFuZFJlc3VsdC5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZG9tYWluZXZlbnQvRG9tYWluQ29tbWFuZFJlc3VsdC5qYXZhCmluZGV4IDIwNGJlZjUuLjhhOGYyY2QgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RvbWFpbmV2ZW50L0RvbWFpbkNvbW1hbmRSZXN1bHQuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kb21haW5ldmVudC9Eb21haW5Db21tYW5kUmVzdWx0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5kb21haW5ldmVudDsKIAogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkucmVzdC5zZXJ2ZXIuc3BpLkNvbW1hbmRSZXN1bHQ7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kb21haW5ldmVudC9Eb21haW5FdmVudC5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZG9tYWluZXZlbnQvRG9tYWluRXZlbnQuamF2YQppbmRleCBlZTk2YmQ5Li43YmE0ZTlmIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kb21haW5ldmVudC9Eb21haW5FdmVudC5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RvbWFpbmV2ZW50L0RvbWFpbkV2ZW50LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5kb21haW5ldmVudDsKIAogaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RvbWFpbmV2ZW50L0RvbWFpbkV2ZW50VmFsdWUuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RvbWFpbmV2ZW50L0RvbWFpbkV2ZW50VmFsdWUuamF2YQppbmRleCBiMWUxYTk4Li45YmEyMmQ1IDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kb21haW5ldmVudC9Eb21haW5FdmVudFZhbHVlLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZG9tYWluZXZlbnQvRG9tYWluRXZlbnRWYWx1ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0uZG9tYWluZXZlbnQ7CiAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RvbWFpbmV2ZW50L1BhcmFtZXRlclZhbHVlLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9kb21haW5ldmVudC9QYXJhbWV0ZXJWYWx1ZS5qYXZhCmluZGV4IGYwYjhkZTEuLjFmMzJiODkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL2RvbWFpbmV2ZW50L1BhcmFtZXRlclZhbHVlLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vZG9tYWluZXZlbnQvUGFyYW1ldGVyVmFsdWUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLmRvbWFpbmV2ZW50OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9Gb3J1bVJlc3RsZXQuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvRm9ydW1SZXN0bGV0LmphdmEKaW5kZXggN2M1NDg3Yi4uZTU3MzI0NCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9Gb3J1bVJlc3RsZXQuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L0ZvcnVtUmVzdGxldC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0ucmVzdDsKIAogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkucmVzdC5zZXJ2ZXIuYXBpLkNvbnRleHRSZXN0bGV0OwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9Sb290UmVzb3VyY2UuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvcmVzb3VyY2UvUm9vdFJlc291cmNlLmphdmEKaW5kZXggODgxZDMxYS4uMmQ4OTBiMCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9Sb290UmVzb3VyY2UuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL1Jvb3RSZXNvdXJjZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0ucmVzdC5yZXNvdXJjZTsKIAogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvcmVzb3VyY2UvYWRtaW5pc3RyYXRpb24vQWRtaW5pc3RyYXRpb25SZXNvdXJjZS5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9hZG1pbmlzdHJhdGlvbi9BZG1pbmlzdHJhdGlvblJlc291cmNlLmphdmEKaW5kZXggOTU0YzQzMC4uNTNjOTRjZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9hZG1pbmlzdHJhdGlvbi9BZG1pbmlzdHJhdGlvblJlc291cmNlLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9hZG1pbmlzdHJhdGlvbi9BZG1pbmlzdHJhdGlvblJlc291cmNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5yZXN0LnJlc291cmNlLmFkbWluaXN0cmF0aW9uOwogCiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5hcGkuQ29udGV4dFJlc291cmNlOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9hZG1pbmlzdHJhdGlvbi9Gb3J1bXNSZXNvdXJjZS5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9hZG1pbmlzdHJhdGlvbi9Gb3J1bXNSZXNvdXJjZS5qYXZhCmluZGV4IGEwZTVlYmEuLmMyY2VjYzggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvcmVzb3VyY2UvYWRtaW5pc3RyYXRpb24vRm9ydW1zUmVzb3VyY2UuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL2FkbWluaXN0cmF0aW9uL0ZvcnVtc1Jlc291cmNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5yZXN0LnJlc291cmNlLmFkbWluaXN0cmF0aW9uOwogCiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5hcGkuQ29udGV4dFJlc291cmNlOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9hZG1pbmlzdHJhdGlvbi9Vc2Vyc1Jlc291cmNlLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL2FkbWluaXN0cmF0aW9uL1VzZXJzUmVzb3VyY2UuamF2YQppbmRleCA3YjNjNmJhLi4zYWEwOWZiIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL2FkbWluaXN0cmF0aW9uL1VzZXJzUmVzb3VyY2UuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL2FkbWluaXN0cmF0aW9uL1VzZXJzUmVzb3VyY2UuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLnJlc3QucmVzb3VyY2UuYWRtaW5pc3RyYXRpb247CiAKIGltcG9ydCBvcmcucWk0ai5hcGkucXVlcnkuUXVlcnk7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL2ZvcnVtL0JvYXJkUmVzb3VyY2UuamF2YSBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvcmVzb3VyY2UvZm9ydW0vQm9hcmRSZXNvdXJjZS5qYXZhCmluZGV4IGU4NGY1M2UuLmY0MDg5MjcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvcmVzb3VyY2UvZm9ydW0vQm9hcmRSZXNvdXJjZS5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvcmVzb3VyY2UvZm9ydW0vQm9hcmRSZXNvdXJjZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnNhbXBsZXMuZm9ydW0ucmVzdC5yZXNvdXJjZS5mb3J1bTsKIAogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkucmVzdC5zZXJ2ZXIuYXBpLkNvbnRleHRSZXNvdXJjZTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvcmVzb3VyY2UvZm9ydW0vRm9ydW1SZXNvdXJjZS5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9mb3J1bS9Gb3J1bVJlc291cmNlLmphdmEKaW5kZXggYTVhYTc2MC4uMzY4NjRkNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9mb3J1bS9Gb3J1bVJlc291cmNlLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9mb3J1bS9Gb3J1bVJlc291cmNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5yZXN0LnJlc291cmNlLmZvcnVtOwogCiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5hcGkuQ29udGV4dFJlc291cmNlOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9mb3J1bS9Gb3J1bXNSZXNvdXJjZS5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9mb3J1bS9Gb3J1bXNSZXNvdXJjZS5qYXZhCmluZGV4IDM4NGUwMzcuLmM0OGEyOGEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvcmVzb3VyY2UvZm9ydW0vRm9ydW1zUmVzb3VyY2UuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL2ZvcnVtL0ZvcnVtc1Jlc291cmNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5yZXN0LnJlc291cmNlLmZvcnVtOwogCiBpbXBvcnQgb3JnLnFpNGoubGlicmFyeS5yZXN0LnNlcnZlci5hcGkuQ29udGV4dFJlc291cmNlOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9sb2dpbi9Mb2dpblJlc291cmNlLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL2xvZ2luL0xvZ2luUmVzb3VyY2UuamF2YQppbmRleCA1NTA5ZjNkLi43NmM0NDU3IDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL2xvZ2luL0xvZ2luUmVzb3VyY2UuamF2YQorKysgYi9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL2xvZ2luL0xvZ2luUmVzb3VyY2UuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLnJlc3QucmVzb3VyY2UubG9naW47CiAKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnJlc3Quc2VydmVyLmFwaS5Db250ZXh0UmVzb3VyY2U7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL3NpZ251cC9TaWdudXBSZXNvdXJjZS5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vcmVzdC9yZXNvdXJjZS9zaWdudXAvU2lnbnVwUmVzb3VyY2UuamF2YQppbmRleCA3MTNlYTJlLi42OWEzNDFhIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS9yZXN0L3Jlc291cmNlL3NpZ251cC9TaWdudXBSZXNvdXJjZS5qYXZhCisrKyBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3Jlc3QvcmVzb3VyY2Uvc2lnbnVwL1NpZ251cFJlc291cmNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5yZXN0LnJlc291cmNlLnNpZ251cDsKIAogaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkucmVzdC5zZXJ2ZXIuYXBpLkNvbnRleHRSZXNvdXJjZTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3NlcnZpY2UvQm9vdHN0cmFwRGF0YS5qYXZhIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vc2VydmljZS9Cb290c3RyYXBEYXRhLmphdmEKaW5kZXggODc3NmEwMC4uNjgwMGU2YiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vc2VydmljZS9Cb290c3RyYXBEYXRhLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vc2VydmljZS9Cb290c3RyYXBEYXRhLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouc2FtcGxlcy5mb3J1bS5zZXJ2aWNlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmFjdGl2YXRpb24uQWN0aXZhdG9yQWRhcHRlcjsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3NhbXBsZXMvZm9ydW0vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBlNjlkZTI5Li5hOGY2YTgyIDEwMDY0NAotLS0gYS9zYW1wbGVzL2ZvcnVtL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0wLDAgKzEsMTYgQEAKKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZm9ydW0vc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3dlYi9NYWluLmphdmEgYi9zYW1wbGVzL2ZvcnVtL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovc2FtcGxlcy9mb3J1bS93ZWIvTWFpbi5qYXZhCmluZGV4IDYyM2FjMTIuLjI5OGU2NmUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZm9ydW0vc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9zYW1wbGVzL2ZvcnVtL3dlYi9NYWluLmphdmEKKysrIGIvc2FtcGxlcy9mb3J1bS9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3NhbXBsZXMvZm9ydW0vd2ViL01haW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5zYW1wbGVzLmZvcnVtLndlYjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb247CmRpZmYgLS1naXQgYS9zYW1wbGVzL3JlbnRhbC9idWlsZC5ncmFkbGUgYi9zYW1wbGVzL3JlbnRhbC9idWlsZC5ncmFkbGUKaW5kZXggNzY2ODc2YS4uNjA0NGIyYiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9yZW50YWwvYnVpbGQuZ3JhZGxlCisrKyBiL3NhbXBsZXMvcmVudGFsL2J1aWxkLmdyYWRsZQpAQCAtMSwzICsxLDIyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCiBkZXNjcmlwdGlvbiA9ICJTYW1wbGUgb2YgaW1wbGVtZW50YXRpb24gb2YgYSBDYXIgUmVudGFsIGFwcGxpY2F0aW9uLiIKIAogYXBwbHkgcGx1Z2luOiAnd2FyJwpAQCAtOCw3ICsyNyw3IEBACiAvLyBBbmQgdGhlbiBnbyB0bzoKIC8vICAgICAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL29yZy5xaTRqLnNhbXBsZS5yZW50YWwvcmVudGFsL21haW4KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogU2FtcGxlIC0gQ2FyIFJlbnRhbCIgfX0KK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBTYW1wbGUgLSBDYXIgUmVudGFsIiB9fQogCiBkZXBlbmRlbmNpZXMgewogCmRpZmYgLS1naXQgYS9zYW1wbGVzL3JlbnRhbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9yZW50YWwvd2ViL1F1aWtpdFNlcnZsZXQuamF2YSBiL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL3JlbnRhbC93ZWIvUXVpa2l0U2VydmxldC5qYXZhCmluZGV4IDBjNGExZGMuLmY0MzMyOGIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL3JlbnRhbC93ZWIvUXVpa2l0U2VydmxldC5qYXZhCisrKyBiL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL3JlbnRhbC93ZWIvUXVpa2l0U2VydmxldC5qYXZhCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbiggIkNhbiBub3QgaW5pdGlhbGl6ZSBRaTRqLiIsIGUgKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCAiQ2FuIG5vdCBpbml0aWFsaXplIFplc3QuIiwgZSApOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIlByb2JsZW0gdG8gcGFzc2l2YXRlIFFpNGoiLCBlICk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIlByb2JsZW0gdG8gcGFzc2l2YXRlIFplc3QiLCBlICk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvcmVudGFsL2luZGV4Lmh0bWwgYi9zYW1wbGVzL3JlbnRhbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL3JlbnRhbC9pbmRleC5odG1sCmluZGV4IGU2OWRlMjkuLmE4ZjZhODIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvcmVudGFsL2luZGV4Lmh0bWwKKysrIGIvc2FtcGxlcy9yZW50YWwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9yZW50YWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDE2IEBACis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3JlbnRhbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL3JlbnRhbC93ZWIvQm9va2luZ1BhZ2UuaHRtbCBiL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvcmVudGFsL3dlYi9Cb29raW5nUGFnZS5odG1sCmluZGV4IGM1NDA3ZmUuLmU3Nzc1MjQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvcmVudGFsL3dlYi9Cb29raW5nUGFnZS5odG1sCisrKyBiL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9zYW1wbGUvcmVudGFsL3dlYi9Cb29raW5nUGFnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIgogICAgICAgeG1sbnM6cWk9Imh0dHA6Ly93d3cucWk0ai5vcmcvbnMvMjAwOS9xdWlraXQiCiAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9yZW50YWwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3NhbXBsZS9yZW50YWwvd2ViL01haW5QYWdlLmh0bWwgYi9zYW1wbGVzL3JlbnRhbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL3JlbnRhbC93ZWIvTWFpblBhZ2UuaHRtbAppbmRleCAyMTBhNDJkLi5hODZiOGFkIDEwMDY0NAotLS0gYS9zYW1wbGVzL3JlbnRhbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL3JlbnRhbC93ZWIvTWFpblBhZ2UuaHRtbAorKysgYi9zYW1wbGVzL3JlbnRhbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovc2FtcGxlL3JlbnRhbC93ZWIvTWFpblBhZ2UuaHRtbApAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiIKICAgICAgIHhtbG5zOnFpPSJodHRwOi8vd3d3LnFpNGoub3JnL25zLzIwMDkvcXVpa2l0IgogICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL3Jlc291cmNlcy9yZXNvbHZlLnByb3BlcnRpZXMgYi9zYW1wbGVzL3JlbnRhbC9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzb2x2ZS5wcm9wZXJ0aWVzCmluZGV4IGRlZjY1OTguLjAxODRjNWQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL3Jlc291cmNlcy9yZXNvbHZlLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9yZW50YWwvc3JjL21haW4vcmVzb3VyY2VzL3Jlc29sdmUucHJvcGVydGllcwpAQCAtMSwyICsxLDE3IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBodHRwXDovL3d3dy53My5vcmcvMjAwMi8wOC94aHRtbC94aHRtbDEtc3RyaWN0LnhzZD14aHRtbDEtc3RyaWN0LnhzZAogaHR0cFw6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZD14bWwueHNkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9yZW50YWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3NhbXBsZXMvcmVudGFsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggZWE2MDI1ZS4uNjdhMjI0OCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9yZW50YWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9zYW1wbGVzL3JlbnRhbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiCmRpZmYgLS1naXQgYS9zYW1wbGVzL3NxbC1zdXBwb3J0L2J1aWxkLmdyYWRsZSBiL3NhbXBsZXMvc3FsLXN1cHBvcnQvYnVpbGQuZ3JhZGxlCmluZGV4IGE3MDQ0YzguLjIxZWJhNWIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc3FsLXN1cHBvcnQvYnVpbGQuZ3JhZGxlCisrKyBiL3NhbXBsZXMvc3FsLXN1cHBvcnQvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKIGRlc2NyaXB0aW9uID0gIlNRTCBTdXBwb3J0IFNhbXBsZS4iCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIFNhbXBsZSAtIFNRTCBTdXBwb3J0IiB9fQoramFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIFNhbXBsZSAtIFNRTCBTdXBwb3J0IiB9fQogCiBkZXBlbmRlbmNpZXMgewogCkBAIC0xMiw3ICszMSw3IEBACiAKICAgICBydW50aW1lIHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpCiAgICAgcnVudGltZSBsaWJyYXJpZXMucG9zdGdyZXMKLSAgICBydW50aW1lIGxpYnJhcmllcy5sb2diYWNrCisgICAgcnVudGltZSBsaWJyYXJpZXMuc2xmNGpfc2ltcGxlCiAKIH0KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9zcWxzdXBwb3J0L01haW4uamF2YSBiL3NhbXBsZXMvc3FsLXN1cHBvcnQvc3JjL21haW4vamF2YS9vcmcvcWk0ai9zYW1wbGUvc3Fsc3VwcG9ydC9NYWluLmphdmEKaW5kZXggOWVlZDljNy4uYmY1MjlhNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3NhbXBsZS9zcWxzdXBwb3J0L01haW4uamF2YQorKysgYi9zYW1wbGVzL3NxbC1zdXBwb3J0L3NyYy9tYWluL2phdmEvb3JnL3FpNGovc2FtcGxlL3NxbHN1cHBvcnQvTWFpbi5qYXZhCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24ucGFzc2l2YXRlKCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiVW5hYmxlIHRvIHBhc3NpdmF0ZSBRaTRqIGFwcGxpY2F0aW9uISIgKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiVW5hYmxlIHRvIHBhc3NpdmF0ZSBaZXN0IGFwcGxpY2F0aW9uISIgKTsKICAgICAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvZW50aXR5c3RvcmUtcG9zdGdyZXNxbC5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvZW50aXR5c3RvcmUtcG9zdGdyZXNxbC5wcm9wZXJ0aWVzCmluZGV4IDliNzM2MTAuLmVhOGQ2MjIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc3FsLXN1cHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL2VudGl0eXN0b3JlLXBvc3RncmVzcWwucHJvcGVydGllcworKysgYi9zYW1wbGVzL3NxbC1zdXBwb3J0L3NyYy9tYWluL3Jlc291cmNlcy9lbnRpdHlzdG9yZS1wb3N0Z3Jlc3FsLnByb3BlcnRpZXMKQEAgLTEsMiArMSwxNyBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogCiBzY2hlbWFOYW1lPXNxbF9zYW1wbGVfZW50aXR5c3RvcmUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3FsLXN1cHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL2luZGV4aW5nLXNxbC5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvaW5kZXhpbmctc3FsLnByb3BlcnRpZXMKaW5kZXggZGI4ZWE4Zi4uODNjODM3YSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvaW5kZXhpbmctc3FsLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvaW5kZXhpbmctc3FsLnByb3BlcnRpZXMKQEAgLTEsMiArMSwxNyBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogCiBzY2hlbWFOYW1lPXNxbF9zYW1wbGVfaW5kZXhpbmcKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3FsLXN1cHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL2xvZ2JhY2sueG1sIGIvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YWRmM2QuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNvbmZpZ3VyYXRpb24+Ci0KLSAgICA8YXBwZW5kZXIgbmFtZT0ic3Rkb3V0IiBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5Db25zb2xlQXBwZW5kZXIiPgotICAgICAgICA8bGF5b3V0IGNsYXNzPSJjaC5xb3MubG9nYmFjay5jbGFzc2ljLlBhdHRlcm5MYXlvdXQiPgotICAgICAgICAgICAgPFBhdHRlcm4+W0AlLTEwdGhyZWFkXSAlLTVsZXZlbCAlbG9nZ2VyezQyfSAtICVtc2clbjwvUGF0dGVybj4KLSAgICAgICAgPC9sYXlvdXQ+Ci0gICAgPC9hcHBlbmRlcj4KLQotICAgIDxyb290IGxldmVsPSJ3YXJuIj4KLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9InN0ZG91dCIgLz4KLSAgICA8L3Jvb3Q+Ci0KLSAgICA8IS0tIFNRTCBTdXBwb3J0IC0tPgotICAgIDxsb2dnZXIgbmFtZT0ib3JnLnFpNGoubGlicmFyeS5zcWwiIGxldmVsPSJ3YXJuIi8+Ci0KLSAgICA8IS0tIFNRTCBFbnRpdHlTdG9yZSAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5xaTRqLmVudGl0eXN0b3JlLnNxbCIgbGV2ZWw9Indhcm4iLz4KLSAgICA8IS0tIFB1dCB0aGlzIG9uZSB0byB0cmFjZSBsZXZlbCB0byBzZWUgYWxsIFNRTCBzdHJpbmdzIC0tPgotICAgIDxsb2dnZXIgbmFtZT0ib3JnLnFpNGouZW50aXR5c3RvcmUuc3FsLmludGVybmFsLmRhdGFiYXNlLkRhdGFiYXNlU1FMU3RyaW5nc0J1aWxkZXIiIGxldmVsPSJ3YXJuIi8+Ci0KLSAgICA8IS0tIFNRTCBJbmRleC9RdWVyeSAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5xaTRqLmluZGV4LnNxbCIgbGV2ZWw9Indhcm4iLz4KLQotPC9jb25maWd1cmF0aW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3FsLXN1cHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL3Bvc3RncmVzcWwtZXMtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvcG9zdGdyZXNxbC1lcy1kYXRhc291cmNlLnByb3BlcnRpZXMKaW5kZXggYTkwNmQ4NC4uZjdkN2FkNSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvcG9zdGdyZXNxbC1lcy1kYXRhc291cmNlLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9zcWwtc3VwcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvcG9zdGdyZXNxbC1lcy1kYXRhc291cmNlLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogZW5hYmxlZD10cnVlCiB1cmw9amRiYzpwb3N0Z3Jlc3FsOi8vbG9jYWxob3N0OjU0MzIvamRiY190ZXN0X2RiCiBkcml2ZXI9b3JnLnBvc3RncmVzcWwuRHJpdmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL3NxbC1zdXBwb3J0L3NyYy9tYWluL3Jlc291cmNlcy9wb3N0Z3Jlc3FsLWluZGV4LWRhdGFzb3VyY2UucHJvcGVydGllcyBiL3NhbXBsZXMvc3FsLXN1cHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL3Bvc3RncmVzcWwtaW5kZXgtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCmluZGV4IGE5MDZkODQuLmY3ZDdhZDUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc3FsLXN1cHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL3Bvc3RncmVzcWwtaW5kZXgtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCisrKyBiL3NhbXBsZXMvc3FsLXN1cHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL3Bvc3RncmVzcWwtaW5kZXgtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGVuYWJsZWQ9dHJ1ZQogdXJsPWpkYmM6cG9zdGdyZXNxbDovL2xvY2FsaG9zdDo1NDMyL2pkYmNfdGVzdF9kYgogZHJpdmVyPW9yZy5wb3N0Z3Jlc3FsLkRyaXZlcgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vYnVpbGQuZ3JhZGxlIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vYnVpbGQuZ3JhZGxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmEyNTU5Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL2J1aWxkLmdyYWRsZQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLWRlc2NyaXB0aW9uID0gIlNhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBTdHJ1dHMyIGludGVncmF0aW9uLiIKLQotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogU2FtcGxlIC0gU3RydXRzMiIgfX0KLQotZGVwZW5kZW5jaWVzIHsKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLXBsdWdpbiIpKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5saWJyYXJpZXM6b3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLWNvZGViZWhpbmQiKSkKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouZXh0ZW5zaW9uczpvcmcucWk0ai5leHRlbnNpb24uaW5kZXhpbmctcmRmIikpCi0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzIikpCi0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LnJkZiIpKQotICBjb21waWxlKGxpYnJhcmllcy5qZXR0eV93ZWJhcHApCi0KLSAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS50ZXN0c3VwcG9ydCIpKQotCi0gIHRlc3RSdW50aW1lKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpKQotICB0ZXN0UnVudGltZShsaWJyYXJpZXMubG9nYmFjaykKLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvSXRlbS5qYXZhIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvZXhhbXBsZS9JdGVtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OGE0OGEuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvZXhhbXBsZS9JdGVtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmV4YW1wbGU7Ci0KLWltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUNvbXBvc2l0ZTsKLQotcHVibGljIGludGVyZmFjZSBJdGVtCi0gICAgZXh0ZW5kcyBOYW1lYWJsZSwgRW50aXR5Q29tcG9zaXRlCi17Ci19CmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL0pldHR5TGF1bmNoZXIuamF2YSBiL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvSmV0dHlMYXVuY2hlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjEwYjI5Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvSmV0dHlMYXVuY2hlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuZXhhbXBsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5TZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLlNlcnZlckNvbm5lY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS53ZWJhcHAuV2ViQXBwQ29udGV4dDsKLQotcHVibGljIGNsYXNzIEpldHR5TGF1bmNoZXIKLXsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgICB7Ci0gICAgICAgIFNlcnZlciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCk7Ci0KLSAgICAgICAgU2VydmVyQ29ubmVjdG9yIGNvbm5lY3RvciA9IG5ldyBTZXJ2ZXJDb25uZWN0b3IoIHNlcnZlciApOwotICAgICAgICBjb25uZWN0b3Iuc2V0UG9ydCggODA4MCApOwotICAgICAgICBzZXJ2ZXIuYWRkQ29ubmVjdG9yKCBjb25uZWN0b3IgKTsKLQotICAgICAgICBXZWJBcHBDb250ZXh0IHdlYiA9IG5ldyBXZWJBcHBDb250ZXh0KCBzZXJ2ZXIsICJzdHJ1dHMyLmV4YW1wbGUiLCAiL2V4YW1wbGUiICk7Ci0gICAgICAgIHdlYi5zZXRXYXIoICJsaWJyYXJpZXMvc3RydXRzMi9leGFtcGxlL3NyYy9tYWluL3dlYmFwcC8iICk7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHNlcnZlci5zdGFydCgpOwotICAgICAgICAgICAgc2VydmVyLmpvaW4oKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoIDEwMCApOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvZXhhbXBsZS9OYW1lYWJsZS5qYXZhIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvZXhhbXBsZS9OYW1lYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmE1MzNhLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvTmFtZWFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuZXhhbXBsZTsKLQotaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKLQotcHVibGljIGludGVyZmFjZSBOYW1lYWJsZQotewotCi0gICAgUHJvcGVydHk8U3RyaW5nPiBuYW1lKCk7Ci19CmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL2FjdGlvbnMvQWRkSXRlbS5qYXZhIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvZXhhbXBsZS9hY3Rpb25zL0FkZEl0ZW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAwY2U3Mi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL2FjdGlvbnMvQWRkSXRlbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuZXhhbXBsZS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbmZpZy5SZXN1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbmZpZy5SZXN1bHRzOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLlNlcnZsZXRBY3Rpb25SZWRpcmVjdFJlc3VsdDsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5leGFtcGxlLkl0ZW07Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQuYWRkLlByb3ZpZGVzQWRkaW5nT2Y7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQuYWRkLlByb3ZpZGVzQWRkaW5nT2ZNaXhpbjsKLQotQFJlc3VsdHMoIHsKLSAgICBAUmVzdWx0KCBuYW1lID0gImlucHV0IiwgdmFsdWUgPSAiL2pzcC9hZGRJdGVtLmpzcCIgKSwKLSAgICBAUmVzdWx0KCBuYW1lID0gImVycm9yIiwgdmFsdWUgPSAiL2pzcC9hZGRJdGVtLmpzcCIgKSwKLSAgICBAUmVzdWx0KCBuYW1lID0gInN1Y2Nlc3MiLCB2YWx1ZSA9ICJsaXN0SXRlbXMiLCB0eXBlID0gU2VydmxldEFjdGlvblJlZGlyZWN0UmVzdWx0LmNsYXNzICkKLX0gKQotQE1peGlucyggUHJvdmlkZXNBZGRpbmdPZk1peGluLmNsYXNzICkKLXB1YmxpYyBpbnRlcmZhY2UgQWRkSXRlbQotICAgIGV4dGVuZHMgUHJvdmlkZXNBZGRpbmdPZjxJdGVtPiwgQ29tcG9zaXRlCi17Ci19CmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL2FjdGlvbnMvRWRpdEl0ZW0uamF2YSBiL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvYWN0aW9ucy9FZGl0SXRlbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzc3YjRhLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvYWN0aW9ucy9FZGl0SXRlbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuZXhhbXBsZS5hY3Rpb25zOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuY29uZmlnLlJlc3VsdDsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuY29uZmlnLlJlc3VsdHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmRpc3BhdGNoZXIuU2VydmxldEFjdGlvblJlZGlyZWN0UmVzdWx0OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmV4YW1wbGUuSXRlbTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuc3VwcG9ydC5Qcm92aWRlc0VudGl0eU9mTWl4aW47Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQuZWRpdC5Qcm92aWRlc0VkaXRpbmdPZjsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuc3VwcG9ydC5lZGl0LlByb3ZpZGVzRWRpdGluZ09mTWl4aW47Ci0KLUBSZXN1bHRzKCB7Ci0gICAgQFJlc3VsdCggbmFtZSA9ICJpbnB1dCIsIHZhbHVlID0gIi9qc3AvZWRpdEl0ZW0uanNwIiApLAotICAgIEBSZXN1bHQoIG5hbWUgPSAiZXJyb3IiLCB2YWx1ZSA9ICIvanNwL2VkaXRJdGVtLmpzcCIgKSwKLSAgICBAUmVzdWx0KCBuYW1lID0gInN1Y2Nlc3MiLCB2YWx1ZSA9ICJsaXN0SXRlbXMiLCB0eXBlID0gU2VydmxldEFjdGlvblJlZGlyZWN0UmVzdWx0LmNsYXNzICkKLX0gKQotQE1peGlucyggeyBQcm92aWRlc0VkaXRpbmdPZk1peGluLmNsYXNzLCBQcm92aWRlc0VudGl0eU9mTWl4aW4uY2xhc3MsIEFjdGlvblN1cHBvcnQuY2xhc3MgfSApCi1wdWJsaWMgaW50ZXJmYWNlIEVkaXRJdGVtCi0gICAgZXh0ZW5kcyBQcm92aWRlc0VkaXRpbmdPZjxJdGVtPiwgQ29tcG9zaXRlCi17Ci19CmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL2FjdGlvbnMvSGVsbG9Xb3JsZEFjdGlvbi5qYXZhIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvZXhhbXBsZS9hY3Rpb25zL0hlbGxvV29ybGRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgwNTkzNi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL2FjdGlvbnMvSGVsbG9Xb3JsZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqICRJZDogUmVxdWVzdFV0aWxzLmphdmEgMzk0NDY4IDIwMDYtMDQtMTYgMTI6MTY6MDNaIHRtamVlICQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5leGFtcGxlLmFjdGlvbnM7Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0OwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLmNvbnZlcnNpb24uYW5ub3RhdGlvbnMuQ29udmVyc2lvbjsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5jb252ZXJzaW9uLmFubm90YXRpb25zLlR5cGVDb252ZXJzaW9uOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLnZhbGlkYXRvci5hbm5vdGF0aW9ucy5SZXF1aXJlZEZpZWxkVmFsaWRhdG9yOwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLnZhbGlkYXRvci5hbm5vdGF0aW9ucy5SZXF1aXJlZFN0cmluZ1ZhbGlkYXRvcjsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi52YWxpZGF0b3IuYW5ub3RhdGlvbnMuVmFsaWRhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuY29uZmlnLlJlc3VsdDsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuY29uZmlnLlJlc3VsdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotQFZhbGlkYXRpb24KLUBDb252ZXJzaW9uCi1AUmVzdWx0cyggeyBAUmVzdWx0KCBuYW1lID0gImlucHV0IiwgdmFsdWUgPSAiL2pzcC9pbmRleC5qc3AiICksIEBSZXN1bHQoIHZhbHVlID0gIi9qc3AvaGVsbG9Xb3JsZC5qc3AiICkgfSApCi1wdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZEFjdGlvbgotICAgIGV4dGVuZHMgQWN0aW9uU3VwcG9ydAotewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgICBwcml2YXRlIERhdGUgbm93OwotICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0KLSAgICBAVHlwZUNvbnZlcnNpb24oIGNvbnZlcnRlciA9ICJvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuZXhhbXBsZS5jb252ZXJ0ZXJzLkRhdGVDb252ZXJ0ZXIiICkKLSAgICBAUmVxdWlyZWRGaWVsZFZhbGlkYXRvciggbWVzc2FnZSA9ICJQbGVhc2UgZW50ZXIgdGhlIGRhdGUiICkKLSAgICBwdWJsaWMgdm9pZCBzZXREYXRlTm93KCBEYXRlIGRhdGVOb3cgKQotICAgIHsKLSAgICAgICAgbm93ID0gZGF0ZU5vdzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXREYXRlTm93KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub3c7Ci0gICAgfQotCi0gICAgQFJlcXVpcmVkU3RyaW5nVmFsaWRhdG9yKCBtZXNzYWdlID0gIlBsZWFzZSBlbnRlciBhIG5hbWUiLCB0cmltID0gdHJ1ZSApCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZSggU3RyaW5nIHVzZXJOYW1lICkKLSAgICB7Ci0gICAgICAgIG5hbWUgPSB1c2VyTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuIFNVQ0NFU1M7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvZXhhbXBsZS9hY3Rpb25zL0luZGV4QWN0aW9uLmphdmEgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL2FjdGlvbnMvSW5kZXhBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhMGM1Mi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL2FjdGlvbnMvSW5kZXhBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiAkSWQ6IFJlcXVlc3RVdGlscy5qYXZhIDM5NDQ2OCAyMDA2LTA0LTE2IDEyOjE2OjAzWiB0bWplZSAkCi0gKgotICogQ29weXJpZ2h0IDIwMDYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuZXhhbXBsZS5hY3Rpb25zOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5jb252ZXJzaW9uLmFubm90YXRpb25zLkNvbnZlcnNpb247Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuY29udmVyc2lvbi5hbm5vdGF0aW9ucy5UeXBlQ29udmVyc2lvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuY29uZmlnLlJlc3VsdDsKLWltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLk1vZHVsZTsKLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1AQ29udmVyc2lvbgotQFJlc3VsdCggdmFsdWUgPSAiL2pzcC9pbmRleC5qc3AiICkKLXB1YmxpYyBjbGFzcyBJbmRleEFjdGlvbgotICAgIGV4dGVuZHMgQWN0aW9uU3VwcG9ydAotewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgICBAU3RydWN0dXJlCi0gICAgcHJpdmF0ZSBNb2R1bGUgbW9kdWxlOwotCi0gICAgcHJpdmF0ZSBEYXRlIG5vdzsKLQotICAgIHB1YmxpYyBJbmRleEFjdGlvbigpCi0gICAgewotICAgICAgICBub3cgPSBuZXcgRGF0ZSgpOwotICAgIH0KLQotICAgIEBUeXBlQ29udmVyc2lvbiggY29udmVydGVyID0gIm9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5leGFtcGxlLmNvbnZlcnRlcnMuRGF0ZUNvbnZlcnRlciIgKQotICAgIHB1YmxpYyBEYXRlIGdldERhdGVOb3coKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vdzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE1vZHVsZU5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZS5uYW1lKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgbm93ID0gbmV3IERhdGUoKTsKLSAgICAgICAgcmV0dXJuIFNVQ0NFU1M7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvZXhhbXBsZS9hY3Rpb25zL0xpc3RJdGVtcy5qYXZhIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N0cnV0czIvZXhhbXBsZS9hY3Rpb25zL0xpc3RJdGVtcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWEzYTc5Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvYWN0aW9ucy9MaXN0SXRlbXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmV4YW1wbGUuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5jb25maWcuUmVzdWx0OwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5jb25maWcuUmVzdWx0czsKLWltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5leGFtcGxlLkl0ZW07Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLnN1cHBvcnQubGlzdC5Qcm92aWRlc0xpc3RPZjsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuc3VwcG9ydC5saXN0LlByb3ZpZGVzTGlzdE9mTWl4aW47Ci0KLUBSZXN1bHRzKCB7Ci0gICAgQFJlc3VsdCggbmFtZSA9ICJzdWNjZXNzIiwgdmFsdWUgPSAiL2pzcC9saXN0SXRlbXMuanNwIiApCi19ICkKLUBNaXhpbnMoIFByb3ZpZGVzTGlzdE9mTWl4aW4uY2xhc3MgKQotcHVibGljIGludGVyZmFjZSBMaXN0SXRlbXMKLSAgICBleHRlbmRzIFByb3ZpZGVzTGlzdE9mPEl0ZW0+LCBDb21wb3NpdGUKLXsKLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvY29udmVydGVycy9EYXRlQ29udmVydGVyLmphdmEgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL2NvbnZlcnRlcnMvRGF0ZUNvbnZlcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTI4ZmIzLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvY29udmVydGVycy9EYXRlQ29udmVydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogJElkOiBSZXF1ZXN0VXRpbHMuamF2YSAzOTQ0NjggMjAwNi0wNC0xNiAxMjoxNjowM1ogdG1qZWUgJAotICoKLSAqIENvcHlyaWdodCAyMDA2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmV4YW1wbGUuY29udmVydGVyczsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi51dGlsLlN0cnV0c1R5cGVDb252ZXJ0ZXI7Ci0KLWltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotcHVibGljIGNsYXNzIERhdGVDb252ZXJ0ZXIKLSAgICBleHRlbmRzIFN0cnV0c1R5cGVDb252ZXJ0ZXIKLXsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgT2JqZWN0IGNvbnZlcnRGcm9tU3RyaW5nKCBNYXAgY29udGV4dCwgU3RyaW5nW10gdmFsdWVzLCBDbGFzcyB0b0NsYXNzICkKLSAgICB7Ci0gICAgICAgIGlmKCB2YWx1ZXMgIT0gbnVsbCAmJiB2YWx1ZXMubGVuZ3RoID4gMCAmJiB2YWx1ZXNbIDAgXSAhPSBudWxsICYmIHZhbHVlc1sgMCBdLmxlbmd0aCgpID4gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoICJ5eXl5L01NL2RkIiApOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNkZi5wYXJzZSggdmFsdWVzWyAwIF0gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKCBQYXJzZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiUGFyc2UgWyIgKyB2YWx1ZXNbIDAgXSArICJdIGRvIGRhdGUgZmFpbC4iLCBlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoIE1hcCBjb250ZXh0LCBPYmplY3QgbyApCi0gICAgewotICAgICAgICBpZiggbyBpbnN0YW5jZW9mIERhdGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHNkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCAieXl5eS9NTS9kZCIgKTsKLSAgICAgICAgICAgIHJldHVybiBzZGYuZm9ybWF0KCAoRGF0ZSkgbyApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvbGlzdGVuZXIvRXhhbXBsZUJvb3RzdHJhcExpc3RlbmVyLmphdmEgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3RydXRzMi9leGFtcGxlL2xpc3RlbmVyL0V4YW1wbGVCb290c3RyYXBMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2I4ZDM2Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zdHJ1dHMyL2V4YW1wbGUvbGlzdGVuZXIvRXhhbXBsZUJvb3RzdHJhcExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKiAgQ29weXJpZ2h0IDIwMDggRWR3YXJkIFlha29wLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuZXhhbXBsZS5saXN0ZW5lcjsKLQotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb247Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5Nb2R1bGU7Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLio7Ci1pbXBvcnQgb3JnLnFpNGouZW50aXR5c3RvcmUubWVtb3J5Lk1lbW9yeUVudGl0eVN0b3JlU2VydmljZTsKLWltcG9ydCBvcmcucWk0ai5pbmRleC5yZGYuUmRmSW5kZXhpbmdFbmdpbmVTZXJ2aWNlOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkucmRmLmVudGl0eS5FbnRpdHlTdGF0ZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5yZGYucmVwb3NpdG9yeS5NZW1vcnlSZXBvc2l0b3J5U2VydmljZTsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuQWN0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuUWk0akFwcGxpY2F0aW9uQm9vdHN0cmFwTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmJvb3RzdHJhcC5TdHJ1dHMyUGx1Z2luQXNzZW1ibGVyOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5jb2RlYmVoaW5kLmJvb3RzdHJhcC5Db2RlYmVoaW5kQXNzZW1ibGVyOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5leGFtcGxlLkl0ZW07Ci1pbXBvcnQgb3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmV4YW1wbGUuYWN0aW9ucy4qOwotaW1wb3J0IG9yZy5xaTRqLnNwaS51dWlkLlV1aWRJZGVudGl0eUdlbmVyYXRvclNlcnZpY2U7Ci0KLS8qKgotICogQGF1dGhvciBlZHdhcmQueWFrb3BAZ21haWwuY29tCi0gKi8KLXB1YmxpYyBjbGFzcyBFeGFtcGxlQm9vdHN0cmFwTGlzdGVuZXIKLSAgICBleHRlbmRzIFFpNGpBcHBsaWNhdGlvbkJvb3RzdHJhcExpc3RlbmVyCi17Ci0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIGZpbmFsIEFwcGxpY2F0aW9uQXNzZW1ibGVyIGNyZWF0ZUFzc2VtYmxlcigpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IEFwcGxpY2F0aW9uQXNzZW1ibGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgcHVibGljIEFwcGxpY2F0aW9uQXNzZW1ibHkgYXNzZW1ibGUoIEFwcGxpY2F0aW9uQXNzZW1ibHlGYWN0b3J5IGFwcGxpY2F0aW9uRmFjdG9yeSApCi0gICAgICAgICAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uRmFjdG9yeS5uZXdBcHBsaWNhdGlvbkFzc2VtYmx5KCBuZXcgQXNzZW1ibGVyKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBhTW9kdWxlICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb25Db25maWd1cmF0aW9uIGFjdGlvbkNvbmZpZ3VyYXRpb24gPSBuZXcgQWN0aW9uQ29uZmlndXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlndXJhdGlvbi5hZGRPYmplY3RzKCBIZWxsb1dvcmxkQWN0aW9uLmNsYXNzLCBJbmRleEFjdGlvbi5jbGFzcyApOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlndXJhdGlvbi5hZGRDb21wb3NpdGVzKCBBZGRJdGVtLmNsYXNzLCBFZGl0SXRlbS5jbGFzcywgTGlzdEl0ZW1zLmNsYXNzICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJ1dHMyUGx1Z2luQXNzZW1ibGVyKCBhY3Rpb25Db25maWd1cmF0aW9uICkuYXNzZW1ibGUoIGFNb2R1bGUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb2RlYmVoaW5kQXNzZW1ibGVyKCkuYXNzZW1ibGUoIGFNb2R1bGUgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYU1vZHVsZS5lbnRpdGllcyggSXRlbS5jbGFzcyApOwotICAgICAgICAgICAgICAgICAgICAgICAgYU1vZHVsZS5zZXJ2aWNlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlFbnRpdHlTdG9yZVNlcnZpY2UuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXVpZElkZW50aXR5R2VuZXJhdG9yU2VydmljZS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlSZXBvc2l0b3J5U2VydmljZS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZGZJbmRleGluZ0VuZ2luZVNlcnZpY2UuY2xhc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhTW9kdWxlLm9iamVjdHMoIEVudGl0eVN0YXRlU2VyaWFsaXplci5jbGFzcyApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSApOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBmaW5hbCBNb2R1bGUgcWk0alN0cnV0c01vZHVsZSggQXBwbGljYXRpb24gYXBwbGljYXRpb24gKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uLmZpbmRNb2R1bGUoICJMYXllciAxIiwgIk1vZHVsZSAxIiApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NzNmMjAuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1sb2c0ai5yb290TG9nZ2VyID0gREVCVUcsIHN0ZG91dAotCi1sb2c0ai5jYXRlZ29yeS5jb20ub3BlbnN5bXBob255LnNpdGVtZXNoPURFQlVHCi1sb2c0ai5jYXRlZ29yeS5vcmcuYXBhY2hlLnN0cnV0czI9SU5GTwotbG9nNGouY2F0ZWdvcnkub3JnLmFwYWNoZT1JTkZPCi1sb2c0ai5jYXRlZ29yeS5jYXRhbGlhPUlORk8KLQotbG9nNGouYXBwZW5kZXIuc3Rkb3V0ID0gb3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXIKLWxvZzRqLmFwcGVuZGVyLnN0ZG91dC5UaHJlc2hvbGQgPSBERUJVRwotbG9nNGouYXBwZW5kZXIuc3Rkb3V0LlRhcmdldCA9IFN5c3RlbS5vdXQKLWxvZzRqLmFwcGVuZGVyLnN0ZG91dC5sYXlvdXQgPSBvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQKLWxvZzRqLmFwcGVuZGVyLnN0ZG91dC5sYXlvdXQuQ29udmVyc2lvblBhdHRlcm4gPSAlZHtJU084NjAxfSAlLTVwIFslRjolTF0gOiAlbSVuCi0KLQotCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnByb3BlcnRpZXMgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDI3NzUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBzdHJ1dHMuY29uZmlndXJhdGlvbj1vcmcuYXBhY2hlLnN0cnV0czIuY29uZmlnLkRlZmF1bHRDb25maWd1cmF0aW9uCi0KLSMgc3RydXRzLmxvY2FsZT1lbl9VUwotc3RydXRzLmkxOG4uZW5jb2Rpbmc9VVRGLTgKLQotc3RydXRzLm9iamVjdEZhY3Rvcnk9cWk0agotc3RydXRzLm9iamVjdFR5cGVEZXRlcm1pbmVyPXRpZ2VyCi0KLXN0cnV0cy5tYXBwZXIuY2xhc3M9b3JnLmFwYWNoZS5zdHJ1dHMyLmRpc3BhdGNoZXIubWFwcGVyLkRlZmF1bHRBY3Rpb25NYXBwZXIKLQotIyBNYWtlIHN1cmUgdGhpcyBpcyBzZXQgdG8gZmFsc2UgZHVyaW5nIGRlcGxveW1lbnQKLSMgZGV2ZWxvcG1lbnQgbW9kZQotc3RydXRzLmRldk1vZGUgPSB0cnVlCi1zdHJ1dHMuaTE4bi5yZWxvYWQ9dHJ1ZQotc3RydXRzLmNvbmZpZ3VyYXRpb24ueG1sLnJlbG9hZD10cnVlCi0jIGVuZCBkZXZlbG9wbWVudCBtb2RlCi0KLSNzdHJ1dHMudXJsLmh0dHAucG9ydCA9IDgwCi0jc3RydXRzLnVybC5odHRwcy5wb3J0ID0gNDQzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ0ODdiMy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhRE9DVFlQRSBzdHJ1dHMgUFVCTElDCi0gICItLy9BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi8vRFREIFN0cnV0cyBDb25maWd1cmF0aW9uIDIuMC8vRU4iCi0gICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+Ci08c3RydXRzPgotICA8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmNvbmZpZ3VyYXRpb24uY2xhc3NwYXRoLmRpc2FibGVBY3Rpb25TY2FubmluZyIgdmFsdWU9InRydWUiLz4KLSAgPGNvbnN0YW50IG5hbWU9InN0cnV0cy5jb25maWd1cmF0aW9uLmNsYXNzcGF0aC5kZWZhdWx0UGFyZW50UGFja2FnZSIgdmFsdWU9ImV4YW1wbGUtYmFzZSIvPgotCi0gIDxwYWNrYWdlIG5hbWU9ImV4YW1wbGUtYmFzZSIgZXh0ZW5kcz0ic3RydXRzLWRlZmF1bHQiPgotICAgIDxpbnRlcmNlcHRvcnM+Ci0gICAgICA8aW50ZXJjZXB0b3IgbmFtZT0iY29uc3RyYWludFZpb2xhdGlvbiIgY2xhc3M9Im9yZy5xaTRqLmxpYnJhcnkuc3RydXRzMi5Db25zdHJhaW50VmlvbGF0aW9uSW50ZXJjZXB0b3IiLz4KLSAgICAgIDxpbnRlcmNlcHRvciBuYW1lPSJ1bml0T2ZXb3JrIiBjbGFzcz0ib3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLlVuaXRPZldvcmtJbnRlcmNlcHRvciIvPgotCi0gICAgICA8aW50ZXJjZXB0b3Itc3RhY2sgbmFtZT0iZXhhbXBsZVN0YWNrIj4KLSAgICAgICAgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJleGNlcHRpb24iLz4KLSAgICAgICAgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJwYXJhbXMiLz4KLSAgICAgICAgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJzZXJ2bGV0Q29uZmlnIi8+Ci0gICAgICAgIDxpbnRlcmNlcHRvci1yZWYgbmFtZT0idW5pdE9mV29yayIvPgotICAgICAgICA8aW50ZXJjZXB0b3ItcmVmIG5hbWU9InByZXBhcmUiLz4KLSAgICAgICAgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJpMThuIi8+Ci0gICAgICAgIDxpbnRlcmNlcHRvci1yZWYgbmFtZT0iZGVidWdnaW5nIi8+Ci0gICAgICAgIDxpbnRlcmNlcHRvci1yZWYgbmFtZT0icHJvZmlsaW5nIi8+Ci0gICAgICAgIDxpbnRlcmNlcHRvci1yZWYgbmFtZT0iY2hlY2tib3giLz4KLSAgICAgICAgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJzdGF0aWNQYXJhbXMiLz4KLSAgICAgICAgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJwYXJhbXMiLz4KLSAgICAgICAgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJjb252ZXJzaW9uRXJyb3IiLz4KLSAgICAgICAgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJjb25zdHJhaW50VmlvbGF0aW9uIi8+Ci0gICAgICAgIDxpbnRlcmNlcHRvci1yZWYgbmFtZT0idmFsaWRhdGlvbiI+Ci0gICAgICAgICAgPHBhcmFtIG5hbWU9ImV4Y2x1ZGVNZXRob2RzIj5pbnB1dCxiYWNrLGNhbmNlbCxicm93c2U8L3BhcmFtPgotICAgICAgICA8L2ludGVyY2VwdG9yLXJlZj4KLSAgICAgICAgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJ3b3JrZmxvdyI+Ci0gICAgICAgICAgPHBhcmFtIG5hbWU9ImV4Y2x1ZGVNZXRob2RzIj5pbnB1dCxiYWNrLGNhbmNlbCxicm93c2U8L3BhcmFtPgotICAgICAgICA8L2ludGVyY2VwdG9yLXJlZj4KLSAgICAgIDwvaW50ZXJjZXB0b3Itc3RhY2s+Ci0gICAgPC9pbnRlcmNlcHRvcnM+Ci0KLSAgICA8ZGVmYXVsdC1pbnRlcmNlcHRvci1yZWYgbmFtZT0iZXhhbXBsZVN0YWNrIi8+Ci0KLSAgICA8ZGVmYXVsdC1hY3Rpb24tcmVmIG5hbWU9ImluZGV4Ii8+Ci0gIDwvcGFja2FnZT4KLTwvc3RydXRzPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZGVjb3JhdG9ycy54bWwgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9kZWNvcmF0b3JzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYzMGU2NC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9kZWNvcmF0b3JzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KLQotPGRlY29yYXRvcnMgZGVmYXVsdGRpcj0iL1dFQi1JTkYvZGVjb3JhdG9ycyI+Ci0gIDwhLS0gQW55IHVybHMgdGhhdCBhcmUgZXhjbHVkZWQgd2lsbCBuZXZlciBiZSBkZWNvcmF0ZWQgYnkgU2l0ZW1lc2ggLS0+Ci0gIDxleGNsdWRlcz4KLSAgICA8cGF0dGVybj4vbm9kZWNvcmF0ZS8qPC9wYXR0ZXJuPgotICAgIDxwYXR0ZXJuPi9zdHlsZXMvKjwvcGF0dGVybj4KLSAgICA8cGF0dGVybj4vc2NyaXB0cy8qPC9wYXR0ZXJuPgotICAgIDxwYXR0ZXJuPi9pbWFnZXMvKjwvcGF0dGVybj4KLSAgICA8cGF0dGVybj4vZG9qby8qPC9wYXR0ZXJuPgotICAgIDxwYXR0ZXJuPi9zdHJ1dHMvKjwvcGF0dGVybj4KLSAgPC9leGNsdWRlcz4KLQotICA8ZGVjb3JhdG9yIG5hbWU9Im1haW4iIHBhZ2U9Im1haW4uanNwIj4KLSAgICA8cGF0dGVybj4vKjwvcGF0dGVybj4KLSAgPC9kZWNvcmF0b3I+Ci0KLTwvZGVjb3JhdG9ycz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2RlY29yYXRvcnMvbWFpbi5qc3AgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9kZWNvcmF0b3JzL21haW4uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjZmZjE3Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2RlY29yYXRvcnMvbWFpbi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMNCi0iLS8vVzNDLy9EVEQgWEhUTUwgMS4xIFRyYW5zaXRpb25hbC8vRU4iDQotImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KLQ0KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iVVRGLTgiICU+DQotPCVAdGFnbGliIHByZWZpeD0iZGVjb3JhdG9yIiB1cmk9Imh0dHA6Ly93d3cub3BlbnN5bXBob255LmNvbS9zaXRlbWVzaC9kZWNvcmF0b3IiICU+DQotPCVAdGFnbGliIHByZWZpeD0icGFnZSIgdXJpPSJodHRwOi8vd3d3Lm9wZW5zeW1waG9ueS5jb20vc2l0ZW1lc2gvcGFnZSIgJT4NCi08JUB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4NCi0NCi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+DQotPGhlYWQ+DQotICAgIDx0aXRsZT48ZGVjb3JhdG9yOnRpdGxlIGRlZmF1bHQ9IlN0cnV0cyBTdGFydGVyIi8+PC90aXRsZT4NCi0gICAgPGxpbmsgaHJlZj0iPHM6dXJsIHZhbHVlPScvc3R5bGVzL21haW4uY3NzJy8+IiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIi8+DQotICAgIDxsaW5rIGhyZWY9IjxzOnVybCB2YWx1ZT0nL3N0cnV0cy9uaWZ0eWNvcm5lcnMvbmlmdHlDb3JuZXJzLmNzcycvPiIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KLSAgICA8bGluayBocmVmPSI8czp1cmwgdmFsdWU9Jy9zdHJ1dHMvbmlmdHljb3JuZXJzL25pZnR5UHJpbnQuY3NzJy8+IiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0icHJpbnQiLz4NCi0gICAgPGRlY29yYXRvcjpoZWFkLz4NCi08L2hlYWQ+DQotPGJvZHkgaWQ9InBhZ2UtaG9tZSI+DQotPGRpdiBpZD0icGFnZSI+DQotICAgIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyZml4Ij4NCi0gICAgICAgIEhFQURFUg0KLSAgICAgICAgPGhyLz4NCi0gICAgPC9kaXY+DQotDQotICAgIDxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJjbGVhcmZpeCI+DQotICAgICAgICA8ZGl2IGlkPSJtYWluIj4NCi0gICAgICAgICAgICA8aDM+TWFpbiBDb250ZW50PC9oMz4NCi0gICAgICAgICAgICA8ZGVjb3JhdG9yOmJvZHkvPg0KLSAgICAgICAgICAgIDxoci8+DQotICAgICAgICA8L2Rpdj4NCi0NCi0gICAgICAgIDxkaXYgaWQ9InN1YiI+DQotICAgICAgICAgICAgPGgzPlN1YiBDb250ZW50PC9oMz4NCi0gICAgICAgIDwvZGl2Pg0KLQ0KLQ0KLSAgICAgICAgPGRpdiBpZD0ibG9jYWwiPg0KLSAgICAgICAgICAgIDxoMz5Mb2NhbCBOYXYuIEJhcjwvaDM+DQotICAgICAgICAgICAgPHVsPg0KLSAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyI+Q29udGVudCBwYWdlIDE8L2E+PC9saT4NCi0gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPkNvbnRlbnQgcGFnZSAyPC9hPjwvbGk+DQotICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjIj5Db250ZW50IHBhZ2UgMzwvYT48L2xpPg0KLSAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyI+Q29udGVudCBwYWdlIDQ8L2E+PC9saT4NCi0gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPkNvbnRlbnQgcGFnZSA1PC9hPjwvbGk+DQotICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjIj5Db250ZW50IHBhZ2UgNjwvYT48L2xpPg0KLSAgICAgICAgICAgIDwvdWw+DQotICAgICAgICA8L2Rpdj4NCi0NCi0NCi0gICAgICAgIDxkaXYgaWQ9Im5hdiI+DQotICAgICAgICAgICAgPGRpdiBjbGFzcz0id3JhcHBlciI+DQotICAgICAgICAgICAgICAgIDxoMz5OYXYuIGJhcjwvaDM+DQotICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iY2xlYXJmaXgiPg0KLSAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPk1lbnUgMTwvYT48L2xpPg0KLSAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPk1lbnUgMjwvYT48L2xpPg0KLSAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPk1lbnUgMzwvYT48L2xpPg0KLSAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPk1lbnUgNDwvYT48L2xpPg0KLSAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPk1lbnUgNTwvYT48L2xpPg0KLSAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsYXN0Ij48YSBocmVmPSIjIj5NZW51IDY8L2E+PC9saT4NCi0gICAgICAgICAgICAgICAgPC91bD4NCi0gICAgICAgICAgICA8L2Rpdj4NCi0gICAgICAgICAgICA8aHIvPg0KLSAgICAgICAgPC9kaXY+DQotICAgIDwvZGl2Pg0KLQ0KLSAgICA8ZGl2IGlkPSJmb290ZXIiIGNsYXNzPSJjbGVhcmZpeCI+DQotICAgICAgICBGb290ZXINCi0gICAgPC9kaXY+DQotDQotPC9kaXY+DQotDQotPGRpdiBpZD0iZXh0cmExIj4mbmJzcDs8L2Rpdj4NCi08ZGl2IGlkPSJleHRyYTIiPiZuYnNwOzwvZGl2Pg0KLTwvYm9keT4NCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZHdyLnhtbCBiL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2R3ci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMmYxYjcuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZHdyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgZHdyIFBVQkxJQyAiLS8vR2V0QWhlYWQgTGltaXRlZC8vRFREIERpcmVjdCBXZWIgUmVtb3RpbmcgMS4wLy9FTiIgImh0dHA6Ly93d3cuZ2V0YWhlYWQubHRkLnVrL2R3ci9kd3IxMC5kdGQiPgotPGR3cj4KLSAgPGFsbG93PgotICAgIDxjcmVhdGUgY3JlYXRvcj0ibmV3IiBqYXZhc2NyaXB0PSJ2YWxpZGF0b3IiPgotICAgICAgPHBhcmFtIG5hbWU9ImNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5zdHJ1dHMyLnZhbGlkYXRvcnMuRFdSVmFsaWRhdG9yIi8+Ci0gICAgPC9jcmVhdGU+Ci0gICAgPGNvbnZlcnQgY29udmVydGVyPSJiZWFuIiBtYXRjaD0iY29tLm9wZW5zeW1waG9ueS54d29yazIuVmFsaWRhdGlvbkF3YXJlU3VwcG9ydCIvPgotICA8L2FsbG93PgotCi0gIDxzaWduYXR1cmVzPgotICAgIDwhW0NEQVRBWwotICAgICAgICBpbXBvcnQgamF2YS51dGlsLk1hcDsKLSAgICAgICAgaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi52YWxpZGF0b3JzLkRXUlZhbGlkYXRvcjsKLQotICAgICAgICBEV1JWYWxpZGF0b3IuZG9Qb3N0KFN0cmluZywgU3RyaW5nLCBNYXA8U3RyaW5nLCBTdHJpbmc+KTsKLSAgICAgICAgXV0+Ci0gIDwvc2lnbmF0dXJlcz4KLTwvZHdyPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc2l0ZW1lc2gueG1sIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc2l0ZW1lc2gueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWFjNzA3Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3NpdGVtZXNoLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotCi08c2l0ZW1lc2g+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJkZWNvcmF0b3JzLWZpbGUiIHZhbHVlPSIvV0VCLUlORi9kZWNvcmF0b3JzLnhtbCIvPgotICA8ZXhjbHVkZXMgZmlsZT0iJHtkZWNvcmF0b3JzLWZpbGV9Ii8+Ci0KLSAgPHBhZ2UtcGFyc2Vycz4KLSAgICA8cGFyc2VyIGNvbnRlbnQtdHlwZT0idGV4dC9odG1sIiBjbGFzcz0iY29tLm9wZW5zeW1waG9ueS5tb2R1bGUuc2l0ZW1lc2gucGFyc2VyLkZhc3RQYWdlUGFyc2VyIi8+Ci0gIDwvcGFnZS1wYXJzZXJzPgotCi0gIDxkZWNvcmF0b3ItbWFwcGVycz4KLQotICAgIDxtYXBwZXIgY2xhc3M9ImNvbS5vcGVuc3ltcGhvbnkubW9kdWxlLnNpdGVtZXNoLm1hcHBlci5QYWdlRGVjb3JhdG9yTWFwcGVyIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJwcm9wZXJ0eS4xIiB2YWx1ZT0ibWV0YS5kZWNvcmF0b3IiLz4KLSAgICAgIDxwYXJhbSBuYW1lPSJwcm9wZXJ0eS4yIiB2YWx1ZT0iZGVjb3JhdG9yIi8+Ci0gICAgPC9tYXBwZXI+Ci0KLSAgICA8bWFwcGVyIGNsYXNzPSJjb20ub3BlbnN5bXBob255Lm1vZHVsZS5zaXRlbWVzaC5tYXBwZXIuRnJhbWVTZXREZWNvcmF0b3JNYXBwZXIiPgotICAgIDwvbWFwcGVyPgotCi0gICAgPG1hcHBlciBjbGFzcz0iY29tLm9wZW5zeW1waG9ueS5tb2R1bGUuc2l0ZW1lc2gubWFwcGVyLkFnZW50RGVjb3JhdG9yTWFwcGVyIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJtYXRjaC5NU0lFIiB2YWx1ZT0iaWUiLz4KLSAgICAgIDxwYXJhbSBuYW1lPSJtYXRjaC5Nb3ppbGxhIFsiIHZhbHVlPSJucyIvPgotICAgICAgPHBhcmFtIG5hbWU9Im1hdGNoLk9wZXJhIiB2YWx1ZT0ib3BlcmEiLz4KLSAgICAgIDxwYXJhbSBuYW1lPSJtYXRjaC5MeW54IiB2YWx1ZT0ibHlueCIvPgotICAgIDwvbWFwcGVyPgotCi0gICAgPG1hcHBlciBjbGFzcz0iY29tLm9wZW5zeW1waG9ueS5tb2R1bGUuc2l0ZW1lc2gubWFwcGVyLlByaW50YWJsZURlY29yYXRvck1hcHBlciI+Ci0gICAgICA8cGFyYW0gbmFtZT0iZGVjb3JhdG9yIiB2YWx1ZT0icHJpbnRhYmxlIi8+Ci0gICAgICA8cGFyYW0gbmFtZT0icGFyYW1ldGVyLm5hbWUiIHZhbHVlPSJwcmludGFibGUiLz4KLSAgICAgIDxwYXJhbSBuYW1lPSJwYXJhbWV0ZXIudmFsdWUiIHZhbHVlPSJ0cnVlIi8+Ci0gICAgPC9tYXBwZXI+Ci0KLSAgICA8bWFwcGVyIGNsYXNzPSJjb20ub3BlbnN5bXBob255Lm1vZHVsZS5zaXRlbWVzaC5tYXBwZXIuUm9ib3REZWNvcmF0b3JNYXBwZXIiPgotICAgICAgPHBhcmFtIG5hbWU9ImRlY29yYXRvciIgdmFsdWU9InJvYm90Ii8+Ci0gICAgPC9tYXBwZXI+Ci0KLSAgICA8bWFwcGVyIGNsYXNzPSJjb20ub3BlbnN5bXBob255Lm1vZHVsZS5zaXRlbWVzaC5tYXBwZXIuUGFyYW1ldGVyRGVjb3JhdG9yTWFwcGVyIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJkZWNvcmF0b3IucGFyYW1ldGVyIiB2YWx1ZT0iZGVjb3JhdG9yIi8+Ci0gICAgICA8cGFyYW0gbmFtZT0icGFyYW1ldGVyLm5hbWUiIHZhbHVlPSJjb25maXJtIi8+Ci0gICAgICA8cGFyYW0gbmFtZT0icGFyYW1ldGVyLnZhbHVlIiB2YWx1ZT0idHJ1ZSIvPgotICAgIDwvbWFwcGVyPgotCi0gICAgPG1hcHBlciBjbGFzcz0iY29tLm9wZW5zeW1waG9ueS5tb2R1bGUuc2l0ZW1lc2gubWFwcGVyLkNvbmZpZ0RlY29yYXRvck1hcHBlciI+Ci0gICAgICA8cGFyYW0gbmFtZT0iY29uZmlnIiB2YWx1ZT0iJHtkZWNvcmF0b3JzLWZpbGV9Ii8+Ci0gICAgPC9tYXBwZXI+Ci0KLSAgPC9kZWNvcmF0b3ItbWFwcGVycz4KLQotPC9zaXRlbWVzaD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmI2MGQwLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08d2ViLWFwcCBpZD0ic3RhcnRlciIgdmVyc2lvbj0iMi40IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQotICA8ZGlzcGxheS1uYW1lPlFpNGogLSBTdHJ1dHMgMiBFeGFtcGxlPC9kaXNwbGF5LW5hbWU+Ci0KLSAgPCEtLSBMaXN0ZW5lcnMgLS0+Ci0gIDxsaXN0ZW5lcj4KLSAgICA8bGlzdGVuZXItY2xhc3M+b3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLmV4YW1wbGUubGlzdGVuZXIuRXhhbXBsZUJvb3RzdHJhcExpc3RlbmVyPC9saXN0ZW5lci1jbGFzcz4KLSAgPC9saXN0ZW5lcj4KLQotICA8IS0tIEZpbHRlcnMgLS0+Ci0gIDxmaWx0ZXI+Ci0gICAgPGZpbHRlci1uYW1lPmFjdGlvbjItY2xlYW51cDwvZmlsdGVyLW5hbWU+Ci0gICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5BY3Rpb25Db250ZXh0Q2xlYW5VcDwvZmlsdGVyLWNsYXNzPgotICA8L2ZpbHRlcj4KLSAgPGZpbHRlcj4KLSAgICA8ZmlsdGVyLW5hbWU+c2l0ZW1lc2g8L2ZpbHRlci1uYW1lPgotICAgIDxmaWx0ZXItY2xhc3M+Y29tLm9wZW5zeW1waG9ueS5tb2R1bGUuc2l0ZW1lc2guZmlsdGVyLlBhZ2VGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgPC9maWx0ZXI+Ci0gIDxmaWx0ZXI+Ci0gICAgPGZpbHRlci1uYW1lPmFjdGlvbjI8L2ZpbHRlci1uYW1lPgotICAgIDxmaWx0ZXItY2xhc3M+b3JnLnFpNGoubGlicmFyeS5zdHJ1dHMyLlFpNGpGaWx0ZXJEaXNwYXRjaGVyPC9maWx0ZXItY2xhc3M+Ci0gICAgPGluaXQtcGFyYW0+Ci0gICAgICA8cGFyYW0tbmFtZT5hY3Rpb25QYWNrYWdlczwvcGFyYW0tbmFtZT4KLSAgICAgIDxwYXJhbS12YWx1ZT5vcmcucWk0ai5saWJyYXJ5LnN0cnV0czIuZXhhbXBsZS5hY3Rpb25zPC9wYXJhbS12YWx1ZT4KLSAgICA8L2luaXQtcGFyYW0+Ci0gIDwvZmlsdGVyPgotCi0gIDxmaWx0ZXItbWFwcGluZz4KLSAgICA8ZmlsdGVyLW5hbWU+YWN0aW9uMi1jbGVhbnVwPC9maWx0ZXItbmFtZT4KLSAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICA8L2ZpbHRlci1tYXBwaW5nPgotICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgPGZpbHRlci1uYW1lPnNpdGVtZXNoPC9maWx0ZXItbmFtZT4KLSAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICA8L2ZpbHRlci1tYXBwaW5nPgotICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgPGZpbHRlci1uYW1lPmFjdGlvbjI8L2ZpbHRlci1uYW1lPgotICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0gIDwvZmlsdGVyLW1hcHBpbmc+Ci0KLSAgPCEtLSBTZXJ2bGV0cyAtLT4KLSAgPHNlcnZsZXQ+Ci0gICAgPHNlcnZsZXQtbmFtZT5kd3I8L3NlcnZsZXQtbmFtZT4KLSAgICA8c2VydmxldC1jbGFzcz5vcmcuZGlyZWN0d2VicmVtb3Rpbmcuc2VydmxldC5Ed3JTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDxpbml0LXBhcmFtPgotICAgICAgPHBhcmFtLW5hbWU+ZGVidWc8L3BhcmFtLW5hbWU+Ci0gICAgICA8cGFyYW0tdmFsdWU+dHJ1ZTwvcGFyYW0tdmFsdWU+Ci0gICAgPC9pbml0LXBhcmFtPgotICA8L3NlcnZsZXQ+Ci0gIDxzZXJ2bGV0PgotICAgIDxzZXJ2bGV0LW5hbWU+anNwU3VwcG9ydFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KLSAgICA8c2VydmxldC1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIudmlld3MuSnNwU3VwcG9ydFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPGxvYWQtb24tc3RhcnR1cD41PC9sb2FkLW9uLXN0YXJ0dXA+Ci0gIDwvc2VydmxldD4KLQotICA8c2VydmxldC1tYXBwaW5nPgotICAgIDxzZXJ2bGV0LW5hbWU+ZHdyPC9zZXJ2bGV0LW5hbWU+Ci0gICAgPHVybC1wYXR0ZXJuPi9kd3IvKjwvdXJsLXBhdHRlcm4+Ci0gIDwvc2VydmxldC1tYXBwaW5nPgotCi0gIDwhLS0gV2VsY29tZSBmaWxlIGxpc3RzIC0tPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmUzNDcxLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JSByZXNwb25zZS5zZW5kUmVkaXJlY3QoICJpbmRleC5hY3Rpb24iICk7ICU+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvanNwL2FkZEl0ZW0uanNwIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL2pzcC9hZGRJdGVtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI4ODIxZC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvanNwL2FkZEl0ZW0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotCi08aHRtbD4KLTxoZWFkPgotICAgIDx0aXRsZT5BZGQgSXRlbTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxzOmFjdGlvbm1lc3NhZ2UvPgotPHM6Zm9ybT4KLSAgICA8czp0ZXh0ZmllbGQgbmFtZT0ic3RhdGUubmFtZSIvPgotICAgIDxzOnN1Ym1pdC8+Ci08L3M6Zm9ybT4KLTwvYm9keT4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL2pzcC9lZGl0SXRlbS5qc3AgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvanNwL2VkaXRJdGVtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0NmNhYi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvanNwL2VkaXRJdGVtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLQotPGh0bWw+Ci08aGVhZD4KLSAgICA8dGl0bGU+RWRpdCBJdGVtPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPHM6Zm9ybT4KLSAgICA8czp0ZXh0ZmllbGQgbmFtZT0iZW50aXR5Lm5hbWUiLz4KLSAgICA8czpoaWRkZW4gbmFtZT0iaWQiLz4KLSAgICA8czpzdWJtaXQvPgotPC9zOmZvcm0+Ci08L2JvZHk+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9qc3AvaGVsbG9Xb3JsZC5qc3AgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvanNwL2hlbGxvV29ybGQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTMwNTNhLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9qc3AvaGVsbG9Xb3JsZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMNCi0iLS8vVzNDLy9EVEQgWEhUTUwgMS4xIFRyYW5zaXRpb25hbC8vRU4iDQotImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KLQ0KLTwlQHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPg0KLQ0KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4NCi08aGVhZD4NCi0gICAgPHRpdGxlPkhlbGxvIFdvcmxkPC90aXRsZT4NCi0gICAgPHM6aGVhZC8+DQotPC9oZWFkPg0KLTxib2R5Pg0KLTxzcGFuPkhlbGxvIDxzOnByb3BlcnR5IHZhbHVlPSJuYW1lIi8+LCB0b2RheSBpcyA8czpwcm9wZXJ0eSB2YWx1ZT0iZGF0ZU5vdyIvPjwvc3Bhbj48YnIvPg0KLTwvYm9keT4NCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL2pzcC9pbmRleC5qc3AgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvanNwL2luZGV4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdkZWIyYy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvanNwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCi08JUB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4NCi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+DQotPGhlYWQ+DQotICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+DQotICAgIDxzOmhlYWQvPg0KLTwvaGVhZD4NCi08Ym9keT4NCi08czpmb3JtIGFjdGlvbj0iaGVsbG9Xb3JsZCI+DQotICAgIDxzOnRleHRmaWVsZCBsYWJlbD0iUWk0ai1Nb2R1bGUgbmFtZSIgbmFtZT0ibW9kdWxlTmFtZSIgZGlzYWJsZWQ9InRydWUiLz4NCi0gICAgPHM6dGV4dGZpZWxkIGxhYmVsPSJXaGF0IGlzIHlvdXIgbmFtZT8iIG5hbWU9Im5hbWUiLz4NCi0gICAgPHM6dGV4dGZpZWxkIGxhYmVsPSJXaGF0IGlzIHRoZSBkYXRlPyIgbmFtZT0iZGF0ZU5vdyIvPg0KLSAgICA8czpzdWJtaXQvPg0KLTwvczpmb3JtPg0KLTwvYm9keT4NCi08L2h0bWw+DQotCQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9qc3AvbGlzdEl0ZW1zLmpzcCBiL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9qc3AvbGlzdEl0ZW1zLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJkODQzYy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvanNwL2xpc3RJdGVtcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci0KLTxodG1sPgotPGhlYWQ+Ci0gICAgPHRpdGxlPkl0ZW0gTGlzdDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLUl0ZW1zOgotPHVsPgotICAgIDxzOml0ZXJhdG9yIHZhbHVlPSJsaXN0KCkuaXRlcmF0b3IoKSI+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSJuYW1lKCkiLz4KLSAgICAgICAgICAgIDxhIGhyZWY9IjxzOnVybCBhY3Rpb249ImVkaXRJdGVtIiBtZXRob2Q9ImlucHV0Ij48czpwYXJhbSBuYW1lPSJpZCIgdmFsdWU9ImlkZW50aXR5KCkuZ2V0KCkiIC8+PC9zOnVybD4iPkVkaXQ8L2E+Ci0gICAgICAgIDwvbGk+Ci0gICAgPC9zOml0ZXJhdG9yPgotPC91bD4KLTxhIGhyZWY9IjxzOnVybCBhY3Rpb249ImFkZEl0ZW0iIG1ldGhvZD0iaW5wdXQiIC8+Ij5BZGQ8L2E+Ci08L2JvZHk+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvZm9ybXMuY3NzIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9mb3Jtcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3OTU0MDUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9mb3Jtcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyogQSBDU1MgRnJhbWV3b3JrIGJ5IE1pa2UgU3RlbmhvdXNlIG9mIENvbnRlbnQgd2l0aCBTdHlsZSAqLw0KLQ0KLS8qIEZPUk0gRUxFTUVOVFMgKi8NCi1mb3JtDQotew0KLSAgICBtYXJnaW46IDA7DQotICAgIHBhZGRpbmc6IDA7DQotfQ0KLQ0KLWZvcm0gZGl2LA0KLWZvcm0gcA0KLXsNCi0gICAgZm9udC1zaXplOiAxZW07DQotICAgIG1hcmdpbjogMCAwIDFlbSAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLX0NCi0NCi1sYWJlbA0KLXsNCi0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQotfQ0KLQ0KLWZpZWxkc2V0DQotew0KLSAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlOw0KLSAgICBwYWRkaW5nOiA1cHggMTBweDsNCi0gICAgbWFyZ2luOiAwIDAgMS41ZW0gMDsNCi19DQotDQotZmllbGRzZXQgbGVnZW5kDQotew0KLSAgICBjb2xvcjogIzY2NjsNCi0gICAgZm9udC1zaXplOiAxLjFlbTsNCi0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQotICAgIG1hcmdpbjogMCAwIDAgMHB4Ow0KLSAgICBwYWRkaW5nOiAwOw0KLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsNCi19DQotDQotKiBodG1sIGZpZWxkc2V0IGxlZ2VuZA0KLXsNCi0gICAgbWFyZ2luOiAwIDAgMTBweCAtMTBweDsNCi19DQotDQotZmllbGRzZXQgdWwNCi17DQotICAgIGxpc3Qtc3R5bGU6IG5vbmU7DQotICAgIG1hcmdpbjogMCAwIDEuNWVtIDA7DQotICAgIHBhZGRpbmc6IDA7DQotfQ0KLQ0KLWZpZWxkc2V0IHVsIGxpDQotew0KLSAgICBsaXN0LXN0eWxlOiBub25lOw0KLSAgICBtYXJnaW46IDAgMCAwLjVlbSAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLX0NCi0NCi1pbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYQ0KLXsNCi0gICAgZm9udC1zaXplOiAxZW07DQotICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgaGVsdmV0aWNhLCB2ZXJkYW5hLCBzYW5zLXNlcmlmOw0KLQ0KLSAgICBtYXJnaW46IDA7DQotICAgIHBhZGRpbmc6IDJweDsNCi19DQotDQotaW5wdXQsIHNlbGVjdA0KLXsNCi0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCi19DQotDQotdGV4dGFyZWENCi17DQotICAgIHdpZHRoOiAyMDBweDsNCi0gICAgaGVpZ2h0OiA4ZW07DQotfQ0KLQ0KLWlucHV0LmNoZWNrDQotew0KLSAgICBib3JkZXI6IG5vbmU7DQotICAgIHdpZHRoOiBhdXRvOw0KLSAgICBoZWlnaHQ6IGF1dG87DQotICAgIG1hcmdpbjogMDsNCi19DQotDQotaW5wdXQucmFkaW8NCi17DQotICAgIGJvcmRlcjogbm9uZTsNCi0gICAgd2lkdGg6IGF1dG87DQotICAgIGhlaWdodDogYXV0bzsNCi0gICAgbWFyZ2luOiAwOw0KLX0NCi0NCi1pbnB1dC5maWxlDQotew0KLSAgICBoZWlnaHQ6IGF1dG87DQotICAgIHdpZHRoOiAyNTBweDsNCi19DQotDQotaW5wdXQucmVhZG9ubHkNCi17DQotICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KLSAgICBib3JkZXI6IG5vbmU7DQotfQ0KLQ0KLWlucHV0LmJ1dHRvbg0KLXsNCi0gICAgd2lkdGg6IDEwZW07DQotICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOw0KLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkOw0KLX0NCi0NCi1pbnB1dC5pbWFnZQ0KLXsNCi0gICAgYm9yZGVyOiBub25lOw0KLSAgICB3aWR0aDogYXV0bzsNCi0gICAgaGVpZ2h0OiBhdXRvOw0KLX0NCi0NCi1mb3JtIGRpdi5zdWJtaXQNCi17DQotICAgIG1hcmdpbjogMWVtIDA7DQotfQ0KLQ0KLWZvcm0gZGl2LnN1Ym1pdCBpbnB1dA0KLXsNCi0gICAgaGVpZ2h0OiAyZW07DQotICAgIHdpZHRoOiAxNWVtOw0KLX0NCi0NCi0vKiBFTkQgRk9STSBFTEVNRU5UUyAqLw0KLQkJClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtMWNvbC5jc3MgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL2xheW91dC0xY29sLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0YWUwNi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL2xheW91dC0xY29sLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qIEEgQ1NTIEZyYW1ld29yayBieSBNaWtlIFN0ZW5ob3VzZSBvZiBDb250ZW50IHdpdGggU3R5bGUgKi8NCi0NCi1AaW1wb3J0IHVybCgibmF2LWhvcml6b250YWwuY3NzIik7DQotDQotLyogTkFWIEJBUiBBVCBUSEUgVE9QIEFORCBPTkUgQ09MVU1OIE9GIENPTlRFTlQgKi8NCi1kaXYjY29udGVudA0KLXsNCi0gICAgcG9zaXRpb246IHJlbGF0aXZlOw0KLSAgICB3aWR0aDogNzAxcHg7DQotDQotICAgIG1hcmdpbjogMCBhdXRvIDIwcHggYXV0bzsNCi0gICAgcGFkZGluZzogMDsNCi0NCi0gICAgdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotZGl2I21haW4NCi17DQotICAgIHdpZHRoOiAxMDAlOw0KLX0NCi0NCi1kaXYjbG9jYWwNCi17DQotICAgIGRpc3BsYXk6IG5vbmU7DQotfQ0KLQ0KLWRpdiNzdWINCi17DQotICAgIGRpc3BsYXk6IG5vbmU7DQotfQ0KLQ0KLWRpdiNuYXYNCi17DQotICAgIGRpc3BsYXk6IG5vbmU7DQotfQ0KLQ0KLS8qIEVORCBDT05URU5UICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtbmF2bGVmdC0xY29sLmNzcyBiL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvbGF5b3V0LW5hdmxlZnQtMWNvbC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YWE4NzMuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtbmF2bGVmdC0xY29sLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIEEgQ1NTIEZyYW1ld29yayBieSBNaWtlIFN0ZW5ob3VzZSBvZiBDb250ZW50IHdpdGggU3R5bGUgKi8NCi0NCi1AaW1wb3J0IHVybCgibmF2LXZlcnRpY2FsLmNzcyIpOw0KLQ0KLS8qIE5BViBCQVIgT04gVEhFIExFRlQgQU5EIE9ORSBDT0xVTU4gT0YgQ09OVEVOVCAqLw0KLWRpdiNjb250ZW50DQotew0KLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQotICAgIHdpZHRoOiA3ODBweDsNCi0NCi0gICAgbWFyZ2luOiAwIGF1dG8gMjBweCBhdXRvOw0KLSAgICBwYWRkaW5nOiAwOw0KLQ0KLSAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi1kaXYjbWFpbg0KLXsNCi0gICAgZmxvYXQ6IHJpZ2h0Ow0KLSAgICB3aWR0aDogNTYwcHg7DQotICAgIGRpc3BsYXk6IGlubGluZTsNCi19DQotDQotZGl2I2xvY2FsDQotew0KLSAgICBkaXNwbGF5OiBub25lOw0KLX0NCi0NCi1kaXYjc3ViDQotew0KLSAgICBkaXNwbGF5OiBub25lOw0KLX0NCi0NCi1kaXYjbmF2DQotew0KLSAgICBmbG9hdDogbGVmdDsNCi0gICAgd2lkdGg6IDIwMHB4Ow0KLSAgICBkaXNwbGF5OiBpbmxpbmU7DQotfQ0KLQ0KLS8qIEVORCBDT05URU5UICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtbmF2bGVmdC0yY29sLmNzcyBiL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvbGF5b3V0LW5hdmxlZnQtMmNvbC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYzBmNTYuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtbmF2bGVmdC0yY29sLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qIEEgQ1NTIEZyYW1ld29yayBieSBNaWtlIFN0ZW5ob3VzZSBvZiBDb250ZW50IHdpdGggU3R5bGUgKi8NCi0NCi1AaW1wb3J0IHVybCgibmF2LXZlcnRpY2FsLmNzcyIpOw0KLQ0KLS8qIE5BViBCQVIgT04gVEhFIExFRlQgQU5EIFRXTyBDT0xVTU5TIE9GIENPTlRFTlQgKi8NCi1kaXYjY29udGVudA0KLXsNCi0gICAgcG9zaXRpb246IHJlbGF0aXZlOw0KLSAgICB3aWR0aDogNzgwcHg7DQotDQotICAgIG1hcmdpbjogMCBhdXRvIDIwcHggYXV0bzsNCi0gICAgcGFkZGluZzogMDsNCi0NCi0gICAgdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotZGl2I21haW4NCi17DQotICAgIGZsb2F0OiByaWdodDsNCi0gICAgd2lkdGg6IDM0MHB4Ow0KLSAgICBkaXNwbGF5OiBpbmxpbmU7DQotDQotICAgIG1hcmdpbi1yaWdodDogMjIwcHg7DQotICAgIG1hcmdpbi1sZWZ0OiAtMjIwcHg7DQotfQ0KLQ0KLWRpdiNsb2NhbA0KLXsNCi0gICAgZGlzcGxheTogbm9uZTsNCi19DQotDQotZGl2I3N1Yg0KLXsNCi0gICAgZmxvYXQ6IHJpZ2h0Ow0KLSAgICB3aWR0aDogMjAwcHg7DQotICAgIGRpc3BsYXk6IGlubGluZTsNCi0NCi0gICAgbWFyZ2luLXJpZ2h0OiAtMzQwcHg7DQotICAgIG1hcmdpbi1sZWZ0OiAyMDBweDsNCi19DQotDQotZGl2I25hdg0KLXsNCi0gICAgZmxvYXQ6IGxlZnQ7DQotICAgIHdpZHRoOiAyMDBweDsNCi0gICAgZGlzcGxheTogaW5saW5lOw0KLX0NCi0NCi0vKiBFTkQgQ09OVEVOVCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvbGF5b3V0LW5hdnRvcC0xY29sLmNzcyBiL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvbGF5b3V0LW5hdnRvcC0xY29sLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3YmNiOS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL2xheW91dC1uYXZ0b3AtMWNvbC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKiBBIENTUyBGcmFtZXdvcmsgYnkgTWlrZSBTdGVuaG91c2Ugb2YgQ29udGVudCB3aXRoIFN0eWxlICovDQotDQotQGltcG9ydCB1cmwoIm5hdi1ob3Jpem9udGFsLmNzcyIpOw0KLQ0KLS8qIE5BViBCQVIgQVQgVEhFIFRPUCBBTkQgT05FIENPTFVNTiBPRiBDT05URU5UICovDQotZGl2I2NvbnRlbnQNCi17DQotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCi0gICAgd2lkdGg6IDcwMXB4Ow0KLQ0KLSAgICBtYXJnaW46IDAgYXV0byAyMHB4IGF1dG87DQotICAgIHBhZGRpbmc6IDA7DQotDQotICAgIHRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLWRpdiNtYWluDQotew0KLSAgICB3aWR0aDogMTAwJTsNCi19DQotDQotZGl2I2xvY2FsDQotew0KLSAgICB3aWR0aDogMTAwJTsNCi19DQotDQotZGl2I3N1Yg0KLXsNCi0gICAgd2lkdGg6IDEwMCU7DQotfQ0KLQ0KLWRpdiNuYXYNCi17DQotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCi0gICAgdG9wOiAtMTVweDsNCi0gICAgbGVmdDogMDsNCi0gICAgd2lkdGg6IDEwMCU7DQotDQotICAgIHRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLS8qIEVORCBDT05URU5UICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtbmF2dG9wLTNjb2wuY3NzIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtbmF2dG9wLTNjb2wuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTRhYzZmLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvbGF5b3V0LW5hdnRvcC0zY29sLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qIEEgQ1NTIEZyYW1ld29yayBieSBNaWtlIFN0ZW5ob3VzZSBvZiBDb250ZW50IHdpdGggU3R5bGUgKi8NCi0NCi1AaW1wb3J0IHVybCgibmF2LWhvcml6b250YWwuY3NzIik7DQotDQotLyogTkFWIEJBUiBBVCBUSEUgVE9QLCBMT0NBTCBOQVYgT04gVEhFIExFRlQgQU5EIFRXTyBDT0xVTU5TIE9GIENPTlRFTlQgKi8NCi1kaXYjY29udGVudA0KLXsNCi0gICAgcG9zaXRpb246IHJlbGF0aXZlOw0KLSAgICB3aWR0aDogNzAxcHg7DQotDQotICAgIG1hcmdpbjogMCBhdXRvIDIwcHggYXV0bzsNCi0gICAgcGFkZGluZzogMDsNCi0NCi0gICAgdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotZGl2I21haW4NCi17DQotICAgIGZsb2F0OiBsZWZ0Ow0KLSAgICB3aWR0aDogMzAwcHg7DQotICAgIGRpc3BsYXk6IGlubGluZTsNCi0NCi0gICAgbWFyZ2luLXJpZ2h0OiAtMjAwcHg7DQotICAgIG1hcmdpbi1sZWZ0OiAyMDBweDsNCi19DQotDQotZGl2I3N1Yg0KLXsNCi0gICAgZmxvYXQ6IHJpZ2h0Ow0KLSAgICB3aWR0aDogMTgwcHg7DQotICAgIGRpc3BsYXk6IGlubGluZTsNCi19DQotDQotZGl2I2xvY2FsDQotew0KLSAgICBmbG9hdDogbGVmdDsNCi0gICAgd2lkdGg6IDE4MHB4Ow0KLSAgICBkaXNwbGF5OiBpbmxpbmU7DQotDQotICAgIG1hcmdpbi1sZWZ0OiAtMzAwcHg7DQotfQ0KLQ0KLWRpdiNuYXYNCi17DQotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCi0gICAgdG9wOiAtMTVweDsNCi0gICAgbGVmdDogMDsNCi0gICAgd2lkdGg6IDcwMXB4Ow0KLQ0KLSAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi0vKiBFTkQgQ09OVEVOVCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvbGF5b3V0LW5hdnRvcC1sb2NhbGxlZnQuY3NzIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtbmF2dG9wLWxvY2FsbGVmdC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjU2ZGUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtbmF2dG9wLWxvY2FsbGVmdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKiBBIENTUyBGcmFtZXdvcmsgYnkgTWlrZSBTdGVuaG91c2Ugb2YgQ29udGVudCB3aXRoIFN0eWxlICovDQotDQotQGltcG9ydCB1cmwoIm5hdi1ob3Jpem9udGFsLmNzcyIpOw0KLQ0KLS8qIE5BViBCQVIgQVQgVEhFIFRPUCwgTE9DQUwgTkFWSUdBVElPTiBPTiBUSEUgTEVGVCBBTkQgT05FIENPTFVNTiBPRiBDT05URU5UICovDQotZGl2I2NvbnRlbnQNCi17DQotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCi0gICAgd2lkdGg6IDcwMXB4Ow0KLQ0KLSAgICBtYXJnaW46IDAgYXV0byAyMHB4IGF1dG87DQotICAgIHBhZGRpbmc6IDA7DQotDQotICAgIHRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLWRpdiNtYWluDQotew0KLSAgICBmbG9hdDogcmlnaHQ7DQotICAgIHdpZHRoOiA1MDBweDsNCi0gICAgZGlzcGxheTogaW5saW5lOw0KLX0NCi0NCi1kaXYjbG9jYWwNCi17DQotICAgIGZsb2F0OiBsZWZ0Ow0KLSAgICB3aWR0aDogMjAwcHg7DQotICAgIGRpc3BsYXk6IGlubGluZTsNCi19DQotDQotZGl2I3N1Yg0KLXsNCi0gICAgZGlzcGxheTogbm9uZTsNCi19DQotDQotZGl2I25hdg0KLXsNCi0gICAgcG9zaXRpb246IGFic29sdXRlOw0KLSAgICB0b3A6IC0xNXB4Ow0KLSAgICBsZWZ0OiAwOw0KLSAgICB3aWR0aDogMTAwJTsNCi0NCi0gICAgdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotLyogRU5EIENPTlRFTlQgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL2xheW91dC1uYXZ0b3Atc3VicmlnaHQuY3NzIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9sYXlvdXQtbmF2dG9wLXN1YnJpZ2h0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNlNDViNy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL2xheW91dC1uYXZ0b3Atc3VicmlnaHQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyogQSBDU1MgRnJhbWV3b3JrIGJ5IE1pa2UgU3RlbmhvdXNlIG9mIENvbnRlbnQgd2l0aCBTdHlsZSAqLw0KLQ0KLUBpbXBvcnQgdXJsKCJuYXYtaG9yaXpvbnRhbC5jc3MiKTsNCi0NCi0vKiBOQVYgQkFSIEFUIFRIRSBUT1AgQU5EIFRXTyBDT0xVTU5TIE9GIENPTlRFTlQgKi8NCi1kaXYjY29udGVudA0KLXsNCi0gICAgcG9zaXRpb246IHJlbGF0aXZlOw0KLSAgICB3aWR0aDogNzAxcHg7DQotDQotICAgIG1hcmdpbjogMCBhdXRvIDIwcHggYXV0bzsNCi0gICAgcGFkZGluZzogMDsNCi0NCi0gICAgdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotZGl2I21haW4NCi17DQotICAgIGZsb2F0OiBsZWZ0Ow0KLSAgICB3aWR0aDogNDgwcHg7DQotICAgIGRpc3BsYXk6IGlubGluZTsNCi19DQotDQotZGl2I3N1Yg0KLXsNCi0gICAgZmxvYXQ6IHJpZ2h0Ow0KLSAgICB3aWR0aDogMjAwcHg7DQotICAgIGRpc3BsYXk6IGlubGluZTsNCi19DQotDQotZGl2I2xvY2FsDQotew0KLSAgICBkaXNwbGF5OiBub25lOw0KLX0NCi0NCi1kaXYjbmF2DQotew0KLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQotICAgIHRvcDogLTE1cHg7DQotICAgIGxlZnQ6IDA7DQotICAgIHdpZHRoOiAxMDAlOw0KLQ0KLSAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi0vKiBFTkQgQ09OVEVOVCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvbGF5b3V0LmNzcyBiL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvbGF5b3V0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJiZDljOC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL2xheW91dC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotLyogQSBDU1MgRnJhbWV3b3JrIGJ5IE1pa2UgU3RlbmhvdXNlIG9mIENvbnRlbnQgd2l0aCBTdHlsZSAqLw0KLQ0KLS8qIFNJVEUgU1BFQ0lGSUMgTEFZT1VUICovDQotYm9keQ0KLXsNCi0gICAgbWFyZ2luOiAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLQ0KLSAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCi0NCi0gICAgdGV4dC1hbGlnbjogY2VudGVyOw0KLX0NCi0NCi1kaXYjcGFnZQ0KLXsNCi0gICAgd2lkdGg6IDc4MHB4Ow0KLQ0KLSAgICBtYXJnaW46IDAgYXV0bzsNCi0gICAgcGFkZGluZzogMDsNCi0NCi0gICAgYmFja2dyb3VuZDogd2hpdGU7DQotICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCi19DQotDQotLyogSEVBREVSICovDQotZGl2I2hlYWRlcg0KLXsNCi0gICAgbWFyZ2luOiAwIDAgNWVtIDA7DQotICAgIHBhZGRpbmc6IDQwcHggMjBweDsNCi0NCi0gICAgY29sb3I6IHdoaXRlOw0KLSAgICBiYWNrZ3JvdW5kOiBibGFjazsNCi0NCi0gICAgdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotZGl2I2JyYW5kaW5nDQotew0KLSAgICBmbG9hdDogbGVmdDsNCi0gICAgd2lkdGg6IDQwJTsNCi0NCi0gICAgbWFyZ2luOiAwOw0KLSAgICBwYWRkaW5nOiAxMHB4IDAgMTBweCAyMHB4Ow0KLQ0KLSAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi1kaXYjc2VhcmNoDQotew0KLSAgICBmbG9hdDogcmlnaHQ7DQotICAgIHdpZHRoOiA0OSU7DQotDQotICAgIG1hcmdpbjogMDsNCi0gICAgcGFkZGluZzogMTZweCAyMHB4IDAgMDsNCi0NCi0gICAgdGV4dC1hbGlnbjogcmlnaHQ7DQotfQ0KLQ0KLS8qIEVORCBIRUFERVIgKi8NCi0NCi0vKiBDT05URU5UICovDQotZGl2I2NvbnRlbnQNCi17DQotDQotfQ0KLQ0KLS8qIE1BSU4gKi8NCi1kaXYjbWFpbg0KLXsNCi0NCi19DQotDQotLyogRU5EIE1BSU4gKi8NCi0NCi0vKiBTVUIgKi8NCi1kaXYjc3ViDQotew0KLQ0KLX0NCi0NCi0vKiBFTkQgU1VCICovDQotDQotLyogRU5EIENPTlRFTlQgKi8NCi0NCi0vKiBGT09URVIgKi8NCi1kaXYjZm9vdGVyDQotew0KLSAgICBjb2xvcjogd2hpdGU7DQotICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOw0KLX0NCi0NCi1kaXYjZm9vdGVyIHANCi17DQotICAgIGZvbnQtc2l6ZTogMC44ZW07DQotDQotICAgIG1hcmdpbjogMDsNCi0gICAgcGFkZGluZzogMTVweDsNCi19DQotDQotLyogRU5EIEZPT1RFUiAqLw0KLS8qIEVORCBMQVlPVVQgKi8NCi0NCi0vKiBVTC5TVUJOQVYgKi8NCi11bC5zdWJuYXYNCi17DQotICAgIG1hcmdpbjogMDsNCi0gICAgcGFkZGluZzogMDsNCi0NCi0gICAgZm9udC1zaXplOiAwLjhlbTsNCi0gICAgbGlzdC1zdHlsZTogbm9uZTsNCi19DQotDQotdWwuc3VibmF2IGxpDQotew0KLSAgICBtYXJnaW46IDAgMCAxZW0gMDsNCi0gICAgcGFkZGluZzogMDsNCi0gICAgbGlzdC1zdHlsZTogbm9uZTsNCi19DQotDQotdWwuc3VibmF2IGxpIGEsDQotdWwuc3VibmF2IGxpIGE6bGluaywNCi11bC5zdWJuYXYgbGkgYTp2aXNpdGVkLA0KLXVsLnN1Ym5hdiBsaSBhOmFjdGl2ZQ0KLXsNCi0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KLSAgICBmb250LXdlaWdodDogYm9sZDsNCi0gICAgY29sb3I6IGJsYWNrOw0KLX0NCi0NCi11bC5zdWJuYXYgbGkgYTpob3Zlcg0KLXsNCi0gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQotfQ0KLQ0KLXVsLnN1Ym5hdiBsaSBzdHJvbmcNCi17DQotICAgIHBhZGRpbmc6IDAgMCAwIDEycHg7DQotICAgIGJhY2tncm91bmQ6IHVybCgiLi4vaS9zdWJuYXYtaGlnaGxpZ2h0LmdpZiIpIGxlZnQgdG9wIG5vLXJlcGVhdCB0cmFuc3BhcmVudDsNCi19DQotDQotdWwuc3VibmF2IGxpIHN0cm9uZyBhLA0KLXVsLnN1Ym5hdiBsaSBzdHJvbmcgYTpsaW5rLA0KLXVsLnN1Ym5hdiBsaSBzdHJvbmcgYTp2aXNpdGVkLA0KLXVsLnN1Ym5hdiBsaSBzdHJvbmcgYTphY3RpdmUNCi17DQotICAgIGNvbG9yOiB3aGl0ZTsNCi0gICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7DQotfQ0KLQ0KLS8qIEVORCBVTC5TVUJOQVYgKi8NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL21haW4uY3NzIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9tYWluLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5YzU0NS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL21haW4uY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoNCi0gICBDc3MgRnJhbWV3b3JrIA0KLSAgID09PT09PT09PT09PT0NCi0gICAJIC0gc2VlIGh0dHA6Ly93d3cuY29udGVudHdpdGhzdHlsZS5jby51ay9BcnRpY2xlcy8xNy9hLWNzcy1mcmFtZXdvcmsNCi0gICAJICAgZm9yIG1vcmUgaW5mby4NCi0qLw0KLUBpbXBvcnQgdXJsKCJ0b29scy5jc3MiKTsNCi1AaW1wb3J0IHVybCgidHlwby5jc3MiKTsNCi1AaW1wb3J0IHVybCgiZm9ybXMuY3NzIik7DQotICAgIC8qDQotICAgICAgU3dhcCBsYXlvdXQgc3R5bGVzaGVldDoNCi0gICAgICAgIGxheW91dC1uYXZ0b3AtbG9jYWxsZWZ0LmNzcw0KLSAgICAgICAgbGF5b3V0LW5hdnRvcC1zdWJyaWdodC5jc3MNCi0gICAgICAgIGxheW91dC1uYXZ0b3AtM2NvbC5jc3MNCi0gICAgICAgIGxheW91dC1uYXZ0b3AtMWNvbC5jc3MNCi0gICAgICAgIGxheW91dC1uYXZsZWZ0LTFjb2wuY3NzDQotICAgICAgICBsYXlvdXQtbmF2bGVmdC0yY29sLmNzcw0KLSAgICAqLw0KLUBpbXBvcnQgdXJsKCJsYXlvdXQtbmF2dG9wLWxvY2FsbGVmdC5jc3MiKTsNCi1AaW1wb3J0IHVybCgibGF5b3V0LmNzcyIpOw0KLSAgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9uYXYtaG9yaXpvbnRhbC5jc3MgYi9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL25hdi1ob3Jpem9udGFsLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY5MWNmYi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL25hdi1ob3Jpem9udGFsLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qIEEgQ1NTIEZyYW1ld29yayBieSBNaWtlIFN0ZW5ob3VzZSBvZiBDb250ZW50IHdpdGggU3R5bGUgKi8NCi0NCi0vKiBOQVYgKi8NCi1kaXYjbmF2DQotew0KLSAgICBmb250LXNpemU6IDAuOGVtOw0KLX0NCi0NCi0qIGh0bWwgZGl2I25hdg0KLXsNCi0vKiBoaWRlIGllL21hYyBcKi8NCi0gICAgaGVpZ2h0OiAxJTsgLyogZW5kIGhpZGUgKi8NCi19DQotDQotZGl2I25hdiBkaXYud3JhcHBlcg0KLXsNCi0gICAgcG9zaXRpb246IGFic29sdXRlOw0KLSAgICBsZWZ0OiAwOw0KLSAgICBib3R0b206IDA7DQotICAgIHdpZHRoOiAxMDAlOw0KLX0NCi0NCi1kaXYjbmF2IHVsDQotew0KLSAgICB3aWR0aDogYXV0bzsNCi0gICAgd2lkdGg6IDEwMCU7DQotDQotICAgIG1hcmdpbjogMDsNCi0gICAgcGFkZGluZzogMDsNCi0NCi0gICAgbGluZS1oZWlnaHQ6IDFlbTsNCi0gICAgbGlzdC1zdHlsZTogbm9uZTsNCi19DQotDQotZGl2I25hdiBsaQ0KLXsNCi0gICAgZmxvYXQ6IGxlZnQ7DQotICAgIGRpc3BsYXk6IGlubGluZTsNCi0NCi0gICAgbGlzdC1zdHlsZTogbm9uZTsNCi0NCi0gICAgbWFyZ2luOiAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLQ0KLSAgICBsaW5lLWhlaWdodDogMWVtOw0KLSAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjYWFhOw0KLX0NCi0NCi1kaXYjbmF2IGxpLmxhc3QNCi17DQotICAgIGJvcmRlci1yaWdodDogbm9uZTsNCi19DQotDQotZGl2I25hdiBhLA0KLWRpdiNuYXYgYTpsaW5rLA0KLWRpdiNuYXYgYTphY3RpdmUsDQotZGl2I25hdiBhOnZpc2l0ZWQNCi17DQotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogaGlkZSBmcm9tIGllL21hYyBcKi8NCi0gICAgZGlzcGxheTogYmxvY2s7IC8qIGVuZCBoaWRlICovDQotICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQotDQotICAgIG1hcmdpbjogMDsNCi0gICAgcGFkZGluZzogNXB4IDM4cHggNXB4IDM4cHg7DQotDQotICAgIGNvbG9yOiBibGFjazsNCi0gICAgYmFja2dyb3VuZDogI2RkZDsNCi19DQotDQotZGl2I25hdiBhOmhvdmVyDQotew0KLSAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCi19DQotDQotZGl2I25hdiBzdHJvbmcNCi17DQotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogaGlkZSBmcm9tIGllL21hYyBcKi8NCi0gICAgZGlzcGxheTogYmxvY2s7IC8qIGVuZCBoaWRlICovDQotDQotICAgIGNvbG9yOiB3aGl0ZTsNCi0gICAgYmFja2dyb3VuZDogYmxhY2s7DQotfQ0KLQ0KLWRpdiNuYXYgc3Ryb25nIGEsDQotZGl2I25hdiBzdHJvbmcgYTpsaW5rLA0KLWRpdiNuYXYgc3Ryb25nIGE6YWN0aXZlLA0KLWRpdiNuYXYgc3Ryb25nIGE6dmlzaXRlZCwNCi1kaXYjbmF2IHN0cm9uZyBhOmhvdmVyDQotew0KLSAgICBjb2xvcjogd2hpdGU7DQotICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOw0KLX0NCi0NCi0vKiBFTkQgTkFWICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9uYXYtdmVydGljYWwuY3NzIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy9uYXYtdmVydGljYWwuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzFlYmExLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvbmF2LXZlcnRpY2FsLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qIEEgQ1NTIEZyYW1ld29yayBieSBNaWtlIFN0ZW5ob3VzZSBvZiBDb250ZW50IHdpdGggU3R5bGUgKi8NCi0NCi0vKiBOQVYgKi8NCi1kaXYjbmF2DQotew0KLSAgICBmb250LXNpemU6IDAuOGVtOw0KLX0NCi0NCi0qIGh0bWwgZGl2I25hdg0KLXsNCi0vKiBoaWRlIGllL21hYyBcKi8NCi0gICAgaGVpZ2h0OiAxJTsgLyogZW5kIGhpZGUgKi8NCi19DQotDQotZGl2I25hdiBkaXYud3JhcHBlcg0KLXsNCi0gICAgd2lkdGg6IDEwMCU7DQotDQotICAgIGJhY2tncm91bmQ6ICNkZGQ7DQotfQ0KLQ0KLWRpdiNuYXYgdWwNCi17DQotICAgIHdpZHRoOiBhdXRvOw0KLSAgICB3aWR0aDogMTAwJTsNCi0NCi0gICAgbWFyZ2luOiAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLQ0KLSAgICBsaW5lLWhlaWdodDogMWVtOw0KLSAgICBsaXN0LXN0eWxlOiBub25lOw0KLX0NCi0NCi1kaXYjbmF2IGxpDQotew0KLSAgICBkaXNwbGF5OiBibG9jazsNCi0NCi0gICAgbGlzdC1zdHlsZTogbm9uZTsNCi0NCi0gICAgbWFyZ2luOiAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLQ0KLSAgICBsaW5lLWhlaWdodDogMWVtOw0KLX0NCi0NCi0qIGh0bWwgZGl2I25hdiBsaQ0KLXsNCi0vKiBoaWRlIGllL21hYyBcKi8NCi0gICAgaGVpZ2h0OiAxJTsgLyogZW5kIGhpZGUgKi8NCi19DQotDQotZGl2I25hdiBsaS5sYXN0DQotew0KLQ0KLX0NCi0NCi1kaXYjbmF2IGEsDQotZGl2I25hdiBhOmxpbmssDQotZGl2I25hdiBhOmFjdGl2ZSwNCi1kaXYjbmF2IGE6dmlzaXRlZA0KLXsNCi0gICAgZGlzcGxheTogYmxvY2s7DQotDQotICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQotDQotICAgIG1hcmdpbjogMDsNCi0gICAgcGFkZGluZzogNXB4IDEwcHggNXB4IDEwcHg7DQotDQotICAgIGNvbG9yOiBibGFjazsNCi0gICAgYmFja2dyb3VuZDogd2hpdGU7DQotfQ0KLQ0KLWRpdiNuYXYgYTpob3Zlcg0KLXsNCi0gICAgY29sb3I6IHdoaXRlOw0KLSAgICBiYWNrZ3JvdW5kOiBibGFjazsNCi0gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQotfQ0KLQ0KLWRpdiNuYXYgc3Ryb25nDQotew0KLSAgICBkaXNwbGF5OiBibG9jazsNCi0NCi0gICAgY29sb3I6IHdoaXRlOw0KLSAgICBiYWNrZ3JvdW5kOiBibGFjazsNCi19DQotDQotZGl2I25hdiBzdHJvbmcgYSwNCi1kaXYjbmF2IHN0cm9uZyBhOmxpbmssDQotZGl2I25hdiBzdHJvbmcgYTphY3RpdmUsDQotZGl2I25hdiBzdHJvbmcgYTp2aXNpdGVkLA0KLWRpdiNuYXYgc3Ryb25nIGE6aG92ZXINCi17DQotICAgIGNvbG9yOiB3aGl0ZTsNCi0gICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7DQotfQ0KLQ0KLS8qIEVORCBOQVYgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL3Rvb2xzLmNzcyBiL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvdG9vbHMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDVjZTBjLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RydXRzMkhlbGxvL3NyYy9tYWluL3dlYmFwcC9zdHlsZXMvdG9vbHMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyogQSBDU1MgRnJhbWV3b3JrIGJ5IE1pa2UgU3RlbmhvdXNlIG9mIENvbnRlbnQgd2l0aCBTdHlsZSAqLw0KLQ0KLS8qIGNsZWFyaW5nICovDQotLnN0cmV0Y2gsDQotLmNsZWFyDQotew0KLSAgICBjbGVhcjogYm90aDsNCi0gICAgaGVpZ2h0OiAxcHg7DQotICAgIG1hcmdpbjogMDsNCi0gICAgcGFkZGluZzogMDsNCi0gICAgZm9udC1zaXplOiAxNXB4Ow0KLSAgICBsaW5lLWhlaWdodDogMXB4Ow0KLX0NCi0NCi0uY2xlYXJmaXg6YWZ0ZXINCi17DQotICAgIGNvbnRlbnQ6ICIuIjsNCi0gICAgZGlzcGxheTogYmxvY2s7DQotICAgIGhlaWdodDogMDsNCi0gICAgY2xlYXI6IGJvdGg7DQotICAgIHZpc2liaWxpdHk6IGhpZGRlbjsNCi19DQotDQotKiBodG1sPmJvZHkgLmNsZWFyZml4DQotew0KLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQotICAgIHdpZHRoOiAxMDAlOw0KLX0NCi0NCi0qIGh0bWwgLmNsZWFyZml4DQotew0KLS8qIEhpZGVzIGZyb20gSUUtbWFjIFwqLw0KLSAgICBoZWlnaHQ6IDElOyAvKiBFbmQgaGlkZSBmcm9tIElFLW1hYyAqLw0KLX0NCi0NCi0vKiBlbmQgY2xlYXJpbmcgKi8NCi0NCi0vKiByZXBsYWNlICovDQotLnJlcGxhY2UNCi17DQotICAgIGRpc3BsYXk6IGJsb2NrOw0KLQ0KLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsNCi0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQotfQ0KLQ0KLS8qIHRpZHkgdGhlc2UgdXAgKi8NCi0ucmVwbGFjZSAqDQotew0KLSAgICB0ZXh0LWluZGVudDogLTEwMDAwcHg7DQotICAgIGRpc3BsYXk6IGJsb2NrOw0KLQ0KLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsNCi0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQotfQ0KLQ0KLS5yZXBsYWNlIGENCi17DQotICAgIHRleHQtaW5kZW50OiAwOw0KLX0NCi0NCi0ucmVwbGFjZSBhIHNwYW4NCi17DQotICAgIHRleHQtaW5kZW50OiAtMTAwMDBweDsNCi19DQotDQotLyogZW5kIHJlcGxhY2UgKi8NCi0NCi0vKiBhY2Nlc3NpYmlsaXR5ICovDQotc3Bhbi5hY2Nlc3NrZXkNCi17DQotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCi19DQotDQotLmFjY2Vzc2liaWxpdHkNCi17DQotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCi0gICAgdG9wOiAtOTk5ZW07DQotICAgIGxlZnQ6IC05OTllbTsNCi19DQotDQotLyogZW5kIGFjY2Vzc2liaWxpdHkgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL3R5cG8uY3NzIGIvc2FtcGxlcy9zdHJ1dHMySGVsbG8vc3JjL21haW4vd2ViYXBwL3N0eWxlcy90eXBvLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU1ZDYzZi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0cnV0czJIZWxsby9zcmMvbWFpbi93ZWJhcHAvc3R5bGVzL3R5cG8uY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qIEEgQ1NTIEZyYW1ld29yayBieSBNaWtlIFN0ZW5ob3VzZSBvZiBDb250ZW50IHdpdGggU3R5bGUgKi8NCi0NCi0vKiBUWVBPR1JBUEhZICovDQotYm9keQ0KLXsNCi0gICAgdGV4dC1hbGlnbjogbGVmdDsNCi0gICAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCi0gICAgZm9udC1zaXplOiA3NiU7DQotICAgIGxpbmUtaGVpZ2h0OiAxZW07DQotICAgIGNvbG9yOiAjMzMzOw0KLX0NCi0NCi1kaXYNCi17DQotICAgIGZvbnQtc2l6ZTogMWVtOw0KLX0NCi0NCi1pbWcNCi17DQotICAgIGJvcmRlcjogMDsNCi19DQotDQotLyogTElOS1MgKi8NCi1hLA0KLWE6bGluaw0KLQlhOmFjdGl2ZQ0KLXsNCi0gICAgY29sb3I6IGJsdWU7DQotICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KLSAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCi19DQotDQotYTp2aXNpdGVkDQotew0KLSAgICBjb2xvcjogcHVycGxlOw0KLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCi19DQotDQotYTpob3Zlcg0KLXsNCi0gICAgY29sb3I6IHdoaXRlOw0KLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsNCi0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KLX0NCi0NCi0vKiBFTkQgTElOS1MgKi8NCi0NCi0vKiBIRUFESU5HUyAqLw0KLWgxDQotew0KLSAgICBmb250LXNpemU6IDJlbTsNCi0gICAgbGluZS1oZWlnaHQ6IDEuNWVtOw0KLSAgICBtYXJnaW46IDAgMCAwLjVlbSAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLSAgICBjb2xvcjogYmxhY2s7DQotfQ0KLQ0KLWgyDQotew0KLSAgICBmb250LXNpemU6IDEuNWVtOw0KLSAgICBsaW5lLWhlaWdodDogMS41ZW07DQotICAgIG1hcmdpbjogMCAwIDAuNWVtIDA7DQotICAgIHBhZGRpbmc6IDA7DQotICAgIGNvbG9yOiBibGFjazsNCi19DQotDQotaDMNCi17DQotICAgIGZvbnQtc2l6ZTogMS4zZW07DQotICAgIGxpbmUtaGVpZ2h0OiAxLjNlbTsNCi0gICAgbWFyZ2luOiAwIDAgMC41ZW0gMDsNCi0gICAgcGFkZGluZzogMDsNCi0gICAgY29sb3I6IGJsYWNrOw0KLX0NCi0NCi1oNA0KLXsNCi0gICAgZm9udC1zaXplOiAxLjJlbTsNCi0gICAgbGluZS1oZWlnaHQ6IDEuM2VtOw0KLSAgICBtYXJnaW46IDAgMCAwLjI1ZW0gMDsNCi0gICAgcGFkZGluZzogMDsNCi0gICAgY29sb3I6IGJsYWNrOw0KLX0NCi0NCi1oNQ0KLXsNCi0gICAgZm9udC1zaXplOiAxLjFlbTsNCi0gICAgbGluZS1oZWlnaHQ6IDEuM2VtOw0KLSAgICBtYXJnaW46IDAgMCAwLjI1ZW0gMDsNCi0gICAgcGFkZGluZzogMDsNCi0gICAgY29sb3I6IGJsYWNrOw0KLX0NCi0NCi1oNg0KLXsNCi0gICAgZm9udC1zaXplOiAxZW07DQotICAgIGxpbmUtaGVpZ2h0OiAxLjNlbTsNCi0gICAgbWFyZ2luOiAwIDAgMC4yNWVtIDA7DQotICAgIHBhZGRpbmc6IDA7DQotICAgIGNvbG9yOiBibGFjazsNCi19DQotDQotLyogRU5EIEhFQURJTkdTICovDQotDQotLyogVEVYVCAqLw0KLXANCi17DQotICAgIGZvbnQtc2l6ZTogMWVtOw0KLSAgICBtYXJnaW46IDAgMCAxLjVlbSAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLSAgICBsaW5lLWhlaWdodDogMS40ZW07DQotfQ0KLQ0KLWJsb2NrcXVvdGUNCi17DQotICAgIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkICNkZGQ7DQotICAgIG1hcmdpbi1sZWZ0OiAxMHB4Ow0KLX0NCi0NCi1wcmUNCi17DQotICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7DQotICAgIGZvbnQtc2l6ZTogMS4wZW07DQotfQ0KLQ0KLXN0cm9uZywgYg0KLXsNCi0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQotfQ0KLQ0KLWVtLCBpDQotew0KLSAgICBmb250LXN0eWxlOiBpdGFsaWM7DQotfQ0KLQ0KLWNvZGUNCi17DQotICAgIGZvbnQtZmFtaWx5OiAiQ291cmllciBOZXciLCBDb3VyaWVyLCBtb25vc3BhY2U7DQotICAgIGZvbnQtc2l6ZTogMWVtOw0KLSAgICB3aGl0ZS1zcGFjZTogcHJlOw0KLX0NCi0NCi0vKiBFTkQgVEVYVCAqLw0KLQ0KLS8qIExJU1RTICovDQotdWwNCi17DQotICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsNCi0gICAgbWFyZ2luOiAwIDAgMS41ZW0gMDsNCi0gICAgcGFkZGluZzogMDsNCi19DQotDQotdWwgbGkNCi17DQotICAgIG1hcmdpbjogMCAwIDAuMjVlbSAzMHB4Ow0KLSAgICBwYWRkaW5nOiAwOw0KLX0NCi0NCi1vbA0KLXsNCi0gICAgZm9udC1zaXplOiAxLjBlbTsNCi0gICAgbGluZS1oZWlnaHQ6IDEuNGVtOw0KLSAgICBtYXJnaW46IDAgMCAxLjVlbSAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLX0NCi0NCi1vbCBsaQ0KLXsNCi0gICAgZm9udC1zaXplOiAxLjBlbTsNCi0gICAgbWFyZ2luOiAwIDAgMC4yNWVtIDMwcHg7DQotICAgIHBhZGRpbmc6IDA7DQotfQ0KLQ0KLWRsDQotew0KLSAgICBtYXJnaW46IDAgMCAxLjVlbSAwOw0KLSAgICBwYWRkaW5nOiAwOw0KLSAgICBsaW5lLWhlaWdodDogMS40ZW07DQotfQ0KLQ0KLWRsIGR0DQotew0KLSAgICBmb250LXdlaWdodDogYm9sZDsNCi0gICAgbWFyZ2luOiAwLjI1ZW0gMCAwLjI1ZW0gMDsNCi0gICAgcGFkZGluZzogMDsNCi19DQotDQotZGwgZGQNCi17DQotICAgIG1hcmdpbjogMCAwIDAgMzBweDsNCi0gICAgcGFkZGluZzogMDsNCi19DQotDQotLyogRU5EIExJU1RTICovDQotDQotLyogVEFCTEUgKi8NCi10YWJsZQ0KLXsNCi0gICAgZm9udC1zaXplOiAxZW07DQotICAgIG1hcmdpbjogMCAwIDEuNWVtIDA7DQotICAgIHBhZGRpbmc6IDA7DQotfQ0KLQ0KLXRhYmxlIGNhcHRpb24NCi17DQotICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KLSAgICBtYXJnaW46IDAgMCAwIDA7DQotICAgIHBhZGRpbmc6IDAgMCAxLjVlbSAwOw0KLX0NCi0NCi10aA0KLXsNCi0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQotICAgIHRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLXRkDQotew0KLSAgICBmb250LXNpemU6IDFlbTsNCi19DQotDQotLyogRU5EIFRBQkxFICovDQotDQotaHINCi17DQotICAgIGRpc3BsYXk6IG5vbmU7DQotfQ0KLQ0KLWRpdi5ocg0KLXsNCi0gICAgaGVpZ2h0OiAxcHg7DQotICAgIG1hcmdpbjogMS41ZW0gMTBweDsNCi0gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCBibGFjazsNCi19DQotDQotLyogRU5EIFRZUE9HUkFQSFkgKi8JClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zd2luZy9idWlsZC5ncmFkbGUgYi9zYW1wbGVzL3N3aW5nL2J1aWxkLmdyYWRsZQppbmRleCA3ZTM0MjIzLi45MTgzNjNjIDEwMDY0NAotLS0gYS9zYW1wbGVzL3N3aW5nL2J1aWxkLmdyYWRsZQorKysgYi9zYW1wbGVzL3N3aW5nL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJTYW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgU3RydXRzMiBpbnRlZ3JhdGlvbi4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBTYW1wbGUgLSBTd2luZyBCaW5kaW5ncyIgfX0KK2Rlc2NyaXB0aW9uID0gIlNhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBTd2luZyBiaW5kaW5ncy4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBTYW1wbGUgLSBTd2luZyBCaW5kaW5ncyIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2V4YW1wbGUvQ2l0eVZhbHVlLmphdmEgYi9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvZXhhbXBsZS9DaXR5VmFsdWUuamF2YQppbmRleCA5NjE5ZWVjLi5iYWZkYWYxIDEwMDY0NAotLS0gYS9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvZXhhbXBsZS9DaXR5VmFsdWUuamF2YQorKysgYi9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvZXhhbXBsZS9DaXR5VmFsdWUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWIuc3dpbmcuYmluZGluZy5leGFtcGxlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQ29tcG9zaXRlOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2V4YW1wbGUvQ291bnRyeVZhbHVlLmphdmEgYi9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvZXhhbXBsZS9Db3VudHJ5VmFsdWUuamF2YQppbmRleCBmNzYxYTZiLi41NTgwZGRiIDEwMDY0NAotLS0gYS9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvZXhhbXBsZS9Db3VudHJ5VmFsdWUuamF2YQorKysgYi9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvZXhhbXBsZS9Db3VudHJ5VmFsdWUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWIuc3dpbmcuYmluZGluZy5leGFtcGxlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnZhbHVlLlZhbHVlQ29tcG9zaXRlOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL0Fzc29jaWF0aW9uRm9jdXNMb3N0TGlzdGVuZXIuamF2YSBiL3NhbXBsZXMvc3dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWIvc3dpbmcvYmluZGluZy9pbnRlcm5hbC9Bc3NvY2lhdGlvbkZvY3VzTG9zdExpc3RlbmVyLmphdmEKaW5kZXggZjllODg2Yi4uNDI1Yzk0YyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL0Fzc29jaWF0aW9uRm9jdXNMb3N0TGlzdGVuZXIuamF2YQorKysgYi9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvaW50ZXJuYWwvQXNzb2NpYXRpb25Gb2N1c0xvc3RMaXN0ZW5lci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYi5zd2luZy5iaW5kaW5nLmludGVybmFsOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL0JvdW5kQXNzb2NpYXRpb24uamF2YSBiL3NhbXBsZXMvc3dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWIvc3dpbmcvYmluZGluZy9pbnRlcm5hbC9Cb3VuZEFzc29jaWF0aW9uLmphdmEKaW5kZXggNWMwZGFmMC4uYjkyN2NjMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL0JvdW5kQXNzb2NpYXRpb24uamF2YQorKysgYi9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvaW50ZXJuYWwvQm91bmRBc3NvY2lhdGlvbi5qYXZhCkBAIC0xOCw2ICsxOCw3IEBACiBwYWNrYWdlIG9yZy5xaTRqLmxpYi5zd2luZy5iaW5kaW5nLmludGVybmFsOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU2VydmljZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlVzZXM7CkBAIC04Miw0ICs4MywxMCBAQAogICAgIHsKICAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRW50aXR5UmVmZXJlbmNlIHJlZmVyZW5jZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWN0dWFsLnJlZmVyZW5jZSgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWIvc3dpbmcvYmluZGluZy9pbnRlcm5hbC9Cb3VuZE1hbnlBc3NvY2lhdGlvbi5qYXZhIGIvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL0JvdW5kTWFueUFzc29jaWF0aW9uLmphdmEKaW5kZXggYTdkY2IwZi4uMTlhMGEzNiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL0JvdW5kTWFueUFzc29jaWF0aW9uLmphdmEKKysrIGIvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL0JvdW5kTWFueUFzc29jaWF0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGliLnN3aW5nLmJpbmRpbmcuaW50ZXJuYWw7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CkBAIC01LDYgKzIzLDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5NYW55QXNzb2NpYXRpb247CitpbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlSZWZlcmVuY2U7CiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5TZXJ2aWNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RydWN0dXJlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVXNlczsKQEAgLTU5LDYgKzc4LDEyIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEl0ZXJhYmxlPEVudGl0eVJlZmVyZW5jZT4gcmVmZXJlbmNlcygpCisgICAgeworICAgICAgICByZXR1cm4gYWN0dWFsQXNzb2NpYXRpb25zLnJlZmVyZW5jZXMoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGNvdW50KCkKICAgICB7CiAgICAgICAgIHJldHVybiBhY3R1YWxBc3NvY2lhdGlvbnMuY291bnQoKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWIvc3dpbmcvYmluZGluZy9pbnRlcm5hbC9Cb3VuZE5hbWVkQXNzb2NpYXRpb24uamF2YSBiL3NhbXBsZXMvc3dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWIvc3dpbmcvYmluZGluZy9pbnRlcm5hbC9Cb3VuZE5hbWVkQXNzb2NpYXRpb24uamF2YQppbmRleCA4ZTlmMTg3Li41NTNhZGNjIDEwMDY0NAotLS0gYS9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvaW50ZXJuYWwvQm91bmROYW1lZEFzc29jaWF0aW9uLmphdmEKKysrIGIvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL0JvdW5kTmFtZWRBc3NvY2lhdGlvbi5qYXZhCkBAIC0xLDkgKzEsMjggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmxpYi5zd2luZy5iaW5kaW5nLmludGVybmFsOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5hc3NvY2lhdGlvbi5OYW1lZEFzc29jaWF0aW9uOworaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5UmVmZXJlbmNlOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU2VydmljZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlVzZXM7CkBAIC03NSw2ICs5NCwxOCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJdGVyYWJsZTxFbnRpdHlSZWZlcmVuY2U+IHJlZmVyZW5jZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFjdHVhbEFzc29jaWF0aW9ucy5yZWZlcmVuY2VzKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEVudGl0eVJlZmVyZW5jZSByZWZlcmVuY2VPZiggU3RyaW5nIG5hbWUgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFjdHVhbEFzc29jaWF0aW9ucy5yZWZlcmVuY2VPZiggbmFtZSApOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBJdGVyYXRvcjxTdHJpbmc+IGl0ZXJhdG9yKCkKICAgICB7CiAgICAgICAgIHJldHVybiBhY3R1YWxBc3NvY2lhdGlvbnMuaXRlcmF0b3IoKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWIvc3dpbmcvYmluZGluZy9pbnRlcm5hbC9Cb3VuZFByb3BlcnR5LmphdmEgYi9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvaW50ZXJuYWwvQm91bmRQcm9wZXJ0eS5qYXZhCmluZGV4IDMwYTg4ZDYuLjdkMjJiNDQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc3dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWIvc3dpbmcvYmluZGluZy9pbnRlcm5hbC9Cb3VuZFByb3BlcnR5LmphdmEKKysrIGIvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL0JvdW5kUHJvcGVydHkuamF2YQpAQCAtMTcsMTkgKzE3LDE3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLnFpNGoubGliLnN3aW5nLmJpbmRpbmcuaW50ZXJuYWw7CiAKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5Gb2N1c0xpc3RlbmVyOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZheC5zd2luZy5KQ29tcG9uZW50OwogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU2VydmljZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlN0cnVjdHVyZTsKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlVzZXM7CiBpbXBvcnQgb3JnLnFpNGouYXBpLm9iamVjdC5PYmplY3RGYWN0b3J5OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5HZW5lcmljUHJvcGVydHlJbmZvOwogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKIGltcG9ydCBvcmcucWk0ai5saWIuc3dpbmcuYmluZGluZy5CaW5kaW5nOwogaW1wb3J0IG9yZy5xaTRqLmxpYi5zd2luZy5iaW5kaW5nLlN3aW5nQWRhcHRlcjsKIAotaW1wb3J0IGphdmF4LnN3aW5nLio7Ci1pbXBvcnQgamF2YS5hd3QuZXZlbnQuRm9jdXNMaXN0ZW5lcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KIHB1YmxpYyBmaW5hbCBjbGFzcyBCb3VuZFByb3BlcnR5PFQ+IGV4dGVuZHMgQWJzdHJhY3RCaW5kaW5nPFQ+CiAgICAgaW1wbGVtZW50cyBQcm9wZXJ0eTxUPiwgQmluZGluZwogewpAQCAtNDQsNyArNDIsOCBAQAogICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIFRocm93biBpZiB0aGUgc3BlY2lmaWVkIHtAY29kZSBhTWV0aG9kfSBpcyB7QGNvZGUgbnVsbH0uCiAgICAgICovCiAgICAgcHVibGljIEJvdW5kUHJvcGVydHkoIEBVc2VzIE1ldGhvZCBwcm9wZXJ0eU1ldGhvZCwgQFN0cnVjdHVyZSBPYmplY3RGYWN0b3J5IG9iamVjdEJ1aWxkZXJGYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBAU2VydmljZSBJdGVyYWJsZTxTd2luZ0FkYXB0ZXI+IGFsbEFkYXB0ZXJzICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQFNlcnZpY2UgSXRlcmFibGU8U3dpbmdBZGFwdGVyPiBhbGxBZGFwdGVycworICAgICkKICAgICAgICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgc3VwZXIoIHByb3BlcnR5TWV0aG9kLCBvYmplY3RCdWlsZGVyRmFjdG9yeSwgYWxsQWRhcHRlcnMgKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWIvc3dpbmcvYmluZGluZy9pbnRlcm5hbC9Qcm9wZXJ0eUZvY3VzTG9zdExpc3RlbmVyLmphdmEgYi9zYW1wbGVzL3N3aW5nL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGliL3N3aW5nL2JpbmRpbmcvaW50ZXJuYWwvUHJvcGVydHlGb2N1c0xvc3RMaXN0ZW5lci5qYXZhCmluZGV4IGRhMDkyNjEuLmUwNDcwMmEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc3dpbmcvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWIvc3dpbmcvYmluZGluZy9pbnRlcm5hbC9Qcm9wZXJ0eUZvY3VzTG9zdExpc3RlbmVyLmphdmEKKysrIGIvc2FtcGxlcy9zd2luZy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYi9zd2luZy9iaW5kaW5nL2ludGVybmFsL1Byb3BlcnR5Rm9jdXNMb3N0TGlzdGVuZXIuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5saWIuc3dpbmcuYmluZGluZy5pbnRlcm5hbDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL3NldHRpbmdzLmdyYWRsZSBiL3NldHRpbmdzLmdyYWRsZQppbmRleCA0M2I0ZjJiLi5hNjZmZDY2IDEwMDY0NAotLS0gYS9zZXR0aW5ncy5ncmFkbGUKKysrIGIvc2V0dGluZ3MuZ3JhZGxlCkBAIC0xLDMxICsxLDQ2IEBACi1pbmNsdWRlICJjb3JlOmZ1bmN0aW9uYWwiLAotICAgICAgICAiY29yZTppbyIsCi0gICAgICAgICJjb3JlOmFwaSIsCi0gICAgICAgICJjb3JlOnNwaSIsCi0gICAgICAgICJjb3JlOnRlc3RzdXBwb3J0IiwKLSAgICAgICAgImNvcmU6Ym9vdHN0cmFwIiwKLSAgICAgICAgImNvcmU6cnVudGltZSIsCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbmNsdWRlICdjb3JlOmZ1bmN0aW9uYWwnLAorICAgICAgICAnY29yZTppbycsCisgICAgICAgICdjb3JlOmFwaScsCisgICAgICAgICdjb3JlOnNwaScsCisgICAgICAgICdjb3JlOnRlc3RzdXBwb3J0JywKKyAgICAgICAgJ2NvcmU6Ym9vdHN0cmFwJywKKyAgICAgICAgJ2NvcmU6cnVudGltZScsCiAgICAgICAgICdsaWJyYXJpZXM6YWxhcm0nLAogICAgICAgICAnbGlicmFyaWVzOmNpcmN1aXRicmVha2VyJywKICAgICAgICAgJ2xpYnJhcmllczpjb25zdHJhaW50cycsCiAgICAgICAgICdsaWJyYXJpZXM6Y29udmVyc2lvbicsCi0gICAgICAgICdsaWJyYXJpZXM6Y3hmJywKICAgICAgICAgJ2xpYnJhcmllczpldmVudHNvdXJjaW5nJywKICAgICAgICAgJ2xpYnJhcmllczpldmVudHNvdXJjaW5nLWpkYm0nLAogICAgICAgICAnbGlicmFyaWVzOmV2ZW50c291cmNpbmctcmVzdCcsCiAgICAgICAgICdsaWJyYXJpZXM6ZmlsZWNvbmZpZycsCiAgICAgICAgICdsaWJyYXJpZXM6aHR0cCcsCiAgICAgICAgICdsaWJyYXJpZXM6aW52b2NhdGlvbi1jYWNoZScsCi0gICAgICAgICdsaWJyYXJpZXM6bGFuZy1iZWFuc2hlbGwnLAogICAgICAgICAnbGlicmFyaWVzOmxhbmctZ3Jvb3Z5JywKICAgICAgICAgJ2xpYnJhcmllczpsYW5nLWphdmFzY3JpcHQnLAotICAgICAgICAnbGlicmFyaWVzOmxhbmctanJ1YnknLAogICAgICAgICAnbGlicmFyaWVzOmxhbmctc2NhbGEnLAogICAgICAgICAnbGlicmFyaWVzOmpteCcsCiAgICAgICAgICdsaWJyYXJpZXM6bG9ja2luZycsCiAgICAgICAgICdsaWJyYXJpZXM6bG9nZ2luZycsCiAgICAgICAgICdsaWJyYXJpZXM6bWV0cmljcycsCi0gICAgICAgICdsaWJyYXJpZXM6bmVvNGonLAogICAgICAgICAnbGlicmFyaWVzOm9zZ2knLAogICAgICAgICAnbGlicmFyaWVzOnJkZicsCiAgICAgICAgICdsaWJyYXJpZXM6cmVzdCcsCkBAIC00MCwzMCArNTUsMjMgQEAKICAgICAgICAgJ2xpYnJhcmllczpzcHJpbmcnLAogICAgICAgICAnbGlicmFyaWVzOnNxbCcsCiAgICAgICAgICdsaWJyYXJpZXM6c3FsLWJvbmVjcCcsCi0gICAgICAgICdsaWJyYXJpZXM6c3FsLWMzcDAnLAogICAgICAgICAnbGlicmFyaWVzOnNxbC1kYmNwJywKICAgICAgICAgJ2xpYnJhcmllczpzcWwtbGlxdWliYXNlJywKLSAgICAgICAgJ2xpYnJhcmllczpzdHJ1dHMyLXBsdWdpbicsCi0gICAgICAgICdsaWJyYXJpZXM6c3RydXRzMi1jb2RlYmVoaW5kJywKLSAgICAgICAgJ2xpYnJhcmllczpzdHJ1dHMyLWNvbnZlbnRpb24nLAogICAgICAgICAnbGlicmFyaWVzOnVpZCcsCiAgICAgICAgICdsaWJyYXJpZXM6dW93ZmlsZScsCiAgICAgICAgICdleHRlbnNpb25zOmNhY2hlLWVoY2FjaGUnLAogICAgICAgICAnZXh0ZW5zaW9uczpjYWNoZS1tZW1jYWNoZScsCiAgICAgICAgICdleHRlbnNpb25zOmVudGl0eXN0b3JlLW1lbW9yeScsCiAgICAgICAgICdleHRlbnNpb25zOmVudGl0eXN0b3JlLWZpbGUnLAotICAgICAgICAnZXh0ZW5zaW9uczplbnRpdHlzdG9yZS1nYWUnLAogICAgICAgICAnZXh0ZW5zaW9uczplbnRpdHlzdG9yZS1oYXplbGNhc3QnLAogICAgICAgICAnZXh0ZW5zaW9uczplbnRpdHlzdG9yZS1qY2xvdWRzJywKICAgICAgICAgJ2V4dGVuc2lvbnM6ZW50aXR5c3RvcmUtamRibScsCiAgICAgICAgICdleHRlbnNpb25zOmVudGl0eXN0b3JlLWxldmVsZGInLAogICAgICAgICAnZXh0ZW5zaW9uczplbnRpdHlzdG9yZS1tb25nb2RiJywKLSAgICAgICAgJ2V4dGVuc2lvbnM6ZW50aXR5c3RvcmUtbmVvNGonLAogICAgICAgICAnZXh0ZW5zaW9uczplbnRpdHlzdG9yZS1wcmVmZXJlbmNlcycsCiAgICAgICAgICdleHRlbnNpb25zOmVudGl0eXN0b3JlLXJlZGlzJywKICAgICAgICAgJ2V4dGVuc2lvbnM6ZW50aXR5c3RvcmUtcmlhaycsCiAgICAgICAgICdleHRlbnNpb25zOmVudGl0eXN0b3JlLXNxbCcsCi0gICAgICAgICdleHRlbnNpb25zOmVudGl0eXN0b3JlLXZvbGRlbW9ydCcsCiAgICAgICAgICdleHRlbnNpb25zOmluZGV4aW5nLWVsYXN0aWNzZWFyY2gnLAogICAgICAgICAnZXh0ZW5zaW9uczppbmRleGluZy1yZGYnLAogICAgICAgICAnZXh0ZW5zaW9uczppbmRleGluZy1zb2xyJywKQEAgLTgxLDkgKzg5LDcgQEAKICAgICAgICAgJ3NhbXBsZXM6Zm9ydW0nLAogICAgICAgICAnc2FtcGxlczpyZW50YWwnLAogICAgICAgICAnc2FtcGxlczpzcWwtc3VwcG9ydCcsCi0gICAgICAgICdzYW1wbGVzOnN0cnV0czJIZWxsbycsCiAgICAgICAgICdzYW1wbGVzOnN3aW5nJywKLSAgICAgICAgJ3Rvb2xzOmVudGl0eS12aWV3ZXInLAogICAgICAgICAndG9vbHM6bW9kZWwtZGV0YWlsJywKICAgICAgICAgJ3Rvb2xzOmVudmlzYWdlJywKICAgICAgICAgJ3Rvb2xzOnNoZWxsJywKQEAgLTk3LDcgKzEwMyw2IEBACiAgICAgICAgICd0dXRvcmlhbHM6aW50cm9kdWN0aW9uOnRoaXJ0eW1pbnV0ZXMnLAogLy8gICAgICAgICd0dXRvcmlhbHM6aW50cm9kdWN0aW9uOnR3b2hvdXJzJywKICAgICAgICAgJ3R1dG9yaWFsczpzZXJ2aWNlcycsCi0gICAgICAgICd0ZXN0czpjb21wbGV4OmdhZScsCiAgICAgICAgICd0ZXN0czpyZWdyZXNzaW9uJywKICAgICAgICAgJ3Rlc3RzOnBlcmZvcm1hbmNlJwogCmRpZmYgLS1naXQgYS9zcmMvYmluLWRpc3QvTk9USUNFLnR4dCBiL3NyYy9iaW4tZGlzdC9OT1RJQ0UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmN2IxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluLWRpc3QvTk9USUNFLnR4dApAQCAtMCwwICsxLDUgQEAKK0FwYWNoZSBaZXN04oSiIChKYXZhIEVkaXRpb24pIFNESyBCaW5hcnkgRGlzdHJpYnV0aW9uCitDb3B5cmlnaHQgMjAxNSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1RoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQKK1RoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuCmRpZmYgLS1naXQgYS9zcmMvYmluLWRpc3QvUkVBRE1FLnR4dCBiL3NyYy9iaW4tZGlzdC9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzI0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluLWRpc3QvUkVBRE1FLnR4dApAQCAtMCwwICsxLDUwIEBACisKK1dlbGNvbWUgdG8gdGhlIHdvcmxkIG9mIEFwYWNoZSBaZXN0CisgICAtIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBvbiB0aGUgSmF2YSBwbGF0Zm9ybS4KKworCitUaGlzIEFwYWNoZSBaZXN04oSiIEJpbmFyeSBEaXN0cmlidXRpb24gY29udGFpbnMgZXZlcnl0aGluZyB5b3UgbmVlZCB0bworY3JlYXRlIFplc3TihKIgYXBwbGljYXRpb25zLgorCisKK1plc3TihKIgKHRoZW4gWmVzdOKEoikgc3RhcnRlZCBpbiAyMDA3LCBhbmQgaXMgc3RpbGwgaW4gaGVhdnkgZGV2ZWxvcG1lbnQKK2F0IHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gV2Ugd291bGQgbGlrZQorZGV2ZWxvcGVycyBhcm91bmQgdGhlIHdvcmxkIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBhZHZhbmNlbWVudCBvZiB0aGlzCitjb29sLCBuZXcgYW5kIGNoYWxsZW5naW5nIHRlY2hub2xvZ3kuIFdlIGFyZSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4KK3Blb3BsZSB3aWxsaW5nIHRvIGhlbHAgaW1wcm92ZSB0aGUgU0RLLCBzYW1wbGVzLCB0dXRvcmlhbHMsIGRvY3VtZW50YXRpb24KK2FuZCBvdGhlciBzdXBwb3J0aW5nIG1hdGVyaWFsLgorCitQbGVhc2Ugc2VlIGh0dHBzOi8vemVzdC5hcGFjaGUub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK0xpY2Vuc2luZworLS0tLS0tLS0tCitBbGwgQXBhY2hlIFplc3TihKIgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBhbiBBcGFjaGUgTGljZW5zZS4KKworVGhpcmQtUGFydHkgRGVwZW5kZW5jaWVzIG1heSBiZSBsaWNlbnNlZCB1bmRlciBvdGhlciB0ZXJtcy4gVGhlIG9ubHkKK3JlcXVpcmVkIGRlcGVuZGVuY2llcyBhcmUgU0xGNEogKE1JVCBMaWNlbmNlKSwgQVNNIChCU0QgTGljZW5jZSkgYW5kCitKb2RhLVRpbWUgKEFwYWNoZSBMaWNlbmNlKS4KKworRmluYWxseSwgWmVzdOKEoiBUZXN0U3VwcG9ydCBkZXBlbmRzIG9uIEpVbml0IDQueCBhbmQgaXRzIGRlcGVuZGVuY2llcywgd2hpY2gKK2lzIGFsc28gbm90IGluY2x1ZGVkIGluIHRoZSBTREsgaXRzZWxmLCBhcyBpdCBpcyBwcmVzZW50IGFtb25nIG1vc3QgSmF2YQorZGV2ZWxvcGVycy4KKworCitEZXBlbmRlbmNpZXMgbm90IGluY2x1ZGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgYmluYXJ5IGRpc3RyaWJ1dGlvbnMgY29udGFpbnMgWmVzdOKEoiBhcnRpZmFjdHMgb25seSB0byBrZWVwIHRoZSBkb3dubG9hZAorc2l6ZSBzbWFsbC4gRWFjaCBaZXN04oSiIGFydGlmYWN0IGNvbWVzIHdpdGggYSBmaWxlIHByZWZpeGVkIC4uLXJ1bnRpbWUtZGVwcy50eHQKK3RoYXQgY29udGFpbnMgdGhlIGxpc3Qgb2YgaXRzIGRlcGVuZGVuY2llcy4gTW9yZW92ZXIsIGF0IHRoZSBiaW5hcnkKK2Rpc3RyaWJ1dGlvbidzIHJvb3QsIHlvdSdsbCBmaW5kIGJvdGggTWF2ZW4gKGdvLW9mZmxpbmUucG9tKSBhbmQgR3JhZGxlCisoZ28tb2ZmbGluZS5ncmFkbGUpIGJ1aWxkIGZpbGVzIHdob3NlcyBzb2xlIHB1cnBvc2UgaXMgdG8gZWFzaWx5IGRvd25sb2FkIGFsbAorbmVlZGVkIGRlcGVuZGVuY2llcyBqYXJzLiBJbnN0cnVjdGlvbnMgYXJlIGdpdmVuIGludG8gdGhlc2VzIGZpbGVzLgorCitJZiB5b3UgcHJlZmVyIHRvIHVzZSBhIGRlcGVuZGVuY3kgbWFuYWdlbWVudCBzeXN0ZW0sIGdvIHRvOgoraHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvamF2YS9sYXRlc3QvaG93dG8tZGVwZW5kLW9uLXplc3QuaHRtbAorCisKK1RoYW5rIHlvdSBmb3IgdHJ5aW5nIG91dCBBcGFjaGUgWmVzdOKEoiBhbmQgQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nLgorCisKKy0tIEFwYWNoZSBaZXN04oSiIFRlYW0KKwpkaWZmIC0tZ2l0IGEvc3JjL2phdmFkb2Mvb3ZlcnZpZXcuaHRtbCBiL3NyYy9qYXZhZG9jL292ZXJ2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhZmZlZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9qYXZhZG9jL292ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwyMyBAQAorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGh0bWw+CisgICAgPGJvZHk+CisgICAgICAgIDxoMz5XZWxjb21lIHRvIHRoZSBBcGFjaGUgWmVzdOKEoiAoSmF2YSBFZGl0aW9uKSBTREsgSmF2YWRvYy48L2gzPgorICAgICAgICA8cD5BcGFjaGUgWmVzdOKEoiBpcyBhIGZyYW1ld29yayBmb3IgZG9tYWluIGNlbnRyaWMgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQsIGluY2x1ZGluZyBldm9sdmVkIGNvbmNlcHRzIGZyb20gQU9QLCBESSBhbmQgRERELjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmciIHRhcmdldD0iX2JsYW5rIj56ZXN0LmFwYWNoZS5vcmc8L2E+PC9wPgorICAgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbXBsZXgvZ2FlL2J1aWxkLmdyYWRsZSBiL3Rlc3RzL2NvbXBsZXgvZ2FlL2J1aWxkLmdyYWRsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM4ZWYzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jb21wbGV4L2dhZS9idWlsZC5ncmFkbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1kZXNjcmlwdGlvbiA9ICJUZXN0cyBmb3IgUWk0aiBHb29nbGUgQXBwRW5naW5lIEV4dGVuc2lvbi4iCi0KLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIFRlc3RzIC0gR29vZ2xlIEFwcCBFbmdpbmUgRW50aXR5U3RvcmUiIH19Ci0KLWRlcGVuZGVuY2llcyB7Ci0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5hcGkiKSkKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5leHRlbnNpb25zOm9yZy5xaTRqLmV4dGVuc2lvbi5lbnRpdHlzdG9yZS1nYWUiKSkKLSAgY29tcGlsZShsaWJyYXJpZXMuc2VydmxldF9hcGkpCi0gIGNvbXBpbGUobGlicmFyaWVzLnNsZjRqX2FwaSkKLSAgY29tcGlsZShsaWJyYXJpZXMuanVuaXQpCi0gIHRlc3RSdW50aW1lKGxpYnJhcmllcy5hc20pCi0gIHRlc3RSdW50aW1lKGxpYnJhcmllcy5hc21fY29tbW9ucykKLSAgdGVzdFJ1bnRpbWUobGlicmFyaWVzLnNsZjRqX3NpbXBsZSkKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikpCi0gIHRlc3RSdW50aW1lKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuc3BpIikpCi0gIHRlc3RSdW50aW1lKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpKQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbXBsZXgvZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9nYWUvR2FlVGVzdFNlcnZsZXQuamF2YSBiL3Rlc3RzL2NvbXBsZXgvZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9nYWUvR2FlVGVzdFNlcnZsZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM0MWI0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jb21wbGV4L2dhZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvZ2FlL0dhZVRlc3RTZXJ2bGV0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLnRlc3QuZ2FlOwotCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgR2FlVGVzdFNlcnZsZXQKLSAgICBleHRlbmRzIEh0dHBTZXJ2bGV0Ci17Ci0gICAgcHJpdmF0ZSBVbml0VGVzdHMgdW5pdFRlc3RzOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgaW5pdCgpCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJTdGFydGluZyBHQUUgRW50aXR5U3RvcmUgVW5pdFRlc3RzIiApOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgdW5pdFRlc3RzID0gbmV3IFVuaXRUZXN0cygpOwotICAgICAgICAgICAgdW5pdFRlc3RzLnNldFVwKCk7Ci0gICAgICAgICAgICB1bml0VGVzdHMuaW5pdCgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCAiSW5pdGlhbGl6YXRpb24gRmFpbGVkLiIsIGUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuaXRUZXN0cy50ZWFyRG93bigpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldCggSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwICkKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gVW5pdFRlc3RzLmNsYXNzLmdldE1ldGhvZHMoKTsKLSAgICAgICAgZm9yKCBNZXRob2QgbSA6IG1ldGhvZHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUZXN0IGFubm90ID0gbS5nZXRBbm5vdGF0aW9uKCBUZXN0LmNsYXNzICk7Ci0gICAgICAgICAgICBpZiggYW5ub3QgIT0gbnVsbCAmJiBNb2RpZmllci5pc1B1YmxpYyggbS5nZXRNb2RpZmllcnMoKSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGxvbmcgdDAgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgICAgICAgICAgbS5pbnZva2UoIHVuaXRUZXN0cyApOwotICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHQwOwotICAgICAgICAgICAgICAgICAgICBhZGQoIGJ1ZmZlciwgbS5nZXROYW1lKCkgKyAiIHN1Y2Nlc3MuICIgKyB0aW1lICsgIm1zLiIsIHRydWUsIG51bGwgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2goIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhZGQoIGJ1ZmZlciwgbS5nZXROYW1lKCkgKyAiIHRocmV3IGFuIEV4Y2VwdGlvbi4iLCBmYWxzZSwgZS5nZXRUYXJnZXRFeGNlcHRpb24oKSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7IC8vIENhbiBub3QgaGFwcGVuPwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBQcmludFdyaXRlciBwdyA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIHB3LnByaW50KCAiPGh0bWw+PGJvZHk+PGgxPlFpNGogRW50aXR5IFN0b3JlIFVuaXQgVGVzdHM8L2gxPiIgKTsKLSAgICAgICAgcHcucHJpbnQoIGJ1ZmZlciApOwotICAgICAgICBwdy5wcmludCggIjwvYm9keT48L2h0bWw+IiApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhZGQoIFN0cmluZ0J1ZmZlciBvdXQsIFN0cmluZyBtZXNzYWdlLCBib29sZWFuIHN1Y2Nlc3MsIFRocm93YWJsZSBleGNlcHRpb24gKQotICAgIHsKLSAgICAgICAgaWYoIHN1Y2Nlc3MgKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCAiPHAgc3R5bGU9XCJjb2xvcjpncmVlbjtcIj4iICk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCBtZXNzYWdlICk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCAiPC9wPiIgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZ1dyaXRlciB0cmFjZSA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKCB0cmFjZSApOwotICAgICAgICAgICAgZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSggcHcgKTsKLSAgICAgICAgICAgIHB3LmZsdXNoKCk7Ci0gICAgICAgICAgICBwdy5jbG9zZSgpOwotICAgICAgICAgICAgb3V0LmFwcGVuZCggIjxwIHN0eWxlPVwiY29sb3I6cmVkO1wiPiIgKTsKLSAgICAgICAgICAgIG91dC5hcHBlbmQoIG1lc3NhZ2UgKTsKLSAgICAgICAgICAgIG91dC5hcHBlbmQoICI8L3A+PHByZT48Y29kZT4iICk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCB0cmFjZSApOwotICAgICAgICAgICAgb3V0LmFwcGVuZCggIjwvY29kZT48L3ByZT4iICk7Ci0gICAgICAgIH0KLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbXBsZXgvZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9nYWUvVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9jb21wbGV4L2dhZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvZ2FlL1VuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTIxMWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NvbXBsZXgvZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9nYWUvVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDkgTmljbGFzIEhlZGhtYW4uCi0gKgotICogTGljZW5zZWQgIHVuZGVyIHRoZSAgQXBhY2hlIExpY2Vuc2UsICBWZXJzaW9uIDIuMCAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlICB0aGlzIGZpbGUgIGV4Y2VwdCBpbiAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLnFpNGoudGVzdC5nYWU7Ci0KLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwotaW1wb3J0IG9yZy5xaTRqLnRlc3QuZW50aXR5LkFic3RyYWN0RW50aXR5U3RvcmVUZXN0OwotaW1wb3J0IG9yZy5xaTRqLmVudGl0eXN0b3JlLmdhZS5HYWVFbnRpdHlTdG9yZVNlcnZpY2U7Ci1pbXBvcnQgb3JnLnFpNGouZW50aXR5c3RvcmUuZ2FlLkdhZUlkR2VuZXJhdG9yU2VydmljZTsKLQotcHVibGljIGNsYXNzIFVuaXRUZXN0cyBleHRlbmRzIEFic3RyYWN0RW50aXR5U3RvcmVUZXN0Ci17Ci0gICAgcHVibGljIHZvaWQgYXNzZW1ibGUoIE1vZHVsZUFzc2VtYmx5IG1vZHVsZSApCi0gICAgICAgIHRocm93cyBBc3NlbWJseUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3VwZXIuYXNzZW1ibGUoIG1vZHVsZSApOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJSZWdpc3RlcmluZyBHQUUgc2VydmljZXMuIiApOwotICAgICAgICBtb2R1bGUuc2VydmljZXMoIEdhZUVudGl0eVN0b3JlU2VydmljZS5jbGFzcywgR2FlSWRHZW5lcmF0b3JTZXJ2aWNlLmNsYXNzICk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY29tcGxleC9nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2dhZTIvR2FlVGVzdFNlcnZsZXQuamF2YSBiL3Rlc3RzL2NvbXBsZXgvZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9nYWUyL0dhZVRlc3RTZXJ2bGV0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMzcxZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY29tcGxleC9nYWUvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L2dhZTIvR2FlVGVzdFNlcnZsZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDkgTmljbGFzIEhlZGhtYW4uCi0gKgotICogTGljZW5zZWQgIHVuZGVyIHRoZSAgQXBhY2hlIExpY2Vuc2UsICBWZXJzaW9uIDIuMCAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlICB0aGlzIGZpbGUgIGV4Y2VwdCBpbiAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLnFpNGoudGVzdC5nYWUyOwotCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgR2FlVGVzdFNlcnZsZXQKLSAgICBleHRlbmRzIEh0dHBTZXJ2bGV0Ci17Ci0gICAgcHJpdmF0ZSBVbml0VGVzdHMgdW5pdFRlc3RzOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgaW5pdCgpCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJTdGFydGluZyBHQUUgRW50aXR5U3RvcmUgVW5pdFRlc3RzIiApOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgdW5pdFRlc3RzID0gbmV3IFVuaXRUZXN0cygpOwotICAgICAgICAgICAgdW5pdFRlc3RzLnNldFVwKCk7Ci0gICAgICAgICAgICB1bml0VGVzdHMuaW5pdCgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCAiSW5pdGlhbGl6YXRpb24gRmFpbGVkLiIsIGUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuaXRUZXN0cy50ZWFyRG93bigpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldCggSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwICkKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gVW5pdFRlc3RzLmNsYXNzLmdldE1ldGhvZHMoKTsKLSAgICAgICAgZm9yKCBNZXRob2QgbSA6IG1ldGhvZHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUZXN0IGFubm90ID0gbS5nZXRBbm5vdGF0aW9uKCBUZXN0LmNsYXNzICk7Ci0gICAgICAgICAgICBpZiggYW5ub3QgIT0gbnVsbCAmJiBNb2RpZmllci5pc1B1YmxpYyggbS5nZXRNb2RpZmllcnMoKSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGxvbmcgdDAgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgICAgICAgICAgbS5pbnZva2UoIHVuaXRUZXN0cyApOwotICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHQwOwotICAgICAgICAgICAgICAgICAgICBhZGQoIGJ1ZmZlciwgbS5nZXROYW1lKCkgKyAiIHN1Y2Nlc3MuICIgKyB0aW1lICsgIm1zLiIsIHRydWUsIG51bGwgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2goIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhZGQoIGJ1ZmZlciwgbS5nZXROYW1lKCkgKyAiIHRocmV3IGFuIEV4Y2VwdGlvbi4iLCBmYWxzZSwgZS5nZXRUYXJnZXRFeGNlcHRpb24oKSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCggSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7IC8vIENhbiBub3QgaGFwcGVuPwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBQcmludFdyaXRlciBwdyA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIHB3LnByaW50KCAiPGh0bWw+PGJvZHk+PGgxPlFpNGogRW50aXR5IFN0b3JlIFVuaXQgVGVzdHM8L2gxPiIgKTsKLSAgICAgICAgcHcucHJpbnQoIGJ1ZmZlciApOwotICAgICAgICBwdy5wcmludCggIjwvYm9keT48L2h0bWw+IiApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhZGQoIFN0cmluZ0J1ZmZlciBvdXQsIFN0cmluZyBtZXNzYWdlLCBib29sZWFuIHN1Y2Nlc3MsIFRocm93YWJsZSBleGNlcHRpb24gKQotICAgIHsKLSAgICAgICAgaWYoIHN1Y2Nlc3MgKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCAiPHAgc3R5bGU9XCJjb2xvcjpncmVlbjtcIj4iICk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCBtZXNzYWdlICk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCAiPC9wPiIgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZ1dyaXRlciB0cmFjZSA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKCB0cmFjZSApOwotICAgICAgICAgICAgZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSggcHcgKTsKLSAgICAgICAgICAgIHB3LmZsdXNoKCk7Ci0gICAgICAgICAgICBwdy5jbG9zZSgpOwotICAgICAgICAgICAgb3V0LmFwcGVuZCggIjxwIHN0eWxlPVwiY29sb3I6cmVkO1wiPiIgKTsKLSAgICAgICAgICAgIG91dC5hcHBlbmQoIG1lc3NhZ2UgKTsKLSAgICAgICAgICAgIG91dC5hcHBlbmQoICI8L3A+PHByZT48Y29kZT4iICk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCB0cmFjZSApOwotICAgICAgICAgICAgb3V0LmFwcGVuZCggIjwvY29kZT48L3ByZT4iICk7Ci0gICAgICAgIH0KLQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9jb21wbGV4L2dhZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvZ2FlMi9Vbml0VGVzdHMuamF2YSBiL3Rlc3RzL2NvbXBsZXgvZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9nYWUyL1VuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDNlYjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NvbXBsZXgvZ2FlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9nYWUyL1VuaXRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IE5pY2xhcyBIZWRobWFuLgotICoKLSAqIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5xaTRqLnRlc3QuZ2FlMjsKLQotaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21tb24uVmlzaWJpbGl0eTsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuQXNzZW1ibHlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnFpNGouYm9vdHN0cmFwLk1vZHVsZUFzc2VtYmx5OwotaW1wb3J0IG9yZy5xaTRqLmVudGl0eXN0b3JlLmdhZTIuR2FlRW50aXR5U3RvcmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmVudGl0eXN0b3JlLmdhZTIuR2FlRW50aXR5U3RvcmVTZXJ2aWNlOwotaW1wb3J0IG9yZy5xaTRqLmVudGl0eXN0b3JlLm1lbW9yeS5NZW1vcnlFbnRpdHlTdG9yZVNlcnZpY2U7Ci1pbXBvcnQgb3JnLnFpNGoudGVzdC5lbnRpdHkuQWJzdHJhY3RFbnRpdHlTdG9yZVRlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBVbml0VGVzdHMgZXh0ZW5kcyBBYnN0cmFjdEVudGl0eVN0b3JlVGVzdAotewotICAgIHB1YmxpYyB2b2lkIGFzc2VtYmxlKCBNb2R1bGVBc3NlbWJseSBtb2R1bGUgKQotICAgICAgICB0aHJvd3MgQXNzZW1ibHlFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHN1cGVyLmFzc2VtYmxlKCBtb2R1bGUgKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiUmVnaXN0ZXJpbmcgR0FFIHNlcnZpY2VzLiIgKTsKLSAgICAgICAgbW9kdWxlLnNlcnZpY2VzKCBHYWVFbnRpdHlTdG9yZVNlcnZpY2UuY2xhc3MgKTsKLQotICAgICAgICBNb2R1bGVBc3NlbWJseSBjb25maWdNb2R1bGUgPSBtb2R1bGUubGF5ZXIoKS5tb2R1bGUoICJjb25maWciICk7Ci0gICAgICAgIGNvbmZpZ01vZHVsZS5lbnRpdGllcyggR2FlRW50aXR5U3RvcmVDb25maWd1cmF0aW9uLmNsYXNzICkudmlzaWJsZUluKCBWaXNpYmlsaXR5LmxheWVyICk7Ci0gICAgICAgIGNvbmZpZ01vZHVsZS5zZXJ2aWNlcyggTWVtb3J5RW50aXR5U3RvcmVTZXJ2aWNlLmNsYXNzICk7Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9jb21wbGV4L2dhZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvZ2FlMi9HYWVFbnRpdHlTdG9yZVNlcnZpY2UucHJvcGVydGllcyBiL3Rlc3RzL2NvbXBsZXgvZ2FlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUyL0dhZUVudGl0eVN0b3JlU2VydmljZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjc5YWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NvbXBsZXgvZ2FlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS9nYWUyL0dhZUVudGl0eVN0b3JlU2VydmljZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0KLQotcmVhZFBvbGljeT1ldmVudHVhbAotZGVhZGxpbmU9MC41Ci1lbnRpdHlLaW5kPXFpNGotanNvbgpkaWZmIC0tZ2l0IGEvdGVzdHMvY29tcGxleC9nYWUvd2ViL1dFQi1JTkYvYXBwZW5naW5lLXdlYi54bWwgYi90ZXN0cy9jb21wbGV4L2dhZS93ZWIvV0VCLUlORi9hcHBlbmdpbmUtd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I5MzE2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jb21wbGV4L2dhZS93ZWIvV0VCLUlORi9hcHBlbmdpbmUtd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxhcHBlbmdpbmUtd2ViLWFwcCB4bWxucz0iaHR0cDovL2FwcGVuZ2luZS5nb29nbGUuY29tL25zLzEuMCI+Ci0gIDxhcHBsaWNhdGlvbj5xaTRqLWVudGl0eXN0b3JlLXRlc3RzdWl0ZTwvYXBwbGljYXRpb24+Ci0gIDx2ZXJzaW9uPjE8L3ZlcnNpb24+Ci08L2FwcGVuZ2luZS13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvY29tcGxleC9nYWUvd2ViL1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL2NvbXBsZXgvZ2FlL3dlYi9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NzA0OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY29tcGxleC9nYWUvd2ViL1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiCi0gICAgICAgICAgIHZlcnNpb249IjIuNSI+Ci0KLSAgPHNlcnZsZXQ+Ci0gICAgPGRpc3BsYXktbmFtZT5RaTRqIEVudGl0eSBTdG9yZSBVbml0IFRlc3RzPC9kaXNwbGF5LW5hbWU+Ci0gICAgPHNlcnZsZXQtbmFtZT5HYWVUZXN0U2VydmxldDE8L3NlcnZsZXQtbmFtZT4KLSAgICA8c2VydmxldC1jbGFzcz5vcmcucWk0ai50ZXN0LmdhZS5HYWVUZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgPC9zZXJ2bGV0PgotICA8c2VydmxldC1tYXBwaW5nPgotICAgIDxzZXJ2bGV0LW5hbWU+R2FlVGVzdFNlcnZsZXQxPC9zZXJ2bGV0LW5hbWU+Ci0gICAgPHVybC1wYXR0ZXJuPi91bml0MS88L3VybC1wYXR0ZXJuPgotICA8L3NlcnZsZXQtbWFwcGluZz4KLQotCi0gIDxzZXJ2bGV0PgotICAgIDxkaXNwbGF5LW5hbWU+UWk0aiBFbnRpdHkgU3RvcmUgVW5pdCBUZXN0cyAtIEpTT04gdmVyc2lvbjwvZGlzcGxheS1uYW1lPgotICAgIDxzZXJ2bGV0LW5hbWU+R2FlVGVzdFNlcnZsZXQyPC9zZXJ2bGV0LW5hbWU+Ci0gICAgPHNlcnZsZXQtY2xhc3M+b3JnLnFpNGoudGVzdC5nYWUyLkdhZVRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICA8L3NlcnZsZXQ+Ci0gIDxzZXJ2bGV0LW1hcHBpbmc+Ci0gICAgPHNlcnZsZXQtbmFtZT5HYWVUZXN0U2VydmxldDI8L3NlcnZsZXQtbmFtZT4KLSAgICA8dXJsLXBhdHRlcm4+L3VuaXQyLzwvdXJsLXBhdHRlcm4+Ci0gIDwvc2VydmxldC1tYXBwaW5nPgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvY29tcGxleC9nYWUvd2ViL2luZGV4LmpzcCBiL3Rlc3RzL2NvbXBsZXgvZ2FlL3dlYi9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYTMyZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY29tcGxleC9nYWUvd2ViL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTwlLS0KLSAgQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgotICBVc2VyOiBuaWNsYXMKLSAgRGF0ZTogRmViIDE4LCAyMDEwCi0gIFRpbWU6IDg6MzQ6MzggUE0KLSAgVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgotLS0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PVVURi04IiBsYW5ndWFnZT0iamF2YSIgJT4KLTxodG1sPgotICA8aGVhZD48dGl0bGU+U2ltcGxlIGpzcCBwYWdlPC90aXRsZT48L2hlYWQ+Ci0gIDxib2R5PlBsYWNlIHlvdXIgY29udGVudCBoZXJlPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL3BlcmZvcm1hbmNlL2J1aWxkLmdyYWRsZSBiL3Rlc3RzL3BlcmZvcm1hbmNlL2J1aWxkLmdyYWRsZQppbmRleCBmMDhjODhlLi44ZWJkNjk4IDEwMDY0NAotLS0gYS90ZXN0cy9wZXJmb3JtYW5jZS9idWlsZC5ncmFkbGUKKysrIGIvdGVzdHMvcGVyZm9ybWFuY2UvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogUGVyZm9ybWFuY2UgVGVzdCBTdWl0ZS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBUZXN0cyAtIFBlcmZvcm1hbmNlIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgUGVyZm9ybWFuY2UgVGVzdCBTdWl0ZS4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBUZXN0cyAtIFBlcmZvcm1hbmNlIiB9fQogCiBzb3VyY2VTZXRzIHsKICAgICBwZXJmCkBAIC0xMCw3ICsyOSw4IEBACiAKICAgICBjb21waWxlIHByb2plY3QoICI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIgKQogICAgIGNvbXBpbGUgbGlicmFyaWVzLmp1bml0Ci0gICAgCisgICAgY29tcGlsZSBsaWJyYXJpZXMuc2xmNGpfYXBpCisKICAgICBwZXJmQ29tcGlsZSBzb3VyY2VTZXRzLm1haW4ub3V0cHV0CiAgICAgcGVyZkNvbXBpbGUgY29uZmlndXJhdGlvbnMudGVzdENvbXBpbGUKICAgICBwZXJmQ29tcGlsZSBzb3VyY2VTZXRzLnRlc3Qub3V0cHV0CmRpZmYgLS1naXQgYS90ZXN0cy9wZXJmb3JtYW5jZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvcGVyZm9ybWFuY2UvZW50aXR5c3RvcmUvcGFja2FnZS5odG1sIGIvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3BlcmZvcm1hbmNlL2VudGl0eXN0b3JlL3BhY2thZ2UuaHRtbAppbmRleCBiNTY2YWNlLi4xZjBmMjFhIDEwMDY0NAotLS0gYS90ZXN0cy9wZXJmb3JtYW5jZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvcGVyZm9ybWFuY2UvZW50aXR5c3RvcmUvcGFja2FnZS5odG1sCisrKyBiL3Rlc3RzL3BlcmZvcm1hbmNlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9wZXJmb3JtYW5jZS9lbnRpdHlzdG9yZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPlBlcmZvcm1hbmNlIFRlc3RzIGZvciBFbnRpdHlTdG9yZXMuPC9oMj4KZGlmZiAtLWdpdCBhL3Rlc3RzL3BlcmZvcm1hbmNlL3NyYy9wZXJmL2phdmEvb3JnL3FpNGovdGVzdC9wZXJmb3JtYW5jZS9ydW50aW1lL2NvbXBvc2l0ZS9Db21wb3NpdGVDcmVhdGlvblBlcmZvcm1hbmNlVGVzdC5qYXZhIGIvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvamF2YS9vcmcvcWk0ai90ZXN0L3BlcmZvcm1hbmNlL3J1bnRpbWUvY29tcG9zaXRlL0NvbXBvc2l0ZUNyZWF0aW9uUGVyZm9ybWFuY2VUZXN0LmphdmEKaW5kZXggNmJkYTNkMC4uZDI4NzkwNyAxMDA2NDQKLS0tIGEvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvamF2YS9vcmcvcWk0ai90ZXN0L3BlcmZvcm1hbmNlL3J1bnRpbWUvY29tcG9zaXRlL0NvbXBvc2l0ZUNyZWF0aW9uUGVyZm9ybWFuY2VUZXN0LmphdmEKKysrIGIvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvamF2YS9vcmcvcWk0ai90ZXN0L3BlcmZvcm1hbmNlL3J1bnRpbWUvY29tcG9zaXRlL0NvbXBvc2l0ZUNyZWF0aW9uUGVyZm9ybWFuY2VUZXN0LmphdmEKQEAgLTE4Niw3ICsxODYsNyBAQAogCiAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGxvbmcgdGltZSA9IDEwMDAwMDBMICogKCBlbmQgLSBzdGFydCApIC8gaXRlcjsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiTWluaW11bSBRaTRqIE9iamVjdCBDcmVhdGlvbiBUaW1lOiIgKyB0aW1lICsgIiBuYW5vc2Vjb25kcyBwZXIgb2JqZWN0IiApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJNaW5pbXVtIFplc3QgT2JqZWN0IENyZWF0aW9uIFRpbWU6IiArIHRpbWUgKyAiIG5hbm9zZWNvbmRzIHBlciBvYmplY3QiICk7CiAgICAgICAgIHJldHVybiB0aW1lOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvcmVzb3VyY2VzL2RlcmJ5LWRhdGFzb3VyY2UucHJvcGVydGllcyBiL3Rlc3RzL3BlcmZvcm1hbmNlL3NyYy9wZXJmL3Jlc291cmNlcy9kZXJieS1kYXRhc291cmNlLnByb3BlcnRpZXMKaW5kZXggMDNiZjEzMi4uOGZjOTIyOSAxMDA2NDQKLS0tIGEvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvcmVzb3VyY2VzL2RlcmJ5LWRhdGFzb3VyY2UucHJvcGVydGllcworKysgYi90ZXN0cy9wZXJmb3JtYW5jZS9zcmMvcGVyZi9yZXNvdXJjZXMvZGVyYnktZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIGVuYWJsZWQ9dHJ1ZQogdXJsPWpkYmM6ZGVyYnk6bWVtb3J5OnRlc3RkYjtjcmVhdGU9dHJ1ZQogZHJpdmVyPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvcmVzb3VyY2VzL2xvZ2JhY2sueG1sIGIvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvcmVzb3VyY2VzL2xvZ2JhY2sueG1sCmluZGV4IGRhNDQ3YjYuLjQ2YWQ0N2QgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3BlcmZvcm1hbmNlL3NyYy9wZXJmL3Jlc291cmNlcy9sb2diYWNrLnhtbAorKysgYi90ZXN0cy9wZXJmb3JtYW5jZS9zcmMvcGVyZi9yZXNvdXJjZXMvbG9nYmFjay54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxjb25maWd1cmF0aW9uPgogCiAgICAgPGFwcGVuZGVyIG5hbWU9InN0ZG91dCIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNvcmUuQ29uc29sZUFwcGVuZGVyIj4KZGlmZiAtLWdpdCBhL3Rlc3RzL3BlcmZvcm1hbmNlL3NyYy9wZXJmL3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS9qZGJtL0pkYm1FbnRpdHlTdG9yZVNlcnZpY2UucHJvcGVydGllcyBiL3Rlc3RzL3BlcmZvcm1hbmNlL3NyYy9wZXJmL3Jlc291cmNlcy9vcmcvcWk0ai9lbnRpdHlzdG9yZS9qZGJtL0pkYm1FbnRpdHlTdG9yZVNlcnZpY2UucHJvcGVydGllcwppbmRleCBkM2IyNzFkLi41NjU5MmM2IDEwMDY0NAotLS0gYS90ZXN0cy9wZXJmb3JtYW5jZS9zcmMvcGVyZi9yZXNvdXJjZXMvb3JnL3FpNGovZW50aXR5c3RvcmUvamRibS9KZGJtRW50aXR5U3RvcmVTZXJ2aWNlLnByb3BlcnRpZXMKKysrIGIvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvcmVzb3VyY2VzL29yZy9xaTRqL2VudGl0eXN0b3JlL2pkYm0vSmRibUVudGl0eVN0b3JlU2VydmljZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIAogIyBUaGUgZmlsZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgSkRCTSBkYXRhLgogZmlsZT1idWlsZC90bXAvamRibS9qZGJtc3RvcmUuZGF0YQpkaWZmIC0tZ2l0IGEvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvcmVzb3VyY2VzL29yZy9xaTRqL2xpYnJhcnkvcmRmL3JlcG9zaXRvcnkvcmRmLWluZGV4aW5nLnByb3BlcnRpZXMgYi90ZXN0cy9wZXJmb3JtYW5jZS9zcmMvcGVyZi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9yZGYtaW5kZXhpbmcucHJvcGVydGllcwppbmRleCAyN2QyNjA5Li40Njg1ZWY0IDEwMDY0NAotLS0gYS90ZXN0cy9wZXJmb3JtYW5jZS9zcmMvcGVyZi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9yZGYtaW5kZXhpbmcucHJvcGVydGllcworKysgYi90ZXN0cy9wZXJmb3JtYW5jZS9zcmMvcGVyZi9yZXNvdXJjZXMvb3JnL3FpNGovbGlicmFyeS9yZGYvcmVwb3NpdG9yeS9yZGYtaW5kZXhpbmcucHJvcGVydGllcwpAQCAtMSwyICsxLDE3IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiB0cmlwbGVJbmRleGVzPXNwb2Msb3NwYwogZGF0YURpcmVjdG9yeT1idWlsZC90bXAvcmRmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvcmVzb3VyY2VzL3Bvc3RncmVzcWwtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzIGIvdGVzdHMvcGVyZm9ybWFuY2Uvc3JjL3BlcmYvcmVzb3VyY2VzL3Bvc3RncmVzcWwtZGF0YXNvdXJjZS5wcm9wZXJ0aWVzCmluZGV4IGE5MDZkODQuLmY3ZDdhZDUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3BlcmZvcm1hbmNlL3NyYy9wZXJmL3Jlc291cmNlcy9wb3N0Z3Jlc3FsLWRhdGFzb3VyY2UucHJvcGVydGllcworKysgYi90ZXN0cy9wZXJmb3JtYW5jZS9zcmMvcGVyZi9yZXNvdXJjZXMvcG9zdGdyZXNxbC1kYXRhc291cmNlLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogZW5hYmxlZD10cnVlCiB1cmw9amRiYzpwb3N0Z3Jlc3FsOi8vbG9jYWxob3N0OjU0MzIvamRiY190ZXN0X2RiCiBkcml2ZXI9b3JnLnBvc3RncmVzcWwuRHJpdmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZWdyZXNzaW9uL2J1aWxkLmdyYWRsZSBiL3Rlc3RzL3JlZ3Jlc3Npb24vYnVpbGQuZ3JhZGxlCmluZGV4IDZmMDMyMDkuLjczYmI0MjggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3JlZ3Jlc3Npb24vYnVpbGQuZ3JhZGxlCisrKyBiL3Rlc3RzL3JlZ3Jlc3Npb24vYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlFpNGogUmVncmVzc2lvbiBUZXN0cyBhcmUgYWRkZWQgYnkgY29tbXVuaXR5IG1lbWJlcnMgd2hvIGZpbmQgYnVncyBhbmQgdHlwaWNhbGx5IHJlcG9ydGVkIHZpYSBKaXJhIGlzc3Vlcy4gVGhlc2UgdGVzdHMgYXJlIG5vdCBydW4gYXMgcGFydCBvZiB0aGUgbm9ybWFsIGJ1aWxkLCBidXQgaXMgYWNjZXNzaWJsZSBmcm9tICcuL2dyYWRsZXcgcmVncmVzc2lvbicgdG8gYWxsb3cgYnVpbGRzIHRvIHN0aWxsIHdvcmsuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogVGVzdHMgLSBSZWdyZXNzaW9uIiB9fQorZGVzY3JpcHRpb24gPSAiQXBhY2hlIFplc3TihKIgUmVncmVzc2lvbiBUZXN0cyBhcmUgYWRkZWQgYnkgY29tbXVuaXR5IG1lbWJlcnMgd2hvIGZpbmQgYnVncyBhbmQgdHlwaWNhbGx5IHJlcG9ydGVkIHZpYSBKaXJhIGlzc3Vlcy4gVGhlc2UgdGVzdHMgYXJlIG5vdCBydW4gYXMgcGFydCBvZiB0aGUgbm9ybWFsIGJ1aWxkLCBidXQgaXMgYWNjZXNzaWJsZSBmcm9tICcuL2dyYWRsZXcgcmVncmVzc2lvbicgdG8gYWxsb3cgYnVpbGRzIHRvIHN0aWxsIHdvcmsuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgVGVzdHMgLSBSZWdyZXNzaW9uIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYXBpIikpCmRpZmYgLS1naXQgYS90ZXN0cy9yZWdyZXNzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9yZWdyZXNzaW9uL1JlZ3Jlc3Npb25zLmphdmEgYi90ZXN0cy9yZWdyZXNzaW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdGVzdC9yZWdyZXNzaW9uL1JlZ3Jlc3Npb25zLmphdmEKaW5kZXggOGU1MWVkMC4uMDIxZjgxMyAxMDA2NDQKLS0tIGEvdGVzdHMvcmVncmVzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rlc3QvcmVncmVzc2lvbi9SZWdyZXNzaW9ucy5qYXZhCisrKyBiL3Rlc3RzL3JlZ3Jlc3Npb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai90ZXN0L3JlZ3Jlc3Npb24vUmVncmVzc2lvbnMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50ZXN0LnJlZ3Jlc3Npb247CiAKIC8qKgpkaWZmIC0tZ2l0IGEvdG9vbHMvZW50aXR5LXZpZXdlci9idWlsZC5ncmFkbGUgYi90b29scy9lbnRpdHktdmlld2VyL2J1aWxkLmdyYWRsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ0Yjk4Zi4uMDAwMDAwMAotLS0gYS90b29scy9lbnRpdHktdmlld2VyL2J1aWxkLmdyYWRsZQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLWRlc2NyaXB0aW9uID0gIkEgdmlld2VyIG9mIGVudGl0aWVzIGluIHRoZSBFbnRpdHkgU3RvcmVzLiIKLQotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogRW50aXR5IFZpZXdlciIgfX0KLQotZGVwZW5kZW5jaWVzIHsKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQotICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai50b29sczpvcmcucWk0ai50b29sLm1vZGVsLWRldGFpbCIpKQotCi0gIHRlc3RDb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUudGVzdHN1cHBvcnQiKSkKLSAgdGVzdENvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmV4dGVuc2lvbnM6b3JnLnFpNGouZXh0ZW5zaW9uLmluZGV4aW5nLXJkZiIpKQotCi0gIHRlc3RSdW50aW1lKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpKQotICB0ZXN0UnVudGltZShsaWJyYXJpZXMubG9nYmFjaykKLX0KLQotdGFzayhydW5TYW1wbGUsIGRlcGVuZHNPbjogJ3Rlc3RDbGFzc2VzJywgdHlwZTogSmF2YUV4ZWMpIHsKLSAgICBtYWluID0gJ29yZy5xaTRqLnN3aW5nLmxpYnJhcnkuc3dpbmcuZW50aXR5dmlld2VyLnNhbXBsZS5BcHBsaWNhdGlvblNhbXBsZScKLSAgICBjbGFzc3BhdGggPSBzb3VyY2VTZXRzLnRlc3QucnVudGltZUNsYXNzcGF0aAotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZW50aXR5LXZpZXdlci9kZXYtc3RhdHVzLnhtbCBiL3Rvb2xzL2VudGl0eS12aWV3ZXIvZGV2LXN0YXR1cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NDdhOWYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZW50aXR5LXZpZXdlci9kZXYtc3RhdHVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPG1vZHVsZSB4bWxucz0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xIgotICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cucWk0ai5vcmcvc2NoZW1hcy8yMDA4L2Rldi1zdGF0dXMvMQotICAgICAgICBodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEvZGV2LXN0YXR1cy54c2QiPgotICA8c3RhdHVzPgotICAgIDwhLS1ub25lLGVhcmx5LGJldGEsc3RhYmxlLG1hdHVyZS0tPgotICAgIDxjb2RlYmFzZT5zdGFibGU8L2NvZGViYXNlPgotCi0gICAgPCEtLSBub25lLCBicmllZiwgZ29vZCwgY29tcGxldGUgLS0+Ci0gICAgPGRvY3VtZW50YXRpb24+YnJpZWY8L2RvY3VtZW50YXRpb24+Ci0KLSAgICA8IS0tIG5vbmUsIHNvbWUsIGdvb2QsIGNvbXBsZXRlIC0tPgotICAgIDx1bml0dGVzdHM+bm9uZTwvdW5pdHRlc3RzPgotCi0gIDwvc3RhdHVzPgotICA8bGljZW5zZXM+Ci0gICAgPGxpY2Vuc2U+QUx2MjwvbGljZW5zZT4KLSAgPC9saWNlbnNlcz4KLTwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvdG9vbHMvZW50aXR5LXZpZXdlci9zcmMvZG9jcy9lbnRpdHktdmlld2VyLnR4dCBiL3Rvb2xzL2VudGl0eS12aWV3ZXIvc3JjL2RvY3MvZW50aXR5LXZpZXdlci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDlkNjUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZW50aXR5LXZpZXdlci9zcmMvZG9jcy9lbnRpdHktdmlld2VyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLVtbdG9vbHMtZW50aXR5LXZpZXdlcixFbnRpdHlWaWV3ZXIgVG9vbF1dCi09IEVudGl0eSBWaWV3ZXIgPQotCi1FbnRpdHlWaWV3ZXIgaXMgYSBTd2luZyBiYXNlZCBFbnRpdGllcyBicm93c2VyLiBJdCBhbGxvd3MgeW91IHRvIGJyb3dzZQotRW50aXRpZXMgcGVyc2lzdGVkIGluIEVudGl0eVN0b3Jlcy4KLQotPT0gVXNhZ2UgPT0KLQotRW50aXR5Vmlld2VyIGNhbiBlYXNpbHkgYmUgdXNlZCBhcyBmb2xsb3dzOgotCi1bc25pcHBldCxqYXZhXQotLS0tLQotc291cmNlPXRvb2xzL2VudGl0eS12aWV3ZXIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9zd2luZy9saWJyYXJ5L3N3aW5nL2VudGl0eXZpZXdlci9zYW1wbGUvQXBwbGljYXRpb25TYW1wbGUuamF2YQotdGFnPWVudGl0eS12aWV3ZXIKLS0tLS0KLQotQSBncmFkbGUgdGFzayBydW5TYW1wbGUgaXMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSBhcyBhIHNob3J0Y3V0IHRvIHJ1biB0aGUKLWV4YW1wbGUuIFNlZSA8PGJ1aWxkLXN5c3RlbT4+LgotCi09PSBTY3JlZW5zaG90ID09Ci0KLWltYWdlOnRvb2xzLWVudGl0eS12aWV3ZXIucG5nW3dpZHRoPSI4MDBweCJdCi0KLT09IEVtYmVkZCBpbiB5b3VyIEFwcGxpY2F0aW9uID09Ci0KLWluY2x1ZGU6Oi4uLy4uL2J1aWxkL2RvY3MvYnVpbGRpbmZvL2FydGlmYWN0LnR4dFtdCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2VudGl0eS12aWV3ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N3aW5nL2VudGl0eXZpZXdlci9FbnRpdHlWaWV3ZXIuZm9ybSBiL3Rvb2xzL2VudGl0eS12aWV3ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N3aW5nL2VudGl0eXZpZXdlci9FbnRpdHlWaWV3ZXIuZm9ybQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM2YjY5Ny4uMDAwMDAwMAotLS0gYS90b29scy9lbnRpdHktdmlld2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zd2luZy9lbnRpdHl2aWV3ZXIvRW50aXR5Vmlld2VyLmZvcm0KKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZvcm0geG1sbnM9Imh0dHA6Ly93d3cuaW50ZWxsaWouY29tL3VpZGVzaWduZXIvZm9ybS8iIHZlcnNpb249IjEiIGJpbmQtdG8tY2xhc3M9Im9yZy5xaTRqLmxpYnJhcnkuc3dpbmcuZW50aXR5dmlld2VyLkVudGl0eVZpZXdlciI+Ci0gIDxncmlkIGlkPSIyN2RjNiIgYmluZGluZz0ibWFpblBhbmUiIGxheW91dC1tYW5hZ2VyPSJCb3JkZXJMYXlvdXQiIGhnYXA9IjAiIHZnYXA9IjAiPgotICAgIDxjb25zdHJhaW50cz4KLSAgICAgIDx4eSB4PSIyMCIgeT0iMjAiIHdpZHRoPSI1MDAiIGhlaWdodD0iNDAwIi8+Ci0gICAgPC9jb25zdHJhaW50cz4KLSAgICA8cHJvcGVydGllcy8+Ci0gICAgPGJvcmRlciB0eXBlPSJub25lIi8+Ci0gICAgPGNoaWxkcmVuPgotICAgICAgPHNwbGl0cGFuZSBpZD0iYmYyMmMiIGJpbmRpbmc9InNwbGl0UGFuZSI+Ci0gICAgICAgIDxjb25zdHJhaW50cyBib3JkZXItY29uc3RyYWludD0iQ2VudGVyIi8+Ci0gICAgICAgIDxwcm9wZXJ0aWVzLz4KLSAgICAgICAgPGJvcmRlciB0eXBlPSJub25lIi8+Ci0gICAgICAgIDxjaGlsZHJlbj4KLSAgICAgICAgICA8Z3JpZCBpZD0iODIxY2EiIGJpbmRpbmc9InByb3BlcnRpZXNBcmVhUGFuZSIgbGF5b3V0LW1hbmFnZXI9IkJvcmRlckxheW91dCIgaGdhcD0iMCIgdmdhcD0iMCI+Ci0gICAgICAgICAgICA8Y29uc3RyYWludHM+Ci0gICAgICAgICAgICAgIDxzcGxpdHBhbmUgcG9zaXRpb249InJpZ2h0Ii8+Ci0gICAgICAgICAgICA8L2NvbnN0cmFpbnRzPgotICAgICAgICAgICAgPHByb3BlcnRpZXMvPgotICAgICAgICAgICAgPGJvcmRlciB0eXBlPSJub25lIi8+Ci0gICAgICAgICAgICA8Y2hpbGRyZW4+Ci0gICAgICAgICAgICAgIDxncmlkIGlkPSI1NTFhMyIgbGF5b3V0LW1hbmFnZXI9IkdyaWRCYWdMYXlvdXQiPgotICAgICAgICAgICAgICAgIDxjb25zdHJhaW50cyBib3JkZXItY29uc3RyYWludD0iTm9ydGgiLz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydGllcy8+Ci0gICAgICAgICAgICAgICAgPGJvcmRlciB0eXBlPSJub25lIi8+Ci0gICAgICAgICAgICAgICAgPGNoaWxkcmVuPgotICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudCBpZD0iZjM5OWMiIGNsYXNzPSJqYXZheC5zd2luZy5KQ29tYm9Cb3giIGJpbmRpbmc9ImVudGl0aWVzQ29tYm8iPgotICAgICAgICAgICAgICAgICAgICA8Y29uc3RyYWludHM+Ci0gICAgICAgICAgICAgICAgICAgICAgPGdyaWQgcm93PSIwIiBjb2x1bW49IjIiIHJvdy1zcGFuPSIxIiBjb2wtc3Bhbj0iMyIgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjIiIGFuY2hvcj0iOCIgZmlsbD0iMSIgaW5kZW50PSIwIiB1c2UtcGFyZW50LWxheW91dD0iZmFsc2UiLz4KLSAgICAgICAgICAgICAgICAgICAgICA8Z3JpZGJhZyB3ZWlnaHR4PSIwLjMiIHdlaWdodHk9IjAuMCIvPgotICAgICAgICAgICAgICAgICAgICA8L2NvbnN0cmFpbnRzPgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydGllcy8+Ci0gICAgICAgICAgICAgICAgICA8L2NvbXBvbmVudD4KLSAgICAgICAgICAgICAgICAgIDxjb21wb25lbnQgaWQ9IjIyMThiIiBjbGFzcz0iamF2YXguc3dpbmcuSkxhYmVsIj4KLSAgICAgICAgICAgICAgICAgICAgPGNvbnN0cmFpbnRzPgotICAgICAgICAgICAgICAgICAgICAgIDxncmlkIHJvdz0iMCIgY29sdW1uPSIwIiByb3ctc3Bhbj0iMSIgY29sLXNwYW49IjEiIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjgiIGZpbGw9IjAiIGluZGVudD0iMCIgdXNlLXBhcmVudC1sYXlvdXQ9ImZhbHNlIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgPGdyaWRiYWcgd2VpZ2h0eD0iMC4wIiB3ZWlnaHR5PSIwLjAiLz4KLSAgICAgICAgICAgICAgICAgICAgPC9jb25zdHJhaW50cz4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnRpZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgPHRleHQgdmFsdWU9IkVudGl0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnRpZXM+Ci0gICAgICAgICAgICAgICAgICA8L2NvbXBvbmVudD4KLSAgICAgICAgICAgICAgICAgIDxoc3BhY2VyIGlkPSI2OWEwYiI+Ci0gICAgICAgICAgICAgICAgICAgIDxjb25zdHJhaW50cz4KLSAgICAgICAgICAgICAgICAgICAgICA8Z3JpZCByb3c9IjAiIGNvbHVtbj0iMSIgcm93LXNwYW49IjEiIGNvbC1zcGFuPSIxIiB2c2l6ZS1wb2xpY3k9IjEiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIxIiBpbmRlbnQ9IjAiIHVzZS1wYXJlbnQtbGF5b3V0PSJmYWxzZSIvPgotICAgICAgICAgICAgICAgICAgICAgIDxncmlkYmFnIHdlaWdodHg9IjAuMCIgd2VpZ2h0eT0iMC4wIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwvY29uc3RyYWludHM+Ci0gICAgICAgICAgICAgICAgICA8L2hzcGFjZXI+Ci0gICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KLSAgICAgICAgICAgICAgPC9ncmlkPgotICAgICAgICAgICAgPC9jaGlsZHJlbj4KLSAgICAgICAgICA8L2dyaWQ+Ci0gICAgICAgIDwvY2hpbGRyZW4+Ci0gICAgICA8L3NwbGl0cGFuZT4KLSAgICA8L2NoaWxkcmVuPgotICA8L2dyaWQ+Ci0gIDxpbnNwZWN0aW9uU3VwcHJlc3Npb25zPgotICAgIDxzdXBwcmVzcyBpbnNwZWN0aW9uPSJOb0xhYmVsRm9yIiBpZD0iZjM5OWMiLz4KLSAgPC9pbnNwZWN0aW9uU3VwcHJlc3Npb25zPgotPC9mb3JtPgpkaWZmIC0tZ2l0IGEvdG9vbHMvZW50aXR5LXZpZXdlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3dpbmcvZW50aXR5dmlld2VyL0VudGl0eVZpZXdlci5qYXZhIGIvdG9vbHMvZW50aXR5LXZpZXdlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3dpbmcvZW50aXR5dmlld2VyL0VudGl0eVZpZXdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjlmOTRiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2VudGl0eS12aWV3ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N3aW5nL2VudGl0eXZpZXdlci9FbnRpdHlWaWV3ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBUb255IEtvaGFyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCi0gKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zd2luZy5lbnRpdHl2aWV3ZXI7Ci0KLWltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7Ci1pbXBvcnQgamF2YS5hd3QuR3JpZEJhZ0NvbnN0cmFpbnRzOwotaW1wb3J0IGphdmEuYXd0LkdyaWRCYWdMYXlvdXQ7Ci1pbXBvcnQgamF2YS5hd3QuZXZlbnQuSXRlbUV2ZW50OwotaW1wb3J0IGphdmEuYXd0LmV2ZW50Lkl0ZW1MaXN0ZW5lcjsKLWltcG9ydCBqYXZheC5zd2luZy5Db21ib0JveE1vZGVsOwotaW1wb3J0IGphdmF4LnN3aW5nLkRlZmF1bHRDb21ib0JveE1vZGVsOwotaW1wb3J0IGphdmF4LnN3aW5nLkpDb21ib0JveDsKLWltcG9ydCBqYXZheC5zd2luZy5KQ29tcG9uZW50OwotaW1wb3J0IGphdmF4LnN3aW5nLkpGcmFtZTsKLWltcG9ydCBqYXZheC5zd2luZy5KTGFiZWw7Ci1pbXBvcnQgamF2YXguc3dpbmcuSlBhbmVsOwotaW1wb3J0IGphdmF4LnN3aW5nLkpTcGxpdFBhbmU7Ci1pbXBvcnQgamF2YXguc3dpbmcuZXZlbnQuVHJlZVNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50LlRyZWVTZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBqYXZheC5zd2luZy50cmVlLkRlZmF1bHRNdXRhYmxlVHJlZU5vZGU7Ci1pbXBvcnQgamF2YXguc3dpbmcudHJlZS5UcmVlUGF0aDsKLWltcG9ydCBvcmcucWk0ai5hcGkucXVlcnkuUXVlcnk7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnF1ZXJ5LlF1ZXJ5QnVpbGRlcjsKLWltcG9ydCBvcmcucWk0ai5hcGkuc3RydWN0dXJlLkFwcGxpY2F0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuQXBwbGljYXRpb25EZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5zdHJ1Y3R1cmUuTW9kdWxlOwotaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcms7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLlFpNGpTUEk7Ci1pbXBvcnQgb3JnLnFpNGoudG9vbHMubW9kZWwuZGVzY3JpcHRvci5BcHBsaWNhdGlvbkRldGFpbERlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGoudG9vbHMubW9kZWwuZGVzY3JpcHRvci5BcHBsaWNhdGlvbkRldGFpbERlc2NyaXB0b3JCdWlsZGVyOwotaW1wb3J0IG9yZy5xaTRqLnRvb2xzLm1vZGVsLmRlc2NyaXB0b3IuRW50aXR5RGV0YWlsRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai50b29scy5tb2RlbC5kZXNjcmlwdG9yLkxheWVyRGV0YWlsRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai50b29scy5tb2RlbC5kZXNjcmlwdG9yLk1vZHVsZURldGFpbERlc2NyaXB0b3I7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLnFpNGouZnVuY3Rpb25hbC5JdGVyYWJsZXMuZmlyc3Q7Ci0KLS8qKgotICogVGhlIEVudGl0eSBWaWV3ZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnRpdHlWaWV3ZXIKLXsKLSAgICBwcml2YXRlIEpQYW5lbCBtYWluUGFuZTsKLSAgICBwcml2YXRlIEpDb21ib0JveCBlbnRpdGllc0NvbWJvOwotICAgIHByaXZhdGUgSlBhbmVsIHByb3BlcnRpZXNBcmVhUGFuZTsKLSAgICBwcml2YXRlIEpTcGxpdFBhbmUgc3BsaXRQYW5lOwotICAgIHByaXZhdGUgUHJvcGVydGllc1BhbmVsIHByb3BlcnRpZXNQYW5lbDsKLSAgICBwcml2YXRlIFRyZWVQYW5lbCB0cmVlUGFuZWw7Ci0KLSAgICBwcml2YXRlIFFpNGpTUEkgcWk0anNwaTsKLSAgICBwcml2YXRlIEFwcGxpY2F0aW9uRGVzY3JpcHRvciBtb2RlbDsKLSAgICBwcml2YXRlIEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uOwotCi0gICAgcHJpdmF0ZSBKRnJhbWUgZnJhbWU7Ci0KLSAgICBwdWJsaWMgdm9pZCBzaG93KCBRaTRqU1BJIHFpNGpzcGksIEFwcGxpY2F0aW9uRGVzY3JpcHRvciBtb2RlbCwgQXBwbGljYXRpb24gYXBwbGljYXRpb24gKQotICAgIHsKLSAgICAgICAgdGhpcy5xaTRqc3BpID0gcWk0anNwaTsKLSAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsOwotICAgICAgICB0aGlzLmFwcGxpY2F0aW9uID0gYXBwbGljYXRpb247Ci0KLSAgICAgICAgaW5pdFVJKCk7Ci0KLSAgICAgICAgZnJhbWUgPSBuZXcgSkZyYW1lKCk7Ci0gICAgICAgIGZyYW1lLnNldENvbnRlbnRQYW5lKCBtYWluUGFuZSApOwotICAgICAgICBmcmFtZS5zZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oIEpGcmFtZS5ESVNQT1NFX09OX0NMT1NFICk7Ci0gICAgICAgIGZyYW1lLnNldFNpemUoIDYwMCwgNjAwICk7Ci0gICAgICAgIC8vZnJhbWUucGFjaygpOwotICAgICAgICBmcmFtZS5zZXRWaXNpYmxlKCB0cnVlICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3RvcCgpCi0gICAgewotICAgICAgICBpZiggZnJhbWUgIT0gbnVsbCAmIGZyYW1lLmlzRGlzcGxheWFibGUoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZyYW1lLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgIGZyYW1lID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0VUkoKQotICAgIHsKLSAgICAgICAgcHJvcGVydGllc1BhbmVsID0gbmV3IFByb3BlcnRpZXNQYW5lbCgpOwotICAgICAgICBwcm9wZXJ0aWVzUGFuZWwuaW5pdGlhbGl6ZVFpNEooIHFpNGpzcGkgKTsKLSAgICAgICAgcHJvcGVydGllc0FyZWFQYW5lLmFkZCggcHJvcGVydGllc1BhbmVsLCBCb3JkZXJMYXlvdXQuQ0VOVEVSICk7Ci0KLSAgICAgICAgdHJlZVBhbmVsID0gbmV3IFRyZWVQYW5lbCgpOwotICAgICAgICB0cmVlUGFuZWwuaW5pdGlhbGl6ZVFpNEooIHFpNGpzcGksIG1vZGVsICk7Ci0gICAgICAgIHRyZWVQYW5lbC5yZWxvYWQoKTsKLSAgICAgICAgc3BsaXRQYW5lLnNldExlZnRDb21wb25lbnQoIHRyZWVQYW5lbCApOwotCi0gICAgICAgIHNwbGl0UGFuZS5zZXREaXZpZGVyTG9jYXRpb24oIDIwMCApOwotCi0gICAgICAgIERlZmF1bHRDb21ib0JveE1vZGVsIGVudGl0eUNvbWJvTW9kZWwgPSBuZXcgRGVmYXVsdENvbWJvQm94TW9kZWwoKTsKLSAgICAgICAgZW50aXRpZXNDb21iby5zZXRNb2RlbCggZW50aXR5Q29tYm9Nb2RlbCApOwotCi0gICAgICAgIGVudGl0aWVzQ29tYm8uYWRkSXRlbUxpc3RlbmVyKCBuZXcgSXRlbUxpc3RlbmVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBpdGVtU3RhdGVDaGFuZ2VkKCBJdGVtRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbnRpdGllc0NvbWJvSXRlbVN0YXRlQ2hhbmdlZCggZXZ0ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLQotICAgICAgICB0cmVlUGFuZWwuZ2V0VHJlZUNvbXBvbmVudCgpLmFkZFRyZWVTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFRyZWVTZWxlY3Rpb25MaXN0ZW5lcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmFsdWVDaGFuZ2VkKCBUcmVlU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cmVlUGFuZWxWYWx1ZUNoYW5nZWQoIGV2dCApOwotICAgICAgICAgICAgfQotICAgICAgICB9ICk7Ci0KLSAgICAgICAgaW5pdEVudGl0eUNvbWJvKCBlbnRpdHlDb21ib01vZGVsICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRFbnRpdHlDb21ibyggRGVmYXVsdENvbWJvQm94TW9kZWwgZW50aXR5Q29tYm9Nb2RlbCApCi0gICAgewotICAgICAgICAvLyBjcmVhdGUgdGhlIHZpc2l0b3IgdG8gdHJhdmVyc2UgdGhlIFFJNEogdG8gZmluZCB0aGUgbW9kdWxlCi0gICAgICAgIEFwcGxpY2F0aW9uRGV0YWlsRGVzY3JpcHRvciB2aXNpdG9yID0gQXBwbGljYXRpb25EZXRhaWxEZXNjcmlwdG9yQnVpbGRlci5jcmVhdGVBcHBsaWNhdGlvbkRldGFpbERlc2NyaXB0b3IoIG1vZGVsICk7Ci0KLSAgICAgICAgLy8gZmluZCBhbGwgZW50aXRpZXMKLSAgICAgICAgSXRlcmFibGU8TGF5ZXJEZXRhaWxEZXNjcmlwdG9yPiBsYXllckRlc2NJdGVyID0gdmlzaXRvci5sYXllcnMoKTsKLSAgICAgICAgZm9yKCBMYXllckRldGFpbERlc2NyaXB0b3IgbGF5ZXJEZXNjIDogbGF5ZXJEZXNjSXRlciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEl0ZXJhYmxlPE1vZHVsZURldGFpbERlc2NyaXB0b3I+IG1vZHVsZURlc2NJdGVyID0gbGF5ZXJEZXNjLm1vZHVsZXMoKTsKLSAgICAgICAgICAgIGZvciggTW9kdWxlRGV0YWlsRGVzY3JpcHRvciBtb2R1bGVEZXNjIDogbW9kdWxlRGVzY0l0ZXIgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEl0ZXJhYmxlPEVudGl0eURldGFpbERlc2NyaXB0b3I+IGVudGl0eURlc2NJdGVyID0gbW9kdWxlRGVzYy5lbnRpdGllcygpOwotICAgICAgICAgICAgICAgIGZvciggRW50aXR5RGV0YWlsRGVzY3JpcHRvciBlbnRpdHkgOiBlbnRpdHlEZXNjSXRlciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlbnRpdHlDb21ib01vZGVsLmFkZEVsZW1lbnQoIGVudGl0eSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBzaW1wbGUgcXVlcnkgKGRpc3BsYXkgYWxsIHByb3BlcnRpZXMpIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBjbGFzcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtb2R1bGUgdGhlIG1vZHVsZSB0byBjcmVhdGUgdGhlIHF1ZXJ5Ci0gICAgICogQHBhcmFtIGNsYXp6ICB0aGUgY2xhc3MgdG8gYmUgcXVlcmllZAotICAgICAqCi0gICAgICogQHJldHVybiBxdWVyeQotICAgICAqLwotICAgIHByb3RlY3RlZCBRdWVyeSBjcmVhdGVRdWVyeSggTW9kdWxlIG1vZHVsZSwgQ2xhc3MgY2xhenogKQotICAgIHsKLSAgICAgICAgVW5pdE9mV29yayB1b3cgPSBtb2R1bGUubmV3VW5pdE9mV29yaygpOwotICAgICAgICBRdWVyeUJ1aWxkZXIgcWIgPSBtb2R1bGUubmV3UXVlcnlCdWlsZGVyKCBjbGF6eiApOwotICAgICAgICByZXR1cm4gdW93Lm5ld1F1ZXJ5KCBxYiApOwotICAgIH0KLQotICAgIHByaXZhdGUgTW9kdWxlIGZpbmRNb2R1bGUoIEVudGl0eURldGFpbERlc2NyaXB0b3IgZGVzY3JpcHRvciApCi0gICAgewotICAgICAgICBTdHJpbmcgbE5hbWUgPSBkZXNjcmlwdG9yLm1vZHVsZSgpLmxheWVyKCkuZGVzY3JpcHRvcigpLm5hbWUoKTsKLSAgICAgICAgU3RyaW5nIG1OYW1lID0gZGVzY3JpcHRvci5tb2R1bGUoKS5kZXNjcmlwdG9yKCkubmFtZSgpOwotCi0gICAgICAgIHJldHVybiBhcHBsaWNhdGlvbi5maW5kTW9kdWxlKCBsTmFtZSwgbU5hbWUgKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFdmVudCBIYW5kbGVyIGZvciBFbnRpdGllc0NvbWJvQm94Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gZXZ0IHRoZSBFdmVudAotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBlbnRpdGllc0NvbWJvSXRlbVN0YXRlQ2hhbmdlZCggSXRlbUV2ZW50IGV2dCApCi0gICAgewotICAgICAgICBpZiggZXZ0LmdldFN0YXRlQ2hhbmdlKCkgPT0gSXRlbUV2ZW50LkRFU0VMRUNURUQgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBFbnRpdHlEZXRhaWxEZXNjcmlwdG9yIGVudGl0eURlc2NyaXB0b3IgPSAoRW50aXR5RGV0YWlsRGVzY3JpcHRvcikgZW50aXRpZXNDb21iby5nZXRTZWxlY3RlZEl0ZW0oKTsKLSAgICAgICAgQ2xhc3MgY2xhenogPSBmaXJzdCggZW50aXR5RGVzY3JpcHRvci5kZXNjcmlwdG9yKCkudHlwZXMoKSApOwotCi0gICAgICAgIE1vZHVsZSBtb2R1bGUgPSBmaW5kTW9kdWxlKCBlbnRpdHlEZXNjcmlwdG9yICk7Ci0gICAgICAgIFF1ZXJ5IHF1ZXJ5ID0gY3JlYXRlUXVlcnkoIG1vZHVsZSwgY2xhenogKTsKLSAgICAgICAgcHJvcGVydGllc1BhbmVsLnJlbG9hZCggcXVlcnkgKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFdmVudCBIYW5kbGVyIGZvciBUcmVlUGFuZWwKLSAgICAgKgotICAgICAqIEBwYXJhbSBldnQgdGhlIEV2ZW50Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgdHJlZVBhbmVsVmFsdWVDaGFuZ2VkKCBUcmVlU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICB7Ci0gICAgICAgIFRyZWVQYXRoIHBhdGggPSBldnQuZ2V0UGF0aCgpOwotICAgICAgICBPYmplY3Qgc291cmNlID0gcGF0aC5nZXRMYXN0UGF0aENvbXBvbmVudCgpOwotICAgICAgICBpZiggc291cmNlID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIG5vZGUgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSkgc291cmNlOwotICAgICAgICBPYmplY3Qgb2JqID0gbm9kZS5nZXRVc2VyT2JqZWN0KCk7Ci0KLSAgICAgICAgaWYoIG9iaiA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQ2xhc3M8Pz4gY2xhenogPSBvYmouZ2V0Q2xhc3MoKTsKLSAgICAgICAgaWYoIEVudGl0eURldGFpbERlc2NyaXB0b3IuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggY2xhenogKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVudGl0eURldGFpbERlc2NyaXB0b3IgZW50aXR5RGVzYyA9IChFbnRpdHlEZXRhaWxEZXNjcmlwdG9yKSBvYmo7Ci0gICAgICAgICAgICBDbGFzcyBlbnRpdHlUeXBlID0gZmlyc3QoIGVudGl0eURlc2MuZGVzY3JpcHRvcigpLnR5cGVzKCkgKTsKLQotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzZWxlY3RlZCBpdGVtIG9uIHRoZSBjb21ibyBib3gsIHdoaWNoIGluIHR1cm4gdXBkYXRlIHRoZSBwcm9wZXJ0aWVzIHRhYmxlCi0gICAgICAgICAgICBDb21ib0JveE1vZGVsIGNvbWJvTW9kZWwgPSBlbnRpdGllc0NvbWJvLmdldE1vZGVsKCk7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSAtMTsKLSAgICAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgY29tYm9Nb2RlbC5nZXRTaXplKCk7IGkrKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRW50aXR5RGV0YWlsRGVzY3JpcHRvciBlbnRpdHlEZXNjMSA9IChFbnRpdHlEZXRhaWxEZXNjcmlwdG9yKSBjb21ib01vZGVsLmdldEVsZW1lbnRBdCggaSApOwotICAgICAgICAgICAgICAgIENsYXNzIGVudGl0eVR5cGUxID0gZmlyc3QoIGVudGl0eURlc2MxLmRlc2NyaXB0b3IoKS50eXBlcygpICk7Ci0KLSAgICAgICAgICAgICAgICBpZiggZW50aXR5VHlwZTEuZXF1YWxzKCBlbnRpdHlUeXBlICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmKCBpbmRleCA+PSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbnRpdGllc0NvbWJvLnNldFNlbGVjdGVkSW5kZXgoIGluZGV4ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAKLSAgICB7Ci0vLyBHVUkgaW5pdGlhbGl6ZXIgZ2VuZXJhdGVkIGJ5IEludGVsbGlKIElERUEgR1VJIERlc2lnbmVyCi0vLyA+Pj4gSU1QT1JUQU5UISEgPDw8Ci0vLyBETyBOT1QgRURJVCBPUiBBREQgQU5ZIENPREUgSEVSRSEKLSAgICAgICAgJCQkc2V0dXBVSSQkJCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1ldGhvZCBnZW5lcmF0ZWQgYnkgSW50ZWxsaUogSURFQSBHVUkgRGVzaWduZXIKLSAgICAgKiA+Pj4gSU1QT1JUQU5UISEgPDw8Ci0gICAgICogRE8gTk9UIGVkaXQgdGhpcyBtZXRob2QgT1IgY2FsbCBpdCBpbiB5b3VyIGNvZGUhCi0gICAgICoKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgJCQkc2V0dXBVSSQkJCgpCi0gICAgewotICAgICAgICBtYWluUGFuZSA9IG5ldyBKUGFuZWwoKTsKLSAgICAgICAgbWFpblBhbmUuc2V0TGF5b3V0KCBuZXcgQm9yZGVyTGF5b3V0KCAwLCAwICkgKTsKLSAgICAgICAgc3BsaXRQYW5lID0gbmV3IEpTcGxpdFBhbmUoKTsKLSAgICAgICAgbWFpblBhbmUuYWRkKCBzcGxpdFBhbmUsIEJvcmRlckxheW91dC5DRU5URVIgKTsKLSAgICAgICAgcHJvcGVydGllc0FyZWFQYW5lID0gbmV3IEpQYW5lbCgpOwotICAgICAgICBwcm9wZXJ0aWVzQXJlYVBhbmUuc2V0TGF5b3V0KCBuZXcgQm9yZGVyTGF5b3V0KCAwLCAwICkgKTsKLSAgICAgICAgc3BsaXRQYW5lLnNldFJpZ2h0Q29tcG9uZW50KCBwcm9wZXJ0aWVzQXJlYVBhbmUgKTsKLSAgICAgICAgZmluYWwgSlBhbmVsIHBhbmVsMSA9IG5ldyBKUGFuZWwoKTsKLSAgICAgICAgcGFuZWwxLnNldExheW91dCggbmV3IEdyaWRCYWdMYXlvdXQoKSApOwotICAgICAgICBwcm9wZXJ0aWVzQXJlYVBhbmUuYWRkKCBwYW5lbDEsIEJvcmRlckxheW91dC5OT1JUSCApOwotICAgICAgICBlbnRpdGllc0NvbWJvID0gbmV3IEpDb21ib0JveCgpOwotICAgICAgICBHcmlkQmFnQ29uc3RyYWludHMgZ2JjOwotICAgICAgICBnYmMgPSBuZXcgR3JpZEJhZ0NvbnN0cmFpbnRzKCk7Ci0gICAgICAgIGdiYy5ncmlkeCA9IDI7Ci0gICAgICAgIGdiYy5ncmlkeSA9IDA7Ci0gICAgICAgIGdiYy5ncmlkd2lkdGggPSAzOwotICAgICAgICBnYmMud2VpZ2h0eCA9IDAuMzsKLSAgICAgICAgZ2JjLmFuY2hvciA9IEdyaWRCYWdDb25zdHJhaW50cy5XRVNUOwotICAgICAgICBnYmMuZmlsbCA9IEdyaWRCYWdDb25zdHJhaW50cy5IT1JJWk9OVEFMOwotICAgICAgICBwYW5lbDEuYWRkKCBlbnRpdGllc0NvbWJvLCBnYmMgKTsKLSAgICAgICAgZmluYWwgSkxhYmVsIGxhYmVsMSA9IG5ldyBKTGFiZWwoKTsKLSAgICAgICAgbGFiZWwxLnNldFRleHQoICJFbnRpdHkiICk7Ci0gICAgICAgIGdiYyA9IG5ldyBHcmlkQmFnQ29uc3RyYWludHMoKTsKLSAgICAgICAgZ2JjLmdyaWR4ID0gMDsKLSAgICAgICAgZ2JjLmdyaWR5ID0gMDsKLSAgICAgICAgZ2JjLmFuY2hvciA9IEdyaWRCYWdDb25zdHJhaW50cy5XRVNUOwotICAgICAgICBwYW5lbDEuYWRkKCBsYWJlbDEsIGdiYyApOwotICAgICAgICBmaW5hbCBKUGFuZWwgc3BhY2VyMSA9IG5ldyBKUGFuZWwoKTsKLSAgICAgICAgZ2JjID0gbmV3IEdyaWRCYWdDb25zdHJhaW50cygpOwotICAgICAgICBnYmMuZ3JpZHggPSAxOwotICAgICAgICBnYmMuZ3JpZHkgPSAwOwotICAgICAgICBnYmMuZmlsbCA9IEdyaWRCYWdDb25zdHJhaW50cy5IT1JJWk9OVEFMOwotICAgICAgICBwYW5lbDEuYWRkKCBzcGFjZXIxLCBnYmMgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSkNvbXBvbmVudCAkJCRnZXRSb290Q29tcG9uZW50JCQkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtYWluUGFuZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9lbnRpdHktdmlld2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zd2luZy9lbnRpdHl2aWV3ZXIvUHJvcGVydGllc1BhbmVsLmphdmEgYi90b29scy9lbnRpdHktdmlld2VyL3NyYy9tYWluL2phdmEvb3JnL3FpNGovbGlicmFyeS9zd2luZy9lbnRpdHl2aWV3ZXIvUHJvcGVydGllc1BhbmVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OWJhMWUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZW50aXR5LXZpZXdlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3dpbmcvZW50aXR5dmlld2VyL1Byb3BlcnRpZXNQYW5lbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRvbnkgS29oYXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogTGljZW5zZWQgIHVuZGVyIHRoZSAgQXBhY2hlIExpY2Vuc2UsICBWZXJzaW9uIDIuMCAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlICB0aGlzIGZpbGUgIGV4Y2VwdCBpbiAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCi0gKiBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKLSAqLwotcGFja2FnZSBvcmcucWk0ai5saWJyYXJ5LnN3aW5nLmVudGl0eXZpZXdlcjsKLQotaW1wb3J0IGphdmEuYXd0LkJvcmRlckxheW91dDsKLWltcG9ydCBqYXZheC5zd2luZy5KUGFuZWw7Ci1pbXBvcnQgamF2YXguc3dpbmcuSlNjcm9sbFBhbmU7Ci1pbXBvcnQgamF2YXguc3dpbmcuSlRhYmxlOwotaW1wb3J0IGphdmF4LnN3aW5nLnRhYmxlLkRlZmF1bHRUYWJsZU1vZGVsOwotaW1wb3J0IGphdmF4LnN3aW5nLnRhYmxlLlRhYmxlTW9kZWw7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmFzc29jaWF0aW9uLkFzc29jaWF0aW9uU3RhdGVIb2xkZXI7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnF1ZXJ5LlF1ZXJ5OwotaW1wb3J0IG9yZy5xaTRqLnNwaS5RaTRqU1BJOwotCi0vKioKLSAqIEVudGl0eSBQcm9wZXJ0aWVzIFZpZXdlciBhcyBTd2luZyBDb21wb25lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0aWVzUGFuZWwKLSAgICBleHRlbmRzIEpQYW5lbAotewotICAgIHByb3RlY3RlZCBKVGFibGUgcHJvcGVydGllc1RhYmxlOwotICAgIHByb3RlY3RlZCBRaTRqU1BJIHFpNGpzcGk7Ci0KLSAgICBwdWJsaWMgUHJvcGVydGllc1BhbmVsKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2V0TGF5b3V0KCBuZXcgQm9yZGVyTGF5b3V0KCkgKTsKLSAgICAgICAgSlNjcm9sbFBhbmUgc2Nyb2xsUGFuZSA9IG5ldyBKU2Nyb2xsUGFuZSgpOwotICAgICAgICB0aGlzLmFkZCggc2Nyb2xsUGFuZSwgQm9yZGVyTGF5b3V0LkNFTlRFUiApOwotCi0gICAgICAgIHByb3BlcnRpZXNUYWJsZSA9IG5ldyBKVGFibGUoKTsKLSAgICAgICAgc2Nyb2xsUGFuZS5zZXRWaWV3cG9ydFZpZXcoIHByb3BlcnRpZXNUYWJsZSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemVRaTRKKCBRaTRqU1BJIHFpNGogKQotICAgIHsKLSAgICAgICAgdGhpcy5xaTRqc3BpID0gcWk0ajsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWxvYWQgdGhlIHRhYmxlIGRhdGEgd2l0aCBxdWVyeSBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgcXVlcnkKLSAgICAgKgotICAgICAqIEBwYXJhbSBxdWVyeSB0aGUgcXVlcnkgdG8gZ2VuZXJhdGUgdGFibGUgZGF0YQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbG9hZCggUXVlcnkgcXVlcnkgKQotICAgIHsKLSAgICAgICAgVGFibGVNb2RlbCB0YWJsZU1vZGVsID0gY3JlYXRlRGF0YSggcXVlcnkgKTsKLSAgICAgICAgcHJvcGVydGllc1RhYmxlLnNldE1vZGVsKCB0YWJsZU1vZGVsICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIHRhYmxlIHRhYmxlIG9yIHByb3BlcnRpZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHF1ZXJ5Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcXVlcnkgdGhlIFF1ZXJ5Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRhYmxlTW9kZWwKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgVGFibGVNb2RlbCBjcmVhdGVEYXRhKCBRdWVyeSBxdWVyeSApCi0gICAgewotICAgICAgICBEZWZhdWx0VGFibGVNb2RlbCBtb2RlbCA9IG5ldyBEZWZhdWx0VGFibGVNb2RlbCgpOwotCi0gICAgICAgIGZvciggT2JqZWN0IHFPYmogOiBxdWVyeSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc29jaWF0aW9uU3RhdGVIb2xkZXIgc3RhdGUgPSBxaTRqc3BpLnN0YXRlT2YoIChFbnRpdHlDb21wb3NpdGUpIHFPYmogKTsKLSAgICAgICAgICAgIEVudGl0eURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHFpNGpzcGkuZW50aXR5RGVzY3JpcHRvckZvciggKEVudGl0eUNvbXBvc2l0ZSkgcU9iaiApOwotICAgICAgICAgICAgLy8gZ2VuZXJlYXRlIGNvbHVtbiwgZmlyc3QgdGltZSBvbmx5Ci0gICAgICAgICAgICBpZiggbW9kZWwuZ2V0Q29sdW1uQ291bnQoKSA8IDEgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciggUHJvcGVydHlEZXNjcmlwdG9yIHBlcnNpc3RlbnRQcm9wZXJ0eURlc2NyaXB0b3IgOiBkZXNjcmlwdG9yLnN0YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgLnByb3BlcnRpZXMoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtb2RlbC5hZGRDb2x1bW4oIHBlcnNpc3RlbnRQcm9wZXJ0eURlc2NyaXB0b3IucXVhbGlmaWVkTmFtZSgpLm5hbWUoKSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgT2JqZWN0W10gcm93RGF0YSA9IG5ldyBPYmplY3RbIG1vZGVsLmdldENvbHVtbkNvdW50KCkgXTsKLSAgICAgICAgICAgIGludCBpID0gMDsKLSAgICAgICAgICAgIGZvciggUHJvcGVydHlEZXNjcmlwdG9yIHBlcnNpc3RlbnRQcm9wZXJ0eURlc2NyaXB0b3IgOiBkZXNjcmlwdG9yLnN0YXRlKCkucHJvcGVydGllcygpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByb3dEYXRhWyBpKytdID0gc3RhdGUucHJvcGVydHlGb3IoIHBlcnNpc3RlbnRQcm9wZXJ0eURlc2NyaXB0b3IuYWNjZXNzb3IoKSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbW9kZWwuYWRkUm93KCByb3dEYXRhICk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbW9kZWw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZW50aXR5LXZpZXdlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3dpbmcvZW50aXR5dmlld2VyL1RyZWVQYW5lbC5qYXZhIGIvdG9vbHMvZW50aXR5LXZpZXdlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3dpbmcvZW50aXR5dmlld2VyL1RyZWVQYW5lbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODc3YWQ0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2VudGl0eS12aWV3ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N3aW5nL2VudGl0eXZpZXdlci9UcmVlUGFuZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBUb255IEtvaGFyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIExpY2Vuc2VkICB1bmRlciB0aGUgIEFwYWNoZSBMaWNlbnNlLCAgVmVyc2lvbiAyLjAgICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSAgdGhpcyBmaWxlICBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgotICogaW1wbGllZC4KLSAqCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCi0gKi8KLXBhY2thZ2Ugb3JnLnFpNGoubGlicmFyeS5zd2luZy5lbnRpdHl2aWV3ZXI7Ci0KLWltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7Ci1pbXBvcnQgamF2YXguc3dpbmcuSlBhbmVsOwotaW1wb3J0IGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lOwotaW1wb3J0IGphdmF4LnN3aW5nLkpUcmVlOwotaW1wb3J0IGphdmF4LnN3aW5nLnRyZWUuRGVmYXVsdE11dGFibGVUcmVlTm9kZTsKLWltcG9ydCBqYXZheC5zd2luZy50cmVlLkRlZmF1bHRUcmVlTW9kZWw7Ci1pbXBvcnQgamF2YXguc3dpbmcudHJlZS5NdXRhYmxlVHJlZU5vZGU7Ci1pbXBvcnQgamF2YXguc3dpbmcudHJlZS5UcmVlU2VsZWN0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnN0cnVjdHVyZS5BcHBsaWNhdGlvbkRlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGouc3BpLlFpNGpTUEk7Ci1pbXBvcnQgb3JnLnFpNGoudG9vbHMubW9kZWwuZGVzY3JpcHRvci5BcHBsaWNhdGlvbkRldGFpbERlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnFpNGoudG9vbHMubW9kZWwuZGVzY3JpcHRvci5BcHBsaWNhdGlvbkRldGFpbERlc2NyaXB0b3JCdWlsZGVyOwotaW1wb3J0IG9yZy5xaTRqLnRvb2xzLm1vZGVsLmRlc2NyaXB0b3IuRW50aXR5RGV0YWlsRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai50b29scy5tb2RlbC5kZXNjcmlwdG9yLkxheWVyRGV0YWlsRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcucWk0ai50b29scy5tb2RlbC5kZXNjcmlwdG9yLk1vZHVsZURldGFpbERlc2NyaXB0b3I7Ci0KLS8qKgotICogUWk0SiBBcHBsaWNhdGlvbiBUcmVlIFZpZXdlciBhcyBTd2luZyBDb21wb25lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmVlUGFuZWwKLSAgICBleHRlbmRzIEpQYW5lbAotewotICAgIHByb3RlY3RlZCBKVHJlZSBhcHBsaWNhdGlvblRyZWU7Ci0gICAgcHJvdGVjdGVkIFFpNGpTUEkgcWk0ajsKLSAgICBwcml2YXRlIEFwcGxpY2F0aW9uRGVzY3JpcHRvciBtb2RlbDsKLQotICAgIHB1YmxpYyBUcmVlUGFuZWwoKQotICAgIHsKLSAgICAgICAgdGhpcy5zZXRMYXlvdXQoIG5ldyBCb3JkZXJMYXlvdXQoKSApOwotCi0gICAgICAgIHRoaXMuYXBwbGljYXRpb25UcmVlID0gbmV3IEpUcmVlKCk7Ci0gICAgICAgIHRoaXMuYXBwbGljYXRpb25UcmVlLmdldFNlbGVjdGlvbk1vZGVsKCkuc2V0U2VsZWN0aW9uTW9kZSggVHJlZVNlbGVjdGlvbk1vZGVsLlNJTkdMRV9UUkVFX1NFTEVDVElPTiApOwotCi0gICAgICAgIEpTY3JvbGxQYW5lIHNjcm9sbFBhbmUgPSBuZXcgSlNjcm9sbFBhbmUoKTsKLSAgICAgICAgdGhpcy5hZGQoIHNjcm9sbFBhbmUsIEJvcmRlckxheW91dC5DRU5URVIgKTsKLSAgICAgICAgc2Nyb2xsUGFuZS5zZXRWaWV3cG9ydFZpZXcoIHRoaXMuYXBwbGljYXRpb25UcmVlICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZVFpNEooIFFpNGpTUEkgcWk0aiwgQXBwbGljYXRpb25EZXNjcmlwdG9yIG1vZGVsICkKLSAgICB7Ci0gICAgICAgIHRoaXMucWk0aiA9IHFpNGo7Ci0gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSlRyZWUgZ2V0VHJlZUNvbXBvbmVudCgpCi0gICAgewotICAgICAgICByZXR1cm4gYXBwbGljYXRpb25UcmVlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbG9hZCgpCi0gICAgewotICAgICAgICAvLyBidWlsZCB0aGUgdmlzaXRvciB3aGljaCBhbGxvdyB0cmF2ZXJzZSBxaTRqIG1vZGVsCi0gICAgICAgIEFwcGxpY2F0aW9uRGV0YWlsRGVzY3JpcHRvciB2aXNpdG9yID0gQXBwbGljYXRpb25EZXRhaWxEZXNjcmlwdG9yQnVpbGRlci5jcmVhdGVBcHBsaWNhdGlvbkRldGFpbERlc2NyaXB0b3IoIG1vZGVsICk7Ci0gICAgICAgIERlZmF1bHRUcmVlTW9kZWwgdHJlZU1vZGVsID0gbmV3IERlZmF1bHRUcmVlTW9kZWwoIG5ldyBUcmVlTW9kZWxCdWlsZGVyKCkuYnVpbGQoIHZpc2l0b3IgKSApOwotICAgICAgICBhcHBsaWNhdGlvblRyZWUuc2V0TW9kZWwoIHRyZWVNb2RlbCApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEhlbHBlciBjbGFzcyB0byBidWlsZCB0cmVlIG1vZGVsIGZvciB1cCB0byAzIGxldmVsIGRlcHRoLCB3aGljaCBmb2N1c2luZyBvbiB0aGUgZW50aXR5Ci0gICAgICovCi0gICAgY2xhc3MgVHJlZU1vZGVsQnVpbGRlcgotICAgIHsKLQotICAgICAgICBwdWJsaWMgTXV0YWJsZVRyZWVOb2RlIGJ1aWxkKCBBcHBsaWNhdGlvbkRldGFpbERlc2NyaXB0b3IgZGVzY3JpcHRvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIERlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKCBkZXNjcmlwdG9yICk7Ci0gICAgICAgICAgICBidWlsZExheWVyc05vZGUoIG5vZGUsIGRlc2NyaXB0b3IubGF5ZXJzKCkgKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGJ1aWxkTGF5ZXJzTm9kZSggRGVmYXVsdE11dGFibGVUcmVlTm9kZSBwYXJlbnQsIEl0ZXJhYmxlPExheWVyRGV0YWlsRGVzY3JpcHRvcj4gaXRlciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciggTGF5ZXJEZXRhaWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBpdGVyICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIG5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZSggZGVzY3JpcHRvciApOwotICAgICAgICAgICAgICAgIGJ1aWxkTW9kdWxlc05vZGUoIG5vZGUsIGRlc2NyaXB0b3IubW9kdWxlcygpICk7Ci0gICAgICAgICAgICAgICAgcGFyZW50LmFkZCggbm9kZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGJ1aWxkTW9kdWxlc05vZGUoIERlZmF1bHRNdXRhYmxlVHJlZU5vZGUgcGFyZW50LCBJdGVyYWJsZTxNb2R1bGVEZXRhaWxEZXNjcmlwdG9yPiBpdGVyICkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yKCBNb2R1bGVEZXRhaWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBpdGVyICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIG5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZSggZGVzY3JpcHRvciApOwotICAgICAgICAgICAgICAgIGJ1aWxkRW50aXRpZXNOb2RlKCBub2RlLCBkZXNjcmlwdG9yLmVudGl0aWVzKCkgKTsKLSAgICAgICAgICAgICAgICBwYXJlbnQuYWRkKCBub2RlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgYnVpbGRFbnRpdGllc05vZGUoIERlZmF1bHRNdXRhYmxlVHJlZU5vZGUgcGFyZW50LCBJdGVyYWJsZTxFbnRpdHlEZXRhaWxEZXNjcmlwdG9yPiBpdGVyICkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yKCBFbnRpdHlEZXRhaWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBpdGVyICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIG5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZSggZGVzY3JpcHRvciApOwotICAgICAgICAgICAgICAgIHBhcmVudC5hZGQoIG5vZGUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZW50aXR5LXZpZXdlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3dpbmcvZW50aXR5dmlld2VyL3BhY2thZ2UuaHRtbCBiL3Rvb2xzL2VudGl0eS12aWV3ZXIvc3JjL21haW4vamF2YS9vcmcvcWk0ai9saWJyYXJ5L3N3aW5nL2VudGl0eXZpZXdlci9wYWNrYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4N2YxOTguLjAwMDAwMDAKLS0tIGEvdG9vbHMvZW50aXR5LXZpZXdlci9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2xpYnJhcnkvc3dpbmcvZW50aXR5dmlld2VyL3BhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+Ci0gICAgPGJvZHk+Ci0gICAgICAgIDxoMj5FbnRpdHlWaWV3ZXIgVG9vbC48L2gyPgotICAgIDwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rvb2xzL2VudGl0eS12aWV3ZXIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9zd2luZy9saWJyYXJ5L3N3aW5nL2VudGl0eXZpZXdlci9zYW1wbGUvQXBwbGljYXRpb25TYW1wbGUuamF2YSBiL3Rvb2xzL2VudGl0eS12aWV3ZXIvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai9zd2luZy9saWJyYXJ5L3N3aW5nL2VudGl0eXZpZXdlci9zYW1wbGUvQXBwbGljYXRpb25TYW1wbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY3YWE2Ny4uMDAwMDAwMAotLS0gYS90b29scy9lbnRpdHktdmlld2VyL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovc3dpbmcvbGlicmFyeS9zd2luZy9lbnRpdHl2aWV3ZXIvc2FtcGxlL0FwcGxpY2F0aW9uU2FtcGxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgVG9ueSBLb2hhci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBMaWNlbnNlZCAgdW5kZXIgdGhlICBBcGFjaGUgTGljZW5zZSwgIFZlcnNpb24gMi4wICAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgIHRoaXMgZmlsZSAgZXhjZXB0IGluICBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyAgT0YgQU5ZIEtJTkQsIGVpdGhlciAgZXhwcmVzcyAgb3IKLSAqIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIAotICovCi1wYWNrYWdlIG9yZy5xaTRqLnN3aW5nLmxpYnJhcnkuc3dpbmcuZW50aXR5dmlld2VyLnNhbXBsZTsKLQotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcucWk0ai5hcGkuZW50aXR5LkVudGl0eUJ1aWxkZXI7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLmVudGl0eS5FbnRpdHlDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OwotaW1wb3J0IG9yZy5xaTRqLmFwaS5xdWVyeS5RdWVyeTsKLWltcG9ydCBvcmcucWk0ai5hcGkudW5pdG9md29yay5Vbml0T2ZXb3JrOwotaW1wb3J0IG9yZy5xaTRqLmFwaS51bml0b2Z3b3JrLlVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcucWk0ai5ib290c3RyYXAuTW9kdWxlQXNzZW1ibHk7Ci1pbXBvcnQgb3JnLnFpNGouaW5kZXgucmRmLmFzc2VtYmx5LlJkZk1lbW9yeVN0b3JlQXNzZW1ibGVyOwotaW1wb3J0IG9yZy5xaTRqLmxpYnJhcnkuc3dpbmcuZW50aXR5dmlld2VyLkVudGl0eVZpZXdlcjsKLWltcG9ydCBvcmcucWk0ai50ZXN0LkFic3RyYWN0UWk0alRlc3Q7Ci1pbXBvcnQgb3JnLnFpNGoudGVzdC5FbnRpdHlUZXN0QXNzZW1ibGVyOwotCi1pbXBvcnQgc3RhdGljIG9yZy5xaTRqLnRlc3QudXRpbC5Bc3N1bWUuYXNzdW1lRGlzcGxheVByZXNlbnQ7Ci0KLXB1YmxpYyBjbGFzcyBBcHBsaWNhdGlvblNhbXBsZQotICAgIGV4dGVuZHMgQWJzdHJhY3RRaTRqVGVzdAotewotCi0gICAgQEJlZm9yZUNsYXNzCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc3VtZURpc3BsYXkoKQotICAgIHsKLSAgICAgICAgYXNzdW1lRGlzcGxheVByZXNlbnQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhc3NlbWJsZSggTW9kdWxlQXNzZW1ibHkgbW9kdWxlICkKLSAgICAgICAgdGhyb3dzIEFzc2VtYmx5RXhjZXB0aW9uCi0gICAgewotICAgICAgICBtb2R1bGUuZW50aXRpZXMoIENhckVudGl0eS5jbGFzcyApOwotICAgICAgICBtb2R1bGUuZW50aXRpZXMoIEFuaW1hbEVudGl0eS5jbGFzcyApOwotICAgICAgICBuZXcgUmRmTWVtb3J5U3RvcmVBc3NlbWJsZXIoKS5hc3NlbWJsZSggbW9kdWxlICk7Ci0gICAgICAgIG5ldyBFbnRpdHlUZXN0QXNzZW1ibGVyKCkuYXNzZW1ibGUoIG1vZHVsZSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlc3REYXRhKCkKLSAgICAgICAgdGhyb3dzIFVuaXRPZldvcmtDb21wbGV0aW9uRXhjZXB0aW9uCi0gICAgewotICAgICAgICBVbml0T2ZXb3JrIHVvdyA9IG1vZHVsZS5uZXdVbml0T2ZXb3JrKCk7Ci0gICAgICAgIGNyZWF0ZUNhciggIlZvbHZvIiwgIlM4MCIsIDIwMDcgKTsKLSAgICAgICAgY3JlYXRlQ2FyKCAiVm9sdm8iLCAiQzcwIiwgMjAwNiApOwotICAgICAgICBjcmVhdGVDYXIoICJGb3JkIiwgIlRyYW5zaXQiLCAyMDA3ICk7Ci0gICAgICAgIGNyZWF0ZUNhciggIkZvcmQiLCAiTXVzdGFuZyIsIDIwMDcgKTsKLSAgICAgICAgY3JlYXRlQ2FyKCAiRm9yZCIsICJNdXN0YW5nIiwgMjAwNiApOwotICAgICAgICBjcmVhdGVDYXIoICJGb3JkIiwgIk11c3RhbmciLCAyMDA1ICk7Ci0KLSAgICAgICAgY3JlYXRlQW5pbWFsKCAiQ2F0IiwgIk1pYW93IiApOwotICAgICAgICBjcmVhdGVBbmltYWwoICJEdWNrIiwgIkt3ZWsta3dlayIgKTsKLSAgICAgICAgY3JlYXRlQW5pbWFsKCAiRG9nIiwgIkd1ayIgKTsKLSAgICAgICAgY3JlYXRlQW5pbWFsKCAiQ293IiwgIk1vb29vIiApOwotCi0gICAgICAgIHVvdy5jb21wbGV0ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RRdWVyeSgpCi0gICAgewotICAgICAgICBVbml0T2ZXb3JrIHVvdyA9IG1vZHVsZS5uZXdVbml0T2ZXb3JrKCk7Ci0gICAgICAgIFF1ZXJ5PENhcj4gcXVlcnkgPSB1b3cubmV3UXVlcnkoIG1vZHVsZS5uZXdRdWVyeUJ1aWxkZXIoIENhci5jbGFzcyApICk7Ci0gICAgICAgIGZvciggQ2FyIGNhciA6IHF1ZXJ5ICkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBjYXIubW9kZWwoKSArICIgfCAiICsgY2FyLm1hbnVmYWN0dXJlcigpICsgIiB8ICIgKyBjYXIueWVhcigpICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIEFwcGxpY2F0aW9uU2FtcGxlIHNhbXBsZSA9IG5ldyBBcHBsaWNhdGlvblNhbXBsZSgpOwotICAgICAgICBzYW1wbGUucnVuU2FtcGxlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBydW5TYW1wbGUoKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzZXRVcCgpOwotICAgICAgICBjcmVhdGVUZXN0RGF0YSgpOwotICAgICAgICAvL3Rlc3RRdWVyeSgpOwotICAgICAgICAvLyBTVEFSVCBTTklQUEVUOiBlbnRpdHktdmlld2VyCi0gICAgICAgIG5ldyBFbnRpdHlWaWV3ZXIoKS5zaG93KCBxaTRqLnNwaSgpLCBhcHBsaWNhdGlvbk1vZGVsLCBhcHBsaWNhdGlvbiApOwotICAgICAgICAvLyBFTkQgU05JUFBFVDogZW50aXR5LXZpZXdlcgotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGNyZWF0ZUNhciggU3RyaW5nIG1hbnVmYWN0dXJlciwgU3RyaW5nIG1vZGVsLCBpbnQgeWVhciApCi0gICAgewotICAgICAgICBVbml0T2ZXb3JrIHVvdyA9IG1vZHVsZS5jdXJyZW50VW5pdE9mV29yaygpOwotICAgICAgICBFbnRpdHlCdWlsZGVyPENhcj4gYnVpbGRlciA9IHVvdy5uZXdFbnRpdHlCdWlsZGVyKCBDYXIuY2xhc3MgKTsKLSAgICAgICAgQ2FyIHByb3RvdHlwZSA9IGJ1aWxkZXIuaW5zdGFuY2VGb3IoIENhckVudGl0eS5jbGFzcyApOwotICAgICAgICBwcm90b3R5cGUubWFudWZhY3R1cmVyKCkuc2V0KCBtYW51ZmFjdHVyZXIgKTsKLSAgICAgICAgcHJvdG90eXBlLm1vZGVsKCkuc2V0KCBtb2RlbCApOwotICAgICAgICBwcm90b3R5cGUueWVhcigpLnNldCggeWVhciApOwotICAgICAgICBDYXJFbnRpdHkgZW50aXR5ID0gKENhckVudGl0eSkgYnVpbGRlci5uZXdJbnN0YW5jZSgpOwotICAgICAgICByZXR1cm4gZW50aXR5LmlkZW50aXR5KCkuZ2V0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlQW5pbWFsKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNvdW5kICkKLSAgICB7Ci0gICAgICAgIFVuaXRPZldvcmsgdW93ID0gbW9kdWxlLmN1cnJlbnRVbml0T2ZXb3JrKCk7Ci0gICAgICAgIEVudGl0eUJ1aWxkZXI8QW5pbWFsPiBidWlsZGVyID0gdW93Lm5ld0VudGl0eUJ1aWxkZXIoIEFuaW1hbC5jbGFzcyApOwotICAgICAgICBBbmltYWwgcHJvdG90eXBlID0gYnVpbGRlci5pbnN0YW5jZUZvciggQW5pbWFsRW50aXR5LmNsYXNzICk7Ci0gICAgICAgIHByb3RvdHlwZS5uYW1lKCkuc2V0KCBuYW1lICk7Ci0gICAgICAgIHByb3RvdHlwZS5zb3VuZCgpLnNldCggc291bmQgKTsKLSAgICAgICAgQW5pbWFsRW50aXR5IGVudGl0eSA9IChBbmltYWxFbnRpdHkpIGJ1aWxkZXIubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgcmV0dXJuIGVudGl0eS5pZGVudGl0eSgpLmdldCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnRlcmZhY2UgQ2FyCi0gICAgewotCi0gICAgICAgIFByb3BlcnR5PFN0cmluZz4gbWFudWZhY3R1cmVyKCk7Ci0KLSAgICAgICAgUHJvcGVydHk8U3RyaW5nPiBtb2RlbCgpOwotCi0gICAgICAgIFByb3BlcnR5PEludGVnZXI+IHllYXIoKTsKLQotICAgIH0KLQotICAgIHB1YmxpYyBpbnRlcmZhY2UgQ2FyRW50aXR5Ci0gICAgICAgIGV4dGVuZHMgQ2FyLCBFbnRpdHlDb21wb3NpdGUKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIGludGVyZmFjZSBBbmltYWwKLSAgICB7Ci0KLSAgICAgICAgUHJvcGVydHk8U3RyaW5nPiBuYW1lKCk7Ci0KLSAgICAgICAgUHJvcGVydHk8U3RyaW5nPiBzb3VuZCgpOwotCi0gICAgfQotCi0gICAgcHVibGljIGludGVyZmFjZSBBbmltYWxFbnRpdHkKLSAgICAgICAgZXh0ZW5kcyBBbmltYWwsIEVudGl0eUNvbXBvc2l0ZQotICAgIHsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL2J1aWxkLmdyYWRsZSBiL3Rvb2xzL2VudmlzYWdlL2J1aWxkLmdyYWRsZQppbmRleCAwZmNhYjBiLi42NWNjYTAxIDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9idWlsZC5ncmFkbGUKKysrIGIvdG9vbHMvZW52aXNhZ2UvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIlZpc3VhbGl6ZXIgb2YgYSBRaTRqIEFwcGxpY2F0aW9uIFN0cnVjdHVyZS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBFbnZpc2FnZSIgfX0KK2Rlc2NyaXB0aW9uID0gIlZpc3VhbGl6ZXIgb2YgYSBBcGFjaGUgWmVzdOKEoiBBcHBsaWNhdGlvbiBTdHJ1Y3R1cmUuIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgRW52aXNhZ2UiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL2Rldi1zdGF0dXMueG1sIGIvdG9vbHMvZW52aXNhZ2UvZGV2LXN0YXR1cy54bWwKaW5kZXggYzg0N2E5Zi4uNDQ1OGJiYiAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2UvZGV2LXN0YXR1cy54bWwKKysrIGIvdG9vbHMvZW52aXNhZ2UvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvZG9jcy9lbnZpc2FnZS50eHQgYi90b29scy9lbnZpc2FnZS9zcmMvZG9jcy9lbnZpc2FnZS50eHQKaW5kZXggMmJkZDZjZC4uMDE1NTFjMCAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL2RvY3MvZW52aXNhZ2UudHh0CisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9kb2NzL2VudmlzYWdlLnR4dApAQCAtMSw3ICsxLDI2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1t0b29scy1lbnZpc2FnZSxFbnZpc2FnZSBUb29sXV0KID0gRW52aXNhZ2UgPQogCi1FbnZpc2FnZSBpcyBhIFN3aW5nIGJhc2VkIHZpc3VhbGl6YXRpb24gdG9vbCBmb3IgdGhlIFFpNGogQXBwbGljYXRpb24gbW9kZWwuCitFbnZpc2FnZSBpcyBhIFN3aW5nIGJhc2VkIHZpc3VhbGl6YXRpb24gdG9vbCBmb3IgdGhlIFplc3TihKIgQXBwbGljYXRpb24gbW9kZWwuCiBWaXN1YWxpemF0aW9ucyBjYW4gYmUgcHJpbnRlZCB0byBQREZzLgogCiA9PSBVc2FnZSA9PQpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9FbnZpc2FnZUZyYW1lLmZvcm0gYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL0VudmlzYWdlRnJhbWUuZm9ybQppbmRleCAyMDM5YjZmLi4wN2E0NDRlIDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL0VudmlzYWdlRnJhbWUuZm9ybQorKysgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL0VudmlzYWdlRnJhbWUuZm9ybQpAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGZvcm0geG1sbnM9Imh0dHA6Ly93d3cuaW50ZWxsaWouY29tL3VpZGVzaWduZXIvZm9ybS8iIHZlcnNpb249IjEiIGJpbmQtdG8tY2xhc3M9Im9yZy5xaTRqLmVudmlzYWdlLkVudmlzYWdlRnJhbWUiPgogICA8Z3JpZCBpZD0iMjdkYzYiIGJpbmRpbmc9ImNvbnRlbnRQYW5lIiBsYXlvdXQtbWFuYWdlcj0iQm9yZGVyTGF5b3V0IiBoZ2FwPSIwIiB2Z2FwPSIwIj4KICAgICA8Y29uc3RyYWludHM+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL01haW4uamF2YSBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvTWFpbi5qYXZhCmluZGV4IGE0ZDQ2NzQuLjgzNDE0YzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvTWFpbi5qYXZhCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvTWFpbi5qYXZhCkBAIC0zMiw3ICszMiw2IEBACiAgICAgICAgIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uLCBBc3NlbWJseUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgU3RyaW5nIGFwcGxpY2F0aW9uQXNzZW1ibGVyTmFtZSA9IGFyZ3NbMF07Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkFzc2VtYmxlcjoiICsgYXBwbGljYXRpb25Bc3NlbWJsZXJOYW1lICk7CiAgICAgICAgIENsYXNzIGFwcGxpY2F0aW9uQXNzZW1ibGVyQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKCBhcHBsaWNhdGlvbkFzc2VtYmxlck5hbWUgKTsKICAgICAgICAgQXBwbGljYXRpb25Bc3NlbWJsZXIgYXNzZW1ibGVyID0gKEFwcGxpY2F0aW9uQXNzZW1ibGVyKSBhcHBsaWNhdGlvbkFzc2VtYmxlckNsYXNzLm5ld0luc3RhbmNlKCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0FQSVBhbmUuZm9ybSBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0FQSVBhbmUuZm9ybQppbmRleCBiNTdmODlmLi5kNTlkMDg2IDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9BUElQYW5lLmZvcm0KKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvQVBJUGFuZS5mb3JtCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Zm9ybSB4bWxucz0iaHR0cDovL3d3dy5pbnRlbGxpai5jb20vdWlkZXNpZ25lci9mb3JtLyIgdmVyc2lvbj0iMSIgYmluZC10by1jbGFzcz0ib3JnLnFpNGouZW52aXNhZ2UuZGV0YWlsLkFQSVBhbmUiPgogICA8Z3JpZCBpZD0iMjdkYzYiIGJpbmRpbmc9ImNvbnRlbnRQYW5lIiBsYXlvdXQtbWFuYWdlcj0iQm9yZGVyTGF5b3V0IiBoZ2FwPSIwIiB2Z2FwPSIwIj4KICAgICA8Y29uc3RyYWludHM+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9EZXBlbmRlbmN5UGFuZS5mb3JtIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvRGVwZW5kZW5jeVBhbmUuZm9ybQppbmRleCAzYjNlNTVhLi5jNjkzNDhiIDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9EZXBlbmRlbmN5UGFuZS5mb3JtCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0RlcGVuZGVuY3lQYW5lLmZvcm0KQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxmb3JtIHhtbG5zPSJodHRwOi8vd3d3LmludGVsbGlqLmNvbS91aWRlc2lnbmVyL2Zvcm0vIiB2ZXJzaW9uPSIxIiBiaW5kLXRvLWNsYXNzPSJvcmcucWk0ai5lbnZpc2FnZS5kZXRhaWwuRGVwZW5kZW5jeVBhbmUiPgogICA8Z3JpZCBpZD0iMjdkYzYiIGJpbmRpbmc9ImNvbnRlbnRQYW5lIiBsYXlvdXQtbWFuYWdlcj0iQm9yZGVyTGF5b3V0IiBoZ2FwPSIwIiB2Z2FwPSIwIj4KICAgICA8Y29uc3RyYWludHM+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9HZW5lcmFsUGFuZS5mb3JtIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvR2VuZXJhbFBhbmUuZm9ybQppbmRleCA0NTlhZjMyLi42YTRkOTc1IDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9HZW5lcmFsUGFuZS5mb3JtCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0dlbmVyYWxQYW5lLmZvcm0KQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxmb3JtIHhtbG5zPSJodHRwOi8vd3d3LmludGVsbGlqLmNvbS91aWRlc2lnbmVyL2Zvcm0vIiB2ZXJzaW9uPSIxIiBiaW5kLXRvLWNsYXNzPSJvcmcucWk0ai5lbnZpc2FnZS5kZXRhaWwuR2VuZXJhbFBhbmUiPgogICA8Z3JpZCBpZD0iMjdkYzYiIGJpbmRpbmc9ImNvbnRlbnRQYW5lIiBsYXlvdXQtbWFuYWdlcj0iQm9yZGVyTGF5b3V0IiBoZ2FwPSIwIiB2Z2FwPSIwIj4KICAgICA8Y29uc3RyYWludHM+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9JbXBvcnRlZEJ5UGFuZS5mb3JtIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvSW1wb3J0ZWRCeVBhbmUuZm9ybQppbmRleCBlYjdkZmFiLi4wOWFiMzEwIDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9JbXBvcnRlZEJ5UGFuZS5mb3JtCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0ltcG9ydGVkQnlQYW5lLmZvcm0KQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxmb3JtIHhtbG5zPSJodHRwOi8vd3d3LmludGVsbGlqLmNvbS91aWRlc2lnbmVyL2Zvcm0vIiB2ZXJzaW9uPSIxIiBiaW5kLXRvLWNsYXNzPSJvcmcucWk0ai5lbnZpc2FnZS5kZXRhaWwuSW1wb3J0ZWRCeVBhbmUiPgogICA8Z3JpZCBpZD0iMjdkYzYiIGJpbmRpbmc9ImNvbnRlbnRQYW5lIiBsYXlvdXQtbWFuYWdlcj0iR3JpZEJhZ0xheW91dCI+CiAgICAgPGNvbnN0cmFpbnRzPgpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvTWV0aG9kUGFuZS5mb3JtIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvTWV0aG9kUGFuZS5mb3JtCmluZGV4IGI0ODg2YzYuLjljYzcwNjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL01ldGhvZFBhbmUuZm9ybQorKysgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9NZXRob2RQYW5lLmZvcm0KQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxmb3JtIHhtbG5zPSJodHRwOi8vd3d3LmludGVsbGlqLmNvbS91aWRlc2lnbmVyL2Zvcm0vIiB2ZXJzaW9uPSIxIiBiaW5kLXRvLWNsYXNzPSJvcmcucWk0ai5lbnZpc2FnZS5kZXRhaWwuTWV0aG9kUGFuZSI+CiAgIDxncmlkIGlkPSIyN2RjNiIgYmluZGluZz0iY29udGVudFBhbmUiIGxheW91dC1tYW5hZ2VyPSJCb3JkZXJMYXlvdXQiIGhnYXA9IjAiIHZnYXA9IjAiPgogICAgIDxjb25zdHJhaW50cz4KZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL1NQSVBhbmUuZm9ybSBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL1NQSVBhbmUuZm9ybQppbmRleCBhYjQ0MGY3Li5jNTA0MDdhIDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TUElQYW5lLmZvcm0KKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvU1BJUGFuZS5mb3JtCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Zm9ybSB4bWxucz0iaHR0cDovL3d3dy5pbnRlbGxpai5jb20vdWlkZXNpZ25lci9mb3JtLyIgdmVyc2lvbj0iMSIgYmluZC10by1jbGFzcz0ib3JnLnFpNGouZW52aXNhZ2UuZGV0YWlsLlNQSVBhbmUiPgogICA8Z3JpZCBpZD0iMjdkYzYiIGJpbmRpbmc9ImNvbnRlbnRQYW5lIiBsYXlvdXQtbWFuYWdlcj0iQm9yZGVyTGF5b3V0IiBoZ2FwPSIwIiB2Z2FwPSIwIj4KICAgICA8Y29uc3RyYWludHM+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TZXJ2aWNlQ29uZmlndXJhdGlvblBhbmUuZm9ybSBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL1NlcnZpY2VDb25maWd1cmF0aW9uUGFuZS5mb3JtCmluZGV4IDk0NDZkOWEuLmU2ZTRhYWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL1NlcnZpY2VDb25maWd1cmF0aW9uUGFuZS5mb3JtCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL1NlcnZpY2VDb25maWd1cmF0aW9uUGFuZS5mb3JtCkBAIC0xLDQgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Zm9ybSB4bWxucz0iaHR0cDovL3d3dy5pbnRlbGxpai5jb20vdWlkZXNpZ25lci9mb3JtLyIgdmVyc2lvbj0iMSIgYmluZC10by1jbGFzcz0ib3JnLnFpNGouZW52aXNhZ2UuZGV0YWlsLlNlcnZpY2VDb25maWd1cmF0aW9uUGFuZSI+CiAgIDxncmlkIGlkPSIyN2RjNiIgYmluZGluZz0iY29udGVudFBhbmUiIGxheW91dC1tYW5hZ2VyPSJHcmlkQmFnTGF5b3V0Ij4KICAgICA8Y29uc3RyYWludHM+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TZXJ2aWNlVXNhZ2VQYW5lLmZvcm0gYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TZXJ2aWNlVXNhZ2VQYW5lLmZvcm0KaW5kZXggMWZiYTYwNi4uYmNmMWVlNSAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvU2VydmljZVVzYWdlUGFuZS5mb3JtCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL1NlcnZpY2VVc2FnZVBhbmUuZm9ybQpAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGZvcm0geG1sbnM9Imh0dHA6Ly93d3cuaW50ZWxsaWouY29tL3VpZGVzaWduZXIvZm9ybS8iIHZlcnNpb249IjEiIGJpbmQtdG8tY2xhc3M9Im9yZy5xaTRqLmVudmlzYWdlLmRldGFpbC5TZXJ2aWNlVXNhZ2VQYW5lIj4KICAgPGdyaWQgaWQ9IjI3ZGM2IiBiaW5kaW5nPSJjb250ZW50UGFuZSIgbGF5b3V0LW1hbmFnZXI9IkJvcmRlckxheW91dCIgaGdhcD0iMCIgdmdhcD0iMCI+CiAgICAgPGNvbnN0cmFpbnRzPgpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvU3RhdGVQYW5lLmZvcm0gYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TdGF0ZVBhbmUuZm9ybQppbmRleCA4YTRiYzRmLi45MGZiNGU0IDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TdGF0ZVBhbmUuZm9ybQorKysgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TdGF0ZVBhbmUuZm9ybQpAQCAtMSw0ICsxLDIwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGZvcm0geG1sbnM9Imh0dHA6Ly93d3cuaW50ZWxsaWouY29tL3VpZGVzaWduZXIvZm9ybS8iIHZlcnNpb249IjEiIGJpbmQtdG8tY2xhc3M9Im9yZy5xaTRqLmVudmlzYWdlLmRldGFpbC5TdGF0ZVBhbmUiPgogICA8Z3JpZCBpZD0iMjdkYzYiIGJpbmRpbmc9ImNvbnRlbnRQYW5lIiBsYXlvdXQtbWFuYWdlcj0iQm9yZGVyTGF5b3V0IiBoZ2FwPSIwIiB2Z2FwPSIwIj4KICAgICA8Y29uc3RyYWludHM+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9wYWNrYWdlLmh0bWwgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9wYWNrYWdlLmh0bWwKaW5kZXggZDAyYzczNi4uNzc3ODk4NyAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvcGFja2FnZS5odG1sCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RW52aXNhZ2UgVG9vbCBEZXRhaWwgVUkuPC9oMj4KZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZXZlbnQvcGFja2FnZS5odG1sIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9ldmVudC9wYWNrYWdlLmh0bWwKaW5kZXggODY5NWMwMi4uOTQ5ZDJlMSAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9ldmVudC9wYWNrYWdlLmh0bWwKKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9ldmVudC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkVudmlzYWdlIFRvb2wgVUkgRXZlbnRzLjwvaDI+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2dyYXBoL0dyYXBoUGFuZS5qYXZhIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9ncmFwaC9HcmFwaFBhbmUuamF2YQppbmRleCAxMzI5ODVlLi5hOTRhODE0IDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2dyYXBoL0dyYXBoUGFuZS5qYXZhCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZ3JhcGgvR3JhcGhQYW5lLmphdmEKQEAgLTEzMCw4ICsxMzAsNiBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGdyYXBoSXRlbUxpbmtBY3RpdmF0ZWQoIExpbmtFdmVudCBldnQgKQogICAgIHsKLSAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oInRoaXMgaXMgY2FsbGVkIik7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKGV2dC5nZXRTb3VyY2UoKS5nZXRDbGFzcygpKTsKICAgICAgICAgaWYoIGV2dC5nZXRTb3VyY2UoKS5lcXVhbHMoIHRyZWVEaXNwbGF5ICkgKQogICAgICAgICB7CiAgICAgICAgICAgICBzdGFja2VkRGlzcGxheS5zZXRTZWxlY3RlZFZhbHVlKCBldnQuZ2V0T2JqZWN0KCkgKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvZ3JhcGgvU3RhY2tlZExheW91dC5qYXZhIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9ncmFwaC9TdGFja2VkTGF5b3V0LmphdmEKaW5kZXggNWQyNzk1ZS4uOTU5ZjA1MCAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9ncmFwaC9TdGFja2VkTGF5b3V0LmphdmEKKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9ncmFwaC9TdGFja2VkTGF5b3V0LmphdmEKQEAgLTk3LDcgKzk3LDYgQEAKICAgICAgICAgaW50IGhlaWdodCA9IGZtLmdldEhlaWdodCgpOwogICAgICAgICBtaW5TaXplLnNldFNpemUoIHdpZHRoICsgSU5TRVQgKyBJTlNFVCwgaGVpZ2h0ICsgSU5TRVQgKyBJTlNFVCApOwogCi0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKGZtLmdldEFzY2VudCgpKTsKICAgICAgICAgcmV0dXJuIG1pblNpemU7CiAgICAgfQogCkBAIC0xMTAsNyArMTA5LDYgQEAKIAogICAgICAgICBpZiggZGVwdGggPiB6b29tICkKICAgICAgICAgewotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImRlcHRoOiAiICsgIGRlcHRoICsgIiAgem9vbTogIiArIHpvb20pOwogICAgICAgICAgICAgbm9kZS5zZXRCb3VuZHMoIHgsIHksIDAsIDAgKTsKICAgICAgICAgICAgIG5vZGUuc2V0VmlzaWJsZSggZmFsc2UgKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9ncmFwaC9wYWNrYWdlLmh0bWwgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2dyYXBoL3BhY2thZ2UuaHRtbAppbmRleCBmNGE1OTk3Li5iZWNkZDk5IDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2dyYXBoL3BhY2thZ2UuaHRtbAorKysgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL2dyYXBoL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogICAgIDxib2R5PgogICAgICAgICA8aDI+RW52aXNhZ2UgVG9vbCBHcmFwaCBWaXN1YWxpemF0aW9uLjwvaDI+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL3BhY2thZ2UuaHRtbCBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvcGFja2FnZS5odG1sCmluZGV4IDNmZDk0MGQuLmJlMDM5ZDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvcGFja2FnZS5odG1sCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5FbnZpc2FnZSBUb29sLjwvaDI+CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL3ByaW50L1BERldyaXRlci5qYXZhIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9wcmludC9QREZXcml0ZXIuamF2YQppbmRleCBkYTk1OTU3Li41OWUwZDU1IDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL3ByaW50L1BERldyaXRlci5qYXZhCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvcHJpbnQvUERGV3JpdGVyLmphdmEKQEAgLTY3OCw3ICs2NzgsNiBAQAogICAgICAgICAvLyBjaGVjayBmb3IgcGFnZSBzaXplLCBpZiBuZWNlc3NhcnkgY3JlYXRlIG5ldyBwYWdlCiAgICAgICAgIGlmKCAoIGN1clkgLSBsaW5lU3BhY2UgKSA8PSBzdGFydFkgKQogICAgICAgICB7Ci0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigibmV3IGxpbmU6ICIgKyBjdXJZICsgIiAtICIgKyBsaW5lU3BhY2UgKyAiID0gIiArIChjdXJZLWxpbmVTcGFjZSkgKTsKICAgICAgICAgICAgIGNyZWF0ZU5ld1BhZ2UoKTsKICAgICAgICAgfQogCkBAIC03MjUsNyArNzI0LDYgQEAKICAgICAgICAgICAgIGN1ckNvbnRlbnRTdHJlYW0gPSBuZXcgUERQYWdlQ29udGVudFN0cmVhbSggZG9jLCBwYWdlICk7CiAKICAgICAgICAgICAgIGN1clBhZ2VTaXplID0gcGFnZS5nZXRBcnRCb3goKTsKLSAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJwU2l6ZTogIiArIHBkUmVjdC5nZXRXaWR0aCgpICsgIiwiICsgcGRSZWN0LmdldEhlaWdodCgpKTsKIAogICAgICAgICAgICAgY3VyQ29udGVudFN0cmVhbS5iZWdpblRleHQoKTsKICAgICAgICAgICAgIGN1clkgPSBjdXJQYWdlU2l6ZS5nZXRIZWlnaHQoKSAtIHN0YXJ0WTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvcHJpbnQvcGFja2FnZS5odG1sIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9wcmludC9wYWNrYWdlLmh0bWwKaW5kZXggZjJjZjk3MS4uZDI4MTQ4MyAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9wcmludC9wYWNrYWdlLmh0bWwKKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS9wcmludC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkVudmlzYWdlIFRvb2wgUERGIFByaW50IFN1cHBvcnQuPC9oMj4KZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvdHJlZS9UcmVlTW9kZWxQYW5lLmphdmEgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL3RyZWUvVHJlZU1vZGVsUGFuZS5qYXZhCmluZGV4IDhkNjBhYTguLjU5MTA0MWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvdHJlZS9UcmVlTW9kZWxQYW5lLmphdmEKKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS90cmVlL1RyZWVNb2RlbFBhbmUuamF2YQpAQCAtMTc2LDcgKzE3Niw2IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihvYmoudG9TdHJpbmcoKSk7CiAgICAgICAgIFRyZWVOb2RlIG5vZGUgPSBmaW5kTm9kZSggc3RydWN0dXJlVHJlZSwgb2JqICk7CiAgICAgICAgIGlmKCBub2RlICE9IG51bGwgKQogICAgICAgICB7CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL3RyZWUvcGFja2FnZS5odG1sIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS90cmVlL3BhY2thZ2UuaHRtbAppbmRleCA0MTk4ODQ2Li42N2ViMjlhIDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL3RyZWUvcGFja2FnZS5odG1sCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvdHJlZS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkVudmlzYWdlIFRvb2wgQXBwbGljYXRpb24gVHJlZS48L2gyPgpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS91dGlsL3BhY2thZ2UuaHRtbCBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZW52aXNhZ2UvdXRpbC9wYWNrYWdlLmh0bWwKaW5kZXggYTAzZWY2Yi4uYzZiMzk1NSAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vamF2YS9vcmcvcWk0ai9lbnZpc2FnZS91dGlsL3BhY2thZ2UuaHRtbAorKysgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2VudmlzYWdlL3V0aWwvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5FbnZpc2FnZSBUb29sIFV0aWxpdGllcy48L2gyPgpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL0VudmlzYWdlRnJhbWUucHJvcGVydGllcyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9FbnZpc2FnZUZyYW1lLnByb3BlcnRpZXMKaW5kZXggZjc4YTE5Yy4uNjM5MjU4YiAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL0VudmlzYWdlRnJhbWUucHJvcGVydGllcworKysgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvRW52aXNhZ2VGcmFtZS5wcm9wZXJ0aWVzCkBAIC0xICsxLDE2IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBBcHBsaWNhdGlvbi5UaXRsZT1RaTRKIEVudmlzYWdlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9BUElQYW5lLnByb3BlcnRpZXMgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0FQSVBhbmUucHJvcGVydGllcwppbmRleCA1NGVlN2NmLi45ZmFmNzE3IDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0FQSVBhbmUucHJvcGVydGllcworKysgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0FQSVBhbmUucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBTZXJ2aWNlLkNvbHVtbj1TZXJ2aWNlCiBNb2R1bGUuQ29sdW1uPU1vZHVsZQogVmlzaWJpbGl0eS5Db2x1bW49VmlzaWJpbGl0eQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvRGVwZW5kZW5jeVBhbmUucHJvcGVydGllcyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvRGVwZW5kZW5jeVBhbmUucHJvcGVydGllcwppbmRleCA1NDY3Y2MyLi43MTAzYWM1IDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0RlcGVuZGVuY3lQYW5lLnByb3BlcnRpZXMKKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9EZXBlbmRlbmN5UGFuZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIENUTF9DbGFzc05hbWUuVGV4dCA9IENsYXNzIE5hbWU6CiBDVExfT3B0aW9uYWwuVGV4dCA9IE9wdGlvbmFsOgogQ1RMX0Fubm90YXRpb24uVGV4dCA9IEFubm90YXRpb246CmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0RldGFpbE1vZGVsUGFuZS5wcm9wZXJ0aWVzIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9EZXRhaWxNb2RlbFBhbmUucHJvcGVydGllcwppbmRleCA1MTBmMjkxLi5lNDYxYTRhIDEwMDY0NAotLS0gYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0RldGFpbE1vZGVsUGFuZS5wcm9wZXJ0aWVzCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvRGV0YWlsTW9kZWxQYW5lLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogQ1RMX0dlbmVyYWxUYWIuVGV4dCA9IEdlbmVyYWwKIENUTF9NZXRob2RUYWIuVGV4dCA9IE1ldGhvZHMKIENUTF9TdGF0ZVRhYi5UZXh0ID0gU3RhdGVzCmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0dlbmVyYWxQYW5lLnByb3BlcnRpZXMgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0dlbmVyYWxQYW5lLnByb3BlcnRpZXMKaW5kZXggNjgzNzNlYi4uODEwNGJkZiAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9HZW5lcmFsUGFuZS5wcm9wZXJ0aWVzCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvR2VuZXJhbFBhbmUucHJvcGVydGllcwpAQCAtMSwyICsxLDE3IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBOYW1lLkNvbHVtbj1OYW1lCiBWYWx1ZS5Db2x1bW49VmFsdWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0ltcG9ydGVkQnlQYW5lLnByb3BlcnRpZXMgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL0ltcG9ydGVkQnlQYW5lLnByb3BlcnRpZXMKaW5kZXggNzQ0MTBlOS4uMjBlZGI4YyAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9JbXBvcnRlZEJ5UGFuZS5wcm9wZXJ0aWVzCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvSW1wb3J0ZWRCeVBhbmUucHJvcGVydGllcwpAQCAtMSwyICsxLDE3IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBDVExfTmFtZS5UZXh0PU5hbWU6CiBDVExfQ2xhc3MuVGV4dD1DbGFzczoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL01ldGhvZFBhbmUucHJvcGVydGllcyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvTWV0aG9kUGFuZS5wcm9wZXJ0aWVzCmluZGV4IDA0NTkzM2UuLmM0NGMzOWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvTWV0aG9kUGFuZS5wcm9wZXJ0aWVzCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvTWV0aG9kUGFuZS5wcm9wZXJ0aWVzCkBAIC0xLDIgKzEsMTcgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIElDT05fUHVibGljPXB1YmxpYy5wbmcKIElDT05fUHJpdmF0ZT1wcml2YXRlLnBuZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvU1BJUGFuZS5wcm9wZXJ0aWVzIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TUElQYW5lLnByb3BlcnRpZXMKaW5kZXggNzAyYTIyNC4uOGY5ODAxMSAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TUElQYW5lLnByb3BlcnRpZXMKKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TUElQYW5lLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogRGVwZW5kZW5jeS5Db2x1bW49RGVwZW5kZW5jeQogTW9kdWxlLkNvbHVtbj1Nb2R1bGUKIExheWVyLkNvbHVtbj1MYXllcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvU2VydmljZUNvbmZpZ3VyYXRpb25QYW5lLnByb3BlcnRpZXMgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL1NlcnZpY2VDb25maWd1cmF0aW9uUGFuZS5wcm9wZXJ0aWVzCmluZGV4IDBlY2I4MWEuLjMyMjlhMTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvU2VydmljZUNvbmZpZ3VyYXRpb25QYW5lLnByb3BlcnRpZXMKKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TZXJ2aWNlQ29uZmlndXJhdGlvblBhbmUucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBDVExfTmFtZS5UZXh0PU5hbWU6CiBDVExfQ2xhc3MuVGV4dD1DbGFzczoKIENUTF9UeXBlLlRleHQ9VHlwZToKZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvU2VydmljZVVzYWdlUGFuZS5wcm9wZXJ0aWVzIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TZXJ2aWNlVXNhZ2VQYW5lLnByb3BlcnRpZXMKaW5kZXggZjJmNTlhMi4uYTZhZGNlMCAxMDA2NDQKLS0tIGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TZXJ2aWNlVXNhZ2VQYW5lLnByb3BlcnRpZXMKKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TZXJ2aWNlVXNhZ2VQYW5lLnByb3BlcnRpZXMKQEAgLTEsMyArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwogT3duZXIuQ29sdW1uPU93bmVyCiBVc2FnZS5Db2x1bW49VXNhZ2UKIEFubm90YXRpb24uQ29sdW1uPUFubm90YXRpb24KZGlmZiAtLWdpdCBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvU3RhdGVQYW5lLnByb3BlcnRpZXMgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvZGV0YWlsL1N0YXRlUGFuZS5wcm9wZXJ0aWVzCmluZGV4IDA0NTkzM2UuLmM0NGMzOWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS9kZXRhaWwvU3RhdGVQYW5lLnByb3BlcnRpZXMKKysrIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL2RldGFpbC9TdGF0ZVBhbmUucHJvcGVydGllcwpAQCAtMSwyICsxLDE3IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBJQ09OX1B1YmxpYz1wdWJsaWMucG5nCiBJQ09OX1ByaXZhdGU9cHJpdmF0ZS5wbmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvdHJlZS9UcmVlTW9kZWxDZWxsUmVuZGVyZXIucHJvcGVydGllcyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS90cmVlL1RyZWVNb2RlbENlbGxSZW5kZXJlci5wcm9wZXJ0aWVzCmluZGV4IDFmNjE5MTAuLmI2OTQzNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS90cmVlL1RyZWVNb2RlbENlbGxSZW5kZXJlci5wcm9wZXJ0aWVzCisrKyBiL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS90cmVlL1RyZWVNb2RlbENlbGxSZW5kZXJlci5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIElDT05fQXBwbGljYXRpb249YXBwbGljYXRpb24ucG5nCiBJQ09OX0xheWVyPWxheWVyLnBuZwogSUNPTl9Nb2R1bGU9bW9kdWxlLnBuZwpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL3RyZWUvVHJlZU1vZGVsUGFuZS5wcm9wZXJ0aWVzIGIvdG9vbHMvZW52aXNhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL2VudmlzYWdlL3RyZWUvVHJlZU1vZGVsUGFuZS5wcm9wZXJ0aWVzCmluZGV4IGI0Y2E1YzQuLjhjZWRiNDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmlzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9lbnZpc2FnZS90cmVlL1RyZWVNb2RlbFBhbmUucHJvcGVydGllcworKysgYi90b29scy9lbnZpc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovZW52aXNhZ2UvdHJlZS9UcmVlTW9kZWxQYW5lLnByb3BlcnRpZXMKQEAgLTEgKzEsMTYgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIENUTF9WaWV3QXMuVGV4dCA9IFZpZXcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tb2RlbC1kZXRhaWwvYnVpbGQuZ3JhZGxlIGIvdG9vbHMvbW9kZWwtZGV0YWlsL2J1aWxkLmdyYWRsZQppbmRleCAzZDIwN2ZmLi4yODc5MzcxIDEwMDY0NAotLS0gYS90b29scy9tb2RlbC1kZXRhaWwvYnVpbGQuZ3JhZGxlCisrKyBiL3Rvb2xzL21vZGVsLWRldGFpbC9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiRGV0YWlsbGVkIE1vZGVsIG9mIGEgUWk0aiBBcHBsaWNhdGlvbiBTdHJ1Y3R1cmUuIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogTW9kZWwgRGV0YWlsIiB9fQorZGVzY3JpcHRpb24gPSAiRGV0YWlsbGVkIE1vZGVsIG9mIGEgQXBhY2hlIFplc3TihKIgQXBwbGljYXRpb24gU3RydWN0dXJlLiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIE1vZGVsIERldGFpbCIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvbW9kZWwtZGV0YWlsL2Rldi1zdGF0dXMueG1sIGIvdG9vbHMvbW9kZWwtZGV0YWlsL2Rldi1zdGF0dXMueG1sCmluZGV4IGM4NDdhOWYuLjQ0NThiYmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21vZGVsLWRldGFpbC9kZXYtc3RhdHVzLnhtbAorKysgYi90b29scy9tb2RlbC1kZXRhaWwvZGV2LXN0YXR1cy54bWwKQEAgLTEsNCArMSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8bW9kdWxlIHhtbG5zPSJodHRwOi8vd3d3LnFpNGoub3JnL3NjaGVtYXMvMjAwOC9kZXYtc3RhdHVzLzEiCiAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5xaTRqLm9yZy9zY2hlbWFzLzIwMDgvZGV2LXN0YXR1cy8xCmRpZmYgLS1naXQgYS90b29scy9tb2RlbC1kZXRhaWwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9tb2RlbC9kZXNjcmlwdG9yL3BhY2thZ2UuaHRtbCBiL3Rvb2xzL21vZGVsLWRldGFpbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL21vZGVsL2Rlc2NyaXB0b3IvcGFja2FnZS5odG1sCmluZGV4IGNlNjE5MzAuLjRlY2UzNjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21vZGVsLWRldGFpbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL21vZGVsL2Rlc2NyaXB0b3IvcGFja2FnZS5odG1sCisrKyBiL3Rvb2xzL21vZGVsLWRldGFpbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL21vZGVsL2Rlc2NyaXB0b3IvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGh0bWw+CiAgICAgPGJvZHk+CiAgICAgICAgIDxoMj5EZXRhaWxsZWQgQXBwbGljYXRpb24gTW9kZWwgRGVzY3JpcHRvcnMuPC9oMj4KZGlmZiAtLWdpdCBhL3Rvb2xzL21vZGVsLWRldGFpbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL21vZGVsL3V0aWwvcGFja2FnZS5odG1sIGIvdG9vbHMvbW9kZWwtZGV0YWlsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvbW9kZWwvdXRpbC9wYWNrYWdlLmh0bWwKaW5kZXggNTAwYjY1MC4uNDMwYmI4ZiAxMDA2NDQKLS0tIGEvdG9vbHMvbW9kZWwtZGV0YWlsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvbW9kZWwvdXRpbC9wYWNrYWdlLmh0bWwKKysrIGIvdG9vbHMvbW9kZWwtZGV0YWlsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvbW9kZWwvdXRpbC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8aHRtbD4KICAgICA8Ym9keT4KICAgICAgICAgPGgyPkRldGFpbGxlZCBBcHBsaWNhdGlvbiBNb2RlbCBVdGlsaXRpZXMuPC9oMj4KZGlmZiAtLWdpdCBhL3Rvb2xzL3FpZGVhL1RPRE8gYi90b29scy9xaWRlYS9UT0RPCmluZGV4IDA4MDcwODkuLjM5YjE2N2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3FpZGVhL1RPRE8KKysrIGIvdG9vbHMvcWlkZWEvVE9ETwpAQCAtMSw1ICsxLDQgQEAKIG8gQWRkIERpYWdyYW0KLSAgbyBMb29rIGF0IGNvbS5pbnRlbGxpai5zdHJ1dHMuZGlhZ3JhbS5TdHJ1dHNHcmFwaEVkaXRvcgogbyBGaWxlIHRlbXBsYXRlIGZvcgogICBvIEdlbmVyaWMgQ29uY2VybgogICBvIENvbmNlcm4KZGlmZiAtLWdpdCBhL3Rvb2xzL3FpZGVhL2J1aWxkLmdyYWRsZSBiL3Rvb2xzL3FpZGVhL2J1aWxkLmdyYWRsZQppbmRleCAyNmNlNWI2Li41NTlhY2RiIDEwMDY0NAotLS0gYS90b29scy9xaWRlYS9idWlsZC5ncmFkbGUKKysrIGIvdG9vbHMvcWlkZWEvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIkludGVsbGlKIElERUEgUGx1Z2luIGZvciBRaTRqIGRldmVsb3BtZW50LiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIElERUEgcGx1Z2luIiB9fQorZGVzY3JpcHRpb24gPSAiSW50ZWxsaUogSURFQSBQbHVnaW4gZm9yIEFwYWNoZSBaZXN04oSiIGRldmVsb3BtZW50LiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIElERUEgcGx1Z2luIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCmRpZmYgLS1naXQgYS90b29scy9xaWRlYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2lkZS9wbHVnaW4vaWRlYS9jb21tb24vZmFjZXQvUWk0akZhY2V0VHlwZS5qYXZhIGIvdG9vbHMvcWlkZWEvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pZGUvcGx1Z2luL2lkZWEvY29tbW9uL2ZhY2V0L1FpNGpGYWNldFR5cGUuamF2YQppbmRleCBkYjZjYzA2Li5hOTBlY2VjIDEwMDY0NAotLS0gYS90b29scy9xaWRlYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2lkZS9wbHVnaW4vaWRlYS9jb21tb24vZmFjZXQvUWk0akZhY2V0VHlwZS5qYXZhCisrKyBiL3Rvb2xzL3FpZGVhL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaWRlL3BsdWdpbi9pZGVhL2NvbW1vbi9mYWNldC9RaTRqRmFjZXRUeXBlLmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogICAgIHB1YmxpYyBRaTRqRmFjZXRUeXBlKCkKICAgICB7Ci0gICAgICAgIHN1cGVyKCBJRCwgIlFpNGpGYWNldCIsICJRaTRqIEZhY2V0IiApOworICAgICAgICBzdXBlciggSUQsICJRaTRqRmFjZXQiLCAiWmVzdCBGYWNldCIgKTsKICAgICB9CiAKICAgICBwdWJsaWMgZmluYWwgUWk0akZhY2V0Q29uZmlndXJhdGlvbiBjcmVhdGVEZWZhdWx0Q29uZmlndXJhdGlvbigpCmRpZmYgLS1naXQgYS90b29scy9xaWRlYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2lkZS9wbHVnaW4vaWRlYS9jb21tb24vZmFjZXQvdWkvUWk0akZhY2V0RWRpdG9yVGFiLmphdmEgYi90b29scy9xaWRlYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2lkZS9wbHVnaW4vaWRlYS9jb21tb24vZmFjZXQvdWkvUWk0akZhY2V0RWRpdG9yVGFiLmphdmEKaW5kZXggOTQ1ZjkwOS4uZGU5NmFkZiAxMDA2NDQKLS0tIGEvdG9vbHMvcWlkZWEvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pZGUvcGx1Z2luL2lkZWEvY29tbW9uL2ZhY2V0L3VpL1FpNGpGYWNldEVkaXRvclRhYi5qYXZhCisrKyBiL3Rvb2xzL3FpZGVhL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaWRlL3BsdWdpbi9pZGVhL2NvbW1vbi9mYWNldC91aS9RaTRqRmFjZXRFZGl0b3JUYWIuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgIEBObHMKICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAiUWk0aiI7CisgICAgICAgIHJldHVybiAiWmVzdCI7CiAgICAgfQogCiAgICAgcHVibGljIEpDb21wb25lbnQgY3JlYXRlQ29tcG9uZW50KCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3FpZGVhL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaWRlL3BsdWdpbi9pZGVhL2NvbmNlcm5zL2FjdGlvbnMvY3JlYXRlL0NyZWF0ZUNvbmNlcm5Gcm9tTWl4aW5UeXBlT3JDb21wb3NpdGVBY3Rpb24uamF2YSBiL3Rvb2xzL3FpZGVhL3NyYy9tYWluL2phdmEvb3JnL3FpNGovaWRlL3BsdWdpbi9pZGVhL2NvbmNlcm5zL2FjdGlvbnMvY3JlYXRlL0NyZWF0ZUNvbmNlcm5Gcm9tTWl4aW5UeXBlT3JDb21wb3NpdGVBY3Rpb24uamF2YQppbmRleCAzMWE1MTkwLi5iNzYyZTNiIDEwMDY0NAotLS0gYS90b29scy9xaWRlYS9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2lkZS9wbHVnaW4vaWRlYS9jb25jZXJucy9hY3Rpb25zL2NyZWF0ZS9DcmVhdGVDb25jZXJuRnJvbU1peGluVHlwZU9yQ29tcG9zaXRlQWN0aW9uLmphdmEKKysrIGIvdG9vbHMvcWlkZWEvc3JjL21haW4vamF2YS9vcmcvcWk0ai9pZGUvcGx1Z2luL2lkZWEvY29uY2VybnMvYWN0aW9ucy9jcmVhdGUvQ3JlYXRlQ29uY2VybkZyb21NaXhpblR5cGVPckNvbXBvc2l0ZUFjdGlvbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmlkZS5wbHVnaW4uaWRlYS5jb25jZXJucy5hY3Rpb25zLmNyZWF0ZTsKIAogaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRGlyZWN0b3J5OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3BsdWdpbi54bWwgYi90b29scy9xaWRlYS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvcGx1Z2luLnhtbAppbmRleCA3YzVkZmI4Li41YTRhNmU2IDEwMDY0NAotLS0gYS90b29scy9xaWRlYS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvcGx1Z2luLnhtbAorKysgYi90b29scy9xaWRlYS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvcGx1Z2luLnhtbApAQCAtMSw4ICsxLDI0IEBACiA8IURPQ1RZUEUgaWRlYS1wbHVnaW4gUFVCTElDICJQbHVnaW4vRFREIiAiaHR0cDovL3BsdWdpbnMuaW50ZWxsaWoubmV0L3BsdWdpbi5kdGQiPgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGlkZWEtcGx1Z2luPgogICA8aWQ+b3JnLnFpNGo8L2lkPgogICA8bmFtZT5xaWRlYTwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPlFpNGogaWRlYSBwbHVnaW48L2Rlc2NyaXB0aW9uPgorICA8ZGVzY3JpcHRpb24+QXBhY2hlIFplc3TihKIgaWRlYSBwbHVnaW48L2Rlc2NyaXB0aW9uPgogICA8dmVyc2lvbj4wLjE8L3ZlcnNpb24+CiAgIDx2ZW5kb3I+Y29kZWRyYWdvbnM8L3ZlbmRvcj4KICAgPGlkZWEtdmVyc2lvbiBzaW5jZS1idWlsZD0iODAwMCIvPgpAQCAtMTgsMTQgKzM0LDE0IEBACiAgIDxhY3Rpb25zPgogICAgIDxhY3Rpb24gaWQ9IkNyZWF0ZUNvbmNlcm5Gcm9tTWl4aW5UeXBlT3JDb21wb3NpdGVBY3Rpb24iCiAgICAgICAgICAgICBjbGFzcz0ib3JnLnFpNGouaWRlLnBsdWdpbi5pZGVhLmNvbmNlcm5zLmFjdGlvbnMuY3JlYXRlLkNyZWF0ZUNvbmNlcm5Gcm9tTWl4aW5UeXBlT3JDb21wb3NpdGVBY3Rpb24iCi0gICAgICAgICAgICB0ZXh0PSJOZXcgQ29uY2VybiIgZGVzY3JpcHRpb249IkNyZWF0ZSBuZXcgUWk0aiBjb25jZXJuIj4KKyAgICAgICAgICAgIHRleHQ9Ik5ldyBDb25jZXJuIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIG5ldyBaZXN04oSiIGNvbmNlcm4iPgogICAgICAgPGFkZC10by1ncm91cCBncm91cC1pZD0iQ29kZU1lbnUiIGFuY2hvcj0ibGFzdCIvPgogICAgIDwvYWN0aW9uPgogCi0gICAgPGdyb3VwIGlkPSJRaTRqIiBjbGFzcz0ib3JnLnFpNGouaWRlLnBsdWdpbi5pZGVhLmNvbW1vbi5hY3Rpb25zLlFpNGpDcmVhdGVBY3Rpb25Hcm91cCIgdGV4dD0iUWk0aiI+Ci0gICAgICA8YWN0aW9uIGlkPSJRaTRqLk5ld0NvbmNlcm5PZiIKKyAgICA8Z3JvdXAgaWQ9Ilplc3QiIGNsYXNzPSJvcmcucWk0ai5pZGUucGx1Z2luLmlkZWEuY29tbW9uLmFjdGlvbnMuUWk0akNyZWF0ZUFjdGlvbkdyb3VwIiB0ZXh0PSJaZXN04oSiIj4KKyAgICAgIDxhY3Rpb24gaWQ9Ilplc3QuTmV3Q29uY2Vybk9mIgogICAgICAgICAgICAgICBjbGFzcz0ib3JnLnFpNGouaWRlLnBsdWdpbi5pZGVhLmNvbmNlcm5zLmFjdGlvbnMuY3JlYXRlLmluUGFja2FnZS5DcmVhdGVDb25jZXJuT2ZJblBhY2thZ2VBY3Rpb24iCi0gICAgICAgICAgICAgIHRleHQ9Ik5ldyBDb25jZXJuIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIG5ldyBRaTRqIGNvbmNlcm4iPgorICAgICAgICAgICAgICB0ZXh0PSJOZXcgQ29uY2VybiIgZGVzY3JpcHRpb249IkNyZWF0ZSBuZXcgWmVzdCBjb25jZXJuIj4KICAgICAgIDwvYWN0aW9uPgogICAgICAgPGFkZC10by1ncm91cCBncm91cC1pZD0iTmV3R3JvdXAiIGFuY2hvcj0ibGFzdCIvPgogICAgIDwvZ3JvdXA+CmRpZmYgLS1naXQgYS90b29scy9xaWRlYS9zcmMvbWFpbi9yZXNvdXJjZXMvZmlsZVRlbXBsYXRlcy9qMmVlL0dlbmVyaWNDb25jZXJuT2YuamF2YS5odG1sIGIvdG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzL2ZpbGVUZW1wbGF0ZXMvajJlZS9HZW5lcmljQ29uY2Vybk9mLmphdmEuaHRtbAppbmRleCAzYzlmY2Y1Li4xMGVhOWU4IDEwMDY0NAotLS0gYS90b29scy9xaWRlYS9zcmMvbWFpbi9yZXNvdXJjZXMvZmlsZVRlbXBsYXRlcy9qMmVlL0dlbmVyaWNDb25jZXJuT2YuamF2YS5odG1sCisrKyBiL3Rvb2xzL3FpZGVhL3NyYy9tYWluL3Jlc291cmNlcy9maWxlVGVtcGxhdGVzL2oyZWUvR2VuZXJpY0NvbmNlcm5PZi5qYXZhLmh0bWwKQEAgLTEsNiArMSwyMiBAQAogPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CiA8aHRtbD4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxib2R5PgogPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgYm9yZGVyY29sb3I9IiMxMTExMTEiPgogICAgIDx0cj4KZGlmZiAtLWdpdCBhL3Rvb2xzL3FpZGVhL3NyYy9tYWluL3Jlc291cmNlcy9pbnNwZWN0aW9uRGVzY3JpcHRpb25zL0NvbmNlcm5zQW5ub3RhdGlvbkRlY2xhcmVkQ29ycmVjdGx5SW5zcGVjdGlvbi5odG1sIGIvdG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzL2luc3BlY3Rpb25EZXNjcmlwdGlvbnMvQ29uY2VybnNBbm5vdGF0aW9uRGVjbGFyZWRDb3JyZWN0bHlJbnNwZWN0aW9uLmh0bWwKaW5kZXggZTdkN2UwNy4uNWQ4NWU2YSAxMDA2NDQKLS0tIGEvdG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzL2luc3BlY3Rpb25EZXNjcmlwdGlvbnMvQ29uY2VybnNBbm5vdGF0aW9uRGVjbGFyZWRDb3JyZWN0bHlJbnNwZWN0aW9uLmh0bWwKKysrIGIvdG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzL2luc3BlY3Rpb25EZXNjcmlwdGlvbnMvQ29uY2VybnNBbm5vdGF0aW9uRGVjbGFyZWRDb3JyZWN0bHlJbnNwZWN0aW9uLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWw+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Ym9keT4KIDxmb250IGZhY2U9InZlcmRhbmEiIHNpemU9Ii0xIj5UaGlzIGluc3BlY3Rpb24gcmVwb3J0cyBhbnkgQENvbmNlcm5zIGRlY2xhcmF0aW9ucyB2YWx1ZSB0aGF0IGRvZXMgbm90IGltcGxlbWVudAogICAgIFtvcmcucWk0ai5jb21wb3NpdGUuQ29uY2Vybk9mXSBjbGFzcy4KZGlmZiAtLWdpdCBhL3Rvb2xzL3FpZGVhL3NyYy9tYWluL3Jlc291cmNlcy9pbnRlbnRpb25EZXNjcmlwdGlvbnMvQWRkQ29uY2Vybk9uVHlwZS9kZXNjcmlwdGlvbi5odG1sIGIvdG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzL2ludGVudGlvbkRlc2NyaXB0aW9ucy9BZGRDb25jZXJuT25UeXBlL2Rlc2NyaXB0aW9uLmh0bWwKaW5kZXggNGVkOTJlMi4uNTFmNDhmOSAxMDA2NDQKLS0tIGEvdG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzL2ludGVudGlvbkRlc2NyaXB0aW9ucy9BZGRDb25jZXJuT25UeXBlL2Rlc2NyaXB0aW9uLmh0bWwKKysrIGIvdG9vbHMvcWlkZWEvc3JjL21haW4vcmVzb3VyY2VzL2ludGVudGlvbkRlc2NyaXB0aW9ucy9BZGRDb25jZXJuT25UeXBlL2Rlc2NyaXB0aW9uLmh0bWwKQEAgLTEsNCArMSwyMCBAQAogPGh0bWw+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Ym9keT4KIDxmb250IGZhY2U9InZlcmRhbmEiIHNpemU9Ii0xIj4KICAgICBUaGlzIGludGVudGlvbiBhZGQgYSBjb25jZXJuIGFubm90YXRpb24uCmRpZmYgLS1naXQgYS90b29scy9xaWRlYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovaWRlL3BsdWdpbi9pZGVhL2NvbW1vbi9yZXNvdXJjZS9RaTRqUmVzb3VyY2VCdW5kbGUucHJvcGVydGllcyBiL3Rvb2xzL3FpZGVhL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9pZGUvcGx1Z2luL2lkZWEvY29tbW9uL3Jlc291cmNlL1FpNGpSZXNvdXJjZUJ1bmRsZS5wcm9wZXJ0aWVzCmluZGV4IGNmODIwMmEuLmNkOGMwN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3FpZGVhL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9pZGUvcGx1Z2luL2lkZWEvY29tbW9uL3Jlc291cmNlL1FpNGpSZXNvdXJjZUJ1bmRsZS5wcm9wZXJ0aWVzCisrKyBiL3Rvb2xzL3FpZGVhL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai9pZGUvcGx1Z2luL2lkZWEvY29tbW9uL3Jlc291cmNlL1FpNGpSZXNvdXJjZUJ1bmRsZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKICMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICMgQ29tbW9uCiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90b29scy9zaGVsbC9idWlsZC5ncmFkbGUgYi90b29scy9zaGVsbC9idWlsZC5ncmFkbGUKaW5kZXggYTNkODlhYy4uMTlkMWVkNyAxMDA2NDQKLS0tIGEvdG9vbHMvc2hlbGwvYnVpbGQuZ3JhZGxlCisrKyBiL3Rvb2xzL3NoZWxsL2J1aWxkLmdyYWRsZQpAQCAtMSw5ICsxLDI4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCiBhcHBseSBwbHVnaW46ICdhcHBsaWNhdGlvbicKIAotZGVzY3JpcHRpb24gPSAiQ29tbWFuZCBsaW5lIHRvb2xzIGZvciBidWlsZGluZyBRaTRqIGFwcGxpY2F0aW9ucy4iCitkZXNjcmlwdGlvbiA9ICJDb21tYW5kIGxpbmUgdG9vbHMgZm9yIGJ1aWxkaW5nIEFwYWNoZSBaZXN04oSiIGFwcGxpY2F0aW9ucy4iCiBtYWluQ2xhc3NOYW1lID0gIm9yZy5xaTRqLnRvb2xzLnNoZWxsLk1haW4iCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIENvbW1hbmQgTGluZSIgfSB9CitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgQ29tbWFuZCBMaW5lIiB9IH0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZSggcHJvamVjdCggIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIiApICkKZGlmZiAtLWdpdCBhL3Rvb2xzL3NoZWxsL3NyYy9iaW4vcWk0aiBiL3Rvb2xzL3NoZWxsL3NyYy9iaW4vcWk0agppbmRleCBkNjc4Y2ZkLi41NDQ1OTViIDEwMDY0NAotLS0gYS90b29scy9zaGVsbC9zcmMvYmluL3FpNGoKKysrIGIvdG9vbHMvc2hlbGwvc3JjL2Jpbi9xaTRqCkBAIC0xLDQgKzEsMTkgQEAKICMhL2Jpbi9zaAogCisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiBqYXZhIC1qYXIgb3JnLnFpNGoudG9vbHMuc2hlbGwtQEB2ZXJzaW9uQEAuamFyICIkQCIKIApkaWZmIC0tZ2l0IGEvdG9vbHMvc2hlbGwvc3JjL2V0Yy90ZW1wbGF0ZXMvZGVmYXVsdHByb2plY3QvcHJvamVjdC5wcm9wZXJ0aWVzIGIvdG9vbHMvc2hlbGwvc3JjL2V0Yy90ZW1wbGF0ZXMvZGVmYXVsdHByb2plY3QvcHJvamVjdC5wcm9wZXJ0aWVzCmluZGV4IGU2OWRlMjkuLmE3NzlkNGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NoZWxsL3NyYy9ldGMvdGVtcGxhdGVzL2RlZmF1bHRwcm9qZWN0L3Byb2plY3QucHJvcGVydGllcworKysgYi90b29scy9zaGVsbC9zcmMvZXRjL3RlbXBsYXRlcy9kZWZhdWx0cHJvamVjdC9wcm9qZWN0LnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNSBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9zaGVsbC9BYnN0cmFjdENvbW1hbmQuamF2YSBiL3Rvb2xzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvc2hlbGwvQWJzdHJhY3RDb21tYW5kLmphdmEKaW5kZXggN2RlNWU0YS4uOWI2NDQxYSAxMDA2NDQKLS0tIGEvdG9vbHMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9zaGVsbC9BYnN0cmFjdENvbW1hbmQuamF2YQorKysgYi90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL0Fic3RyYWN0Q29tbWFuZC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnRvb2xzLnNoZWxsOwogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDb21tYW5kCmRpZmYgLS1naXQgYS90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL0NvbW1hbmQuamF2YSBiL3Rvb2xzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvc2hlbGwvQ29tbWFuZC5qYXZhCmluZGV4IDA0NmRlODUuLmE2ZjBjYzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvc2hlbGwvQ29tbWFuZC5qYXZhCisrKyBiL3Rvb2xzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvc2hlbGwvQ29tbWFuZC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnRvb2xzLnNoZWxsOwogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvc2hlbGwvRmlsZVV0aWxzLmphdmEgYi90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL0ZpbGVVdGlscy5qYXZhCmluZGV4IGUwZjk2YmEuLmNjZDIxZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvc2hlbGwvRmlsZVV0aWxzLmphdmEKKysrIGIvdG9vbHMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9zaGVsbC9GaWxlVXRpbHMuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50b29scy5zaGVsbDsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvc2hlbGwvSGVscE5lZWRlZEV4Y2VwdGlvbi5qYXZhIGIvdG9vbHMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9zaGVsbC9IZWxwTmVlZGVkRXhjZXB0aW9uLmphdmEKaW5kZXggOTk1ZGMwNi4uNzI5MTEyMSAxMDA2NDQKLS0tIGEvdG9vbHMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9zaGVsbC9IZWxwTmVlZGVkRXhjZXB0aW9uLmphdmEKKysrIGIvdG9vbHMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9zaGVsbC9IZWxwTmVlZGVkRXhjZXB0aW9uLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudG9vbHMuc2hlbGw7CiAKIHB1YmxpYyBjbGFzcyBIZWxwTmVlZGVkRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvdG9vbHMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9zaGVsbC9NYWluLmphdmEgYi90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL01haW4uamF2YQppbmRleCA5YTU5NjZkLi5iZTE1ZTI0IDEwMDY0NAotLS0gYS90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL01haW4uamF2YQorKysgYi90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL01haW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50b29scy5zaGVsbDsKIAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CkBAIC0yNiw3ICs0NCw3IEBACiAgICAgewogICAgICAgICBpZiggIWNvbnRhaW5zKCBhcmdzLCAiLXEiICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJRaTRqIC0gQ2xhc3NlcyBhcmUgRGVhZC4gTG9uZyBMaXZlIEludGVyZmFjZXMhIiApOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiWmVzdCAtIENsYXNzZXMgYXJlIERlYWQuIExvbmcgTGl2ZSBJbnRlcmZhY2VzISIgKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgKTsKICAgICAgICAgfQogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMCApCmRpZmYgLS1naXQgYS90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL2NyZWF0ZS9DcmVhdGVQcm9qZWN0LmphdmEgYi90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL2NyZWF0ZS9DcmVhdGVQcm9qZWN0LmphdmEKaW5kZXggMGM4NjRhYi4uOTY2MGM0MiAxMDA2NDQKLS0tIGEvdG9vbHMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9zaGVsbC9jcmVhdGUvQ3JlYXRlUHJvamVjdC5qYXZhCisrKyBiL3Rvb2xzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdG9vbHMvc2hlbGwvY3JlYXRlL0NyZWF0ZVByb2plY3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50b29scy5zaGVsbC5jcmVhdGU7CiAKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvcWk0ai90b29scy9zaGVsbC9oZWxwL0hlbHBDb21tYW5kLmphdmEgYi90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL2hlbHAvSGVscENvbW1hbmQuamF2YQppbmRleCA0NTEzMWQ3Li5lNTA1OGZjIDEwMDY0NAotLS0gYS90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL2hlbHAvSGVscENvbW1hbmQuamF2YQorKysgYi90b29scy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3Rvb2xzL3NoZWxsL2hlbHAvSGVscENvbW1hbmQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50b29scy5zaGVsbC5oZWxwOwogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jYXJnby9idWlsZC5ncmFkbGUgYi90dXRvcmlhbHMvY2FyZ28vYnVpbGQuZ3JhZGxlCmluZGV4IDg3YmJlZjAuLjlhMzAxYmIgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jYXJnby9idWlsZC5ncmFkbGUKKysrIGIvdHV0b3JpYWxzL2NhcmdvL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJUdXRvcmlhbCBvbiBob3cgdG8gY29udmVydCBleGlzdGluZyBhcHBsaWNhdGlvbiBpbnRvIGEgUWk0aiBvbmUsIHN0ZXAtYnktc3RlcC4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBUdXRvcmlhbCAtIENhcmdvIiB9fQorZGVzY3JpcHRpb24gPSAiVHV0b3JpYWwgb24gaG93IHRvIGNvbnZlcnQgZXhpc3RpbmcgYXBwbGljYXRpb24gaW50byBhIEFwYWNoZSBaZXN04oSiIG9uZSwgc3RlcC1ieS1zdGVwLiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIFR1dG9yaWFsIC0gQ2FyZ28iIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jYXJnby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jYXJnby9wYWNrYWdlLmh0bWwgYi90dXRvcmlhbHMvY2FyZ28vc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY2FyZ28vcGFja2FnZS5odG1sCmluZGV4IDAyZWZjOWYuLjdkZDFkZjUgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jYXJnby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jYXJnby9wYWNrYWdlLmh0bWwKKysrIGIvdHV0b3JpYWxzL2NhcmdvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NhcmdvL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxib2R5PgogPGgxPlR1dG9yaWFsIC0gQ2FyZ288L2gxPgogCkBAIC01LDEzICsyMSwxMyBAQAogICAgIEluIEVyaWMgRXZhbnMnIGJvb2sgRG9tYWluIERyaXZlbiBEZXNpZ24sIElTQk4gMC0zMjEtMTI1MjEtNSwgd2UgZmluZCBhIGRvbWFpbiBvcmllbnRlZCBkaXNjdXNzaW9uCiAgICAgYXJvdW5kIGNhcmdvIG1ha2luZyB2b3lhZ2VzIGZyb20gdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGEgZGVzdGluYXRpb24uIFRoZSBkaXNjdXNzaW9uIGluIERERCBpcwogICAgIG5vdCBjb250aW51b3VzLCBzbyB3ZSBuZWVkIHRvIGZpbmQgdGhlIG1hbnkgc25pcHBldHMgdGhyb3VnaG91dCB0aGUgYm9vay4gV2Ugd2lsbCB0cnkgdG8KLSAgICBhZGRyZXNzIGVhY2ggcGllY2UgZm91bmQgaW4gdGhlIGJvb2sgYXMgaXQgYXBwZWFycywgYW5kIGhvdyB0aGF0IGlzIGRlYWx0IHdpdGggaW4gUWk0ai4KKyAgICBhZGRyZXNzIGVhY2ggcGllY2UgZm91bmQgaW4gdGhlIGJvb2sgYXMgaXQgYXBwZWFycywgYW5kIGhvdyB0aGF0IGlzIGRlYWx0IHdpdGggaW4gQXBhY2hlIFplc3TihKIuCiA8L3A+CiAKIDxwPgogICAgIFdlIGhhdmUgY2hvc2VuIHRoZSBDYXJnbyBleGFtcGxlIGFsc28gZHVlIHRvIHRoZSBmYWN0IHRoYXQgTXIgRXZhbnMgdXNlcyB0aGlzIGluIHByZXNlbnRhdGlvbnMKICAgICBhYm91dCBEb21haW4gRHJpdmVuIERlc2lnbiwgYW5kIHRoYXQgaXQgcmVwcmVzZW50cyBleGFjdGx5IHRoZSB0eXBlIG9mIGFwcGxpY2F0aW9ucyB0aGF0IHdlIHRoaW5rCi0gICAgUWk0aiBpcyBtYWRlIGZvci4KKyAgICBaZXN04oSiIGlzIG1hZGUgZm9yLgogPC9wPgogCiA8cD4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jYXJnby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jYXJnby9zdGVwMS9wYWNrYWdlLmh0bWwgYi90dXRvcmlhbHMvY2FyZ28vc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY2FyZ28vc3RlcDEvcGFja2FnZS5odG1sCmluZGV4IDkwN2Y3NzguLmMxOTZlM2YgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jYXJnby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jYXJnby9zdGVwMS9wYWNrYWdlLmh0bWwKKysrIGIvdHV0b3JpYWxzL2NhcmdvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NhcmdvL3N0ZXAxL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxib2R5PgogPGgxPlN0ZXAgMSAtIEV2YW5zICJNYWtpbmcgYSBib29raW5nLiI8L2gxPgogCkBAIC02Niw3ICs4Miw3IEBACiA8cD4KICAgICBOb3csIHdoYXQgd2UgaGF2ZSBkb25lIHNvIGZhciBpcyB0byBqdXN0IHVzZSBwbGFpbiBKYXZhIHRvIGltcGxlbWVudCB0aGUgZGlzY3Vzc2lvbiBvZiBNciBFdmFucycgQ2FyZ28KICAgICBleGFtcGxlIG9mIGRvbWFpbi1kcml2ZW4gZGVzaWduLiBCZWZvcmUgd2UgbW92ZSBvbiB0byBtYWtpbmcgdGhlIG1vZGVsIG1vcmUgY29tcGxleCwgYW5kIGNoYW5naW5nCi0gICAgdGhlIG1vZGVsIGFzIHdlIHVuZGVyc3RhbmQgaXQgYmV0dGVyLCBsZXQncyBmaXJzdCByZWZhY3RvciB0aGlzIGludG8gUWk0aiBhbmQgZGlzY3VzcyB0aGUgaW1tZWRpYXRlCisgICAgdGhlIG1vZGVsIGFzIHdlIHVuZGVyc3RhbmQgaXQgYmV0dGVyLCBsZXQncyBmaXJzdCByZWZhY3RvciB0aGlzIGludG8gWmVzdOKEoiBhbmQgZGlzY3VzcyB0aGUgaW1tZWRpYXRlCiAgICAgZGlmZmVyZW5jZXMuCiA8L3A+CiAKQEAgLTc0LDkgKzkwLDkgQEAKICAgICBTdGVwczsKIDwvcD4KIDxvbD4KLSAgICA8bGk+Q2FyZ28gaGFzIGEgPGk+c2l6ZTwvaT4gcHJvcGVydHkuIFdlIGNoYW5nZSB0aGF0IHRvIHVzZSB0aGUgPGk+UHJvcGVydHk8L2k+IGZlYXR1cmUgaW4gUWk0ai48L2xpPgorICAgIDxsaT5DYXJnbyBoYXMgYSA8aT5zaXplPC9pPiBwcm9wZXJ0eS4gV2UgY2hhbmdlIHRoYXQgdG8gdXNlIHRoZSA8aT5Qcm9wZXJ0eTwvaT4gZmVhdHVyZSBpbiBaZXN04oSiLjwvbGk+CiAgICAgPGxpPlZveWFnZSBsaWtld2lzZSBoYXMgdGhlIDxpPmNhcGFjaXR5PC9pPiBhbmQgPGk+Ym9va2VkQ2FyZ29TaXplPC9pPiBwcm9wZXJ0aWVzLjwvbGk+Ci0gICAgPGxpPlFpNGogZG9lc24ndCBuZWVkIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgQ2FyZ28gYW5kIFZveWFnZSBpbXBsZW1lbnRhdGlvbnMuPC9saT4KKyAgICA8bGk+WmVzdOKEoiBkb2Vzbid0IG5lZWQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBDYXJnbyBhbmQgVm95YWdlIGltcGxlbWVudGF0aW9ucy48L2xpPgogICAgIDxsaT5DYXJnbyBhbmQgVm95YWdlIGFyZSBlbnRpdGllcywgc28gd2UgY3JlYXRlIENhcmdvRW50aXR5IGFuZCBWb3lhZ2VFbnRpdHkgaW50ZXJmYWNlcy48L2xpPgogPC9vbD4KIDwvYm9keT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY2FyZ28vc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY2FyZ28vc3RlcDIvcGFja2FnZS5odG1sIGIvdHV0b3JpYWxzL2NhcmdvL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NhcmdvL3N0ZXAyL3BhY2thZ2UuaHRtbAppbmRleCAwM2Q2MzQwLi5jYWIxZDY4IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY2FyZ28vc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY2FyZ28vc3RlcDIvcGFja2FnZS5odG1sCisrKyBiL3R1dG9yaWFscy9jYXJnby9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jYXJnby9zdGVwMi9wYWNrYWdlLmh0bWwKQEAgLTEsNSArMSwyMSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Ym9keT4KLTxoMT5TdGVwIDIgLSBRaTRqICJNYWtpbmcgYSBib29raW5nLiI8L2gxPgorPGgxPlN0ZXAgMiAtIFplc3TihKIgIk1ha2luZyBhIGJvb2tpbmcuIjwvaDE+CiAKIDxwPgogICAgIExvY2F0aW9uOiBQYWdlIDE3LCAiS25vd2xlZGdlLVJpY2ggRGVzaWduLgpAQCAtOCw3ICsyNCw3IEBACiA8aDI+UmVzdWx0cyBmcm9tIFN0ZXAxPC9oMj4KIDx1bD4KICAgICA8bGk+Rm9yIHRoZSBDYXJnbyBhbmQgVm95YWdlIGludGVyZmFjZXMsIHdlIGhhdmUgaW50cm9kdWNlZCB0aGUgPGk+UHJvcGVydHkmbHQ7RG91YmxlJmd0OzwvaT4uCi0gICAgICAgIDxpPlByb3BlcnR5PC9pPiBpcyBhbiBleHBsaWNpdGx5IHN1cHBvcnRlZCB0eXBlIGluIFFpNGosIHdoaWNoIG1ha2VzIGxpZmUgYSBsb3QgZWFzaWVyCisgICAgICAgIDxpPlByb3BlcnR5PC9pPiBpcyBhbiBleHBsaWNpdGx5IHN1cHBvcnRlZCB0eXBlIGluIFplc3TihKIsIHdoaWNoIG1ha2VzIGxpZmUgYSBsb3QgZWFzaWVyCiAgICAgICAgIGZvciBldmVyeW9uZSBpbnZvbHZlZC4KICAgICA8L2xpPgogICAgIDxsaT5UaGUgU2VxdWVuY2VHZW5lcmF0b3IgaGFzIGNoYW5nZWQgdGhlIG5hbWUgdG8gIkhhc1NlcXVlbmNlIiwgc2luY2UgaXQgZG9lc24ndCBoYW5kbGUgdGhlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9idWlsZC5ncmFkbGUgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9idWlsZC5ncmFkbGUKaW5kZXggYTIxMDZlNS4uNTM0ODQ4YSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvYnVpbGQuZ3JhZGxlCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL2J1aWxkLmdyYWRsZQpAQCAtMSwxMiArMSwyOSBAQAotZGVzY3JpcHRpb24gPSAiQmFzaWMgdHV0b3JpYWwgb24gaG93IHRvIGNvdmVydCBhIHNpbXBsZSAnSGVsbG8gV29ybGQnIGFwcGxpY2F0aW9uIHRvIFFpNGosIHVzaW5nIG1vcmUgYW5kIG1vcmUgZmVhdHVyZXMgZm9yIGVhY2ggc3RlcC4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBUdXRvcmlhbCAtIENvbXBvc2l0ZXMiIH19CitkZXNjcmlwdGlvbiA9ICJCYXNpYyB0dXRvcmlhbCBvbiBob3cgdG8gY292ZXJ0IGEgc2ltcGxlICdIZWxsbyBXb3JsZCcgYXBwbGljYXRpb24gdG8gQXBhY2hlIFplc3TihKIsIHVzaW5nIG1vcmUgYW5kIG1vcmUgZmVhdHVyZXMgZm9yIGVhY2ggc3RlcC4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBUdXRvcmlhbCAtIENvbXBvc2l0ZXMiIH19CiAKIGRlcGVuZGVuY2llcyB7CiAgIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmNvcmU6b3JnLnFpNGouY29yZS5ib290c3RyYXAiKSkKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkuY29uc3RyYWludHMiKSkKLSAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGoubGlicmFyaWVzOm9yZy5xaTRqLmxpYnJhcnkucmRmIikpCi0gIGNvbXBpbGUocHJvamVjdCgiOm9yZy5xaTRqLmxpYnJhcmllczpvcmcucWk0ai5saWJyYXJ5LmxhbmctanJ1YnkiKSkKIAogICB0ZXN0Q29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLnRlc3RzdXBwb3J0IikpCiAgIHRlc3RSdW50aW1lKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUucnVudGltZSIpKQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDEudHh0IGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDEudHh0CmluZGV4IDk4MGMyNmMuLmRmOGNlNWMgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXAxLnR4dAorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwMS50eHQKQEAgLTEsOSArMSwyOCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbdHV0LWNvbXBvc2l0ZXMtc3RlcDEsU3RlcCAxIC0gSW50ZXJmYWNlIFJlZmFjdG9yaW5nXV0KID0gU3RlcCAxIC0gSW50ZXJmYWNlIFJlZmFjdG9yaW5nID0KIAogPT0gSW5pdGlhbCBIZWxsbyBXb3JsZCA9PQogCi1UaGlzIHdob2xlIHR1dG9yaWFsIGRlc2NyaWJlcyBob3cgdG8gc3RlcC1ieS1zdGVwIG1vZGlmeSBhIHR5cGljYWwgSGVsbG9Xb3JsZCAiYXBwbGljYXRpb24iIGludG8gYSBmdWxsLWZsZWRnZWQgUWk0aiAKK1RoaXMgd2hvbGUgdHV0b3JpYWwgZGVzY3JpYmVzIGhvdyB0byBzdGVwLWJ5LXN0ZXAgbW9kaWZ5IGEgdHlwaWNhbCBIZWxsb1dvcmxkICJhcHBsaWNhdGlvbiIgaW50byBhIGZ1bGwtZmxlZGdlZCBaZXN04oSiCiBDb21wb3NpdGUgT3JpZW50ZWQgYXBwbGljYXRpb24uIEhlcmUgaXMgdGhlIGluaXRpYWwgY29kZSBvZiBIZWxsb1dvcmxkLgogCiBbc25pcHBldCxqYXZhXQpAQCAtMTcsNyArMzYsNyBAQAogSW4gdGhpcyBzdGVwIHdlIHN0YXJ0IHdpdGggYSBiYXNpYyBKYXZhIGNsYXNzLCB3aGljaCB3aGVuIGludm9rZWQgd2lsbCBjb25jYXRlbmF0ZSB0aGUgdHdvIHByb3BlcnRpZXMgInBocmFzZSIgCiBhbmQgIm5hbWUiLiBJZiBpbnZva2VkIHdpdGggdGhlIHByb3BlcnRpZXMgc2V0IHRvICJIZWxsbyIgYW5kICJXb3JsZCIgcmVzcGVjdGl2ZWx5IGl0IHdpbGwgaGVuY2UgcmV0dXJuICJIZWxsbyBXb3JsZCIuCiAKLVFpNGogcmVsaWVzIGhlYXZpbHkgb24gdGhlIHVzZSBvZiBpbnRlcmZhY2VzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciBhbiBvYmplY3QgdG8gZXh0ZXJuYWxseSBpbXBsZW1lbnQgYSBudW1iZXIgb2YgCitaZXN04oSiIHJlbGllcyBoZWF2aWx5IG9uIHRoZSB1c2Ugb2YgaW50ZXJmYWNlcy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYW4gb2JqZWN0IHRvIGV4dGVybmFsbHkgaW1wbGVtZW50IGEgbnVtYmVyIG9mCiBpbnRlcmZhY2VzIHdoaWNoIGludGVybmFsbHkgaXMgYmFja2VkIGJ5IGEgbnVtYmVyIG9mIE1peGlucywgc29tZSBvZiB3aGljaCB5b3UgbWF5IGhhdmUgd3JpdHRlbiB5b3Vyc2VsZiwgYW5kIHNvbWUgb2YgCiB3aGljaCBtYXkgaGF2ZSBiZWVuIHJldXNlZC4gVGhpcyBhbHNvIG1ha2VzIGl0IGVhc3kgdG8gaW50cm9kdWNlIE1vZGlmaWVycyAoYWthICJpbnRlcmNlcHRvcnMiLCBha2EgImFkdmljZSIpLCB3aGljaCAKIGFyZSBGcmFnbWVudHMgd2hpY2ggZXhlY3V0ZSBiZWZvcmUgYW5kL29yIGFmdGVyIHRoZSBtZXRob2Qgb24gdGhlIE1peGluIGlzIGludm9rZWQuCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwMi50eHQgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwMi50eHQKaW5kZXggMGQxNGFiYy4uMTI2OGNlMSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDIudHh0CisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXAyLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1t0dXQtY29tcG9zaXRlcy1zdGVwMixTdGVwIDIgLSBDcmVhdGluZyBhIFRyYW5zaWVudCBDb21wb3NpdGVdXQogPSBTdGVwIDIgLSBDcmVhdGluZyBhIFRyYW5zaWVudCBDb21wb3NpdGUgPQogCkBAIC0xMCw4ICsyOSw4IEBACiBmcmFtZXdvcmsgd2lsbCBpbnNwZWN0IHRoZSBpbnRlcmZhY2UgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIFRyYW5zaWVudENvbXBvc2l0ZSBpbnN0YW5jZSBzaG91bGQgbG9vayBsaWtlIGluIHRlcm1zIG9mIAogdXNlZCBGcmFnbWVudHMuCiAKLUluIFFpNGogYWxsIG1ldGhvZCBwYXJhbWV0ZXJzIGFyZSBjb25zaWRlcmVkIG1hbmRhdG9yeSB1bmxlc3MgbWFya2VkIGFzIEBPcHRpb25hbC4gVGhlcmVmb3JlIHlvdSBjYW4gcmVtb3ZlIHRoZSBudWxsIAotY2hlY2tzIGluIHRoZSBNaXhpbi4gSWYgYSBudWxsIHZhbHVlIGlzIHBhc3NlZCBpbiBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gYnkgUWk0ai4KK0luIFplc3TihKIgYWxsIG1ldGhvZCBwYXJhbWV0ZXJzIGFyZSBjb25zaWRlcmVkIG1hbmRhdG9yeSB1bmxlc3MgbWFya2VkIGFzIEBPcHRpb25hbC4gVGhlcmVmb3JlIHlvdSBjYW4gcmVtb3ZlIHRoZSBudWxsCitjaGVja3MgaW4gdGhlIE1peGluLiBJZiBhIG51bGwgdmFsdWUgaXMgcGFzc2VkIGluIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBieSBaZXN04oSiLgogCiBTdGVwcyBmb3IgdGhpcyB0dXRvcmlhbDoKIApkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDMudHh0IGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDMudHh0CmluZGV4IDRkNDRjNDYuLjM1MjI4OTggMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXAzLnR4dAorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwMy50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbdHV0LWNvbXBvc2l0ZXMtc3RlcDMsU3RlcCAzIC0gTWl4aW5zXV0KID0gU3RlcCAzIC0gTWl4aW5zID0KIApkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDQudHh0IGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDQudHh0CmluZGV4IDQ1MGE2NzMuLmQ5NDA0NDMgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXA0LnR4dAorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwNC50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbdHV0LWNvbXBvc2l0ZXMtc3RlcDQsU3RlcCA0IC0gQ29uY2VybnNdXQogPSBTdGVwIDQgLSBDb25jZXJucyA9CiAKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXA1LnR4dCBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXA1LnR4dAppbmRleCBlYjQ5Yjk0Li4wNTRkMWFkIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwNS50eHQKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDUudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW3R1dC1jb21wb3NpdGVzLXN0ZXA1LFN0ZXAgNSAtIENvbnN0cmFpbnRzXV0KID0gU3RlcCA1IC0gQ29uc3RyYWludHMgPQogCkBAIC04LDcgKzI3LDcgQEAKIG9wdGlvbmFsLCBpbnRlZ2VyIHJhbmdlcywgc3RyaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGFuZCBzbyBvbiwgY2Fubm90IGJlIGV4cHJlc3NlZCwgYW5kIHNvIHdlIGhhdmUgdG8gcHV0IHRoaXMgaW50bwogSmF2YWRvYywgYW5kIHRoZW4gbWFudWFsbHkgYWRkIHRoZXNlIGNoZWNrcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MuCiAKLUluIFFpNGogdGhlcmUgaXMgdGhlIG9wdGlvbiB0byB1c2UgQ29uc3RyYWludHMsIHdoaWNoIGFyZSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcGFyYW1ldGVycy4gVGhpcyBpcyBpbXBsZW1lbnRlZAorSW4gWmVzdOKEoiB0aGVyZSBpcyB0aGUgb3B0aW9uIHRvIHVzZSBDb25zdHJhaW50cywgd2hpY2ggYXJlIGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBwYXJhbWV0ZXJzLiBUaGlzIGlzIGltcGxlbWVudGVkCiBieSBoYXZpbmcgYW4gYW5ub3RhdGlvbiB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoZSBDb25zdHJhaW50IGRvZXMsIGFuZCB0aGVuIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIHRoYXQgY2hlY2tzIHdoZXRoZXIgYQogc3BlY2lmaWMgdmFsdWUgZnVsZmlsbHMgdGhlIENvbnN0cmFpbnQgb3Igbm90LgogCkBAIC0xNiw4ICszNSw4IEBACiBpbnRyb2R1Y2UgYSBuZXcgZGVwZW5kZW5jeSB0byB0aGUgPDxsaWJyYXJ5LWNvbnN0cmFpbnRzPj4sIHdoZXJlIGFsbCB0aGUgY29uc3RyYWludCByZWxhdGVkIGNsYXNzZXMgcmVzaWRlLiBTbwogdXBkYXRlIHlvdXIgY2xhc3NwYXRoIHNldHRpbmdzIGFjY29yZGluZ2x5LgogCi1UaGVyZSBhcmUgYSBudW1iZXIgb2YgcHJlLXdyaXR0ZW4gY29uc3RyYWludHMgaW4gUWk0aiB3aGljaCB5b3UgY2FuIHVzZS4gVGhlIG51bGwgY2hlY2sgb2YgdGhlIG9yaWdpbmFsIEhlbGxvV29ybGQKLXZlcnNpb24gaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IGRlZmF1bHQgc2luY2UgUWk0aiBjb25zaWRlcnMgbWV0aG9kIHBhcmFtZXRlcnMgdG8gYmUgbWFuZGF0b3J5IGlmIG5vdCBleHBsaWNpdGx5IG1hcmtlZAorVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHByZS13cml0dGVuIGNvbnN0cmFpbnRzIGluIFplc3TihKIgd2hpY2ggeW91IGNhbiB1c2UuIFRoZSBudWxsIGNoZWNrIG9mIHRoZSBvcmlnaW5hbCBIZWxsb1dvcmxkCit2ZXJzaW9uIGlzIGFscmVhZHkgaGFuZGxlZCBieSBkZWZhdWx0IHNpbmNlIFplc3TihKIgY29uc2lkZXJzIG1ldGhvZCBwYXJhbWV0ZXJzIHRvIGJlIG1hbmRhdG9yeSBpZiBub3QgZXhwbGljaXRseSBtYXJrZWQKIHdpdGggdGhlIEBPcHRpb25hbCBhbm5vdGF0aW9uLiBTbywgaW5zdGVhZCBvZiBkb2luZyB0aGF0IGNoZWNrIHdlIHdpbGwgYWRkIG90aGVyIGNoZWNrcyB0aGF0IGFyZSB1c2VmdWwgdG8gbWFrZSwgc3VjaAogYXMgZW5zdXJpbmcgdGhhdCB0aGUgcGFzc2VkIGluIHN0cmluZyBpcyBub3QgZW1wdHkuCiAKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXA2LnR4dCBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXA2LnR4dAppbmRleCBlNGUzNTRlLi40YmE4OGU1IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwNi50eHQKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDYudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW3R1dC1jb21wb3NpdGVzLXN0ZXA2LFN0ZXAgNiAtIFNpZGVFZmZlY3RzXV0KID0gU3RlcCA2IC0gU2lkZUVmZmVjdHMgPQogCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwNy50eHQgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwNy50eHQKaW5kZXggMjAwN2VmNC4uYmRlYzU4YSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDcudHh0CisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXA3LnR4dApAQCAtMSwxMyArMSwzMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbdHV0LWNvbXBvc2l0ZXMtc3RlcDcsU3RlcCA3IC0gUHJvcGVydGllc11dCiA9IFN0ZXAgNyAtIFByb3BlcnRpZXMgPQogCiBQcmV2aW91cyBzdGVwIHdhcyA8PHR1dC1jb21wb3NpdGVzLXN0ZXA2Pj4uCiAKLU9uZSBvZiB0aGUgZ29hbHMgb2YgUWk0aiBpcyB0byBnaXZlIHlvdSBkb21haW4gbW9kZWxpbmcgdG9vbHMgdGhhdCBhbGxvdyB5b3UgdG8gbW9yZSBjb25jaXNlbHkgdXNlIGRvbWFpbiBjb25jZXB0cyBpbiAKK09uZSBvZiB0aGUgZ29hbHMgb2YgWmVzdOKEoiBpcyB0byBnaXZlIHlvdSBkb21haW4gbW9kZWxpbmcgdG9vbHMgdGhhdCBhbGxvdyB5b3UgdG8gbW9yZSBjb25jaXNlbHkgdXNlIGRvbWFpbiBjb25jZXB0cyBpbgogY29kZS4gT25lIG9mIHRoZSB0aGluZ3Mgd2UgZG8gcmF0aGVyIG9mdGVuIGlzIG1vZGVsIFByb3BlcnRpZXMgb2Ygb2JqZWN0cyBhcyBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiBCdXQgdGhpcyBpcyBhIHZlcnkgCiB3ZWFrIG1vZGVsLCBhbmQgZG9lcyBub3QgZ2l2ZSB5b3UgYW55IGFjY2VzcyB0byBtZXRhZGF0YSBhYm91dCB0aGUgcHJvcGVydHksIGFuZCBhbHNvIG1ha2VzIGNvbW1vbiB0YXNrcyBsaWtlIFVJIGJpbmRpbmcKIG5vbi10cml2aWFsLiBUaGVyZSBpcyBhbHNvIGEgbG90IG9mIHJlcGV0aXRpb24gb2YgY29kZSwgd2hpY2ggaXMgdW5uZWNlc3NhcnkuIFVzaW5nIEphdmFCZWFucyBjb252ZW50aW9ucyBvbmUgdHlwaWNhbGx5IAotaGF2ZSB0byBoYXZlIGNvZGUgaW4gZml2ZSBwbGFjZXMgZm9yIG9uZSBwcm9wZXJ0eSwgd2hlcmVhcyBpbiBRaTRqIHRoZSBzYW1lIHRoaW5nIGNhbiBiZSBhY2hpZXZlZCB3aXRoIG9uZSBsaW5lIG9mIGNvZGUuCitoYXZlIHRvIGhhdmUgY29kZSBpbiBmaXZlIHBsYWNlcyBmb3Igb25lIHByb3BlcnR5LCB3aGVyZWFzIGluIFplc3TihKIgdGhlIHNhbWUgdGhpbmcgY2FuIGJlIGFjaGlldmVkIHdpdGggb25lIGxpbmUgb2YgY29kZS4KIAogQnV0IGxldHMgc3RhcnQgb3V0IGVhc3kuIFRvIGRlY2xhcmUgYSBwcm9wZXJ0eSB5b3UgaGF2ZSB0byBtYWtlIGEgbWV0aG9kIGluIGEgbWl4aW4gdHlwZSB0aGF0IHJldHVybnMgYSB2YWx1ZSBvZiB0aGUgCiB0eXBlIFByb3BlcnR5LCBhbmQgd2hpY2ggZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycy4gSGVyZSdzIGEgc2ltcGxlIGV4YW1wbGU6CkBAIC0yNCwxNCArNDMsMTQgQEAKIHJlZHVjaW5nIFByb3BlcnRpZXMgdG8gb25lLWxpbmVycyEKIAogSW4gdGhlIE1peGluIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUgUHJvcGVydHkgZGVjbGFyYXRpb24geW91IHNob3VsZCBoYXZlIGFuIGluamVjdGlvbiBvZiB0aGUgUHJvcGVydHksIAotd2hpY2ggaXMgY3JlYXRlZCBmb3IgeW91IGJ5IFFpNGouIFRoZSBpbmplY3Rpb24gY2FuIGJlIGRvbmUgaW4gYSBmaWVsZCBsaWtlIHRoaXM6Cit3aGljaCBpcyBjcmVhdGVkIGZvciB5b3UgYnkgWmVzdOKEoi4gVGhlIGluamVjdGlvbiBjYW4gYmUgZG9uZSBpbiBhIGZpZWxkIGxpa2UgdGhpczoKIAogW3NvdXJjZSxqYXZhXQogLS0tLQogQFN0YXRlIFByb3BlcnR5PFN0cmluZz4gbmFtZTsKIC0tLS0KIAotVGhlIFN0YXRlIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFubm90YXRpb24gbWVhbnMgdGhhdCBRaTRqIHdpbGwgaW5qZWN0IHRoZSBQcm9wZXJ0eSBmb3IgeW91LiBUaGUgZmllbGQgaGFzIHRoZSBuYW1lIAorVGhlIFN0YXRlIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFubm90YXRpb24gbWVhbnMgdGhhdCBaZXN04oSiIHdpbGwgaW5qZWN0IHRoZSBQcm9wZXJ0eSBmb3IgeW91LiBUaGUgZmllbGQgaGFzIHRoZSBuYW1lCiAibmFtZSIsIHdoaWNoIG1hdGNoZXMgdGhlIG5hbWUgaW4gdGhlIGludGVyZmFjZSwgYW5kIHRoZXJlZm9yZSB0aGF0IFByb3BlcnR5IGlzIGluamVjdGVkLiBZb3UgY2FuIHRoZW4gaW1wbGVtZW50IHRoZSAKIG1ldGhvZCB0cml2aWFsbHkgYnkganVzdCByZXR1cm5pbmcgdGhlICJuYW1lIiBmaWVsZC4KIApkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDgudHh0IGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDgudHh0CmluZGV4IDMxYTAzMDcuLjkwMjI1Y2UgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXA4LnR4dAorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwOC50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbdHV0LWNvbXBvc2l0ZXMtc3RlcDgsU3RlcCA4IC0gR2VuZXJpYyBNaXhpbnNdXQogPSBTdGVwIDggLSBHZW5lcmljIE1peGlucyA9CiAKQEAgLTE0LDcgKzMzLDcgQEAKIFRyYW5zaWVudENvbXBvc2l0ZSBpbiB0aGlzIGNhc2UpLCB0aGUgbWV0aG9kLCBhbmQgdGhlIGFyZ3VtZW50cy4gVGhlIEZyYWdtZW50IGlzIHRoZW4gYWxsb3dlZCB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZCAKIGFueSB3YXkgaXQgd2FudHMuCiAKLVNpbmNlIGludGVyZmFjZXMgd2l0aCBvbmx5IFByb3BlcnRpZXMgaXMgc3VjaCBhIGNvbW1vbiBjYXNlIFFpNGogYWxyZWFkeSBoYXMgYSBnZW5lcmljIE1peGluIHRoYXQgaW1wbGVtZW50cyB0aGUgCitTaW5jZSBpbnRlcmZhY2VzIHdpdGggb25seSBQcm9wZXJ0aWVzIGlzIHN1Y2ggYSBjb21tb24gY2FzZSBaZXN04oSiIGFscmVhZHkgaGFzIGEgZ2VuZXJpYyBNaXhpbiB0aGF0IGltcGxlbWVudHMgdGhlCiBQcm9wZXJ0aWVzIG1hbmFnZW1lbnQgZGVzY3JpYmVkIGFib3ZlLCBidXQgZm9yIHRoZSBidWlsdGluIFByb3BlcnR5IHR5cGUgaW5zdGVhZCBvZiB0aGUgZ2V0dGVyL3NldHRlciB2YXJpYW50LiBUaGUgCiBjbGFzcyBpcyBhcHRseSBuYW1lZCBQcm9wZXJ0eU1peGluLgogCkBAIC0yNCw3ICs0Myw3IEBACiAKIC0gUmVtb3ZlIHRoZSBIZWxsb1dvcmxkU3RhdGVNaXhpbgogLSBBZGQgYSBHZW5lcmljUHJvcGVydHlNaXhpbiwgYW5kIGhhdmUgaXQgaW1wbGVtZW50IEludm9jYXRpb25IYW5kbGVyCi0tIEluamVjdCAiQFN0YXRlIFN0YXRlSG9sZGVyIHN0YXRlIiBpbiB0aGUgbWl4aW4uIFRoZSBTdGF0ZUhvbGRlciBpbnRlcmZhY2Ugd2lsbCBnaXZlIHlvdSBhY2Nlc3MgdG8gdGhlIFByb3BlcnRpZXMgZm9yIHRoZSBUcmFuc2llbnRDb21wb3NpdGUgd2hpY2ggUWk0aiBtYW5hZ2VzIGZvciB5b3UKKy0gSW5qZWN0ICJAU3RhdGUgU3RhdGVIb2xkZXIgc3RhdGUiIGluIHRoZSBtaXhpbi4gVGhlIFN0YXRlSG9sZGVyIGludGVyZmFjZSB3aWxsIGdpdmUgeW91IGFjY2VzcyB0byB0aGUgUHJvcGVydGllcyBmb3IgdGhlIFRyYW5zaWVudENvbXBvc2l0ZSB3aGljaCBaZXN04oSiIG1hbmFnZXMgZm9yIHlvdQogLSBPbiBjYWxsIHRvIGludm9rZSgpLCBkZWxlZ2F0ZSB0byB0aGUgU3RhdGVIb2xkZXIgaW50ZXJmYWNlIHRvIGdldCB0aGUgUHJvcGVydHkgZm9yIHRoZSBpbnZva2VkIG1ldGhvZAogLSBBZGQgYW4gQEFwcGxpZXNUbyBhbm5vdGF0aW9uIHRvIHRoZSBNaXhpbiBhbmQgaW1wbGVtZW50IHRoZSBBcHBsaWVzVG9GaWx0ZXIgd2l0aCBhIHJ1bGUgdGhhdCBtYXRjaGVzIG9ubHkgbWV0aG9kcyB0aGF0IHJldHVybiBQcm9wZXJ0eSB2YWx1ZXMuCiAtIEFkZCB0aGUgbWl4aW4gdG8gdGhlIFRyYW5zaWVudENvbXBvc2l0ZS4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXA5LnR4dCBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3N0ZXA5LnR4dAppbmRleCA2YzhmOGM0Li42ZTYwNDdmIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy9zdGVwOS50eHQKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3Mvc3RlcDkudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW3R1dC1jb21wb3NpdGVzLXN0ZXA5LFN0ZXAgOSAtIFByaXZhdGUgYW5kIEFic3RyYWN0IE1peGluc11dCiA9IFN0ZXAgOSAtIFByaXZhdGUgYW5kIEFic3RyYWN0IE1peGlucyA9CiAKQEAgLTEyLDcgKzMxLDcgQEAKIGltcGxlbWVudCBhbGwgbWV0aG9kcywgaW5jbHVkaW5nIHRob3NlIGZvdW5kIGluIHRoZSBUcmFuc2llbnRDb21wb3NpdGUgaW50ZXJmYWNlLiBIb3dldmVyLCBzaW5jZSB3ZSBhcmUgb25seSByZWFsbHkgCiBpbnRlcmVzdGVkIGluIGltcGxlbWVudGluZyB0aGUgc2F5KCkgbWV0aG9kIHdlIHdpbGwgbWFyayB0aGlzIGJ5IGRlY2xhcmluZyB0aGF0IHRoZSBNaXhpbiAiaW1wbGVtZW50cyIgdGhlIAogVHJhbnNpZW50Q29tcG9zaXRlIHR5cGUsIGJ1dCBpcyBhbHNvICJhYnN0cmFjdCIuIFRoaXMsIHVzaW5nIHB1cmUgSmF2YSBzZW1hbnRpY3MsIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGF2b2lkIGhhdmluZyB0byAKLWltcGxlbWVudCBhbGwgbWV0aG9kcy4gUWk0aiB3aWxsIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UgZGV0ZWN0IHRoYXQgdGhlIE1peGluIG9ubHkgaGFuZGxlcyB0aGUgc2F5KCkgbWV0aG9kLCAKK2ltcGxlbWVudCBhbGwgbWV0aG9kcy4gWmVzdOKEoiB3aWxsIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UgZGV0ZWN0IHRoYXQgdGhlIE1peGluIG9ubHkgaGFuZGxlcyB0aGUgc2F5KCkgbWV0aG9kLAogYW5kIHRoZXJlZm9yZSBvbmx5IG1hcCBpdCB0byB0aGF0IHNwZWNpZmljIG1ldGhvZC4gSW4gb3JkZXIgdG8gaW5zdGFudGlhdGUgdGhlIE1peGluIGl0IHdpbGwgZ2VuZXJhdGUgYSBzdWJjbGFzcyB3aGljaCAKIGltcGxlbWVudHMgdGhlIHJlbWFpbmluZyBtZXRob2RzIGluIHRoZSBUcmFuc2llbnRDb21wb3NpdGUgdHlwZSwgYXMgbm8tb3BzLiBUaGVzZSB3aWxsIG5ldmVyIGJlIGNhbGxlZCBob3dldmVyLCBhbmQgaXMgCiB0aGVyZSBwdXJlbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGJlaW5nIGFibGUgdG8gaW5zdGFudGlhdGUgdGhlIE1peGluLiBUaGUgTWl4aW4gaXMgY29uc2lkZXJlZCB0byBiZSBhbiBBYnN0cmFjdCBGcmFnbWVudC4KQEAgLTIwLDcgKzM5LDcgQEAKIFRvIGhpZGUgdGhlIHN0YXRlIGZyb20gdGhlIGNsaWVudCB3ZSBuZWVkIHRvIHVzZSB3aGF0IGlzIGNhbGxlZCBQcml2YXRlIE1peGlucy4gQSBQcml2YXRlIE1peGluIGlzIGFueSBtaXhpbiB0aGF0IGlzIAogcmVmZXJlbmNlZCBieSBhbm90aGVyIE1peGluIGJ5IHVzaW5nIHRoZSBAVGhpcyBpbmplY3Rpb24sIGJ1dCB3aGljaCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIFRyYW5zaWVudENvbXBvc2l0ZSB0eXBlLiBBcyAKIGxvbmcgYXMgdGhlcmUgaXMgYSBNaXhpbiBpbXBsZW1lbnRhdGlvbiBkZWNsYXJlZCBmb3IgdGhlIGludGVyZmFjZSBzcGVjaWZpZWQgYnkgdGhlIEBUaGlzIGluamVjdGlvbiBpdCB3aWxsIHdvcmssIHNpbmNlIAotUWk0aiBjYW4ga25vdyBob3cgdG8gaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UuIEJ1dCBzaW5jZSBpdCBpcyBub3QgZXh0ZW5kZWQgYnkgdGhlIFRyYW5zaWVudENvbXBvc2l0ZSB0eXBlIHRoZXJlIGlzIG5vIAorWmVzdOKEoiBjYW4ga25vdyBob3cgdG8gaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UuIEJ1dCBzaW5jZSBpdCBpcyBub3QgZXh0ZW5kZWQgYnkgdGhlIFRyYW5zaWVudENvbXBvc2l0ZSB0eXBlIHRoZXJlIGlzIG5vCiB3YXkgZm9yIGEgdXNlciBvZiB0aGUgVHJhbnNpZW50Q29tcG9zaXRlIHRvIGFjY2VzcyBpdC4gVGhhdCBNaXhpbiBiZWNvbWVzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gVGhpcyBjYW4gYmUgdXNlZCAKIGVpdGhlciBmb3IgZW5jYXBzdWxhdGlvbiBwdXJwb3Nlcywgb3IgZm9yIHJlZmVyZW5jaW5nIHV0aWxpdHkgbWl4aW5zIHRoYXQgaGVscCB0aGUgcmVzdCBvZiB0aGUgY29kZSBpbXBsZW1lbnQgc29tZSAKIGludGVyZmFjZSwgYnV0IHdoaWNoIGl0c2VsZiBzaG91bGQgbm90IGJlIGV4cG9zZWQuCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy90dXQtY29tcG9zaXRlcy50eHQgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvZG9jcy90dXQtY29tcG9zaXRlcy50eHQKaW5kZXggMmY0MDYwYy4uNjA3NzQ2NyAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL2RvY3MvdHV0LWNvbXBvc2l0ZXMudHh0CisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9kb2NzL3R1dC1jb21wb3NpdGVzLnR4dApAQCAtMSwxNSArMSwzNCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbdHV0LWNvbXBvc2l0ZXMsVHJhbnNpZW50IENvbXBvc2l0ZXMgVHV0b3JpYWxdXQogPSBUcmFuc2llbnQgQ29tcG9zaXRlcyBUdXRvcmlhbCA9CiAKIFRJUDogVGhlc2VzIHR1dG9yaWFscyBhcmUgYmFzZWQgb24gYWN0dWFsIGNvZGUgZm91bmQgaW4gdGhlIGB0dXRvcmlhbHMvYCBkaXJlY3Rvcnkgb2YgdGhlCi1odHRwOi8vcWk0ai5vcmcvZG93bmxvYWRzLmh0bWxbUWk0aiBTREsgc291cmNlc10uIFlvdSBzaG91bGQgc3RhcnQgeW91ciBmYXZvcml0ZSBlZGl0b3IgYW5kIGZpbmQgdGhlIGNvZGUgcmVsYXRlZCB0bworaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvZG93bmxvYWQuaHRtbFtaZXN04oSiIFNESyBzb3VyY2VzXS4gWW91IHNob3VsZCBzdGFydCB5b3VyIGZhdm9yaXRlIGVkaXRvciBhbmQgZmluZCB0aGUgY29kZSByZWxhdGVkIHRvCiB0aGlzIHR1dG9yaWFsLCBydW4gaXQgYW5kIHBsYXkgd2l0aCBpdC4KIAogVGhyb3VnaG91dCB0aGlzIHNldCBvZiB0dXRvcmlhbHMgaXQgd2lsbCBiZSBzaG93biBob3cgdG8gY3JlYXRlIGFuZCB3b3JrIHdpdGggQ29tcG9zaXRlcywgd2hpY2gKLWlzIHRoZSBiYXNpYyBlbGVtZW50IGluIFFpNGouIFdlIHdpbGwgcmVmYWN0b3Igb25lIEhlbGxvV29ybGQgY2xhc3MgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHZhcmlvdXMKLWZlYXR1cmVzIGluIFFpNGouIFRoZXNlIHJlZmFjdG9yaW5ncyB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIHJldXNlIHBhcnRzIG9mIHRoZSBjbGFzcywKK2lzIHRoZSBiYXNpYyBlbGVtZW50IGluIFplc3TihKIuIFdlIHdpbGwgcmVmYWN0b3Igb25lIEhlbGxvV29ybGQgY2xhc3MgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHZhcmlvdXMKK2ZlYXR1cmVzIGluIFplc3TihKIuIFRoZXNlIHJlZmFjdG9yaW5ncyB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIHJldXNlIHBhcnRzIG9mIHRoZSBjbGFzcywKIGFuZCBpbnRyb2R1Y2UgbmV3IGZlYXR1cmVzIHdpdGhvdXQgaGF2aW5nIHRvIGNoYW5nZSBleGlzdGluZyBjb2RlLiBXZSB3aWxsIGFsc28gbG9vawotYXQgc29tZSBvZiB0aGUgZXhpc3RpbmcgY2xhc3Nlcywgb3IgRnJhZ21lbnRzLCBhdmFpbGFibGUgaW4gUWk0aiB0aGF0IHlvdSBjYW4gcmV1c2UKK2F0IHNvbWUgb2YgdGhlIGV4aXN0aW5nIGNsYXNzZXMsIG9yIEZyYWdtZW50cywgYXZhaWxhYmxlIGluIFplc3TihKIgdGhhdCB5b3UgY2FuIHJldXNlCiBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIHdyaXRlIGV2ZXJ5dGhpbmcgeW91cnNlbGYuCiAKIC0gPDx0dXQtY29tcG9zaXRlcy1zdGVwMT4+CkBAIC0zMyw3ICs1Miw3IEBACiAKIGluY2x1ZGU6Oi4uLy4uLy4uLy4uL2NvcmUvcnVudGltZS9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQogCi1TZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXFpNGo+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KK1NlZSB0aGUgPDxob3d0by1kZXBlbmQtb24temVzdD4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgogCiA6bGV2ZWxvZmZzZXQ6IDMKIApkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy9wYWNrYWdlLmh0bWwgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3BhY2thZ2UuaHRtbAppbmRleCA3Y2Q0MzBiLi5lYjBiZTYzIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3BhY2thZ2UuaHRtbAorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3BhY2thZ2UuaHRtbApAQCAtMSw0ICsxLDE5IEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Cis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogPGhlYWQ+CiA8L2hlYWQ+CkBAIC04LDEwICsyMywxMCBAQAogPGgyPlRyYW5zaWVudENvbXBvc2l0ZSB0dXRvcmlhbHM8L2gyPgogPHA+CiBUaHJvdWdob3V0IHRoaXMgc2V0IG9mIHR1dG9yaWFscyBpdCB3aWxsIGJlIHNob3duIGhvdyB0byBjcmVhdGUgYW5kIHdvcmsgd2l0aCBUcmFuc2llbnRDb21wb3NpdGVzLCB3aGljaAotaXMgdGhlIGJhc2ljIGVsZW1lbnQgaW4gUWk0ai4gV2Ugd2lsbCByZWZhY3RvciBvbmUgSGVsbG9Xb3JsZCBjbGFzcyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgdmFyaW91cwotZmVhdHVyZXMgaW4gUWk0ai4gVGhlc2UgcmVmYWN0b3JpbmdzIHdpbGwgbWFrZSBpdCBlYXNpZXIgdG8gcmV1c2UgcGFydHMgb2YgdGhlIGNsYXNzLAoraXMgdGhlIGJhc2ljIGVsZW1lbnQgaW4gQXBhY2hlIFplc3TihKIuIFdlIHdpbGwgcmVmYWN0b3Igb25lIEhlbGxvV29ybGQgY2xhc3MgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHZhcmlvdXMKK2ZlYXR1cmVzIGluIFplc3TihKIuIFRoZXNlIHJlZmFjdG9yaW5ncyB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIHJldXNlIHBhcnRzIG9mIHRoZSBjbGFzcywKIGFuZCBpbnRyb2R1Y2UgbmV3IGZlYXR1cmVzIHdpdGhvdXQgaGF2aW5nIHRvIGNoYW5nZSBleGlzdGluZyBjb2RlLiBXZSB3aWxsIGFsc28gbG9vawotYXQgc29tZSBvZiB0aGUgZXhpc3RpbmcgY2xhc3Nlcywgb3IgRnJhZ21lbnRzLCBhdmFpbGFibGUgaW4gUWk0aiB0aGF0IHlvdSBjYW4gcmV1c2UKK2F0IHNvbWUgb2YgdGhlIGV4aXN0aW5nIGNsYXNzZXMsIG9yIEZyYWdtZW50cywgYXZhaWxhYmxlIGluIFplc3TihKIgdGhhdCB5b3UgY2FuIHJldXNlCiBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIHdyaXRlIGV2ZXJ5dGhpbmcgeW91cnNlbGYuCiA8L3A+CiA8cD4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwxL0hlbGxvV29ybGQuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwxL0hlbGxvV29ybGQuamF2YQppbmRleCBlMGM4ZWNjLi45ZTlhYTdmIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMS9IZWxsb1dvcmxkLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEvSGVsbG9Xb3JsZC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsMTsKIAogLy8gU1RBUlQgU05JUFBFVDogaW5pdGlhbApkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEvcGFja2FnZS5odG1sIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEvcGFja2FnZS5odG1sCmluZGV4IDIzZDc3MjUuLmYzNDY1YjggMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwxL3BhY2thZ2UuaHRtbAorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMS9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Ym9keT4KIDxoMT5UdXRvcmlhbCAxIC0gSW50ZXJmYWNlIHJlZmFjdG9yaW5nPC9oMT4KIDxwPgpAQCAtNiw3ICsyMiw3IEBACiBhbmQgIldvcmxkIiByZXNwZWN0aXZlbHkgaXQgd2lsbCBoZW5jZSByZXR1cm4gIkhlbGxvIFdvcmxkIi4KIDwvcD4KIDxwPgotUWk0aiByZWxpZXMgaGVhdmlseSBvbiB0aGUgdXNlIG9mIGludGVyZmFjZXMuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIGFuIG9iamVjdAorWmVzdOKEoiByZWxpZXMgaGVhdmlseSBvbiB0aGUgdXNlIG9mIGludGVyZmFjZXMuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIGFuIG9iamVjdAogdG8gZXh0ZXJuYWxseSBpbXBsZW1lbnQgYSBudW1iZXIgb2YgaW50ZXJmYWNlcyB3aGljaCBpbnRlcm5hbGx5IGlzIGJhY2tlZCBieSBhIG51bWJlcgogb2YgTWl4aW5zLCBzb21lIG9mIHdoaWNoIHlvdSBtYXkgaGF2ZSB3cml0dGVuIHlvdXJzZWxmLCBhbmQgc29tZSBvZiB3aGljaCBtYXkgaGF2ZSBiZWVuCiByZXVzZWQuIFRoaXMgYWxzbyBtYWtlcyBpdCBlYXN5IHRvIGludHJvZHVjZSBNb2RpZmllcnMgKGFrYSAiaW50ZXJjZXB0b3JzIiwgYWthICJhZHZpY2UiKSwKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwxMC9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMTAvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhCmluZGV4IDM1YzNmZDkuLmQ4ZTU0MTYgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwxMC9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEwL0hlbGxvV29ybGRDb21wb3NpdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDEwOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5UcmFuc2llbnRDb21wb3NpdGU7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMTAvSGVsbG9Xb3JsZE1peGluLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMTAvSGVsbG9Xb3JsZE1peGluLmphdmEKaW5kZXggZWI0MjdmMS4uZmMwMDAzYyAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEwL0hlbGxvV29ybGRNaXhpbi5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwxMC9IZWxsb1dvcmxkTWl4aW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDEwOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5UaGlzOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEwL0hlbGxvV29ybGRTdGF0ZS5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEwL0hlbGxvV29ybGRTdGF0ZS5qYXZhCmluZGV4IGUzNzFhMTAuLjdkMmJhNzggMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwxMC9IZWxsb1dvcmxkU3RhdGUuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMTAvSGVsbG9Xb3JsZFN0YXRlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWwxMDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5wcm9wZXJ0eS5Qcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwyL0hlbGxvV29ybGQuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwyL0hlbGxvV29ybGQuamF2YQppbmRleCA3ZGM4ZDA0Li40OTcwYmY4IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMi9IZWxsb1dvcmxkLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDIvSGVsbG9Xb3JsZC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsMjsKIAogLy8gU1RBUlQgU05JUFBFVDogc29sdXRpb24KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwyL0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwyL0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YQppbmRleCBiNjdmNDI0Li5hOWRiOGM0IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMi9IZWxsb1dvcmxkQmVoYXZpb3VyLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDIvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsMjsKIAogLy8gU1RBUlQgU05JUFBFVDogc29sdXRpb24KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwyL0hlbGxvV29ybGRNaXhpbi5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDIvSGVsbG9Xb3JsZE1peGluLmphdmEKaW5kZXggNTNmODM1ZS4uZDZmNDYzYyAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDIvSGVsbG9Xb3JsZE1peGluLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDIvSGVsbG9Xb3JsZE1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWwyOwogCiAvLyBTVEFSVCBTTklQUEVUOiBzb2x1dGlvbgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDIvSGVsbG9Xb3JsZFN0YXRlLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMi9IZWxsb1dvcmxkU3RhdGUuamF2YQppbmRleCA5ODZkOTc5Li4zMjc4OWI4IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMi9IZWxsb1dvcmxkU3RhdGUuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMi9IZWxsb1dvcmxkU3RhdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDI7CiAKIC8vIFNUQVJUIFNOSVBQRVQ6IHNvbHV0aW9uCkBAIC01LDcgKzIzLDcgQEAKIC8qKgogICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgb25seSB0aGUgc3RhdGUKICAqIG9mIHRoZSBIZWxsb1dvcmxkIG9iamVjdC4KLSAqIFRoZSBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGJ5IFFpNGogYXV0b21hdGljYWxseSBpZgorICogVGhlIGV4Y2VwdGlvbnMgd2lsbCBiZSB0aHJvd24gYnkgWmVzdCBhdXRvbWF0aWNhbGx5IGlmCiAgKiBudWxsIGlzIHNlbnQgaW4gYXMgdmFsdWVzLiBUaGUgcGFyYW1ldGVycyB3b3VsZCBoYXZlIHRvIGJlIGRlY2xhcmVkCiAgKiBhcyBAT3B0aW9uYWwgaWYgbnVsbCBpcyBhbGxvd2VkLgogICovCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMi9wYWNrYWdlLmh0bWwgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMi9wYWNrYWdlLmh0bWwKaW5kZXggMTQ4N2FkNy4uY2RlZDFmZSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDIvcGFja2FnZS5odG1sCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwyL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxib2R5PgogPGgxPlR1dG9yaWFsIDIgLSBDcmVhdGluZyBhIENvbXBvc2l0ZTwvaDE+CiA8cD4KQEAgLTEwLDggKzI2LDggQEAKIGxvb2sgbGlrZSBpbiB0ZXJtcyBvZiB1c2VkIEZyYWdtZW50cy4KIDwvcD4KIDxwPgotSW4gUWk0aiBhbGwgbWV0aG9kIHBhcmFtZXRlcnMgYXJlIGNvbnNpZGVyZWQgbWFuZGF0b3J5IHVubGVzcyBtYXJrZWQgYXMgQE9wdGlvbmFsLiBUaGVyZWZvcmUgeW91IGNhbgotcmVtb3ZlIHRoZSBudWxsIGNoZWNrcyBpbiB0aGUgTWl4aW4uIElmIGEgbnVsbCB2YWx1ZSBpcyBwYXNzZWQgaW4gYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGJ5IFFpNGouCitJbiBaZXN04oSiIGFsbCBtZXRob2QgcGFyYW1ldGVycyBhcmUgY29uc2lkZXJlZCBtYW5kYXRvcnkgdW5sZXNzIG1hcmtlZCBhcyBAT3B0aW9uYWwuIFRoZXJlZm9yZSB5b3UgY2FuCityZW1vdmUgdGhlIG51bGwgY2hlY2tzIGluIHRoZSBNaXhpbi4gSWYgYSBudWxsIHZhbHVlIGlzIHBhc3NlZCBpbiBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gYnkgWmVzdOKEoi4KIDwvcD4KIDxwPgogU3RlcHMgZm9yIHRoaXMgdHV0b3JpYWw6CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkLmphdmEKaW5kZXggNWU5Y2Y0OC4uNGM0MzVhZSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDMvSGVsbG9Xb3JsZC5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwzL0hlbGxvV29ybGQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDM7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDMvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDMvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhCmluZGV4IDllNzI3ZjUuLjdjM2U1OGMgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwzL0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkQmVoYXZpb3VyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWwzOwogCiAvKioKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwzL0hlbGxvV29ybGRDb21wb3NpdGUuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwzL0hlbGxvV29ybGRDb21wb3NpdGUuamF2YQppbmRleCBhZjMyMDM5Li44MTNhODJhIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDMvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsMzsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50Q29tcG9zaXRlOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDMvSGVsbG9Xb3JsZE1peGluLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkTWl4aW4uamF2YQppbmRleCBkMDFmYzRjLi5hZDAxMzgyIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkTWl4aW4uamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkTWl4aW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDM7CiAKIC8vIFNUQVJUIFNOSVBQRVQ6IHNvbHV0aW9uCkBAIC01LDcgKzIzLDcgQEAKIC8qKgogICogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEhlbGxvV29ybGQKICAqIGludGVyZmFjZS4gVGhlIGJlaGF2aW91ciBhbmQgc3RhdGUgaXMgbWl4ZWQuIFNpbmNlIHBhcmFtZXRlcnMKLSAqIGFyZSBtYW5kYXRvcnkgYXMgZGVmYXVsdCBpbiBRaTRqIHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBudWxsIGNoZWNrcy4KKyAqIGFyZSBtYW5kYXRvcnkgYXMgZGVmYXVsdCBpbiBaZXN0IHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBudWxsIGNoZWNrcy4KICAqLwogcHVibGljIGNsYXNzIEhlbGxvV29ybGRNaXhpbgogICAgIGltcGxlbWVudHMgSGVsbG9Xb3JsZApkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDMvSGVsbG9Xb3JsZFN0YXRlLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkU3RhdGUuamF2YQppbmRleCAwMmNjN2NlLi42OGE3ZTM4IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkU3RhdGUuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkU3RhdGUuamF2YQpAQCAtMSw5ICsxLDI3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDM7CiAKIC8qKgogICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgb25seSB0aGUgc3RhdGUKICAqIG9mIHRoZSBIZWxsb1dvcmxkIENvbXBvc2l0ZS4KLSAqIFRoZSBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGJ5IFFpNGogYXV0b21hdGljYWxseSBpZgorICogVGhlIGV4Y2VwdGlvbnMgd2lsbCBiZSB0aHJvd24gYnkgWmVzdCBhdXRvbWF0aWNhbGx5IGlmCiAgKiBudWxsIGlzIHNlbnQgaW4gYXMgdmFsdWVzLiBUaGUgcGFyYW1ldGVycyB3b3VsZCBoYXZlIHRvIGJlIGRlY2xhcmVkCiAgKiBhcyBAT3B0aW9uYWwgaWYgbnVsbCBpcyBhbGxvd2VkLgogICovCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9wYWNrYWdlLmh0bWwgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9wYWNrYWdlLmh0bWwKaW5kZXggYTBkMjI3My4uMjY3MTQyYiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDMvcGFja2FnZS5odG1sCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwzL3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxib2R5PgogPGgxPlR1dG9yaWFsIDMgLSBNaXhpbnM8L2gxPgogPHA+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNC9IZWxsb1dvcmxkLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNC9IZWxsb1dvcmxkLmphdmEKaW5kZXggYWZjZjM2Yy4uZTliMmE2NCAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZC5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L0hlbGxvV29ybGQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhCmluZGV4IDFhMDk2YWUuLmI3MmM0ZmMgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNC9IZWxsb1dvcmxkQmVoYXZpb3VyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw0OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L0hlbGxvV29ybGRCZWhhdmlvdXJNaXhpbi5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEKaW5kZXggM2E3M2U5NC4uYWJlZWFkMiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw0OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5UaGlzOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhCmluZGV4IGUxMDRhOTYuLmUzNzdhZGYgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L0hlbGxvV29ybGRDb21wb3NpdGUuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNC9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw0OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5UcmFuc2llbnRDb21wb3NpdGU7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNC9IZWxsb1dvcmxkU3RhdGUuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L0hlbGxvV29ybGRTdGF0ZS5qYXZhCmluZGV4IGU3NDUyYTUuLmQwMTNlZDEgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L0hlbGxvV29ybGRTdGF0ZS5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L0hlbGxvV29ybGRTdGF0ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsNDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7CkBAIC03LDcgKzI1LDcgQEAKIC8qKgogICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgb25seSB0aGUgc3RhdGUKICAqIG9mIHRoZSBIZWxsb1dvcmxkIG9iamVjdC4KLSAqIFRoZSBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGJ5IFFpNGogYXV0b21hdGljYWxseSBpZgorICogVGhlIGV4Y2VwdGlvbnMgd2lsbCBiZSB0aHJvd24gYnkgWmVzdCBhdXRvbWF0aWNhbGx5IGlmCiAgKiBudWxsIGlzIHNlbnQgaW4gYXMgdmFsdWVzLiBUaGUgcGFyYW1ldGVycyB3b3VsZCBoYXZlIHRvIGJlIGRlY2xhcmVkCiAgKiBhcyBAT3B0aW9uYWwgaWYgbnVsbCBpcyBhbGxvd2VkLgogICovCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNC9IZWxsb1dvcmxkU3RhdGVNaXhpbi5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZFN0YXRlTWl4aW4uamF2YQppbmRleCBhMmJjYWZjLi5kYTY5YjMxIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNC9IZWxsb1dvcmxkU3RhdGVNaXhpbi5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L0hlbGxvV29ybGRTdGF0ZU1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw0OwogCiAvLyBTVEFSVCBTTklQUEVUOiBzb2x1dGlvbgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvcGFja2FnZS5odG1sIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvcGFja2FnZS5odG1sCmluZGV4IGRkNjlkODcuLjdhOGYxYzggMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L3BhY2thZ2UuaHRtbAorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNC9wYWNrYWdlLmh0bWwKQEAgLTEsMyArMSwxOSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CiA8Ym9keT4KIDxoMT5UdXRvcmlhbCA0IC0gQ29uY2VybnM8L2gxPgogPHA+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkLmphdmEKaW5kZXggMGIwOTc1ZS4uMmZjYWEyYyAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDUvSGVsbG9Xb3JsZC5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDU7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDUvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDUvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhCmluZGV4IDAzOTIyODQuLjdkODhkMWMgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkQmVoYXZpb3VyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw1OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRCZWhhdmlvdXJDb25jZXJuLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkQmVoYXZpb3VyQ29uY2Vybi5qYXZhCmluZGV4IDgwNjI5MmMuLmRkOThmZGUgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRCZWhhdmlvdXJDb25jZXJuLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDUvSGVsbG9Xb3JsZEJlaGF2aW91ckNvbmNlcm4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDU7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29uY2Vybi5Db25jZXJuT2Y7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkQmVoYXZpb3VyTWl4aW4uamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRCZWhhdmlvdXJNaXhpbi5qYXZhCmluZGV4IGU2MzI4OTQuLjYwZTk1MGQgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRCZWhhdmlvdXJNaXhpbi5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRCZWhhdmlvdXJNaXhpbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsNTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb25jZXJuLkNvbmNlcm5zOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDUvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDUvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhCmluZGV4IDVkNTJkZjEuLjNkZjkwZDAgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRDb21wb3NpdGUuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw1OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbXBvc2l0ZS5UcmFuc2llbnRDb21wb3NpdGU7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkU3RhdGUuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRTdGF0ZS5qYXZhCmluZGV4IDg4NzFmYWIuLmI3MDMxZmYgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRTdGF0ZS5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRTdGF0ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsNTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkU3RhdGVNaXhpbi5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDUvSGVsbG9Xb3JsZFN0YXRlTWl4aW4uamF2YQppbmRleCBlNWZjZDZmLi43Njc4N2ZiIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkU3RhdGVNaXhpbi5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRTdGF0ZU1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw1OwogCiAvKioKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L3BhY2thZ2UuaHRtbCBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L3BhY2thZ2UuaHRtbAppbmRleCAxMWVjZWM2Li5jNWI0MGM4IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9wYWNrYWdlLmh0bWwKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDUvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGJvZHk+CiA8aDE+VHV0b3JpYWwgNSAtIENvbnN0cmFpbnRzPC9oMT4KIDxwPgpAQCAtOCwxMyArMjQsMTMgQEAKIHRoZW4gbWFudWFsbHkgYWRkIHRoZXNlIGNoZWNrcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MuCiA8L3A+CiA8cD4KLUluIFFpNGogdGhlcmUgaXMgdGhlIG9wdGlvbiB0byB1c2UgQ29uc3RyYWludHMsIHdoaWNoIGFyZSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcGFyYW1ldGVycy4KK0luIFplc3TihKIgdGhlcmUgaXMgdGhlIG9wdGlvbiB0byB1c2UgQ29uc3RyYWludHMsIHdoaWNoIGFyZSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcGFyYW1ldGVycy4KIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2aW5nIGFuIGFubm90YXRpb24gdGhhdCBkZXNjcmliZXMgd2hhdCB0aGUgQ29uc3RyYWludCBkb2VzLCBhbmQgdGhlbgogYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgdGhhdCBjaGVja3Mgd2hldGhlciBhIHNwZWNpZmljIHZhbHVlIGZ1bGZpbGxzIHRoZSBDb25zdHJhaW50IG9yIG5vdC4KIDwvcD4KIDxwPgotVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHByZS13cml0dGVuIGNvbnN0cmFpbnRzIGluIFFpNGogd2hpY2ggeW91IGNhbiB1c2UuIFRoZSBudWxsIGNoZWNrIG9mIHRoZSBvcmlnaW5hbAotSGVsbG9Xb3JsZCB2ZXJzaW9uIGlzIGFscmVhZHkgaGFuZGxlZCBieSBkZWZhdWx0IHNpbmNlIFFpNGogY29uc2lkZXJzIG1ldGhvZCBwYXJhbWV0ZXJzIHRvIGJlIG1hbmRhdG9yeSBpZiBub3QKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBwcmUtd3JpdHRlbiBjb25zdHJhaW50cyBpbiBaZXN04oSiIHdoaWNoIHlvdSBjYW4gdXNlLiBUaGUgbnVsbCBjaGVjayBvZiB0aGUgb3JpZ2luYWwKK0hlbGxvV29ybGQgdmVyc2lvbiBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgZGVmYXVsdCBzaW5jZSBaZXN04oSiIGNvbnNpZGVycyBtZXRob2QgcGFyYW1ldGVycyB0byBiZSBtYW5kYXRvcnkgaWYgbm90CiBleHBsaWNpdGx5IG1hcmtlZCB3aXRoIHRoZSBAT3B0aW9uYWwgYW5ub3RhdGlvbi4gU28sIGluc3RlYWQgb2YgZG9pbmcgdGhhdCBjaGVjayB3ZSB3aWxsIGFkZAogb3RoZXIgY2hlY2tzIHRoYXQgYXJlIHVzZWZ1bCB0byBtYWtlLCBzdWNoIGFzIGVuc3VyaW5nIHRoYXQgdGhlIHBhc3NlZCBpbiBzdHJpbmcgaXMgbm90IGVtcHR5LgogPC9wPgpAQCAtMzYsOCArNTIsOCBAQAogPC9vbD4KIDxwPjxlbT5Ob3RlOjwvZW0+PC9wPgogPHA+Ci0gICAgVGhlIHByZXZpb3VzIHN0ZXBzIGhhZCBhIGRlcGVuZGVuY3kgdG8gdGhlIDxjb2RlPnFpNGotY29yZS1hcGk8L2NvZGU+IG9ubHkuIFRoZSBjb25zdHJhaW50cwotICAgIHlvdSd2ZSB1c2VkIGluIHRoaXMgc3RlcCwgaW50cm9kdWNlIGEgbmV3IGRlcGVuZGVuY3kgdG8gdGhlIDxjb2RlPnFpNGotbGliLWNvbnN0cmFpbnRzPC9jb2RlPgorICAgIFRoZSBwcmV2aW91cyBzdGVwcyBoYWQgYSBkZXBlbmRlbmN5IHRvIHRoZSA8Y29kZT5vcmcucWk0ai5jb3JlLmFwaTwvY29kZT4gb25seS4gVGhlIGNvbnN0cmFpbnRzCisgICAgeW91J3ZlIHVzZWQgaW4gdGhpcyBzdGVwLCBpbnRyb2R1Y2UgYSBuZXcgZGVwZW5kZW5jeSB0byB0aGUgPGNvZGU+b3JnLnFpNGoubGlicmFyeS5jb25zdHJhaW50czwvY29kZT4KICAgICBsaWJyYXJ5LCB3aGVyZSBhbGwgdGhlIGNvbnN0cmFpbnQgcmVsYXRlZCBjbGFzc2VzIHJlc2lkZS4gU28gdXBkYXRlIHlvdXIgY2xhc3NwYXRoIHNldHRpbmdzCiAgICAgYWNjb3JkaW5nbHkuCiA8L3A+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkLmphdmEKaW5kZXggYTQzNDkwYy4uYTA4ZDA3MSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvSGVsbG9Xb3JsZC5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGQuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDY7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhCmluZGV4IGJhMzRlNzMuLmJlZmRiZjcgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkQmVoYXZpb3VyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw2OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbmNlcm4uQ29uY2VybnM7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkQmVoYXZpb3VyQ29uY2Vybi5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvSGVsbG9Xb3JsZEJlaGF2aW91ckNvbmNlcm4uamF2YQppbmRleCA1NmE4ZTU3Li5kZmZiNWMxIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkQmVoYXZpb3VyQ29uY2Vybi5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGRCZWhhdmlvdXJDb25jZXJuLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw2OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmNvbmNlcm4uQ29uY2Vybk9mOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkQmVoYXZpb3VyTWl4aW4uamF2YQppbmRleCA3M2FkOTgzLi45ZTE1NGQxIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkQmVoYXZpb3VyTWl4aW4uamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkQmVoYXZpb3VyTWl4aW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDY7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuaW5qZWN0aW9uLnNjb3BlLlRoaXM7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEKaW5kZXggMThjNzcyZC4uNGZkMDMxZiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGRDb21wb3NpdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDY7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlRyYW5zaWVudENvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGRTdGF0ZS5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvSGVsbG9Xb3JsZFN0YXRlLmphdmEKaW5kZXggMGY4MDI1NGEuLjgyOTBhZDAgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGRTdGF0ZS5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGRTdGF0ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsNjsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkU3RhdGVNaXhpbi5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvSGVsbG9Xb3JsZFN0YXRlTWl4aW4uamF2YQppbmRleCBkYjk3N2I1Li5jNWFlNGNmIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkU3RhdGVNaXhpbi5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGRTdGF0ZU1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw2OwogCiAvKioKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L3BhY2thZ2UuaHRtbCBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L3BhY2thZ2UuaHRtbAppbmRleCAyMGUwYTAxLi5jMmJhN2I1IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9wYWNrYWdlLmh0bWwKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGJvZHk+CiA8aDE+VHV0b3JpYWwgNiAtIFNpZGVFZmZlY3RzPC9oMT4KIDxwPgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZC5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZC5qYXZhCmluZGV4IDEwNzk4Y2YuLjc1YTZiNzcgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L0hlbGxvV29ybGQuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw3OwogCiAvKioKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YQppbmRleCAyMGIxYjhjLi4zNGJkZTNlIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkQmVoYXZpb3VyLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsNzsKIAogLy8gU1RBUlQgU05JUFBFVDogc29sdXRpb24KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L0hlbGxvV29ybGRCZWhhdmlvdXJNaXhpbi5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEKaW5kZXggNzI2YjNmNi4uMzExMzVmNiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw3OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5UaGlzOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZEJlaGF2aW91clNpZGVFZmZlY3QuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L0hlbGxvV29ybGRCZWhhdmlvdXJTaWRlRWZmZWN0LmphdmEKaW5kZXggZWM2YTRiMi4uNWIyOGMxZiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZEJlaGF2aW91clNpZGVFZmZlY3QuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkQmVoYXZpb3VyU2lkZUVmZmVjdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsNzsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5zaWRlZWZmZWN0LlNpZGVFZmZlY3RPZjsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L0hlbGxvV29ybGRDb21wb3NpdGUuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L0hlbGxvV29ybGRDb21wb3NpdGUuamF2YQppbmRleCBjNzNlZmRiLi5kYjNhMDA5IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsNzsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50Q29tcG9zaXRlOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZFN0YXRlLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkU3RhdGUuamF2YQppbmRleCBhMzE0M2ZiLi4yZTMwMDYwIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkU3RhdGUuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkU3RhdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDc7CiAKIGltcG9ydCBvcmcucWk0ai5saWJyYXJ5LmNvbnN0cmFpbnRzLmFubm90YXRpb24uTm90RW1wdHk7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkU3RhdGVNaXhpbi5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZFN0YXRlTWl4aW4uamF2YQppbmRleCAxZTRjYmVkLi41YzkwODlhIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkU3RhdGVNaXhpbi5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L0hlbGxvV29ybGRTdGF0ZU1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw3OwogCiAvKioKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L3BhY2thZ2UuaHRtbCBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L3BhY2thZ2UuaHRtbAppbmRleCA1NzYwOWRhLi40MTE1NmMxIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9wYWNrYWdlLmh0bWwKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvcGFja2FnZS5odG1sCkBAIC0xLDEyICsxLDI4IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxib2R5PgogPGgxPlR1dG9yaWFsIDcgLSBQcm9wZXJ0aWVzPC9oMT4KIDxwPgotT25lIG9mIHRoZSBnb2FscyBvZiBRaTRqIGlzIHRvIGdpdmUgeW91IGRvbWFpbiBtb2RlbGluZyB0b29scyB0aGF0IGFsbG93IHlvdSB0byBtb3JlIGNvbmNpc2VseSB1c2UKK09uZSBvZiB0aGUgZ29hbHMgb2YgQXBhY2hlIFplc3TihKIgaXMgdG8gZ2l2ZSB5b3UgZG9tYWluIG1vZGVsaW5nIHRvb2xzIHRoYXQgYWxsb3cgeW91IHRvIG1vcmUgY29uY2lzZWx5IHVzZQogZG9tYWluIGNvbmNlcHRzIGluIGNvZGUuIE9uZSBvZiB0aGUgdGhpbmdzIHdlIGRvIHJhdGhlciBvZnRlbiBpcyBtb2RlbCBQcm9wZXJ0aWVzIG9mIG9iamVjdHMgYXMgZ2V0dGVycwogYW5kIHNldHRlcnMuIEJ1dCB0aGlzIGlzIGEgdmVyeSB3ZWFrIG1vZGVsLCBhbmQgZG9lcyBub3QgZ2l2ZSB5b3UgYW55IGFjY2VzcyB0byBtZXRhZGF0YSBhYm91dCB0aGUgcHJvcGVydHksCiBhbmQgYWxzbyBtYWtlcyBjb21tb24gdGFza3MgbGlrZSBVSSBiaW5kaW5nIG5vbi10cml2aWFsLiBUaGVyZSBpcyBhbHNvIGEgbG90IG9mIHJlcGV0aXRpb24gb2YgY29kZSwgd2hpY2gKIGlzIHVubmVjZXNzYXJ5LiBVc2luZyBKYXZhQmVhbnMgY29udmVudGlvbnMgb25lIHR5cGljYWxseSBoYXZlIHRvIGhhdmUgY29kZSBpbiBmaXZlIHBsYWNlcyBmb3Igb25lIHByb3BlcnR5LAotd2hlcmVhcyBpbiBRaTRqIHRoZSBzYW1lIHRoaW5nIGNhbiBiZSBhY2hpZXZlZCB3aXRoIG9uZSBsaW5lIG9mIGNvZGUuCit3aGVyZWFzIGluIFplc3TihKIgdGhlIHNhbWUgdGhpbmcgY2FuIGJlIGFjaGlldmVkIHdpdGggb25lIGxpbmUgb2YgY29kZS4KIDwvcD4KIDxwPgogQnV0IGxldHMgc3RhcnQgb3V0IGVhc3kuIFRvIGRlY2xhcmUgYSBwcm9wZXJ0eSB5b3UgaGF2ZSB0byBtYWtlIGEgbWV0aG9kIGluIGEgbWl4aW4gdHlwZSB0aGF0IHJldHVybnMgYSB2YWx1ZQpAQCAtMjUsMTMgKzQxLDEzIEBACiA8L3A+CiA8cD4KIEluIHRoZSBNaXhpbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIFByb3BlcnR5IGRlY2xhcmF0aW9uIHlvdSBzaG91bGQgaGF2ZSBhbiBpbmplY3Rpb24KLW9mIHRoZSBQcm9wZXJ0eSwgd2hpY2ggaXMgY3JlYXRlZCBmb3IgeW91IGJ5IFFpNGouIFRoZSBpbmplY3Rpb24gY2FuIGJlIGRvbmUgaW4gYSBmaWVsZCBsaWtlIHRoaXM6CitvZiB0aGUgUHJvcGVydHksIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIHlvdSBieSBaZXN04oSiLiBUaGUgaW5qZWN0aW9uIGNhbiBiZSBkb25lIGluIGEgZmllbGQgbGlrZSB0aGlzOgogPC9wPgogPHByZT4KICAgICAmIzY0O1N0YXRlIFByb3BlcnR5Jmx0O1N0cmluZyZndDsgbmFtZTsKIDwvcHJlPgogPHA+Ci1UaGUgU3RhdGUgZGVwZW5kZW5jeSBpbmplY3Rpb24gYW5ub3RhdGlvbiBtZWFucyB0aGF0IFFpNGogd2lsbCBpbmplY3QgdGhlIFByb3BlcnR5IGZvciB5b3UuIFRoZSBmaWVsZAorVGhlIFN0YXRlIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFubm90YXRpb24gbWVhbnMgdGhhdCBaZXN04oSiIHdpbGwgaW5qZWN0IHRoZSBQcm9wZXJ0eSBmb3IgeW91LiBUaGUgZmllbGQKIGhhcyB0aGUgbmFtZSAibmFtZSIsIHdoaWNoIG1hdGNoZXMgdGhlIG5hbWUgaW4gdGhlIGludGVyZmFjZSwgYW5kIHRoZXJlZm9yZSB0aGF0IFByb3BlcnR5IGlzIGluamVjdGVkLiBZb3UgY2FuCiB0aGVuIGltcGxlbWVudCB0aGUgbWV0aG9kIHRyaXZpYWxseSBieSBqdXN0IHJldHVybmluZyB0aGUgIm5hbWUiIGZpZWxkLgogPC9wPgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhCmluZGV4IDMyZmEyNjkuLjBjN2IxYjEgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw4L0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOC9IZWxsb1dvcmxkQmVoYXZpb3VyLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw4OwogCiAvKioKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw4L0hlbGxvV29ybGRCZWhhdmlvdXJNaXhpbi5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEKaW5kZXggMjI2ZGMwYS4uNTU4NWJlZiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw4OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLmluamVjdGlvbi5zY29wZS5UaGlzOwpAQCAtOCw3ICsyNiw3IEBACiAgKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSGVsbG9Xb3JsZAogICogYmVoYXZpb3VyIGludGVyZmFjZS4KICAqIDxwPgotICogVGhpcyB2ZXJzaW9uIGFjY2VzcyB0aGUgc3RhdGUgdXNpbmcgUWk0aiBQcm9wZXJ0aWVzLgorICogVGhpcyB2ZXJzaW9uIGFjY2VzcyB0aGUgc3RhdGUgdXNpbmcgWmVzdCBQcm9wZXJ0aWVzLgogICogPC9wPgogICovCiBwdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZEJlaGF2aW91ck1peGluCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOC9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOC9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEKaW5kZXggMTM4ZTcwYi4uYTZiMTk1MSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw4L0hlbGxvV29ybGRDb21wb3NpdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDg7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuY29tcG9zaXRlLlRyYW5zaWVudENvbXBvc2l0ZTsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw4L0hlbGxvV29ybGRTdGF0ZS5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZFN0YXRlLmphdmEKaW5kZXggYzg1ZDYwMC4uMDk3OWVjZiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZFN0YXRlLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZFN0YXRlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw4OwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLnByb3BlcnR5LlByb3BlcnR5OwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZFN0YXRlTWl4aW4uamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw4L0hlbGxvV29ybGRTdGF0ZU1peGluLmphdmEKaW5kZXggMTQxOTZjMC4uYjQwZThmYSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZFN0YXRlTWl4aW4uamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOC9IZWxsb1dvcmxkU3RhdGVNaXhpbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsODsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuU3RhdGU7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOC9wYWNrYWdlLmh0bWwgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOC9wYWNrYWdlLmh0bWwKaW5kZXggMDBhMGM1YS4uYzlhNTc4MSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvcGFja2FnZS5odG1sCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw4L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxib2R5PgogPGgxPlR1dG9yaWFsIDggLSBHZW5lcmljIG1peGluczwvaDE+CiA8cD4KQEAgLTE2LDcgKzMyLDcgQEAKIEZyYWdtZW50IGlzIHRoZW4gYWxsb3dlZCB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZCBhbnkgd2F5IGl0IHdhbnRzLgogPC9wPgogPHA+Ci1TaW5jZSBpbnRlcmZhY2VzIHdpdGggb25seSBQcm9wZXJ0aWVzIGlzIHN1Y2ggYSBjb21tb24gY2FzZSBRaTRqIGFscmVhZHkgaGFzIGEgZ2VuZXJpYyBNaXhpbgorU2luY2UgaW50ZXJmYWNlcyB3aXRoIG9ubHkgUHJvcGVydGllcyBpcyBzdWNoIGEgY29tbW9uIGNhc2UgWmVzdOKEoiBhbHJlYWR5IGhhcyBhIGdlbmVyaWMgTWl4aW4KIHRoYXQgaW1wbGVtZW50cyB0aGUgUHJvcGVydGllcyBtYW5hZ2VtZW50IGRlc2NyaWJlZCBhYm92ZSwgYnV0IGZvciB0aGUgYnVpbHRpbiBQcm9wZXJ0eSB0eXBlIGluc3RlYWQKIG9mIHRoZSBnZXR0ZXIvc2V0dGVyIHZhcmlhbnQuIFRoZSBjbGFzcyBpcyBhcHRseSBuYW1lZCBQcm9wZXJ0eU1peGluLgogPC9wPgpAQCAtMzAsNyArNDYsNyBAQAogICAgIDxsaT5SZW1vdmUgdGhlIEhlbGxvV29ybGRTdGF0ZU1peGluPC9saT4KICAgICA8bGk+QWRkIGEgR2VuZXJpY1Byb3BlcnR5TWl4aW4sIGFuZCBoYXZlIGl0IGltcGxlbWVudCBJbnZvY2F0aW9uSGFuZGxlcjwvbGk+CiAgICAgPGxpPkluamVjdCAiQFN0YXRlIFN0YXRlSG9sZGVyIHN0YXRlIiBpbiB0aGUgbWl4aW4uIFRoZSBTdGF0ZUhvbGRlciBpbnRlcmZhY2Ugd2lsbCBnaXZlCi0gICAgICAgIHlvdSBhY2Nlc3MgdG8gdGhlIFByb3BlcnRpZXMgZm9yIHRoZSBUcmFuc2llbnRDb21wb3NpdGUgd2hpY2ggUWk0aiBtYW5hZ2VzIGZvciB5b3UKKyAgICAgICAgeW91IGFjY2VzcyB0byB0aGUgUHJvcGVydGllcyBmb3IgdGhlIFRyYW5zaWVudENvbXBvc2l0ZSB3aGljaCBaZXN04oSiIG1hbmFnZXMgZm9yIHlvdQogICAgIDwvbGk+CiAgICAgPGxpPk9uIGNhbGwgdG8gaW52b2tlKCksIGRlbGVnYXRlIHRvIHRoZSBTdGF0ZUhvbGRlciBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBQcm9wZXJ0eSBmb3IgdGhlIGludm9rZWQgbWV0aG9kPC9saT4KICAgICA8bGk+QWRkIGFuIEBBcHBsaWVzVG8gYW5ub3RhdGlvbiB0byB0aGUgTWl4aW4gYW5kIGltcGxlbWVudCB0aGUgQXBwbGllc1RvRmlsdGVyIHdpdGggYSBydWxlIHRoYXQKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L0hlbGxvV29ybGRCZWhhdmlvdXIuamF2YQppbmRleCAwYzM4NTY1Li5iZjgyZmYxIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOS9IZWxsb1dvcmxkQmVoYXZpb3VyLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDkvSGVsbG9Xb3JsZEJlaGF2aW91ci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsOTsKIAogLyoqCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOS9IZWxsb1dvcmxkQmVoYXZpb3VyTWl4aW4uamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L0hlbGxvV29ybGRCZWhhdmlvdXJNaXhpbi5qYXZhCmluZGV4IGRmNzFmYTMuLmQ2NzZiYzYgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L0hlbGxvV29ybGRCZWhhdmlvdXJNaXhpbi5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L0hlbGxvV29ybGRCZWhhdmlvdXJNaXhpbi5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsOTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5pbmplY3Rpb24uc2NvcGUuVGhpczsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L0hlbGxvV29ybGRDb21wb3NpdGUuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L0hlbGxvV29ybGRDb21wb3NpdGUuamF2YQppbmRleCA5MzhkOTg4Li43MzU4N2QyIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOS9IZWxsb1dvcmxkQ29tcG9zaXRlLmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDkvSGVsbG9Xb3JsZENvbXBvc2l0ZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsOTsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5jb21wb3NpdGUuVHJhbnNpZW50Q29tcG9zaXRlOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDkvSGVsbG9Xb3JsZFN0YXRlLmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOS9IZWxsb1dvcmxkU3RhdGUuamF2YQppbmRleCA1MWFlZTA2Li5lNmZiZDY5IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOS9IZWxsb1dvcmxkU3RhdGUuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOS9IZWxsb1dvcmxkU3RhdGUuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDk7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkucHJvcGVydHkuUHJvcGVydHk7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOS9wYWNrYWdlLmh0bWwgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOS9wYWNrYWdlLmh0bWwKaW5kZXggZWEyMWU1Ny4uNWViZWQ0MSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDkvcGFja2FnZS5odG1sCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L3BhY2thZ2UuaHRtbApAQCAtMSwzICsxLDE5IEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKK2NvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAordGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxib2R5PgogPGgxPlR1dG9yaWFsIDkgLSBQcml2YXRlIGFuZCBhYnN0cmFjdCBtaXhpbnM8L2gxPgogPHA+CkBAIC0xMiw3ICsyOCw3IEBACiBub3JtYWxseSBtZWFuIHRoYXQgaXQgd291bGQgaGF2ZSB0byBpbXBsZW1lbnQgYWxsIG1ldGhvZHMsIGluY2x1ZGluZyB0aG9zZSBmb3VuZCBpbiB0aGUgVHJhbnNpZW50Q29tcG9zaXRlCiBpbnRlcmZhY2UuIEhvd2V2ZXIsIHNpbmNlIHdlIGFyZSBvbmx5IHJlYWxseSBpbnRlcmVzdGVkIGluIGltcGxlbWVudGluZyB0aGUgc2F5KCkgbWV0aG9kIHdlCiB3aWxsIG1hcmsgdGhpcyBieSBkZWNsYXJpbmcgdGhhdCB0aGUgTWl4aW4gImltcGxlbWVudHMiIHRoZSBUcmFuc2llbnRDb21wb3NpdGUgdHlwZSwgYnV0IGlzIGFsc28gImFic3RyYWN0Ii4KLVRoaXMsIHVzaW5nIHB1cmUgSmF2YSBzZW1hbnRpY3MsIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGF2b2lkIGhhdmluZyB0byBpbXBsZW1lbnQgYWxsIG1ldGhvZHMuIFFpNGoKK1RoaXMsIHVzaW5nIHB1cmUgSmF2YSBzZW1hbnRpY3MsIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGF2b2lkIGhhdmluZyB0byBpbXBsZW1lbnQgYWxsIG1ldGhvZHMuIFplc3TihKIKIHdpbGwgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBkZXRlY3QgdGhhdCB0aGUgTWl4aW4gb25seSBoYW5kbGVzIHRoZSBzYXkoKSBtZXRob2QsIGFuZCB0aGVyZWZvcmUKIG9ubHkgbWFwIGl0IHRvIHRoYXQgc3BlY2lmaWMgbWV0aG9kLiBJbiBvcmRlciB0byBpbnN0YW50aWF0ZSB0aGUgTWl4aW4gaXQgd2lsbCBnZW5lcmF0ZSBhIHN1YmNsYXNzCiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZW1haW5pbmcgbWV0aG9kcyBpbiB0aGUgVHJhbnNpZW50Q29tcG9zaXRlIHR5cGUsIGFzIG5vLW9wcy4gVGhlc2Ugd2lsbCBuZXZlciBiZSBjYWxsZWQgaG93ZXZlciwKQEAgLTIzLDcgKzM5LDcgQEAKIFRvIGhpZGUgdGhlIHN0YXRlIGZyb20gdGhlIGNsaWVudCB3ZSBuZWVkIHRvIHVzZSB3aGF0IGlzIGNhbGxlZCBQcml2YXRlIE1peGlucy4gQSBQcml2YXRlIE1peGluIGlzCiBhbnkgbWl4aW4gdGhhdCBpcyByZWZlcmVuY2VkIGJ5IGFub3RoZXIgTWl4aW4gYnkgdXNpbmcgdGhlIEBUaGlzIGluamVjdGlvbiwgYnV0IHdoaWNoIGlzIG5vdCBpbmNsdWRlZAogaW4gdGhlIFRyYW5zaWVudENvbXBvc2l0ZSB0eXBlLiBBcyBsb25nIGFzIHRoZXJlIGlzIGEgTWl4aW4gaW1wbGVtZW50YXRpb24gZGVjbGFyZWQgZm9yIHRoZSBpbnRlcmZhY2Ugc3BlY2lmaWVkCi1ieSB0aGUgQFRoaXMgaW5qZWN0aW9uIGl0IHdpbGwgd29yaywgc2luY2UgUWk0aiBjYW4ga25vdyBob3cgdG8gaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UuIEJ1dCBzaW5jZQorYnkgdGhlIEBUaGlzIGluamVjdGlvbiBpdCB3aWxsIHdvcmssIHNpbmNlIFplc3TihKIgY2FuIGtub3cgaG93IHRvIGltcGxlbWVudCB0aGUgaW50ZXJmYWNlLiBCdXQgc2luY2UKIGl0IGlzIG5vdCBleHRlbmRlZCBieSB0aGUgVHJhbnNpZW50Q29tcG9zaXRlIHR5cGUgdGhlcmUgaXMgbm8gd2F5IGZvciBhIHVzZXIgb2YgdGhlIFRyYW5zaWVudENvbXBvc2l0ZSB0byBhY2Nlc3MgaXQuCiBUaGF0CiBNaXhpbiBiZWNvbWVzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gVGhpcyBjYW4gYmUgdXNlZCBlaXRoZXIgZm9yIGVuY2Fwc3VsYXRpb24gcHVycG9zZXMsIG9yIGZvciByZWZlcmVuY2luZwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YWRvYy9vdmVydmlldy5odG1sIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL21haW4vamF2YWRvYy9vdmVydmlldy5odG1sCmluZGV4IGNjNGI1ZGUuLjFiOTgyNTIgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy9tYWluL2phdmFkb2Mvb3ZlcnZpZXcuaHRtbAorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhZG9jL292ZXJ2aWV3Lmh0bWwKQEAgLTEsMTkgKzEsMzUgQEAKIDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KIDxodG1sPgogPGhlYWQ+CiA8L2hlYWQ+CiA8Ym9keT4KIERlc2NyaXB0aW9uIG9mIHR1dG9yaWFscy4KIAotPGgyPlFpNGogdHV0b3JpYWxzPC9oMj4KKzxoMj5BcGFjaGUgWmVzdOKEoiB0dXRvcmlhbHM8L2gyPgogCiA8aDM+Q29tcG9zaXRlIHR1dG9yaWFsczwvaDM+CiA8cD4KIFRocm91Z2hvdXQgdGhpcyBzZXQgb2YgdHV0b3JpYWxzIGl0IHdpbGwgYmUgc2hvd24gaG93IHRvIGNyZWF0ZSBhbmQgd29yayB3aXRoIENvbXBvc2l0ZXMsIHdoaWNoCi1pcyB0aGUgYmFzaWMgZWxlbWVudCBpbiBRaTRqLiBXZSB3aWxsIHJlZmFjdG9yIG9uZSBIZWxsb1dvcmxkIGNsYXNzIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSB2YXJpb3VzCi1mZWF0dXJlcyBpbiBRaTRqLiBUaGVzZSByZWZhY3RvcmluZ3Mgd2lsbCBtYWtlIGl0IGVhc2llciB0byByZXVzZSBwYXJ0cyBvZiB0aGUgY2xhc3MsCitpcyB0aGUgYmFzaWMgZWxlbWVudCBpbiBaZXN04oSiLiBXZSB3aWxsIHJlZmFjdG9yIG9uZSBIZWxsb1dvcmxkIGNsYXNzIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSB2YXJpb3VzCitmZWF0dXJlcyBpbiBaZXN04oSiLiBUaGVzZSByZWZhY3RvcmluZ3Mgd2lsbCBtYWtlIGl0IGVhc2llciB0byByZXVzZSBwYXJ0cyBvZiB0aGUgY2xhc3MsCiBhbmQgaW50cm9kdWNlIG5ldyBmZWF0dXJlcyB3aXRob3V0IGhhdmluZyB0byBjaGFuZ2UgZXhpc3RpbmcgY29kZS4gV2Ugd2lsbCBhbHNvIGxvb2sKLWF0IHNvbWUgb2YgdGhlIGV4aXN0aW5nIGNsYXNzZXMsIG9yIEZyYWdtZW50cywgYXZhaWxhYmxlIGluIFFpNGogdGhhdCB5b3UgY2FuIHJldXNlCithdCBzb21lIG9mIHRoZSBleGlzdGluZyBjbGFzc2VzLCBvciBGcmFnbWVudHMsIGF2YWlsYWJsZSBpbiBaZXN04oSiIHRoYXQgeW91IGNhbiByZXVzZQogc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byB3cml0ZSBldmVyeXRoaW5nIHlvdXJzZWxmLgogPC9wPgogPHA+CkBAIC0yMiw3ICszOCw3IEBACiA8L3A+CiA8aDI+UmVsYXRlZCBEb2N1bWVudGF0aW9uPC9oMj4KIDxwPgotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUWk0aiBzZWUgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cucWk0ai5vcmciPnRoZSB3ZWJzaXRlPC9hPi4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFplc3TihKIgc2VlIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vemVzdC5hcGFjaGUub3JnIj50aGUgd2Vic2l0ZTwvYT4uCiA8L3A+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMS9IZWxsb1dvcmxkVGVzdC5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEvSGVsbG9Xb3JsZFRlc3QuamF2YQppbmRleCA4Zjk0MmFlLi43YTMyNTJlIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMS9IZWxsb1dvcmxkVGVzdC5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwxL0hlbGxvV29ybGRUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWwxOwogCiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwxMC9IZWxsb1dvcmxkVGVzdC5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEwL0hlbGxvV29ybGRUZXN0LmphdmEKaW5kZXggOWM1NDVmNS4uMTAwYjkyMSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEwL0hlbGxvV29ybGRUZXN0LmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDEwL0hlbGxvV29ybGRUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWwxMDsKIAogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMi9IZWxsb1dvcmxkVGVzdC5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDIvSGVsbG9Xb3JsZFRlc3QuamF2YQppbmRleCBkYmZjZmJkLi45N2JkNGJmIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMi9IZWxsb1dvcmxkVGVzdC5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwyL0hlbGxvV29ybGRUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWwyOwogCiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwzL0hlbGxvV29ybGRUZXN0LmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsMy9IZWxsb1dvcmxkVGVzdC5qYXZhCmluZGV4IGFhN2FkYWEuLjc0ZjljMDAgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWwzL0hlbGxvV29ybGRUZXN0LmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDMvSGVsbG9Xb3JsZFRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDM7CiAKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZFRlc3QuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw0L0hlbGxvV29ybGRUZXN0LmphdmEKaW5kZXggMjk3ZmU1NC4uMTAwMjI4YyAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDQvSGVsbG9Xb3JsZFRlc3QuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNC9IZWxsb1dvcmxkVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsNDsKIAogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkVGVzdC5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDUvSGVsbG9Xb3JsZFRlc3QuamF2YQppbmRleCBmNGFiN2RlLi5lOTc4NmZjIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNS9IZWxsb1dvcmxkVGVzdC5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw1L0hlbGxvV29ybGRUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw1OwogCiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGRUZXN0LmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNi9IZWxsb1dvcmxkVGVzdC5qYXZhCmluZGV4IDg0Y2MzNmYuLjg0OTZhODYgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw2L0hlbGxvV29ybGRUZXN0LmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDYvSGVsbG9Xb3JsZFRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDY7CiAKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZFRlc3QuamF2YSBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw3L0hlbGxvV29ybGRUZXN0LmphdmEKaW5kZXggNzNjNDRiMS4uNzg1YmMzZSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDcvSGVsbG9Xb3JsZFRlc3QuamF2YQorKysgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsNy9IZWxsb1dvcmxkVGVzdC5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5jb21wb3NpdGVzLnR1dG9yaWFsNzsKIAogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOC9IZWxsb1dvcmxkVGVzdC5qYXZhIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDgvSGVsbG9Xb3JsZFRlc3QuamF2YQppbmRleCA2ZWJjMzk4Li4zZWVmZjFhIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOC9IZWxsb1dvcmxkVGVzdC5qYXZhCisrKyBiL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw4L0hlbGxvV29ybGRUZXN0LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLmNvbXBvc2l0ZXMudHV0b3JpYWw4OwogCiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L0hlbGxvV29ybGRUZXN0LmphdmEgYi90dXRvcmlhbHMvY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9jb21wb3NpdGVzL3R1dG9yaWFsOS9IZWxsb1dvcmxkVGVzdC5qYXZhCmluZGV4IDgyNGRlMGQuLmE1YWFmMGYgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9jb21wb3NpdGVzL3NyYy90ZXN0L2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL2NvbXBvc2l0ZXMvdHV0b3JpYWw5L0hlbGxvV29ybGRUZXN0LmphdmEKKysrIGIvdHV0b3JpYWxzL2NvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvY29tcG9zaXRlcy90dXRvcmlhbDkvSGVsbG9Xb3JsZFRlc3QuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuY29tcG9zaXRlcy50dXRvcmlhbDk7CiAKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2hlbGxvL2J1aWxkLmdyYWRsZSBiL3R1dG9yaWFscy9oZWxsby9idWlsZC5ncmFkbGUKaW5kZXggYTY1MzNmMi4uMjU0N2MwOCAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2hlbGxvL2J1aWxkLmdyYWRsZQorKysgYi90dXRvcmlhbHMvaGVsbG8vYnVpbGQuZ3JhZGxlCkBAIC0xNCw5ICsxNCw5IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1kZXNjcmlwdGlvbiA9ICJCYXNpYyB0dXRvcmlhbCBvbiBob3cgdG8gY292ZXJ0IGEgc2ltcGxlICdIZWxsbyBXb3JsZCcgYXBwbGljYXRpb24gdG8gUWk0aiwgdXNpbmcgbW9yZSBhbmQgbW9yZSBmZWF0dXJlcyBmb3IgZWFjaCBzdGVwLiIKK2Rlc2NyaXB0aW9uID0gIkJhc2ljIHR1dG9yaWFsIG9uIGhvdyB0byBjb3ZlcnQgYSBzaW1wbGUgJ0hlbGxvIFdvcmxkJyBhcHBsaWNhdGlvbiB0byBBcGFjaGUgWmVzdOKEoiwgdXNpbmcgbW9yZSBhbmQgbW9yZSBmZWF0dXJlcyBmb3IgZWFjaCBzdGVwLiIKIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogVHV0b3JpYWwgLSBDb21wb3NpdGVzIiB9fQoramFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIFR1dG9yaWFsIC0gQ29tcG9zaXRlcyIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9idWlsZC5ncmFkbGUgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL2J1aWxkLmdyYWRsZQppbmRleCAzYzI4Y2FmLi43MzBiMzcwIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL2J1aWxkLmdyYWRsZQorKysgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJBbiBJbnRyb2R1Y3Rpb24gdG8gUWk0aiBpbiBpdHMgc2ltcGxlc3QgZm9ybS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBUdXRvcmlhbCAtIEludHJvZHVjdGlvbiIgfX0KK2Rlc2NyaXB0aW9uID0gIkFuIEludHJvZHVjdGlvbiB0byBBcGFjaGUgWmVzdOKEoiBpbiBpdHMgc2ltcGxlc3QgZm9ybS4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBUdXRvcmlhbCAtIEludHJvZHVjdGlvbiIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL2JhY2tncm91bmQudHh0IGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9zcmMvZG9jcy9iYWNrZ3JvdW5kLnR4dAppbmRleCBkMjc1ZDNhLi45NmZjYjVmIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL2JhY2tncm91bmQudHh0CisrKyBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vc3JjL2RvY3MvYmFja2dyb3VuZC50eHQKQEAgLTEsMjEgKzEsNDAgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW2ludHJvZHVjdGlvbi1iYWNrZ3JvdW5kLEJhY2tncm91bmRdXQogPSBCYWNrZ3JvdW5kID0KLVFpNGogaXMgdGhlIGZpcnN0IENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBpbXBsZW1lbnRhdGlvbiBsZXZlcmFnaW5nIHRoZSBKYXZhIDUgcGxhdGZvcm0sIHNvIHRoYXQgZXZlcnl0aGluZyB5b3UKLWtub3cgZnJvbSBKYXZhIDUgc3RpbGwgYXBwbGllcy4gWW91IGNhbiBtaXggUWk0aiB3aXRoIHlvdXIgb3JkaW5hcnkgSmF2YSBjb2RlIGFzIG11Y2ggYXMgeW91IHdhbnQuIEFsbCB5b3VyIGV4aXN0aW5nCi1KYXZhIHRvb2xzIHdvcmtzIGp1c3QgbGlrZSBiZWZvcmUsIGFuZCBRaTRqIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHByb2dyYW1taW5nIGxhbmd1YWdlLCBubyBzcGVjaWFsIGRldmVsb3BtZW50CitaZXN04oSiIGlzIHRoZSBmaXJzdCBDb21wb3NpdGUgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgaW1wbGVtZW50YXRpb24gbGV2ZXJhZ2luZyB0aGUgSmF2YSA1IHBsYXRmb3JtLCBzbyB0aGF0IGV2ZXJ5dGhpbmcgeW91Citrbm93IGZyb20gSmF2YSA1IHN0aWxsIGFwcGxpZXMuIFlvdSBjYW4gbWl4IFplc3TihKIgd2l0aCB5b3VyIG9yZGluYXJ5IEphdmEgY29kZSBhcyBtdWNoIGFzIHlvdSB3YW50LiBBbGwgeW91ciBleGlzdGluZworSmF2YSB0b29scyB3b3JrcyBqdXN0IGxpa2UgYmVmb3JlLCBhbmQgWmVzdOKEoiBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBwcm9ncmFtbWluZyBsYW5ndWFnZSwgbm8gc3BlY2lhbCBkZXZlbG9wbWVudAogdG9vbHMgbmVlZGVkIGFuZCBubyBYTUwgaXMgcmVxdWlyZWQuCiAKID09IFB1cnBvc2UgPT0KLVFpNGogYWRkcmVzc2VzIHRoZSBwcm9ncmFtbWluZyBwcm9ibGVtcyBmcm9tIHRoZSB0b3AtZG93biwgc3RhcnRpbmcgd2l0aCB0aGUgRG9tYWluIE1vZGVsIGFuZCBCdXNpbmVzcyBSdWxlcyBuZWVkcywKK1plc3TihKIgYWRkcmVzc2VzIHRoZSBwcm9ncmFtbWluZyBwcm9ibGVtcyBmcm9tIHRoZSB0b3AtZG93biwgc3RhcnRpbmcgd2l0aCB0aGUgRG9tYWluIE1vZGVsIGFuZCBCdXNpbmVzcyBSdWxlcyBuZWVkcywKIGFuZCBsZXQgdGhvc2UgcmVxdWlyZW1lbnRzIGZsb3cgZG93bndhcmRzIGluIHRoZSBzb2Z0d2FyZSBzdGFjayBhbmQgZGljdGF0ZSB0aGUgcmVxdWlyZW1lbnRzIGZvciB1bmRlcmx5aW5nIGxheWVycwogc3VjaCBhcyBwZXJzaXN0ZW5jZSwgbWVzc2FnaW5nLCBxdWVyeWluZyBhbmQgbW9yZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBidXNpbmVzcyB2YWx1ZSBkZXZlbG9wZXIgaXMgbGVmdCB0bwogY29uY2VudHJhdGUgb24gdGhlIGRvbWFpbiBtb2RlbHMgYW5kIHRoZSBhY3R1YWwgYXBwbGljYXRpb24gYnJpbmdpbmcgdGhlIHZhbHVlLCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG1hc3NpdmUgYW1vdW50cwogb2YgZ2x1ZSBjb2RlIHRvIHRpZSB1bmRlcmx5aW5nIHRlY2hub2xvZ2llcyB0b2dldGhlci4KIAogPT0gUHJvYmxlbSBEZXNjcmlwdGlvbnMgPT0KLVFpNGogZGlkbid0IGFwcGVhciBvdXQgb2YgdGhlIGJsdWUsIHdoZW4gdGhlIGZvdW5kZXJzIG9mIHRoZSBwcm9qZWN0IGhhZCBub3RoaW5nIGJldHRlciB0byBkby4gSXQgaXMgdGhlIHJlc3VsdCBvZgorWmVzdOKEoiBkaWRuJ3QgYXBwZWFyIG91dCBvZiB0aGUgYmx1ZSwgd2hlbiB0aGUgZm91bmRlcnMgb2YgdGhlIHByb2plY3QgaGFkIG5vdGhpbmcgYmV0dGVyIHRvIGRvLiBJdCBpcyB0aGUgcmVzdWx0IG9mCiBvYnNlcnZhdGlvbiBvZiBwcm9ibGVtcyBpbiByZWFsIGFwcGxpY2F0aW9ucywgYW5kIHRoZSBleHBlcmllbmNlIGZyb20gcHJldmlvdXMgYXR0ZW1wdHMgdG8gYWRkcmVzcyBvciBjb3JyZWN0IHRoZXNlCi1wcm9ibGVtcywgdGhhdCBoYXMgbGVkIHRvIHRoZSBRaTRqIHZpc2lvbi4KK3Byb2JsZW1zLCB0aGF0IGhhcyBsZWQgdG8gdGhlIFplc3TihKIgdmlzaW9uLgogCiA9PSBPYmplY3QgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgKE9PUCkgPT0KIEhvdyBjYW4gT09QIGJlIGEgcHJvYmxlbT8gV2UgYW5kIG90aGVycyBoYXZlIG9ic2VydmVkIHRoYXQgdGhlcmUgaXMgYSBmdW5kYW1lbnRhbCBmbGF3IGluIHRoZSBPT1AgbW9kZWwuIEluIGZhY3QsIHdlCkBAIC05OCw0ICsxMTcsNCBAQAogQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIGlzIGhlYXZpbHkgaW5mbHVlbmNlZCBieSB0aGUgYm9vayAiRG9tYWluIERyaXZlbiBEZXNpZ24iIGJ5IEVyaWMgRXZhbnMuIEFuZCB3ZSBhcmUKIHRyeWluZyB0byB1c2UgaGlzIGFuYWx5c2lzIG9mIHRoZSBwcm9ibGVtIHRvIHByb3ZpZGUgdGhlIG1lY2hhbmlzbXMgbmVlZGVkIHRvIGdldCB0aGUgam9iIGRvbmUgcXVpY2tlciBhbmQgbW9yZQogcmVsaWFibHkuIE1yIEV2YW5zIHRhbGtzIGFib3V0IEFwcGxpY2F0aW9ucywgTGF5ZXJzLCBNb2R1bGVzLCBTcGVjaWZpY2F0aW9ucywgU2lkZUVmZmVjdHMgYW5kIHNvIGZvcnRoLCBhbmQgYWxsIG9mCi10aGVzZSBzaG91bGQgYmUgcHJlc2VudCBpbiBhIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBpbXBsZW1lbnRhdGlvbiwgYW5kIHRvIGEgbGFyZ2UgZXh0ZW50IGl0IGlzIGluIFFpNGouCit0aGVzZSBzaG91bGQgYmUgcHJlc2VudCBpbiBhIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBpbXBsZW1lbnRhdGlvbiwgYW5kIHRvIGEgbGFyZ2UgZXh0ZW50IGl0IGlzIGluIFplc3TihKIuCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL2hpZ2hsaWdodHMudHh0IGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9zcmMvZG9jcy9oaWdobGlnaHRzLnR4dAppbmRleCA2Njg0NDQwLi4yNjMwOTZiIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL2hpZ2hsaWdodHMudHh0CisrKyBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vc3JjL2RvY3MvaGlnaGxpZ2h0cy50eHQKQEAgLTEsMyArMSwyMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIFtbaGlnaGxpZ2h0cyxIaWdobGlnaHRzXV0KID0gSGlnaGxpZ3RzID0KIApAQCAtNjQsMTEgKzgzLDExIEBACiAKIGltYWdlOmNsYXNzZXMtYXJlLWRlYWQuZ2lmW10KIAotUWk0auKEoiBpcyB0cnlpbmcgdG8gYWRkcmVzcyB0aGUgZmxhd3Mgb2YgT09QIGFuZCBpbnRyb2R1Y2UgQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIHRvIHRoZSB3b3JsZCwgd2l0aG91dAorWmVzdOKEoiBpcyB0cnlpbmcgdG8gYWRkcmVzcyB0aGUgZmxhd3Mgb2YgT09QIGFuZCBpbnRyb2R1Y2UgQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIHRvIHRoZSB3b3JsZCwgd2l0aG91dAogaW50cm9kdWNpbmcgbmV3IHByb2dyYW1taW5nIGxhbmd1YWdlcywgb3IgYXdrd2FyZCBjb25zdHJ1Y3RzLiBIZWNrLCB3ZSBkb24ndCBldmVuIHVzZSBhbnkgWE1MLgogCi1RaTRq4oSiIGlzIG5vdCBhIGZyYW1ld29yay4gSXQgaXMgYSBuZXcgd2F5IHRvIHdyaXRlIGNvZGUuIE90aGVyIHBlb3BsZSBtaWdodCBjcmVhdGUgZnJhbWV3b3JrcyB1c2luZyBRaTRq4oSiLCBvciBjcmVhdGUgYQotZnJhbWV3b3JrIG9wdGltaXplZCBmb3IgUWk0auKEoiwgYnV0IGhlcmUgYXQgUWk0auKEoiB3ZSBjb25jZW50cmF0ZSB0byBtYWtlIFFpNGrihKIgYmVoYXZlIHdlbGwgaW4gZXhpc3RpbmcgZnJhbWV3b3JrcywKK1plc3TihKIgaXMgbm90IGEgZnJhbWV3b3JrLiBJdCBpcyBhIG5ldyB3YXkgdG8gd3JpdGUgY29kZS4gT3RoZXIgcGVvcGxlIG1pZ2h0IGNyZWF0ZSBmcmFtZXdvcmtzIHVzaW5nIFplc3TihKIsIG9yIGNyZWF0ZSBhCitmcmFtZXdvcmsgb3B0aW1pemVkIGZvciBaZXN04oSiLCBidXQgaGVyZSBhdCBaZXN04oSiIHdlIGNvbmNlbnRyYXRlIHRvIG1ha2UgWmVzdOKEoiBiZWhhdmUgd2VsbCBpbiBleGlzdGluZyBmcmFtZXdvcmtzLAogYXBwbGljYXRpb24gc2VydmVycywgcGxhdGZvcm1zIGFuZCBlbnZpcm9ubWVudHMuCiAKIFlvdSBhcmUgdG8gZW1iYXJrIG9uIGEgbmV3IGpvdXJuZXkuIEVuam95IQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9zcmMvZG9jcy9xaTRqLWNvcC50eHQgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3FpNGotY29wLnR4dAppbmRleCA5YTdmMzZiLi4wNzI2YWI4IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3FpNGotY29wLnR4dAorKysgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3FpNGotY29wLnR4dApAQCAtMSwzICsxLDIyIEBACi1bW3FpNGotY29wLENPUCB3aXRoIEphdmEgYW5kIFFpNGpdXQotPSBDT1Agd2l0aCBKYXZhIGFuZCBRaTRqID0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitbW3FpNGotY29wLENPUCB3aXRoIEphdmEgYW5kIFplc3TihKJdXQorPSBDT1Agd2l0aCBKYXZhIGFuZCBaZXN04oSiID0KIApkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9zcmMvZG9jcy9zdGF0ZS1tb2RlbGluZy50eHQgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3N0YXRlLW1vZGVsaW5nLnR4dAppbmRleCAzNDFlMDY1Li4wYzVlYzgyIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3N0YXRlLW1vZGVsaW5nLnR4dAorKysgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3N0YXRlLW1vZGVsaW5nLnR4dApAQCAtMSw5ICsxLDI4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1tzdGF0ZS1tb2RlbGluZyxTdGF0ZSBNb2RlbGluZ11dCi09IFFpNGogYW5kIHN0YXRlIG1vZGVsaW5nID0KKz0gWmVzdOKEoiBhbmQgc3RhdGUgbW9kZWxpbmcgPQogCiAoRnJvbSBSaWNrYXJkIE9iZXJnJ3MgYmxvZywgaHR0cDovL3d3dy5qcm9sbGVyLmNvbS9yaWNrYXJkL2VudHJ5L3FpNGpfYW5kX3N0YXRlX21vZGVsaW5nLCAyMDA5LTAyLTE5KQogCi1JbiB0aGUgUWk0aiBwcm9qZWN0IHdlIHN0cml2ZSB0byBiZWluZyBhYmxlIHRvIGV4cHJlc3Mgb3VyIGRvbWFpbiBhcyBkaXJlY3RseSBhcyBwb3NzaWJsZSwgd2l0aCBhcyBsaXR0bGUgdHJhbnNsYXRpb24KK0luIHRoZSBaZXN04oSiIHByb2plY3Qgd2Ugc3RyaXZlIHRvIGJlaW5nIGFibGUgdG8gZXhwcmVzcyBvdXIgZG9tYWluIGFzIGRpcmVjdGx5IGFzIHBvc3NpYmxlLCB3aXRoIGFzIGxpdHRsZSB0cmFuc2xhdGlvbgogYXMgcG9zc2libGUgYmV0d2VlbiBob3cgd2UgdGhpbmsgYWJvdXQgYSBkb21haW4gYW5kIGhvdyBpdCBpcyBhY3R1YWxseSBjb2RlZC4KIFRoaXMgdGhlbiBhZmZlY3RzIG91ciBlbnRpcmUgdmlldyBvZiBob3cgYXBwbGljYXRpb24gZnJhbWV3b3JrcyBzaG91bGQgYmUgY29uc3RydWN0ZWQsIGFuZCB3aGF0IHdlIGNvbnNpZGVyIGdvb2QgYW5kCiBiYWQgd2F5cyBvZiBpbXBsZW1lbnRpbmcgY2VydGFpbiBmZWF0dXJlcy4KQEAgLTE3LDcgKzM2LDcgQEAKIAogRnJvbSBhIERERCBwZXJzcGVjdGl2ZSB3ZSB3YW50IHRvIHRhbGsgYWJvdXQgRW50aXRpZXMgYW5kIFZhbHVlcywgUHJvcGVydGllcyBhbmQgQXNzb2NpYXRpb25zLgogSWYgb3VyIGNvZGUgZG9lcyBub3QgcmVmbGVjdCB0aGlzLCB0aGVuIHRoZXJlIGlzIHRyYW5zbGF0aW9uIGdvaW5nIG9uLCBhbmQgdHJhbnNsYXRpb24gaW5ldml0YWJseSBsZWFkcyB0byBpbmZvcm1hdGlvbiBsb3NzLgotSW4gUWk0aiwgd2hlcmUgQ29tcG9zaXRlcyBhbmQgbm90IE9iamVjdHMsIGFyZSB0aGUgYmFzaWMgY29uc3RydWN0LCB3ZSBoYXZlIGNyZWF0ZWQgc3BlY2lhbGl6ZWQgZm9ybXMgdG8gbW9kZWwgdGhlc2UKK0luIFplc3TihKIsIHdoZXJlIENvbXBvc2l0ZXMgYW5kIG5vdCBPYmplY3RzLCBhcmUgdGhlIGJhc2ljIGNvbnN0cnVjdCwgd2UgaGF2ZSBjcmVhdGVkIHNwZWNpYWxpemVkIGZvcm1zIHRvIG1vZGVsIHRoZXNlCiBjb25jZXB0cyBtb3JlIGV4cGxpY2l0bHkuCiBXZSBoYXZlIEVudGl0eUNvbXBvc2l0ZXMgYW5kIFZhbHVlQ29tcG9zaXRlcywgZWFjaCB3aXRoIGRpZmZlcmVudCB3YXlzIG9mIGNyZWF0aW5nIHRoZW0gYW5kIG1hbmFnaW5nIHRoZW0uCiBCb3RoIEVudGl0eUNvbXBvc2l0ZXMgYW5kIFZhbHVlQ29tcG9zaXRlcyBjYW4gdGhlbiBoYXZlIFByb3BlcnRpZXMsIGFzIGZpcnN0LWNsYXNzIG9iamVjdHMsIGJ1dCBQcm9wZXJ0aWVzIGluCkBAIC03NCw3ICs5Myw3IEBACiAiQFVzZURlZmF1bHRzIFByb3BlcnR5PExpc3Q8U3RyaW5nPj4gYWRkcmVzc2VzKCk7IiB3b3VsZCBiZSBpbml0aWFsaXplZCB0byBhbiBlbXB0eSBBcnJheUxpc3QsIGZvciBleGFtcGxlLgogCiBJbiBhZGRpdGlvbiBJIGhhdmUgc2V0IHN1ck5hbWUoKSB0byBiZSBAT3B0aW9uYWwuCi1JbiBRaTRqIHdlIGhhdmUgZGVmaW5lZCBhbGwgcHJvcGVydGllcyB0byBiZSBub3QtbnVsbCBhcyB0aGUgZGVmYXVsdCwgYW5kIHRoZSBzYW1lIGdvZXMgZm9yIGFsbCBwYXJhbWV0ZXJzIGluIG1ldGhvZAorSW4gWmVzdOKEoiB3ZSBoYXZlIGRlZmluZWQgYWxsIHByb3BlcnRpZXMgdG8gYmUgbm90LW51bGwgYXMgdGhlIGRlZmF1bHQsIGFuZCB0aGUgc2FtZSBnb2VzIGZvciBhbGwgcGFyYW1ldGVycyBpbiBtZXRob2QKIGludm9jYXRpb25zLgogSWYgeW91IGV4cGxpY2l0bHkgd2FudCB0byBhbGxvdyBwcm9wZXJ0aWVzIHRvIGJlIG51bGwsIHNvIHRoYXQgZm9yIGV4YW1wbGUgIk1hZG9ubmEiIHdvdWxkIGJlIGFuIGFjY2VwdGFibGUgbmFtZSwKIHRoZW4geW91IGNhbiBtYXJrIGl0IGFzIEBPcHRpb25hbC4KQEAgLTExNSw3ICsxMzQsNyBAQAogYXJvdW5kIHlvdXIgY29kZSwgbG9va2luZyBhbGwgc29nZ3kgYW5kIHVuYXBwZXRpemluZy4KIAogV2hhdCB0byBkbyBhYm91dCB0aGlzPwotT25lIG9mIHRoZSBncmVhdCBpbnZlbnRpb25zIG9mIFFpNGosIEkgYmVsaWV2ZSwgaXMgdGhlIG5vdGlvbiBvZiBwcml2YXRlIG1peGlucy4KK09uZSBvZiB0aGUgZ3JlYXQgaW52ZW50aW9ucyBvZiBaZXN04oSiLCBJIGJlbGlldmUsIGlzIHRoZSBub3Rpb24gb2YgcHJpdmF0ZSBtaXhpbnMuCiBUaGF0IHdlIGNhbiBoYXZlIG1peGlucyBpbiBhbiBvYmplY3Qgd2hpY2ggYXJlIGV4cGxpY2l0bHkgSElEREVOIGZyb20gdXNhZ2Ugb3V0c2lkZSBvZiBpdC4KIEhvdyBjYW4gd2UgdXNlIHRoaXMgZm9yIHN0YXRlIG1vZGVsaW5nPwogV2hhdCB5b3UnZCB3YW50IHRvIGRvIGlzIHRvIG1vZGVsIHRoZSBzdGF0ZSBvZiBhbiBFbnRpdHkgYXMgYSBwcml2YXRlIG1peGluLCB3aGljaCBpcyBoaWRkZW4gZnJvbSBjbGllbnRzLCBhbmQgdGhlbgpAQCAtMTQ1LDEwICsxNjQsMTAgQEAKIAogQW5kIHNvIG11Y2ggbW9yZS4uLgogCi1UaGUgYWJvdmUgaXMganVzdCBhIHNtYWxsIHRhc3RlIG9mIHdoYXQgeW91IGNhbiBkbyB3aXRoIHN0YXRlIG1vZGVsaW5nIGluIFFpNGouCitUaGUgYWJvdmUgaXMganVzdCBhIHNtYWxsIHRhc3RlIG9mIHdoYXQgeW91IGNhbiBkbyB3aXRoIHN0YXRlIG1vZGVsaW5nIGluIFplc3TihKIuCiBUaGVyZSBpcyBhbHNvIHN1cHBvcnQgZm9yIGFzc29jaWF0aW9ucyBhbmQgbWFueS1hc3NvY2lhdGlvbnMsIHRoZSBub3Rpb24gb2YgYWdncmVnYXRlcywgYW5kIGEgY29tcGxldGUgcGx1Z2dhYmxlCiBzeXN0ZW0gZm9yIHBlcnNpc3RlbmNlIGFuZCBpbmRleGluZy9xdWVyeWluZyBvZiBkYXRhLgotVG8gZW5kIHdpdGgsIGhlcmUncyBhIHNhbXBsZSBvZiBob3cgc29tZSBvdGhlciBzdGF0ZSBtb2RlbGluZyBjb25jZXB0cyBjYW4gYmUgZXhwcmVzc2VkIGluIFFpNGo6CitUbyBlbmQgd2l0aCwgaGVyZSdzIGEgc2FtcGxlIG9mIGhvdyBzb21lIG90aGVyIHN0YXRlIG1vZGVsaW5nIGNvbmNlcHRzIGNhbiBiZSBleHByZXNzZWQgaW4gWmVzdOKEojoKIAogW3NuaXBwZXQsamF2YV0KIC0tLS0tLS0tLS0tCkBAIC0xNTgsNSArMTc3LDUgQEAKIAogSSBob3BlIHRoZXkgYXJlIHNlbGYtZXhwbGFuYXRvcnkuCiAKLU15IGhvcGUgaXMgdGhhdCB3aXRoIENvbXBvc2l0ZSBPcmllbnRlZCBQcm9ncmFtbWluZyBhbmQgUWk0aiB3ZSBjYW4gY29tZSBvbmUgc3RlcCBjbG9zZXIgdG8gYmVpbmcgYWJsZSB0byBleHByZXNzIG91cgorTXkgaG9wZSBpcyB0aGF0IHdpdGggQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIGFuZCBaZXN04oSiIHdlIGNhbiBjb21lIG9uZSBzdGVwIGNsb3NlciB0byBiZWluZyBhYmxlIHRvIGV4cHJlc3Mgb3VyCiBkb21haW4gYXMgY2xlYXJseSBhcyBwb3NzaWJsZSBpbiBjb2RlLgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9zcmMvZG9jcy93aGF0LWlzLWNvbXBvc2l0ZS1vcmllbnRlZC1wcm9ncmFtbWluZy50eHQgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3doYXQtaXMtY29tcG9zaXRlLW9yaWVudGVkLXByb2dyYW1taW5nLnR4dAppbmRleCAxYzRlZjIzLi5mMTQ5M2MzIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3doYXQtaXMtY29tcG9zaXRlLW9yaWVudGVkLXByb2dyYW1taW5nLnR4dAorKysgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3doYXQtaXMtY29tcG9zaXRlLW9yaWVudGVkLXByb2dyYW1taW5nLnR4dApAQCAtMSwzICsxLDIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1t3aGF0LWlzLWNvcCxXaGF0IGlzIENPUD9dXQogPSBXaGF0IGlzIENPUD8gPQogCkBAIC01LDcgKzI0LDcgQEAKIFByb2dyYW1taW5nIHJlYWxseSBpcy4KIAogVGhlIGFydGljbGUgdXNlcyBDIyBhbmQgYSAic2hvdyBieSBleGFtcGxlIiBhcHByb2FjaCB0byBleHBsYWluaW5nIENPUCwgYW5kIHRoaXMgc2hvd3MgY2xlYXJseSB0aGF0IENPUCBpcyBub3QKLUphdmEgc3BlY2lmaWMsIGFuZCBhbHRob3VnaCBRaTRqIHdhcyAodG8gb3VyIGtub3dsZWRnZSkgZmlyc3QgdG8gaW50cm9kdWNlIHRoZSBuYW1lLCBpdCBhcHBsaWVzIGFjcm9zcyBsYW5ndWFnZXMgYW5kCitKYXZhIHNwZWNpZmljLCBhbmQgYWx0aG91Z2ggWmVzdOKEoiB3YXMgKHRvIG91ciBrbm93bGVkZ2UpIGZpcnN0IHRvIGludHJvZHVjZSB0aGUgbmFtZSwgaXQgYXBwbGllcyBhY3Jvc3MgbGFuZ3VhZ2VzIGFuZAogcG90ZW50aWFsbHkgZGVzZXJ2ZXMgb25lIG9yIG1vcmUgbGFuZ3VhZ2VzIG9uIGl0cyBvd24uCiAKIApAQCAtMjIsNyArNDEsNyBAQAogCiBJJ3ZlIHdyaXR0ZW4gYSBzZXJpZXMgb2YgcG9zdCBvbiBBT1AgbGF0ZWx5IChoZXJlLCBoZXJlIGFuZCBoZXJlKSwgYW5kIGluIHRoZSBsYXN0IHBhcnQgSSBwcm9taXNlZCB0byB0YWNrbGUgbWl4aW5zCiBhbmQgaW50cm9kdWN0aW9ucyBpbiBhIGZ1dHVyZSBwb3N0LiBXaGVuIEkgd2FzIGRvaW5nIG15IHJlc2VhcmNoIGZvciBqdXN0IHRoYXQsIEkgY2FtZSBjcm9zcyBhIEphdmEgZnJhbWV3b3JrIChqdXN0Ci1odW1vciBtZSA6cCkgY2FsbGVkIFFpNGogKHRoYXQncyAnY2hlZSBmb3IgamF5JyksIHdyaXR0ZW4gYnkgU3dlZGlzaCBSaWNoYXJkIMOWYmVyZywgcGlvbmVlcmluZyB0aGUgaWRlYSBvZiBDb21wb3NpdGUKK2h1bW9yIG1lIDpwKSBjYWxsZWQgWmVzdOKEoiAodGhhdCdzICdjaGVlIGZvciBqYXknKSwgd3JpdHRlbiBieSBTd2VkaXNoIFJpY2hhcmQgw5ZiZXJnLCBwaW9uZWVyaW5nIHRoZSBpZGVhIG9mIENvbXBvc2l0ZQogT3JpZW50ZWQgUHJvZ3JhbW1pbmcsIHdoaWNoIGluc3RhbnRseSBwdXQgYSBzcGVsbCBvbiBtZS4gRXNzZW50aWFsbHksIGl0IHRha2VzIHRoZSBjb25jZXB0cyBmcm9tIEFzcGVjdCBPcmllbnRlZAogUHJvZ3JhbW1pbmcgdG8gdGhlIGV4dHJlbWUsIGFuZCBmb3IgdGhlIHBhc3Qgd2VlayBJ4oCZdmUgZHVnIGludG8gaXQgd2l0aCBhIHBhc3Npb24uIFRoaXMgcG9zdCBpcyB0aGUgZmlyc3QgZnJ1aXRzIG9mCiBteSBsYWJvci4KQEAgLTMwLDcgKzQ5LDcgQEAKID09PSBPT1AgaXMgTm90IE9iamVjdCBPcmllbnRlZCEgPT09CiAKIE9uZSBvZiB0aGUgdGhpbmdzIHRoYXQgUmljaGFyZCDDlmJlcmcgYXJndWVzLCBpcyB0aGF0IE9PUCBpcyBub3QgcmVhbGx5IG9iamVjdCBvcmllbnRlZCBhdCBhbGwsIGJ1dCByYXRoZXIgY2xhc3MKLW9yaWVudGVkLiBBcyB0aGUgUWk0aiB3ZWJzaXRlIHByb2NsYWltcywgImNsYXNzIGlzIHRoZSBmaXJzdCBjbGFzcyBjaXRpemVuIHRoYXQgb2JqZWN0cyBhcmUgZGVyaXZlZCBmcm9tLiBOb3Qgb2JqZWN0cworb3JpZW50ZWQuIEFzIHRoZSBaZXN04oSiIHdlYnNpdGUgcHJvY2xhaW1zLCAiY2xhc3MgaXMgdGhlIGZpcnN0IGNsYXNzIGNpdGl6ZW4gdGhhdCBvYmplY3RzIGFyZSBkZXJpdmVkIGZyb20uIE5vdCBvYmplY3RzCiBiZWluZyB0aGUgZmlyc3QtY2xhc3MgY2l0aXplbiB0byB3aGljaCBvbmUgb3IgbWFueSBjbGFzc2VzIGFyZSBhc3NpZ25lZCIuIENvbXBvc2l0ZSBvcmllbnRlZCBwcm9ncmFtbWluZyAoQ09QKSB0aGVuLAogdHJpZXMgdG8gd29yayBhcm91bmQgdGhpcyBsaW1pdGF0aW9uIGJ5IGJ1aWxkaW5nIG9uIGEgc2V0IG9mIGNvcmUgcHJpbmNpcGxlczsgdGhhdCBiZWhhdmlvciBkZXBlbmRzIG9uIGNvbnRleHQsIHRoYXQKIGRlY291cGxpbmcgaXMgYSB2aXJ0dWUsIGFuZCB0aGF0IGJ1c2luZXNzIHJ1bGVzIG1hdHRlciBtb3JlLiBGb3IgYSBzaG9ydCBhbmQgYWJzdHJhY3QgZXhwbGFuYXRpb24gb2YgQ09QLApAQCAtMzA1LDUgKzMyNCw1IEBACiBwb3N0cy4gSeKAmXZlIGFscmVhZHkgaW1wbGVtZW50ZWQgYSBwcm90b3R5cGUgZnJhbWV3b3JrIHRoYXQgc3VwcG9ydHMgdGhlIGFib3ZlIGV4YW1wbGVzLCB3aGljaCBidWlsZHMgb24gbXkKIGh0dHA6Ly93d3cuaXJpZGVzY2VuY2Uubm8vUG9zdHMvSW1wbGVtZW50aW5nLWFuLUFPUC1GcmFtZXdvcmstUGFydC0yLmFzcHhbcHJldmlvdXNseSBwb3N0ZWQgQU9QIGZyYW1ld29ya10sIGFuZCBJ4oCZbGwKIHBvc3QgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGF0IHNvb24uIElmIHlvdSB3YW50IHRvIGRpZyBkZWVwZXIgcmlnaHQgbm93IChhbmQgZG9u4oCZdCBtaW5kCi1hIGJpdCBvZiBKYXZhKSwgdGhlbiBJIHN1Z2dlc3QgeW91IGhlYWQgb3ZlciB0byB0aGUgUWk0aiB3ZWJzaXRlIGFuZCBwb2tlIGFib3V0IHRoZXJlLgorYSBiaXQgb2YgSmF2YSksIHRoZW4gSSBzdWdnZXN0IHlvdSBoZWFkIG92ZXIgdG8gdGhlIFplc3TihKIgd2Vic2l0ZSBhbmQgcG9rZSBhYm91dCB0aGVyZS4KIGh0dHA6Ly9yaWNrYXJkb2Jlcmcud29yZHByZXNzLmNvbS9bUmljaGFyZCDDlmJlcmdzIGJsb2ddIGFsc28gcHJvdmlkZXMgZ3JlYXQgaW5zaWdodC4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vc3JjL2RvY3Mvd2hhdHMtYW4tb2JqZWN0LnR4dCBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vc3JjL2RvY3Mvd2hhdHMtYW4tb2JqZWN0LnR4dAppbmRleCA0YjY4YjE1Li4xMWJiMjBkIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9kb2NzL3doYXRzLWFuLW9iamVjdC50eHQKKysrIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9zcmMvZG9jcy93aGF0cy1hbi1vYmplY3QudHh0CkBAIC0xLDMgKzEsMjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW3doYXQtcy1hbi1vYmplY3QtYW55d2F5LFdoYXQncyBhbiBPYmplY3QgYW55d2F5P11dCiA9IFdoYXQncyBhbiBPYmplY3QgYW55d2F5PyA9CiBJbiBPT1AgdGhlIG1haW4gaWRlYSBpcyB0aGF0IHdlIHNob3VsZCBtb2RlbCBvdXIgcmVhbGl0eSBieSBjcmVhdGluZyBPYmplY3RzLiBPYmplY3RzIGhhdmUgc3RhdGUsIGFuZCB0aGV5IGhhdmUgbWV0aG9kcy4KQEAgLTI4LDcgKzQ3LDcgQEAKIAogVGhpcyBpcyB0aGUgc2FtZSBpbiByZWFsIGxpZmUuIEkgZG9uJ3QgZ2V0IHRvIGRlY2lkZSBob3cgSSBjb21tdW5pY2F0ZSB3aXRoIHlvdS4gSSBoYXZlIHRvIHVzZSBlbmdsaXNoLCBhbmQgSSBoYXZlIHRvCiB1c2UgZW1haWwsIGFuZCBJIGhhdmUgdG8gc2VuZCBpdCB0byBhIHNwZWNpZmljIG1haWxpbmcgbGlzdC4gSXQgaXMgdGhlIGFsZ29yaXRobSBvZiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB1cywgdGhlCi1RaTRqIGRldiBtYWlsaW5nIGxpc3QsIHRoYXQgaGFzIHNldCB0aGVzZSBydWxlcywgbm90ICpJKiBhcyBhIHBhcnRpY2lwYW50IGluIHRoaXMgaW50ZXJhY3Rpb24uIFRoZSBzYW1lIHNob3VsZCwKK1plc3TihKIgZGV2IG1haWxpbmcgbGlzdCwgdGhhdCBoYXMgc2V0IHRoZXNlIHJ1bGVzLCBub3QgKkkqIGFzIGEgcGFydGljaXBhbnQgaW4gdGhpcyBpbnRlcmFjdGlvbi4gVGhlIHNhbWUgc2hvdWxkLAogb2J2aW91c2x5LCBiZSB0aGUgY2FzZSBmb3Igb2JqZWN0cy4KIAogU28sIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbGdvcml0aG1zIHNob3VsZCBkZWZpbmUgcm9sZXMgZm9yIGNvbGxhYm9yYXRpbmcgb2JqZWN0cywgYW5kIG9iamVjdHMgc2hvdWxkIHRoZW4KQEAgLTQ0LDcgKzYzLDcgQEAKIGNhdXNlcyBhIG51bWJlciBvZiBvdGhlciBwcm9ibGVtcywgc3VjaCBhcyB0aGUgInNlbGYgc2NoaXpvcGhyZW5pYSIgcHJvYmxlbSwgd2hlcmVieSB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB3aGVyZSB0aGUKIG9iamVjdCByZWFsbHkgaXMuIFRoZXJlIGlzIG5vICJ0aGlzIiBwb2ludGVyIHRoYXQgaGFzIGFueSByZWxldmFudCBtZWFuaW5nLgogCi1UaGUgQ29tcG9zaXRlIHBhdHRlcm4sIGFzIGltcGxlbWVudGVkIGluIENPUCBhbmQgUWk0aiwgZ2V0cyBhcm91bmQgdGhpcyBieSBzaW1wbHkgc2F5aW5nIHRoYXQgdGhlIGNvbXBvc2l0ZSwgYXMgYQorVGhlIENvbXBvc2l0ZSBwYXR0ZXJuLCBhcyBpbXBsZW1lbnRlZCBpbiBDT1AgYW5kIFplc3TihKIsIGdldHMgYXJvdW5kIHRoaXMgYnkgc2ltcGx5IHNheWluZyB0aGF0IHRoZSBjb21wb3NpdGUsIGFzIGEKIHdob2xlLCBpcyBhbiBvYmplY3QuIFRhZGEsIHdlIG5vdyBoYXZlIGEgInRoaXMiIHBvaW50ZXIsIGFuZCBhIGNvaGVyZW50IHdheSB0byBkZWFsIHdpdGggdGhlIG9iamVjdCBncmFwaCBhcyB0aG91Z2ggaXQKIHdhcyBhIHNpbmdsZSBvYmplY3QuIFdlIGFyZSBub3cgYWJsZSB0byBnZXQgYmFjayB0byB0aGUgc3RyZW5ndGhzIG9mIHRoZSBwcm9jZWR1cmFsIGFwcHJvYWNoLCB3aGljaCBhbGxvd3MgdGhlCiBpbXBsZW1lbnRlciBvZiB0aGUgYWxnb3JpdGhtIHRvIGRlZmluZSB0aGUgcm9sZXMgbmVlZGVkIGZvciB0aGUgYWxnb3JpdGhtLiBUaGUgcm9sZXMgY2FuIGVpdGhlciBiZSBzcGVjaWZpYyB0byBhbgpAQCAtNTgsNyArNzcsNyBAQAogbW9yZSBhbGdvcml0aG1zIHRoYW4gY29tcG9zaXRlcywgdGhlcmVmb3JlIGl0IGhhcyB0byBiZSBlYXN5IHRvIHJlYWR5IGFsZ29yaXRobXMsIGFuZCBvbmx5IHdoZW4gbmVjZXNzYXJ5IGRpdmUgZG93biBpbnRvCiBjb21wb3NpdGUgY29kZS4KIAotV2hlbiB0YWxraW5nIGFib3V0IENvbXBvc2l0ZXMgYXMgT2JqZWN0cyBpbiBRaTRqIGl0IGlzIG1vc3QgcmVsZXZhbnQgdG8gbG9vayBhdCBFbnRpdGllcywgc2luY2UgdGhlc2UgcmVwcmVzZW50IHBoeXNpY2FsCitXaGVuIHRhbGtpbmcgYWJvdXQgQ29tcG9zaXRlcyBhcyBPYmplY3RzIGluIFplc3TihKIgaXQgaXMgbW9zdCByZWxldmFudCB0byBsb29rIGF0IEVudGl0aWVzLCBzaW5jZSB0aGVzZSByZXByZXNlbnQgcGh5c2ljYWwKIG9iamVjdHMgaW4gYSBtb2RlbCwgcmF0aGVyIHRoYW4gYWxnb3JpdGhtcyBvciBzZXJ2aWNlcywgb3Igb3RoZXIgbm9uLWluc3RhbmNlLW9yaWVudGVkIHRoaW5ncy4KIAogSWYgRW50aXRpZXMgc2hvdWxkIGltcGxlbWVudCByb2xlcywgdmlhIG1peGlucywgaW4gb3JkZXIgdG8gaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyIHRocm91Z2ggYWxnb3JpdGhtcywgdGhlbiB0aGUKQEAgLTExNSw3ICsxMzQsNyBAQAogaXQgZWFzaWVyIGZvciB1cyB0byB1bmRlcnN0YW5kIGl0IHRoZSBuZXh0IHRpbWUgd2Ugc2VlIGl0IGJlaW5nIHVzZWQgaW4gYW5vdGhlciBhbGdvcml0aG0uCiAKIFRvIHN1bW1hcml6ZSB0aHVzIGZhciwgd2UgaGF2ZSBsb29rZWQgYXQgd2h5IE9PUCBzbyBmYXIgaGFzIG5vdCB3b3JrZWQgb3V0LCB3aHkgdGhpcyBpcyB0aGUgY2FzZSwgYW5kIGhvdyBDT1AgZGVhbHMKLXdpdGggaXQsIGFuZCBob3cgd2UgY2FuIGltcGxlbWVudCBhIGJldHRlciBzb2x1dGlvbiBvZiBFbnRpdGllcyB1c2luZyBRaTRqLiBBbGwgaXMgd2VsbCEKK3dpdGggaXQsIGFuZCBob3cgd2UgY2FuIGltcGxlbWVudCBhIGJldHRlciBzb2x1dGlvbiBvZiBFbnRpdGllcyB1c2luZyBaZXN04oSiLiBBbGwgaXMgd2VsbCEKIAogVGhlIG5leHQgc3RlcCBpcyB0byBzdGFydCB1c2luZyB0aGVzZSBFbnRpdGllcyBpbiBhbGdvcml0aG1zLiBBbGdvcml0aG1zIGFyZSB1c3VhbGx5IHN0YXRlbGVzcywgb3IgYXQgbGVhc3QgdGhleSBkb24ndAogaGF2ZSBhbnkgc3RhdGUgdGhhdCBzdXJ2aXZlcyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBhbGdvcml0aG0uIFRoZXJlIGlzIGlucHV0LCBzb21lIGNhbGN1bGF0aW9uLCBhbmQgdGhlbiBvdXRwdXQuIEluCkBAIC0xNzAsMTUgKzE4OSwxNSBAQAogcm9sZXMuIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGFsc28gdGVzdGFibGUsIGFuZCBpZiB0aGUgc2FtZSBtaXhpbiBpcyB1c2VkIG92ZXIgYW5kIG92ZXIgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiwgdGhlbgogb25seSBvbmUgc2V0IG9mIHRlc3RzIGlzIG5lZWRlZCBmb3IgZWFjaCByb2xlIGludGVyZmFjZS4KIAotVG8gc3VtbWFyaXplIHdlIGhhdmUgaW4gQ09QL1FpNGogYSB3YXkgdG8gZ2V0IHRoZSBiZXN0IGZyb20gcHJvY2VkdXJhbCBhbmQgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nLiBBcyB3ZSBoYXZlIHNlZW4KK1RvIHN1bW1hcml6ZSB3ZSBoYXZlIGluIENPUC9aZXN04oSiIGEgd2F5IHRvIGdldCB0aGUgYmVzdCBmcm9tIHByb2NlZHVyYWwgYW5kIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZy4gQXMgd2UgaGF2ZSBzZWVuCiB0aGUgZnVuY3Rpb25hbGl0eSBmYWxscyBpbnRvIHRocmVlIGNhdGVnb3JpZXMsIHRoZSBlbnRpdGllcyBpbXBsZW1lbnRpbmcgb2JqZWN0cywgdGhlIHNlcnZpY2VzIGltcGxlbWVudGluZwogaW50ZXJhY3Rpb25zLCBhbmQgdGhlIHVzZXIgaW50ZXJmYWNlIGltcGxlbWVudGluZyB0aGUgY29udGV4dC4gVGhpcyBhbHNvIG1hcHMgd2VsbCB0byB0aGUgaWRlYXMgb2YgTW9kZWxWaWV3Q29udHJvbGxlciwKIHdoaWNoIGluIHR1cm4gbWFwcyB3ZWxsIHRvIHRoZSBuZXcgaWRlYXMgZnJvbSBNciBSZWVuc2thdWcgKGludmVudG9yIG9mIE1WQykgY2FsbGVkIERDSTogRGF0YS1Db250ZXh0LUludGVyYWN0aW9uLiBBcyBhCi1zaWRlLWVmZmVjdCBvZiB0aGlzIGRpc2N1c3Npb24gd2UgaGF2ZSB0aGVyZWZvcmUgYWxzbyBzZWVuIGhvdyBDT1AvUWk0aiBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgRENJLCB3aGljaCBpcyBhbgorc2lkZS1lZmZlY3Qgb2YgdGhpcyBkaXNjdXNzaW9uIHdlIGhhdmUgdGhlcmVmb3JlIGFsc28gc2VlbiBob3cgQ09QL1plc3TihKIgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IERDSSwgd2hpY2ggaXMgYW4KIGltcG9ydGFudCBuZXh0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBvYmplY3RzIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMsIHRoZSBmdW5kYW1lbnRhbHMgb2Ygd2hpY2ggKEkgYmVsaWV2ZSkgYXJlIGNhcHR1cmVkCiBvbiB0aGlzIHBhZ2UuCiAKIFRoYXQncyBpdC4gV2VsbCBkb25lIGlmIHlvdSd2ZSByZWFkIHRoaXMgZmFyIDotKQogCiBDb21tZW50cyBhbmQgdGhvdWdodHMgdG8gcWk0ai1kZXYgZm9ydW0gYXQgR29vZ2xlIEdyb3VwcyBvbiB0aGlzIGFyZSBoaWdobHkgYXBwcmVjaWF0ZWQuIFRoaXMgaXMgdmVyeSB2ZXJ5IGltcG9ydGFudCB0b3BpY3MsCi1hbmQgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nL2V4cGxhaW5pbmcgd2h5IENPUC9RaTRqIGlzIHNvIGdyZWF0ISA6LSkKK2FuZCBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcvZXhwbGFpbmluZyB3aHkgQ09QL1plc3TihKIgaXMgc28gZ3JlYXQhIDotKQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RlbW8vaW50cm8vU3RhdGVNb2RlbGluZ0RvY3MuamF2YSBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9kZW1vL2ludHJvL1N0YXRlTW9kZWxpbmdEb2NzLmphdmEKaW5kZXggZWI0ZTAyOS4uM2Q2ODkxOCAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RlbW8vaW50cm8vU3RhdGVNb2RlbGluZ0RvY3MuamF2YQorKysgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby9pbnRyby9TdGF0ZU1vZGVsaW5nRG9jcy5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmRlbW8uaW50cm87CiAKIGltcG9ydCBvcmcucWk0ai5hcGkuYXNzb2NpYXRpb24uQXNzb2NpYXRpb247CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby9pbnRyby9XaGF0c0FuT2JqZWN0RG9jcy5qYXZhIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RlbW8vaW50cm8vV2hhdHNBbk9iamVjdERvY3MuamF2YQppbmRleCA5ODZhOTNiLi41MGJlMGM0IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby9pbnRyby9XaGF0c0FuT2JqZWN0RG9jcy5qYXZhCisrKyBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vc3JjL21haW4vamF2YS9vcmcvcWk0ai9kZW1vL2ludHJvL1doYXRzQW5PYmplY3REb2NzLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouZGVtby5pbnRybzsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5lbnRpdHkuRW50aXR5QnVpbGRlcjsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGVubWludXRlcy9MSUNFTlNFIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90ZW5taW51dGVzL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MzNiMWEuLjAwMDAwMDAKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90ZW5taW51dGVzL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGVubWludXRlcy9OT1RJQ0UgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3Rlbm1pbnV0ZXMvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzNiMjZlLi4wMDAwMDAwCi0tLSBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGVubWludXRlcy9OT1RJQ0UKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1RaTRqIDEwIE1pbnV0ZSBUdXRvcmlhbAotQ29weXJpZ2h0IDIwMDctMjAwOCwgVGhlIFFpNGogRGV2ZWxvcG1lbnQgVGVhbSBvZiBpbmRpdmlkdWFscy4KLQotU2VlIGh0dHA6Ly93d3cucWk0ai5vcmcvY29udHJpYnV0b3JzLmh0bWwgZm9yIGxpc3Qgb2Ygb2YgaW5kaXZpZHVhbHMuCi1BbHNvIHNlZSBlYWNoIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgQ29weXJpZ2h0IGNsYWltcy4KLQotUWk0aiBpcyBhIGNvbW11bml0eSBhZ2dyZWdhdGVkIHdvcmtzIHVuZGVyIENvcHlyaWdodCBsYXcuCi1BbGwgcGFydHMgb2YgdGhlIG9yaWdpbmFsIHdvcmtzIGF0IFFpNGogaXMgbGljZW5zZWQgdW5kZXIgdGhlCi1BcGFjaGUgTGljZW5zZSB2ZXIgMi4wIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcwotCi1CZWxvdyBmb2xsb3dzIGEgbGlzdCBvZiBiaW5hcnkgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBsaWNlbnNlczsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotPE5PTkU+Ci0KLQotRU5EIE9GIE5PVElDRQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGVubWludXRlcy9idWlsZC5ncmFkbGUgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3Rlbm1pbnV0ZXMvYnVpbGQuZ3JhZGxlCmluZGV4IGQ3NWI3ODguLmFhNDQwNDkgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGVubWludXRlcy9idWlsZC5ncmFkbGUKKysrIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90ZW5taW51dGVzL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJBIDEwLW1pbnV0ZSBJbnRyb2R1Y3Rpb24gVHV0b3JpYWwgdG8gUWk0aiBpbiBpdHMgc2ltcGxlc3QgZm9ybS4iCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1qYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiUWk0aiBUdXRvcmlhbCAtIDEwIG1pbnV0ZSBJbnRyb2R1Y3Rpb24iIH19CitkZXNjcmlwdGlvbiA9ICJBIDEwLW1pbnV0ZSBJbnRyb2R1Y3Rpb24gVHV0b3JpYWwgdG8gQXBhY2hlIFplc3TihKIgaW4gaXRzIHNpbXBsZXN0IGZvcm0uIgorCitqYXIgeyBtYW5pZmVzdCB7IG5hbWUgPSAiQXBhY2hlIFplc3TihKIgVHV0b3JpYWwgLSAxMCBtaW51dGUgSW50cm9kdWN0aW9uIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3Rlbm1pbnV0ZXMvc3JjL2RvY3MvdGVuLW1pbnV0ZXMudHh0IGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90ZW5taW51dGVzL3NyYy9kb2NzL3Rlbi1taW51dGVzLnR4dAppbmRleCAyOGFkMGUzLi5kYzg2YjVmIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3Rlbm1pbnV0ZXMvc3JjL2RvY3MvdGVuLW1pbnV0ZXMudHh0CisrKyBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGVubWludXRlcy9zcmMvZG9jcy90ZW4tbWludXRlcy50eHQKQEAgLTEsMTUgKzEsMzQgQEAKLVtbdGVuLW1pbnV0ZXMtaW50cm8sUWk0aiBpbiAxMCBtaW51dGVzXV0KLT0gUWk0aiBpbiAxMCBtaW51dGVzID0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitbW3Rlbi1taW51dGVzLWludHJvLFplc3TihKIgaW4gMTAgbWludXRlc11dCis9IFplc3TihKIgaW4gMTAgbWludXRlcyA9CiAKIFRJUDogVGhlc2VzIHR1dG9yaWFscyBhcmUgYmFzZWQgb24gYWN0dWFsIGNvZGUgZm91bmQgaW4gdGhlIGB0dXRvcmlhbHMvYCBkaXJlY3Rvcnkgb2YgdGhlCi1odHRwOi8vcWk0ai5vcmcvZG93bmxvYWRzLmh0bWxbUWk0aiBTREsgc291cmNlc10uIFlvdSBzaG91bGQgc3RhcnQgeW91ciBmYXZvcml0ZSBlZGl0b3IgYW5kIGZpbmQgdGhlIGNvZGUgcmVsYXRlZCB0bworaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvZG93bmxvYWQuaHRtbFtaZXN04oSiIFNESyBzb3VyY2VzXS4gWW91IHNob3VsZCBzdGFydCB5b3VyIGZhdm9yaXRlIGVkaXRvciBhbmQgZmluZCB0aGUgY29kZSByZWxhdGVkIHRvCiB0aGlzIHR1dG9yaWFsLCBydW4gaXQgYW5kIHBsYXkgd2l0aCBpdC4KIAogCi0gICAgKiBRaTRqIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHByb2dyYW1taW5nIGxhbmd1YWdlLCBubyBhZGRpdGlvbmFsIGNvbXBpbGVycyBuZWVkZWQgYW5kIGFsbCB5b3VyIGV4aXN0aW5nIHRvb2xzCisgICAgKiBaZXN04oSiIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHByb2dyYW1taW5nIGxhbmd1YWdlLCBubyBhZGRpdGlvbmFsIGNvbXBpbGVycyBuZWVkZWQgYW5kIGFsbCB5b3VyIGV4aXN0aW5nIHRvb2xzCiAgICAgICB3b3JrIGp1c3QgbGlrZSBiZWZvcmUuIEl0IGlzIHB1cmUgSmF2YS4KLSAgICAqIFFpNGogd29ya3Mgd2l0aCBDb21wb3NpdGVzLgotICAgICogVGhlIGVxdWl2YWxlbnQgb2YgYW4gT2JqZWN0IGluc3RhbmNlIGluIE9PUCwgaXMgYSBDb21wb3NpdGUgaW5zdGFuY2UgaW4gUWk0ai4KKyAgICAqIFplc3TihKIgd29ya3Mgd2l0aCBDb21wb3NpdGVzLgorICAgICogVGhlIGVxdWl2YWxlbnQgb2YgYW4gT2JqZWN0IGluc3RhbmNlIGluIE9PUCwgaXMgYSBDb21wb3NpdGUgaW5zdGFuY2UgaW4gWmVzdOKEoi4KICAgICAqIENvbXBvc2l0ZXMgYXJlIGNvbnN0cnVjdGVkIGZyb20gRnJhZ21lbnRzLgogICAgICogRnJhZ21lbnRzIGFyZSBNaXhpbnMsIENvbmNlcm5zLCBDb25zdHJhaW50cyBhbmQgU2lkZUVmZmVjdHMuCiAgICAgKiBPbmx5IE1peGlucyBjYXJyeSBDb21wb3NpdGUgc3RhdGUuIFRoZSBvdGhlcnMgYXJlIHNoYXJlZCBiZXR3ZWVuIENvbXBvc2l0ZSBpbnN0YW5jZXMuCkBAIC0yMiw3ICs0MSw3IEBACiBNb3Jlb3ZlciwgeW91J2xsIG5lZWQgYW4gRW50aXR5U3RvcmUgZm9yIHBlcnNpc3RlbmNlIGFuZCBhbiBJbmRleGluZyBlbmdpbmUgZm9yIHF1ZXJ5aW5nLiBDaG9vc2UgYW1vbmcgdGhlIGF2YWlsYWJsZQogaW1wbGVtZW50YXRpb25zIGxpc3RlZCBpbiB0aGUgPDxleHRlbnNpb25zPj4gc2VjdGlvbi4KIAotU2VlIHRoZSA8PGhvd3RvLWRlcGVuZC1vbi1xaTRqPj4gdHV0b3JpYWwgZm9yIGRldGFpbHMuCitTZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXplc3Q+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KIAogQ29tcG9zaXRpb24gaXMgZG9uZSB3aXRoIEphdmEgaW50ZXJmYWNlcyBhbmQgQW5ub3RhdGlvbnMuIEV4YW1wbGU7CiBbc25pcHBldCxqYXZhXQpAQCAtNDMsMTQgKzYyLDE0IEBACiAKIEV4dGVuZGluZyB0aGUgQ29uY2Vybk9mIGlzIGEgY29udmVuaWVuY2UgbWVjaGFuaXNtLCBpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IEBDb25jZXJuRm9yIGFubm90YXRpb24gb24gYSBwcml2YXRlIGZpZWxkLAogd2hpY2ggY2FuIGJlIHVzZWQgaW4gcmFyZSBvY2Nhc2lvbnMgd2hlbiB5b3UgYXJlIG5vdCBhYmxlIHRvIGV4dGVuZC4gVGhpcyBiYXNlIGNsYXNzIGRlZmluZXMgdGhlIGBuZXh0YCBmaWVsZCwgd2hpY2ggaXMKLXNldCB1cCBieSB0aGUgUWk0aiBydW50aW1lIGFuZCBwb2ludHMgdG8gdGhlIG5leHQgZnJhZ21lbnQgaW4gdGhlIGNhbGwgc3RhY2suCitzZXQgdXAgYnkgdGhlIFplc3TihKIgcnVudGltZSBhbmQgcG9pbnRzIHRvIHRoZSBuZXh0IGZyYWdtZW50IGluIHRoZSBjYWxsIHN0YWNrLgogCi1XZSBjYW4gYWxzbyBzZWUgdGhhdCB0aGUgSW52ZW50b3J5U2VydmljZSBpcyBwcm92aWRlZCB0byB0aGUgY29uY2Vybiwgd2hpY2ggaXMgZG9uZSB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uLiBRaTRqCitXZSBjYW4gYWxzbyBzZWUgdGhhdCB0aGUgSW52ZW50b3J5U2VydmljZSBpcyBwcm92aWRlZCB0byB0aGUgY29uY2Vybiwgd2hpY2ggaXMgZG9uZSB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uLiBaZXN04oSiCiBhbHNvIHN1cHBvcnRzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHZpYSBjb25zdHJ1Y3RvcnMgYW5kIG1ldGhvZHMuCiAKLVRoZSBhYm92ZSBleGFtcGxlIGlzIG9idmlvdXNseSBkb2luZyBwZXJzaXN0ZW5jZSwgYW5kIHdlIGhhdmUgbm8gY29kZSBoYW5kbGluZyB0aGlzLiBCdXQgUWk0aiBzdXBwb3J0cyBwZXJzaXN0ZW5jZQotZGlyZWN0bHkgaW4gaXRzIENvcmUsIGFuZCBpdCBpcyB0YWtlbiBjYXJlIG9mIGJ5IFFpNGosIHNpbmNlIGl0IGlzIGRlY2xhcmVkIGFzIGFuIEVudGl0eUNvbXBvc2l0ZS4KLU5vdGhpbmcgZWxzZSBpcyBuZWVkZWQsIHByb3ZpZGVkIHRoYXQgdGhlIFFpNGogUnVudGltZSBoYXMgYmVlbiBzZXR1cCB3aXRoIG9uZSBvciBtb3JlIHBlcnNpc3RlZCBFbnRpdHlTdG9yZXMuIEJ1dAorVGhlIGFib3ZlIGV4YW1wbGUgaXMgb2J2aW91c2x5IGRvaW5nIHBlcnNpc3RlbmNlLCBhbmQgd2UgaGF2ZSBubyBjb2RlIGhhbmRsaW5nIHRoaXMuIEJ1dCBaZXN04oSiIHN1cHBvcnRzIHBlcnNpc3RlbmNlCitkaXJlY3RseSBpbiBpdHMgQ29yZSwgYW5kIGl0IGlzIHRha2VuIGNhcmUgb2YgYnkgWmVzdOKEoiwgc2luY2UgaXQgaXMgZGVjbGFyZWQgYXMgYW4gRW50aXR5Q29tcG9zaXRlLgorTm90aGluZyBlbHNlIGlzIG5lZWRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgWmVzdOKEoiBSdW50aW1lIGhhcyBiZWVuIHNldHVwIHdpdGggb25lIG9yIG1vcmUgcGVyc2lzdGVkIEVudGl0eVN0b3Jlcy4gQnV0CiB3ZSBoYXZlIGEgbmFtaW5nIGNvbnZlbnRpb24gdGhhdCBFbnRpdHlDb21wb3NpdGVzIGhhdmUgIkVudGl0eSIgYXMgdGhlIHN1ZmZpeCBpbiBpdHMgbmFtZS4KIAogVGhlcmUgYXJlIG90aGVyIGJ1aWx0LWluIENvbXBvc2l0ZSBzdWJ0eXBlcyBhcyB3ZWxsLCBzdWNoIGFzIFZhbHVlQ29tcG9zaXRlIGFuZCBTZXJ2aWNlQ29tcG9zaXRlLiBUaGlzIGRpc3RpbmN0aW9uIGhlbHBzCkBAIC03NCwxMCArOTMsMTAgQEAKIC0tLS0tLS0tLS0tCiBUaGUgTWFpbFNlcnZpY2UgaXMgZGVwZW5kZW5jeSBpbmplY3RlZCwgYXMgd2UgaGF2ZSBzZWVuIGJlZm9yZS4KIAotQFRoaXMgaXMgdGVsbGluZyBRaTRqIHRoYXQgdGhlIFNpZGVFZmZlY3QgbmVlZHMgYSByZWZlcmVuY2UgdG8gdGhlIENvbXBvc2l0ZSBpbnN0YW5jZSB0aGF0IGl0IGJlbG9uZ3MgdG8uCitAVGhpcyBpcyB0ZWxsaW5nIFplc3TihKIgdGhhdCB0aGUgU2lkZUVmZmVjdCBuZWVkcyBhIHJlZmVyZW5jZSB0byB0aGUgQ29tcG9zaXRlIGluc3RhbmNlIHRoYXQgaXQgYmVsb25ncyB0by4KIAogQnkgYXNraW5nIGZvciBib3RoIHRoZSBIYXNDdXN0b21lciBhbmQgdGhlIEhhc0xpbmVJdGVtcyB0eXBlcywgd2UgZ2V0IHR5cGUtc2FmZXR5IGFuZCBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoIGNhc3RzLgotSW4gZmFjdCwgUWk0aiB3aWxsIGVuc3VyZSB0aGF0IHlvdSBjYW4ndCBldmVuIGNhc3QgdGhlIGBoYXNDdXN0b21lcmAgaW5zdGFuY2UgdG8gdGhlIEhhc0xpbmVJdGVtcyB0eXBlLgorSW4gZmFjdCwgWmVzdOKEoiB3aWxsIGVuc3VyZSB0aGF0IHlvdSBjYW4ndCBldmVuIGNhc3QgdGhlIGBoYXNDdXN0b21lcmAgaW5zdGFuY2UgdG8gdGhlIEhhc0xpbmVJdGVtcyB0eXBlLgogCiBCeSBub3QgcmVmZXJlbmNpbmcgdGhlIGFnZ3JlZ2F0ZWQgaW50ZXJmYWNlIE9yZGVyRW50aXR5LCB3ZSByZWR1Y2UgdGhlIGNvdXBsaW5nIG9mIHRoaXMgU2lkZUVmZmVjdCBhbmQgaXQgY2FuIGJlIHVzZWQKIGluIGFueSBvdGhlciBDb21wb3NpdGUgd2hlcmUgdGhlIEhhc0N1c3RvbWVyIGFuZCBIYXNMaW5lSXRlbXMgY29tYmluYXRpb24gaXMgdXNlZCwgZm9yIGluc3RhbmNlIGluIGFuIEludm9pY2VFbnRpdHkuCkBAIC04Niw1ICsxMDUsNSBAQAogCiA9PSBDb25jbHVzaW9uID09CiAKLUluIHRoaXMgc2hvcnQgaW50cm9kdWN0aW9uLCB3ZSBoYXZlIGNvdmVyZWQgdGhlIGVzc2VuY2Ugb2YgUWk0ai4gV2UgaGF2ZSBsb29rZWQgYXQgd2hhdCBpcyBhIENvbXBvc2l0ZSwgc2VlbiBzb21lIG9mIHRoZQorSW4gdGhpcyBzaG9ydCBpbnRyb2R1Y3Rpb24sIHdlIGhhdmUgY292ZXJlZCB0aGUgZXNzZW5jZSBvZiBaZXN04oSiLiBXZSBoYXZlIGxvb2tlZCBhdCB3aGF0IGlzIGEgQ29tcG9zaXRlLCBzZWVuIHNvbWUgb2YgdGhlCiBGcmFnbWVudHMgaW4gYWN0aW9uLCBhbmQgaG93IHNpbXBsZSBpdCBpcyB0byB0dXJuIGEgQ29tcG9zaXRlIGludG8gYSBwZXJzaXN0ZWQgQ29tcG9zaXRlLCBrbm93biBhcyBhbiBFbnRpdHlDb21wb3NpdGUuCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3RoaXJ0eW1pbnV0ZXMvTElDRU5TRSBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGhpcnR5bWludXRlcy9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDMzYjFhLi4wMDAwMDAwCi0tLSBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGhpcnR5bWludXRlcy9MSUNFTlNFCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3RoaXJ0eW1pbnV0ZXMvTk9USUNFIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90aGlydHltaW51dGVzL05PVElDRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE5ZjQzNS4uMDAwMDAwMAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3RoaXJ0eW1pbnV0ZXMvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotUWk0aiAzMCBNaW51dGUgVHV0b3JpYWwKLUNvcHlyaWdodCAyMDA3LTIwMDgsIFRoZSBRaTRqIERldmVsb3BtZW50IFRlYW0gb2YgaW5kaXZpZHVhbHMuCi0KLVNlZSBodHRwOi8vd3d3LnFpNGoub3JnL2NvbnRyaWJ1dG9ycy5odG1sIGZvciBsaXN0IG9mIG9mIGluZGl2aWR1YWxzLgotQWxzbyBzZWUgZWFjaCBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIENvcHlyaWdodCBjbGFpbXMuCi0KLVFpNGogaXMgYSBjb21tdW5pdHkgYWdncmVnYXRlZCB3b3JrcyB1bmRlciBDb3B5cmlnaHQgbGF3LgotQWxsIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCB3b3JrcyBhdCBRaTRqIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2UgdmVyIDIuMCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMKLQotQmVsb3cgZm9sbG93cyBhIGxpc3Qgb2YgYmluYXJ5IGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgbGljZW5zZXM7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTxOT05FPgotCi0KLUVORCBPRiBOT1RJQ0UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3RoaXJ0eW1pbnV0ZXMvYnVpbGQuZ3JhZGxlIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90aGlydHltaW51dGVzL2J1aWxkLmdyYWRsZQppbmRleCA1MjhlOWI0Li44M2JjYmM1IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3RoaXJ0eW1pbnV0ZXMvYnVpbGQuZ3JhZGxlCisrKyBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGhpcnR5bWludXRlcy9idWlsZC5ncmFkbGUKQEAgLTEsNiArMSwyNSBAQAotZGVzY3JpcHRpb24gPSAiQSAzMC1taW51dGUgSW50cm9kdWN0aW9uIFR1dG9yaWFsIHRvIFFpNGogaW4gaXRzIHNpbXBsZXN0IGZvcm0uIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogVHV0b3JpYWwgLSAzMCBtaW51dGUgSW50cm9kdWN0aW9uIiB9fQorZGVzY3JpcHRpb24gPSAiQSAzMC1taW51dGUgSW50cm9kdWN0aW9uIFR1dG9yaWFsIHRvIEFwYWNoZSBaZXN04oSiIGluIGl0cyBzaW1wbGVzdCBmb3JtLiIKKworamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIkFwYWNoZSBaZXN04oSiIFR1dG9yaWFsIC0gMzAgbWludXRlIEludHJvZHVjdGlvbiIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90aGlydHltaW51dGVzL3NyYy9kb2NzL3RoaXJ0eS1taW51dGVzLnR4dCBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGhpcnR5bWludXRlcy9zcmMvZG9jcy90aGlydHktbWludXRlcy50eHQKaW5kZXggNjVlYTU4YS4uMzkxM2E5ZiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90aGlydHltaW51dGVzL3NyYy9kb2NzL3RoaXJ0eS1taW51dGVzLnR4dAorKysgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3RoaXJ0eW1pbnV0ZXMvc3JjL2RvY3MvdGhpcnR5LW1pbnV0ZXMudHh0CkBAIC0xLDEzICsxLDMyIEBACi1bW3RoaXJ0eS1taW51dGVzLWludHJvLFFpNGogaW4gMzAgbWludXRlc11dCi09IFFpNGogaW4gMzAgbWludXRlcyA9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworW1t0aGlydHktbWludXRlcy1pbnRybyxaZXN04oSiIGluIDMwIG1pbnV0ZXNdXQorPSBaZXN04oSiIGluIDMwIG1pbnV0ZXMgPQogCiBUSVA6IFRoZXNlcyB0dXRvcmlhbHMgYXJlIGJhc2VkIG9uIGFjdHVhbCBjb2RlIGZvdW5kIGluIHRoZSBgdHV0b3JpYWxzL2AgZGlyZWN0b3J5IG9mIHRoZQotaHR0cDovL3FpNGoub3JnL2Rvd25sb2Fkcy5odG1sW1FpNGogU0RLIHNvdXJjZXNdLiBZb3Ugc2hvdWxkIHN0YXJ0IHlvdXIgZmF2b3JpdGUgZWRpdG9yIGFuZCBmaW5kIHRoZSBjb2RlIHJlbGF0ZWQgdG8KK2h0dHBzOi8vemVzdC5hcGFjaGUub3JnL2Rvd25sb2FkLmh0bWxbWmVzdOKEoiBTREsgc291cmNlc10uIFlvdSBzaG91bGQgc3RhcnQgeW91ciBmYXZvcml0ZSBlZGl0b3IgYW5kIGZpbmQgdGhlIGNvZGUgcmVsYXRlZCB0bwogdGhpcyB0dXRvcmlhbCwgcnVuIGl0IGFuZCBwbGF5IHdpdGggaXQuCiAKIAotVGhpcyBpbnRyb2R1Y3Rpb24gd2lsbCBkZWVwZW4geW91ciB1bmRlcnN0YW5kaW5nIG9mIFFpNGosIGFzIHdlIHRvdWNoZXMgb24gYSBjb3VwbGUgb2YgdGhlIGNvbW1vbiBmZWF0dXJlcyBvZiBRaTRqLiBJdAotaXMgZXhwZWN0ZWQgdGhhdCB5b3UgaGF2ZSBnb25lIHRocm91Z2ggYW5kIHVuZGVyc3Rvb2QgdGhlICJRaTRqIGluIDEwIG1pbnV0ZXMiIGludHJvZHVjdGlvbi4KK1RoaXMgaW50cm9kdWN0aW9uIHdpbGwgZGVlcGVuIHlvdXIgdW5kZXJzdGFuZGluZyBvZiBaZXN04oSiLCBhcyB3ZSB0b3VjaGVzIG9uIGEgY291cGxlIG9mIHRoZSBjb21tb24gZmVhdHVyZXMgb2YgWmVzdOKEoi4gSXQKK2lzIGV4cGVjdGVkIHRoYXQgeW91IGhhdmUgZ29uZSB0aHJvdWdoIGFuZCB1bmRlcnN0b29kIHRoZSAiWmVzdOKEoiBpbiAxMCBtaW51dGVzIiBpbnRyb2R1Y3Rpb24uCiAKIElmIHlvdSB3YW50IHRvIHJlcHJvZHVjZSB3aGF0J3MgZXhwbGFpbmVkIGluIHRoaXMgdHV0b3JpYWwsIHJlbWVtYmVyIHRvIGRlcGVuZCBvbiB0aGUgQ29yZSBSdW50aW1lIGFydGlmYWN0IHRoYXQgZGVwZW5kcwogb24gQ29yZSBBUEksIENvcmUgU1BJLCBDb3JlIEJvb3RzdHJhcCBhbmQgQ29yZSBGdW5jdGlvbmFsICYgSS9PIEFQSXM6CkBAIC0xNyw3ICszNiw3IEBACiBNb3Jlb3ZlciwgeW91J2xsIG5lZWQgYW4gRW50aXR5U3RvcmUgZm9yIHBlcnNpc3RlbmNlIGFuZCBhbiBJbmRleGluZyBlbmdpbmUgZm9yIHF1ZXJ5aW5nLiBDaG9vc2UgYW1vbmcgdGhlIGF2YWlsYWJsZQogaW1wbGVtZW50YXRpb25zIGxpc3RlZCBpbiB0aGUgPDxleHRlbnNpb25zPj4gc2VjdGlvbi4KIAotU2VlIHRoZSA8PGhvd3RvLWRlcGVuZC1vbi1xaTRqPj4gdHV0b3JpYWwgZm9yIGRldGFpbHMuCitTZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXplc3Q+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KIAogV2Ugd2lsbCBnbyBiYWNrIHRvIHRoZSBPcmRlckVudGl0eSBleGFtcGxlOwogW3NuaXBwZXQsamF2YV0KQEAgLTM3LDggKzU2LDggQEAKIHRhZz0yCiAtLS0tLS0tLS0tLQogCi1RdWl0ZSBhIGxvdCBvZiBRaTRqIGZlYXR1cmVzIGFyZSBsZXZlcmFnZWQgYWJvdmU7Ci1bMV0gUHJvcGVydHkgaXMgYSBmaXJzdCBjbGFzcyBjaXRpemVuIGluIFFpNGosIGluc3RlYWQgb2YgZ2V0dGVycy9zZXR0ZXJzIG5hbWluZyBjb252ZW50aW9uIHRvIGRlY2xhcmUgcHJvcGVydGllcy4KK1F1aXRlIGEgbG90IG9mIFplc3TihKIgZmVhdHVyZXMgYXJlIGxldmVyYWdlZCBhYm92ZTsKK1sxXSBQcm9wZXJ0eSBpcyBhIGZpcnN0IGNsYXNzIGNpdGl6ZW4gaW4gWmVzdOKEoiwgaW5zdGVhZCBvZiBnZXR0ZXJzL3NldHRlcnMgbmFtaW5nIGNvbnZlbnRpb24gdG8gZGVjbGFyZSBwcm9wZXJ0aWVzLgogWzJdIFZhbHVlQ29tcG9zaXRlIGZvciBBY3Rpb24gbWVhbnMgdGhhdCBpdCBpcyBhbW9uZyBvdGhlciB0aGluZ3MgSW1tdXRhYmxlLgogWzNdIFRoZSBBY3Rpb24gZXh0ZW5kcyBhIFByb3BlcnR5LiBXZSBjYWxsIHRoYXQgUHJvcGVydHkgc3VidHlwaW5nIGFuZCBoaWdobHkgcmVjb21tZW5kZWQuCiBbNF0gVGhlIENvbXBvc2l0ZUJ1aWxkZXIgY3JlYXRlcyBJbW11dGFibGUgQWN0aW9uIGluc3RhbmNlcy4KQEAgLTY4LDcgKzg3LDcgQEAKIAogVGhlIGFib3ZlIGNvbnN0cnVjdCBpcyBjYWxsZWQgYSBHZW5lcmljIENvbmNlcm4sIHNpbmNlIGl0IGltcGxlbWVudHMgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvbkhhbmRsZXIgaW5zdGVhZCBvZiB0aGUKIGludGVyZmFjZSBvZiB0aGUgZG9tYWluIG1vZGVsLiBUaGUgQ29uY2Vybk9mIGJhc2VjbGFzcyB3aWxsIGFsc28gbmVlZCB0byBiZSBvZiBJbnZvY2F0aW9uSGFuZGxlciB0eXBlLCBhbmQgdGhlCi1RaTRqIFJ1bnRpbWUgd2lsbCBoYW5kbGUgdGhlIGNoYWluaW5nIGJldHdlZW4gZG9tYWluIG1vZGVsIHN0eWxlIGFuZCB0aGlzIGdlbmVyaWMgc3R5bGUgb2YgaW50ZXJjZXB0b3IgY2FsbCBjaGFpbi4KK1plc3TihKIgUnVudGltZSB3aWxsIGhhbmRsZSB0aGUgY2hhaW5pbmcgYmV0d2VlbiBkb21haW4gbW9kZWwgc3R5bGUgYW5kIHRoaXMgZ2VuZXJpYyBzdHlsZSBvZiBpbnRlcmNlcHRvciBjYWxsIGNoYWluLgogCiBGaW5hbGx5LCB3ZSBuZWVkIHRvIGRlY2xhcmUgdGhlIENvbmNlcm4gaW4gdGhlIE9yZGVyRW50aXR5OwogCkBAIC05MCw3ICsxMDksNyBAQAogdGhlIHBlcnNpc3RlbmNlIGNvbmNlcm4gb2Ygc3RvcmFnZSBhbmQgcmV0cmlldmFsLiBUaGlzIGVuYWJsZXMgbWFueSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBhcyB3ZWxsIGFzIGEKIG1vcmUgZmxleGlibGUgSW5kZXhpbmcgc3RyYXRlZ3kuIFRoZSBvdGhlciB0aGluZyB0byB1bmRlcnN0YW5kIGlzIHRoYXQgdGhlIFF1ZXJ5IEFQSSBpcyB1c2luZyB0aGUgZG9tYWluIG1vZGVsLCBpbiBKYXZhLAogYW5kIG5vdCBzb21lIFN0cmluZyBiYXNlZCBxdWVyeSBsYW5ndWFnZS4gV2UgaGF2ZSBtYWRlIHRoaXMgY2hvaWNlIHRvIGVuc3VyZSByZWZhY3RvcmluZyBzYWZldHkuIEluIHJhcmUgY2FzZXMsIHRoZQotUXVlcnkgQVBJIGlzIG5vdCBjYXBhYmxlIGVub3VnaCwgaW4gd2hpY2ggY2FzZSBRaTRqIHN0aWxsIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGxvb2sgdXAgYW5kIGV4ZWN1dGUgbmF0aXZlIHF1ZXJpZXMuCitRdWVyeSBBUEkgaXMgbm90IGNhcGFibGUgZW5vdWdoLCBpbiB3aGljaCBjYXNlIFplc3TihKIgc3RpbGwgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gbG9vayB1cCBhbmQgZXhlY3V0ZSBuYXRpdmUgcXVlcmllcy4KIAogTGV0J3Mgc2F5IHRoYXQgd2Ugd2FudCB0byBmaW5kIGEgcGFydGljdWxhciBPcmRlciBmcm9tIGl0cyBTZXF1ZW5jZU51bWJlci4KIApAQCAtMTMzLDEzICsxNTIsMTMgQEAKIGFzc2VtYmxlZCBkdXJpbmcgYm9vdHN0cmFwLiBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIG9ubHkgYW4gUkRGIGluZGV4aW5nIHN1YnN5c3RlbSBleGlzdCwgYW5kIGlzIGFkZGVkIG1vc3QgZWFzaWx5CiBieSBhc3NlbWJseS5hZGRBc3NlbWJsZXIoIG5ldyBSZGZOYXRpdmVTZXNhbWVTdG9yZUFzc2VtYmxlcigpICkuCiAKLUl0IGNhbiBiZSBhIGJpdCBjb25mdXNpbmcgdG8gc2VlIFFpNGogdXNlIEphdmEgaXRzZWxmIGFzIGEgUXVlcnkgbGFuZ3VhZ2UsIGJ1dCBzaW5jZSB3ZSBoYXZlIHByYWN0aWNhbGx5IGtpbGxlZCB0aGUKK0l0IGNhbiBiZSBhIGJpdCBjb25mdXNpbmcgdG8gc2VlIFplc3TihKIgdXNlIEphdmEgaXRzZWxmIGFzIGEgUXVlcnkgbGFuZ3VhZ2UsIGJ1dCBzaW5jZSB3ZSBoYXZlIHByYWN0aWNhbGx5IGtpbGxlZCB0aGUKIGNsYXNzZXMgYW5kIG9ubHkgb3BlcmF0ZSB3aXRoIGludGVyZmFjZXMsIGl0IGlzIHBvc3NpYmxlIHRvIGRvIGEgbG90IG9mIHNlZW1pbmdseSBtYWdpYyBzdHVmZi4gSnVzdCBrZWVwIGluIG1pbmQgdGhhdAogaXQgaXMgcHVyZSBKYXZhLCBhbGJlaXQgaGVhdnkgdXNlIG9mIGR5bmFtaWMgcHJveGllcyB0byBjYXB0dXJlIHRoZSBpbnRlbnQgb2YgdGhlIHF1ZXJ5LgogCiA9PSBDb25jbHVzaW9uID09CiAKLVdlIGhhdmUgbm93IGV4cGxvcmVkIGEgY291cGxlIG1vcmUgaW50cmljYXRlIGZlYXR1cmVzIG9mIFFpNGosIGhvcGVmdWxseSB3aXRob3V0IGJlaW5nIG92ZXJ3aGVsbWVkIHdpdGggZGV0YWlscyBvbiBob3cKLXRvIGNyZWF0ZSBhcHBsaWNhdGlvbnMgZnJvbSBzY3JhdGNoLCBob3cgdG8gc3RydWN0dXJlIGFwcGxpY2F0aW9ucywgYW5kIGhvdyB0aGUgZW50aXJlIFFpNGogRXh0ZW5zaW9uIHN5c3RlbSB3b3Jrcy4KK1dlIGhhdmUgbm93IGV4cGxvcmVkIGEgY291cGxlIG1vcmUgaW50cmljYXRlIGZlYXR1cmVzIG9mIFplc3TihKIsIGhvcGVmdWxseSB3aXRob3V0IGJlaW5nIG92ZXJ3aGVsbWVkIHdpdGggZGV0YWlscyBvbiBob3cKK3RvIGNyZWF0ZSBhcHBsaWNhdGlvbnMgZnJvbSBzY3JhdGNoLCBob3cgdG8gc3RydWN0dXJlIGFwcGxpY2F0aW9ucywgYW5kIGhvdyB0aGUgZW50aXJlIFplc3TihKIgRXh0ZW5zaW9uIHN5c3RlbSB3b3Jrcy4KIFdlIGhhdmUgbG9va2VkIGF0IGhvdyB0byBhZGQgYSBDb25jZXJuIHRoYXQgdXNlcyBhIHByaXZhdGUgTWl4aW4sIHdlIGhhdmUgdG91Y2hlZCBhIGJpdCBvbiBHZW5lcmljIENvbmNlcm5zLCBhbmQKIGZpbmFsbHkgYSBzaG9ydCBpbnRyb2R1Y3Rpb24gdG8gdGhlIFF1ZXJ5IEFQSS4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdGhpcnR5bWludXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RlbW8vdGhpcnR5bWludXRlcy9UaGlydHlNaW51dGVzRG9jcy5qYXZhIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90aGlydHltaW51dGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby90aGlydHltaW51dGVzL1RoaXJ0eU1pbnV0ZXNEb2NzLmphdmEKaW5kZXggZTEyNWI2ZC4uZDE3MjA3NyAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90aGlydHltaW51dGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby90aGlydHltaW51dGVzL1RoaXJ0eU1pbnV0ZXNEb2NzLmphdmEKKysrIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90aGlydHltaW51dGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby90aGlydHltaW51dGVzL1RoaXJ0eU1pbnV0ZXNEb2NzLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouZGVtby50aGlydHltaW51dGVzOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvbkhhbmRsZXI7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b2hvdXJzL0xJQ0VOU0UgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b2hvdXJzL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MzNiMWEuLjAwMDAwMDAKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29ob3Vycy9MSUNFTlNFCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b2hvdXJzL05PVElDRSBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvaG91cnMvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzFkZWVkLi4wMDAwMDAwCi0tLSBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvaG91cnMvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotUWk0aiAyIEhvdXIgVHV0b3JpYWwKLUNvcHlyaWdodCAyMDA3LTIwMDgsIFRoZSBRaTRqIERldmVsb3BtZW50IFRlYW0gb2YgaW5kaXZpZHVhbHMuCi0KLVNlZSBodHRwOi8vd3d3LnFpNGoub3JnL2NvbnRyaWJ1dG9ycy5odG1sIGZvciBsaXN0IG9mIG9mIGluZGl2aWR1YWxzLgotQWxzbyBzZWUgZWFjaCBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIENvcHlyaWdodCBjbGFpbXMuCi0KLVFpNGogaXMgYSBjb21tdW5pdHkgYWdncmVnYXRlZCB3b3JrcyB1bmRlciBDb3B5cmlnaHQgbGF3LgotQWxsIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCB3b3JrcyBhdCBRaTRqIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2UgdmVyIDIuMCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMKLQotQmVsb3cgZm9sbG93cyBhIGxpc3Qgb2YgYmluYXJ5IGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgbGljZW5zZXM7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTxOT05FPgotCi0KLUVORCBPRiBOT1RJQ0UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b2hvdXJzL3NyYy9kb2NzL3R3by1ob3Vycy50eHQgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b2hvdXJzL3NyYy9kb2NzL3R3by1ob3Vycy50eHQKaW5kZXggYTI0YmM3Zi4uNWE2ZDA2NiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29ob3Vycy9zcmMvZG9jcy90d28taG91cnMudHh0CisrKyBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvaG91cnMvc3JjL2RvY3MvdHdvLWhvdXJzLnR4dApAQCAtMSw5ICsxLDI4IEBACi1bW3R3by1ob3Vycy1pbnRybyxRaTRqIGluIDIgaG91cnNdXQotPSBRaTRqIGluIDIgaG91cnMgPQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1tbdHdvLWhvdXJzLWludHJvLFplc3TihKIgaW4gMiBob3Vyc11dCis9IFplc3TihKIgaW4gMiBob3VycyA9CiAKIE5PVEU6IFRoaXMgdHV0b3JpYWwgaXMgbm90IHdyaXR0ZW4geWV0LiBMZWFybiBob3cgdG8gY29udHJpYnV0ZSBpbiA8PGNvbW11bml0eS1kb2NzPj4uCiAKLVRoaXMgaW50cm9kdWN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgIlFpNGogaW4gMTAgbWludXRlcyIgYW5kICJRaTRqIGluIDMwIG1pbnV0ZXMiIGludHJvZHVjdGlvbnMgaGFzIGJlZW4gcmVhZCBhbmQKK1RoaXMgaW50cm9kdWN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgIlplc3TihKIgaW4gMTAgbWludXRlcyIgYW5kICJaZXN04oSiIGluIDMwIG1pbnV0ZXMiIGludHJvZHVjdGlvbnMgaGFzIGJlZW4gcmVhZCBhbmQKIHVuZGVyc3Rvb2QuCiAKIEluIHRoaXMgaW50cm9kdWN0aW9uIHdlIHdpbGwgdG91Y2ggb24gdGhlIGNvcmUgY29uY2VwdHMgb2YgVW5pdE9mV29yaywgQXBwbGljYXRpb24gc3RydWN0dXJlIGFuZCBCb290c3RyYXAgQVBJLgpAQCAtMTUsNyArMzQsNyBAQAogCiAtIEFwcGxpY2F0aW9uIFN0cnVjdHVyZSAtCiAKLSAgICAqIFRoZXJlIGFyZSBvbmUgQXBwbGljYXRpb24gcGVyIFFpNGogaW5zdGFuY2UuCisgICAgKiBUaGVyZSBhcmUgb25lIEFwcGxpY2F0aW9uIHBlciBaZXN04oSiIGluc3RhbmNlLgogCiAgICAgKiBBbiBBcHBsaWNhdGlvbiBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBMYXllcnMuCiAKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvbWludXRlcy9MSUNFTlNFIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MzNiMWEuLjAwMDAwMDAKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvbWludXRlcy9OT1RJQ0UgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b21pbnV0ZXMvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWVmYWM0Li4wMDAwMDAwCi0tLSBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvbWludXRlcy9OT1RJQ0UKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1RaTRqIDIgTWludXRlIFR1dG9yaWFsCi1Db3B5cmlnaHQgMjAwNy0yMDA4LCBUaGUgUWk0aiBEZXZlbG9wbWVudCBUZWFtIG9mIGluZGl2aWR1YWxzLgotCi1TZWUgaHR0cDovL3d3dy5xaTRqLm9yZy9jb250cmlidXRvcnMuaHRtbCBmb3IgbGlzdCBvZiBvZiBpbmRpdmlkdWFscy4KLUFsc28gc2VlIGVhY2ggZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBDb3B5cmlnaHQgY2xhaW1zLgotCi1RaTRqIGlzIGEgY29tbXVuaXR5IGFnZ3JlZ2F0ZWQgd29ya3MgdW5kZXIgQ29weXJpZ2h0IGxhdy4KLUFsbCBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgd29ya3MgYXQgUWk0aiBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLUFwYWNoZSBMaWNlbnNlIHZlciAyLjAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzCi0KLUJlbG93IGZvbGxvd3MgYSBsaXN0IG9mIGJpbmFyeSBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGxpY2Vuc2VzOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi08Tk9ORT4KLQotCi1FTkQgT0YgTk9USUNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL2J1aWxkLmdyYWRsZSBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvbWludXRlcy9idWlsZC5ncmFkbGUKaW5kZXggZjQ4ODZkMC4uMjVhOWFiNSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL2J1aWxkLmdyYWRsZQorKysgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b21pbnV0ZXMvYnVpbGQuZ3JhZGxlCkBAIC0xLDYgKzEsMjUgQEAKLWRlc2NyaXB0aW9uID0gIkEgMi1taW51dGUgSW50cm9kdWN0aW9uIFR1dG9yaWFsIHRvIFFpNGogaW4gaXRzIHNpbXBsZXN0IGZvcm0uIgorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIAotamFyIHsgbWFuaWZlc3QgeyBuYW1lID0gIlFpNGogVHV0b3JpYWwgLSAyIG1pbnV0ZSBJbnRyb2R1Y3Rpb24iIH19CitkZXNjcmlwdGlvbiA9ICJBIDItbWludXRlIEludHJvZHVjdGlvbiBUdXRvcmlhbCB0byBBcGFjaGUgWmVzdOKEoiBpbiBpdHMgc2ltcGxlc3QgZm9ybS4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBUdXRvcmlhbCAtIDIgbWludXRlIEludHJvZHVjdGlvbiIgfX0KIAogZGVwZW5kZW5jaWVzIHsKICAgY29tcGlsZShwcm9qZWN0KCI6b3JnLnFpNGouY29yZTpvcmcucWk0ai5jb3JlLmJvb3RzdHJhcCIpKQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL3NyYy9kb2NzL3R3by1taW51dGVzLnR4dCBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvbWludXRlcy9zcmMvZG9jcy90d28tbWludXRlcy50eHQKaW5kZXggMzYyNDI5Zi4uYmU1MDJkMiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL3NyYy9kb2NzL3R3by1taW51dGVzLnR4dAorKysgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b21pbnV0ZXMvc3JjL2RvY3MvdHdvLW1pbnV0ZXMudHh0CkBAIC0xLDExICsxLDMwIEBACi1bW3R3by1taW51dGVzLWludHJvLFFpNGogaW4gMiBtaW51dGVzXV0KLT0gUWk0aiBpbiAyIG1pbnV0ZXMgPQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1tbdHdvLW1pbnV0ZXMtaW50cm8sWmVzdOKEoiBpbiAyIG1pbnV0ZXNdXQorPSBaZXN04oSiIGluIDIgbWludXRlcyA9CiAKIFRJUDogVGhlc2VzIHR1dG9yaWFscyBhcmUgYmFzZWQgb24gYWN0dWFsIGNvZGUgZm91bmQgaW4gdGhlIGB0dXRvcmlhbHMvYCBkaXJlY3Rvcnkgb2YgdGhlCi1odHRwOi8vcWk0ai5vcmcvZG93bmxvYWRzLmh0bWxbUWk0aiBTREsgc291cmNlc10uIFlvdSBzaG91bGQgc3RhcnQgeW91ciBmYXZvcml0ZSBlZGl0b3IgYW5kIGZpbmQgdGhlIGNvZGUgcmVsYXRlZCB0bworaHR0cHM6Ly96ZXN0LmFwYWNoZS5vcmcvZG93bmxvYWQuaHRtbFtaZXN04oSiIFNESyBzb3VyY2VzXS4gWW91IHNob3VsZCBzdGFydCB5b3VyIGZhdm9yaXRlIGVkaXRvciBhbmQgZmluZCB0aGUgY29kZSByZWxhdGVkIHRvCiB0aGlzIHR1dG9yaWFsLCBydW4gaXQgYW5kIHBsYXkgd2l0aCBpdC4KIAotVG8gc2hvdyB0aGF0IFFpNGogaXMgbm90IG5lY2Vzc2FyaWx5IGNvbXBsZXgsIG5vdCBoYXJkIHRvIGdldCBnb2luZyB3aXRoIGFuZCBlYXN5IHRvIGRlcGxveSwgd2UgYXJlIGZpcnN0IHNob3dpbmcgdGhlCitUbyBzaG93IHRoYXQgWmVzdOKEoiBpcyBub3QgbmVjZXNzYXJpbHkgY29tcGxleCwgbm90IGhhcmQgdG8gZ2V0IGdvaW5nIHdpdGggYW5kIGVhc3kgdG8gZGVwbG95LCB3ZSBhcmUgZmlyc3Qgc2hvd2luZyB0aGUKIGNsYXNzaWMgSGVsbG9Xb3JsZCwgYXMgc21hbGwgYXMgaXQgY2FuIGdldCBhbmQgc3RpbGwgYmUgQ29tcG9zaXRlIE9yaWVudGVkIFByb2dyYW1taW5nIGFuZCBub3Qgb25seSBzdGFuZGFyZCBPT1AuCiAKIElmIHlvdSB3YW50IHRvIHJlcHJvZHVjZSB3aGF0J3MgZXhwbGFpbmVkIGluIHRoaXMgdHV0b3JpYWwsIHJlbWVtYmVyIHRvIGRlcGVuZCBvbiB0aGUgQ29yZSBSdW50aW1lIGFydGlmYWN0IHRoYXQgZGVwZW5kcwpAQCAtMTMsNyArMzIsNyBAQAogCiBpbmNsdWRlOjouLi8uLi8uLi8uLi8uLi9jb3JlL3J1bnRpbWUvYnVpbGQvZG9jcy9idWlsZGluZm8vYXJ0aWZhY3QudHh0W10KIAotU2VlIHRoZSA8PGhvd3RvLWRlcGVuZC1vbi1xaTRqPj4gdHV0b3JpYWwgZm9yIGRldGFpbHMuCitTZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXplc3Q+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KIAogUmVhZHksIFNldCwgR28hCiAKQEAgLTQ1LDcgKzY0LDcgQEAKIHRhZz1kb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLQogCi0uIFRoZSBTaW5nbGV0b25Bc3NlbWJsZXIgaXMgYSBjb252ZW5pZW5jZSBjbGFzcyB0aGF0IGNyZWF0ZXMgYSBRaTRqIFJ1bnRpbWUgaW5zdGFuY2UgYW5kIGFuIGFwcGxpY2F0aW9uIHdpdGggb25lIGxheWVyCisuIFRoZSBTaW5nbGV0b25Bc3NlbWJsZXIgaXMgYSBjb252ZW5pZW5jZSBjbGFzcyB0aGF0IGNyZWF0ZXMgYSBaZXN04oSiIFJ1bnRpbWUgaW5zdGFuY2UgYW5kIGFuIGFwcGxpY2F0aW9uIHdpdGggb25lIGxheWVyCiAgIGFuZCBvbmUgbW9kdWxlIGluIGl0LgogCiAuIFdlIGRlY2xhcmUgYSBUcmFuc2llbnRDb21wb3NpdGUgb2YgdHlwZSBgU3BlYWtlcmAuCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b21pbnV0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9kZW1vL3R3b21pbnV0ZS9NYWluLmphdmEgYi90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b21pbnV0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9kZW1vL3R3b21pbnV0ZS9NYWluLmphdmEKaW5kZXggMmVhZTE3Ni4uMmRlMzYzYSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby90d29taW51dGUvTWFpbi5qYXZhCisrKyBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvbWludXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RlbW8vdHdvbWludXRlL01haW4uamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai5kZW1vLnR3b21pbnV0ZTsKIAogaW1wb3J0IG9yZy5xaTRqLmJvb3RzdHJhcC5Bc3NlbWJseUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvbWludXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RlbW8vdHdvbWludXRlL1NwZWFrZXIuamF2YSBiL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvbWludXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RlbW8vdHdvbWludXRlL1NwZWFrZXIuamF2YQppbmRleCA0Y2IxMjZmLi5jMWFjNWMzIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvaW50cm9kdWN0aW9uL3R3b21pbnV0ZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai9kZW1vL3R3b21pbnV0ZS9TcGVha2VyLmphdmEKKysrIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby90d29taW51dGUvU3BlYWtlci5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLmRlbW8udHdvbWludXRlOwogCiBpbXBvcnQgb3JnLnFpNGouYXBpLm1peGluLk1peGluczsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9pbnRyb2R1Y3Rpb24vdHdvbWludXRlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL2RlbW8vdHdvbWludXRlL1NwZWFrZXJNaXhpbi5qYXZhIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby90d29taW51dGUvU3BlYWtlck1peGluLmphdmEKaW5kZXggYzYzZWY4ZC4uMTQ1OTYxOSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby90d29taW51dGUvU3BlYWtlck1peGluLmphdmEKKysrIGIvdHV0b3JpYWxzL2ludHJvZHVjdGlvbi90d29taW51dGVzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovZGVtby90d29taW51dGUvU3BlYWtlck1peGluLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGouZGVtby50d29taW51dGU7CiAKIC8vIFNUQVJUIFNOSVBQRVQ6IGRvY3VtZW50YXRpb24KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9zZXJ2aWNlcy9idWlsZC5ncmFkbGUgYi90dXRvcmlhbHMvc2VydmljZXMvYnVpbGQuZ3JhZGxlCmluZGV4IDNiN2RjY2IuLjVmOGU0ZTYgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9zZXJ2aWNlcy9idWlsZC5ncmFkbGUKKysrIGIvdHV0b3JpYWxzL3NlcnZpY2VzL2J1aWxkLmdyYWRsZQpAQCAtMSw2ICsxLDI1IEBACi1kZXNjcmlwdGlvbiA9ICJUdXRvcmlhbCBvbiBob3cgdG8gdXNlIFFpNGogc2VydmljZSBjb25jZXB0LiIKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKLWphciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJRaTRqIFR1dG9yaWFsIC0gU2VydmljZXMiIH19CitkZXNjcmlwdGlvbiA9ICJUdXRvcmlhbCBvbiBob3cgdG8gdXNlIEFwYWNoZSBaZXN04oSiIHNlcnZpY2UgY29uY2VwdC4iCisKK2phciB7IG1hbmlmZXN0IHsgbmFtZSA9ICJBcGFjaGUgWmVzdOKEoiBUdXRvcmlhbCAtIFNlcnZpY2VzIiB9fQogCiBkZXBlbmRlbmNpZXMgewogICBjb21waWxlKHByb2plY3QoIjpvcmcucWk0ai5jb3JlOm9yZy5xaTRqLmNvcmUuYm9vdHN0cmFwIikpCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL2RvY3Mvc3RlcDEudHh0IGIvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9kb2NzL3N0ZXAxLnR4dAppbmRleCA2NTZiZTNjLi43NjFkMzI0IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL2RvY3Mvc3RlcDEudHh0CisrKyBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvZG9jcy9zdGVwMS50eHQKQEAgLTEsMTYgKzEsMzUgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW3R1dC1zZXJ2aWNlcy1zdGVwMSxTdGVwIDEgLSBDcmVhdGluZyBhIFNlcnZpY2VDb21wb3NpdGVdXQogPSBTdGVwIDEgLSBDcmVhdGluZyBhIFNlcnZpY2VDb21wb3NpdGUgPQogCiBJbiB0aGlzIHR1dG9yaWFsIHdlIHN0YXJ0IHdpdGggYmFzaWMgSmF2YSBjbGFzc2VzLCB0byBzaW11bGF0ZSBhIHZlcnkgc2ltcGxlIExpYnJhcnkgd2hlcmUgeW91IGNhbiBib3Jyb3cKIGFuZCByZXR1cm4gYm9va3MuCiAKLVFpNGogcmVsaWVzIGhlYXZpbHkgb24gdGhlIHVzZSBvZiBpbnRlcmZhY2VzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciBhbiBvYmplY3QKK1plc3TihKIgcmVsaWVzIGhlYXZpbHkgb24gdGhlIHVzZSBvZiBpbnRlcmZhY2VzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciBhbiBvYmplY3QKIHRvIGV4dGVybmFsbHkgaW1wbGVtZW50IGEgbnVtYmVyIG9mIGludGVyZmFjZXMgd2hpY2ggaW50ZXJuYWxseSBpcyBiYWNrZWQgYnkgYSBudW1iZXIKIG9mIE1peGlucywgc29tZSBvZiB3aGljaCB5b3UgbWF5IGhhdmUgd3JpdHRlbiB5b3Vyc2VsZiwgYW5kIHNvbWUgb2Ygd2hpY2ggbWF5IGhhdmUgYmVlbgogcmV1c2VkLiBUaGlzIGlzIGFsc28gdHJ1ZSBmb3Igc2VydmljZXMsIHdoaWNoIHdlIGFyZSB0byBjb3ZlciBpbiB0aGlzIHR1dG9yaWFsLgogCiBUaGUgZmlyc3QgdGFzayBpcyB0aGVyZWZvcmUgdG8gcmVmYWN0b3IgdGhlIGNvZGUgc28gdGhhdCB0aGUgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgZnJvbSBhbgotaW50ZXJmYWNlIGluc3RlYWQsIGFuZCB0byBlc3NlbnRpYWxseSBtYWtlIHRoZSBpZGVudGljYWwgImFwcGxpY2F0aW9uIiBpbnRvIGEgUWk0aiBhcHBsaWNhdGlvbi4KK2ludGVyZmFjZSBpbnN0ZWFkLCBhbmQgdG8gZXNzZW50aWFsbHkgbWFrZSB0aGUgaWRlbnRpY2FsICJhcHBsaWNhdGlvbiIgaW50byBhIFplc3TihKIgYXBwbGljYXRpb24uCiBXZSBhbHNvIHdhbnQgdGhlIEJvb2sgdG8gYmUgYSBWYWx1ZUNvbXBvc2l0ZS4KICAgICAKIFN0ZXBzIGZvciB0aGlzIHR1dG9yaWFsOgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9kb2NzL3N0ZXAyLnR4dCBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvZG9jcy9zdGVwMi50eHQKaW5kZXggMzI4YTQzOC4uYjNiOTA3OSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9kb2NzL3N0ZXAyLnR4dAorKysgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL2RvY3Mvc3RlcDIudHh0CkBAIC0xLDggKzEsMjcgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW3R1dC1zZXJ2aWNlcy1zdGVwMixTdGVwIDIgLSBIb29raW5nIGludG8gdGhlIFNlcnZpY2UgQWN0aXZhdGlvbl1dCiA9IFN0ZXAgMiAtIEhvb2tpbmcgaW50byB0aGUgU2VydmljZSBBY3RpdmF0aW9uID0KIAogU2VydmljZXMgY2FuIGJlICJhY3RpdmF0ZWQiIGFuZCAicGFzc2l2YXRlZCIuIEFwcGxpY2F0aW9ucyBjYW4gYmUgbm90aWZpZWQgb2YgdGhpcyBvY2N1cnJpbmcKLWJ5IFFpNGogcnVudGltZSBieSBhc3NlbWJsaW5nIHRoZW0gd2l0aCBhbiBBY3RpdmF0b3IuIAorYnkgWmVzdOKEoiBydW50aW1lIGJ5IGFzc2VtYmxpbmcgdGhlbSB3aXRoIGFuIEFjdGl2YXRvci4KIAogQWN0aXZhdG9ycyBtZXRob2RzIGFyZSBjYWxsZWQgYXJvdW5kICJhY3RpdmF0aW9uIiBhbmQgInBhc3NpdmF0aW9uIjogYmVmb3JlQWN0aXZhdGlvbiwKIGFmdGVyQWN0aXZhdGlvbiwgYmVmb3JlQWN0aXZhdGlvbiwgYWZ0ZXJQYXNzaXZhdGlvbi4gVGhlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL2RvY3Mvc3RlcDMudHh0IGIvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9kb2NzL3N0ZXAzLnR4dAppbmRleCBkZDIzNWZjLi5mODFmM2UxIDEwMDY0NAotLS0gYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL2RvY3Mvc3RlcDMudHh0CisrKyBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvZG9jcy9zdGVwMy50eHQKQEAgLTEsMTMgKzEsMzIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiBbW3R1dC1zZXJ2aWNlcy1zdGVwMyxTdGVwIDMgLSBSZWFkaW5nIHRoZSBTZXJ2aWNlIENvbmZpZ3VyYXRpb25dXQogPSBTdGVwIDMgLSBSZWFkaW5nIHRoZSBTZXJ2aWNlIENvbmZpZ3VyYXRpb24gPQogCi1TZXJ2aWNlcyB0eXBpY2FsbHkgaGF2ZSBjb25maWd1cmF0aW9uLiBDb25maWd1cmF0aW9ucyBhcmUgZGlyZWN0bHkgc3VwcG9ydGVkIGluIFFpNGouIEEKK1NlcnZpY2VzIHR5cGljYWxseSBoYXZlIGNvbmZpZ3VyYXRpb24uIENvbmZpZ3VyYXRpb25zIGFyZSBkaXJlY3RseSBzdXBwb3J0ZWQgaW4gWmVzdOKEoi4gQQogQ29uZmlndXJhdGlvbkNvbXBvc2l0ZSBpcyBhIHN1YnR5cGUgb2YgRW50aXR5Q29tcG9zaXRlLiBUaGF0IGlzIGJlY2F1c2UKIGNvbmZpZ3VyYXRpb25zIGFyZSBzdG9yZWQgaW4gRW50aXR5U3RvcmVzLCBjYW4gYmUgbW9kaWZpZWQgaW4gcnVudGltZSBieSBjbGllbnQgY29kZSBhbmQgaGFzCiB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgcmVndWxhciBlbnRpdGllcy4KIAotUWk0aiBhbHNvIGhhbmRsZXMgdGhlIGJvb3RzdHJhcHBpbmcgb2YgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2VzLiBJZiB0aGUgQ29uZmlndXJhdGlvbkNvbXBvc2l0ZSBpcwotbm90IGZvdW5kIGluIHRoZSBjb25maWd1cmVkIGVudGl0eSBzdG9yZSwgdGhlbiBRaTRqIHdpbGwgYXV0b21hdGljYWxseSBsb2NhdGUgYSBwcm9wZXJ0aWVzIGZpbGUgZm9yIGVhY2gKK1plc3TihKIgYWxzbyBoYW5kbGVzIHRoZSBib290c3RyYXBwaW5nIG9mIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlcy4gSWYgdGhlIENvbmZpZ3VyYXRpb25Db21wb3NpdGUgaXMKK25vdCBmb3VuZCBpbiB0aGUgY29uZmlndXJlZCBlbnRpdHkgc3RvcmUsIHRoZW4gWmVzdOKEoiB3aWxsIGF1dG9tYXRpY2FsbHkgbG9jYXRlIGEgcHJvcGVydGllcyBmaWxlIGZvciBlYWNoCiBzZXJ2aWNlIGluc3RhbmNlLCByZWFkIHRob3NlIHByb3BlcnRpZXMgaW50byBhIENvbmZpZ3VyYXRpb25Db21wb3NpdGUgaW5zdGFuY2UsIHNhdmUgdGhhdCB0byB0aGUKIGVudGl0eSBzdG9yZSBhbmQgcHJvdmlkZSB0aGUgdmFsdWVzIHRvIHRoZSBzZXJ2aWNlLiBUaGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzCiB0aGUgc2VydmljZSBpbnN0YW5jZSB3aXRoIHRoZSBleHRlbnNpb24gInByb3BlcnRpZXMiIGluIHRoZSBzYW1lIHBhY2thZ2UgYXMgdGhlIHNlcnZpY2UuCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL2RvY3MvdHV0LXNlcnZpY2VzLnR4dCBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvZG9jcy90dXQtc2VydmljZXMudHh0CmluZGV4IDFhNjViMWYuLjhjODUyNzEgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvZG9jcy90dXQtc2VydmljZXMudHh0CisrKyBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvZG9jcy90dXQtc2VydmljZXMudHh0CkBAIC0xLDE0ICsxLDMzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogW1t0dXQtc2VydmljZXMsU2VydmljZXMgQ29tcG9zaXRlcyBUdXRvcmlhbF1dCiA9IFNlcnZpY2VzIENvbXBvc2l0ZXMgVHV0b3JpYWwgPQogCiBUSVA6IFRoZXNlcyB0dXRvcmlhbHMgYXJlIGJhc2VkIG9uIGFjdHVhbCBjb2RlIGZvdW5kIGluIHRoZSBgdHV0b3JpYWxzL2AgZGlyZWN0b3J5IG9mIHRoZQotaHR0cDovL3FpNGoub3JnL2Rvd25sb2Fkcy5odG1sW1FpNGogU0RLIHNvdXJjZXNdLiBZb3Ugc2hvdWxkIHN0YXJ0IHlvdXIgZmF2b3JpdGUgZWRpdG9yIGFuZCBmaW5kIHRoZSBjb2RlIHJlbGF0ZWQgdG8KK2h0dHA6Ly96ZXN0LmFwYWNoZS5vcmcvZG93bmxvYWQuaHRtbFtaZXN04oSiIFNESyBzb3VyY2VzXS4gWW91IHNob3VsZCBzdGFydCB5b3VyIGZhdm9yaXRlIGVkaXRvciBhbmQgZmluZCB0aGUgY29kZSByZWxhdGVkIHRvCiB0aGlzIHR1dG9yaWFsLCBydW4gaXQgYW5kIHBsYXkgd2l0aCBpdC4KIAogCiBJbiB0aGlzIG90aGVyIHNldCBvZiB0dXRvcmlhbHMgaXQgd2lsbCBiZSBzaG93biBob3cgdG8gY3JlYXRlIGFuZCB3b3JrIHdpdGggU2VydmljZSBDb21wb3NpdGVzLCB3aGljaCBhcmUgY29tcG9zaXRlcwogdGhhdCBleHRlbmRzIGZyb20gdGhlIFNlcnZpY2VDb21wb3NpdGUgY2xhc3MuIFdlIHdpbGwgcmVmYWN0b3Igb25lIGEgdmVyeSBzaW1wbGUgTGlicmFyeSB3aGVyZSB5b3UgY2FuIGJvcnJvdyBhbmQKLXJldHVybiBib29rcyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgdmFyaW91cyBmZWF0dXJlcyBpbiBRaTRqLiBUaGVzZSByZWZhY3RvcmluZ3Mgd2lsbCBiZW5lZml0IGZyb20gYXV0b21hdGljIFNlcnZpY2UKK3JldHVybiBib29rcyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgdmFyaW91cyBmZWF0dXJlcyBpbiBaZXN04oSiLiBUaGVzZSByZWZhY3RvcmluZ3Mgd2lsbCBiZW5lZml0IGZyb20gYXV0b21hdGljIFNlcnZpY2UKIGFjdGl2YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gRW50aXRpZXMgbWFuYWdlbWVudC4KIAogLSA8PHR1dC1zZXJ2aWNlcy1zdGVwMT4+CkBAIC0yNiw3ICs0NSw3IEBACiAKIGluY2x1ZGU6Oi4uLy4uLy4uLy4uL2NvcmUvcnVudGltZS9idWlsZC9kb2NzL2J1aWxkaW5mby9hcnRpZmFjdC50eHRbXQogCi1TZWUgdGhlIDw8aG93dG8tZGVwZW5kLW9uLXFpNGo+PiB0dXRvcmlhbCBmb3IgZGV0YWlscy4KK1NlZSB0aGUgPDxob3d0by1kZXBlbmQtb24temVzdD4+IHR1dG9yaWFsIGZvciBkZXRhaWxzLgogCiA6bGV2ZWxvZmZzZXQ6IDMKIApkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXAxL3BhY2thZ2UuaHRtbCBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwMS9wYWNrYWdlLmh0bWwKaW5kZXggODA0MjkwZC4uYTdiNzgwNSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXAxL3BhY2thZ2UuaHRtbAorKysgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDEvcGFja2FnZS5odG1sCkBAIC0xLDMgKzEsMTkgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGJvZHk+CiAgICAgPGgxPlN0ZXAgMSAtIENyZWF0aW5nIGEgU2VydmljZUNvbXBvc2l0ZTwvaDE+CiAKQEAgLTYsMTQgKzIyLDE0IEBACiAgICAgICAgIGFuZCByZXR1cm4gYm9va3MuCiAgICAgPC9wPgogICAgIDxwPgotICAgICAgICBRaTRqIHJlbGllcyBoZWF2aWx5IG9uIHRoZSB1c2Ugb2YgaW50ZXJmYWNlcy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYW4gb2JqZWN0CisgICAgICAgIEFwYWNoZSBaZXN04oSiIHJlbGllcyBoZWF2aWx5IG9uIHRoZSB1c2Ugb2YgaW50ZXJmYWNlcy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYW4gb2JqZWN0CiAgICAgICAgIHRvIGV4dGVybmFsbHkgaW1wbGVtZW50IGEgbnVtYmVyIG9mIGludGVyZmFjZXMgd2hpY2ggaW50ZXJuYWxseSBpcyBiYWNrZWQgYnkgYSBudW1iZXIKICAgICAgICAgb2YgTWl4aW5zLCBzb21lIG9mIHdoaWNoIHlvdSBtYXkgaGF2ZSB3cml0dGVuIHlvdXJzZWxmLCBhbmQgc29tZSBvZiB3aGljaCBtYXkgaGF2ZSBiZWVuCiAgICAgICAgIHJldXNlZC4gVGhpcyBpcyBhbHNvIHRydWUgZm9yIHNlcnZpY2VzLCB3aGljaCB3ZSBhcmUgdG8gY292ZXIgaW4gdGhpcyB0dXRvcmlhbC4KICAgICA8L3A+CiAgICAgPHA+CiAgICAgICAgIFRoZSBmaXJzdCB0YXNrIGlzIHRoZXJlZm9yZSB0byByZWZhY3RvciB0aGUgY29kZSBzbyB0aGF0IHRoZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBmcm9tIGFuCi0gICAgICAgIGludGVyZmFjZSBpbnN0ZWFkLCBhbmQgdG8gZXNzZW50aWFsbHkgbWFrZSB0aGUgaWRlbnRpY2FsICJhcHBsaWNhdGlvbiIgaW50byBhIFFpNGogYXBwbGljYXRpb24uCisgICAgICAgIGludGVyZmFjZSBpbnN0ZWFkLCBhbmQgdG8gZXNzZW50aWFsbHkgbWFrZSB0aGUgaWRlbnRpY2FsICJhcHBsaWNhdGlvbiIgaW50byBhIFplc3TihKIgYXBwbGljYXRpb24uCiAgICAgICAgIFdlIGFsc28gd2FudCB0aGUgQm9vayB0byBiZSBhIFZhbHVlQ29tcG9zaXRlLgogICAgIDwvcD4KICAgICAKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwMi9MaWJyYXJ5LmphdmEgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDIvTGlicmFyeS5qYXZhCmluZGV4IGU4MTFiMGEuLjZhMTNiYjQgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwMi9MaWJyYXJ5LmphdmEKKysrIGIvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXAyL0xpYnJhcnkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuc2VydmljZXMuc3RlcDI7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTGlicmFyeQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXAyL0xpYnJhcnlTZXJ2aWNlLmphdmEgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDIvTGlicmFyeVNlcnZpY2UuamF2YQppbmRleCA3MGRhNWQ3Li5kOTJjMGQ4IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDIvTGlicmFyeVNlcnZpY2UuamF2YQorKysgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDIvTGlicmFyeVNlcnZpY2UuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuc2VydmljZXMuc3RlcDI7CiAKIGltcG9ydCBvcmcucWk0ai5hcGkubWl4aW4uTWl4aW5zOwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXAyL3BhY2thZ2UuaHRtbCBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwMi9wYWNrYWdlLmh0bWwKaW5kZXggMmJlNDgxMS4uODYwMTUwYSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXAyL3BhY2thZ2UuaHRtbAorKysgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDIvcGFja2FnZS5odG1sCkBAIC0xLDkgKzEsMjUgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGJvZHk+CiAgICAgPGgxPlN0ZXAgMiAtIEhvb2tpbmcgaW50byB0aGUgU2VydmljZSBBY3RpdmF0aW9uPC9oMT4KIAogICAgIDxwPgogICAgICAgICBTZXJ2aWNlcyBjYW4gYmUgIjxpPmFjdGl2YXRlZDwvaT4iIGFuZCAiPGk+cGFzc2l2YXRlZDwvaT4iLiBBcHBsaWNhdGlvbnMgY2FuIGJlIG5vdGlmaWVkIG9mIHRoaXMgb2NjdXJyaW5nCi0gICAgICAgIGJ5IFFpNGogcnVudGltZSBieSBhc3NlbWJsaW5nIHRoZW0gd2l0aCBhbiA8Y29kZT5BY3RpdmF0b3I8L2NvZGU+LiAKKyAgICAgICAgYnkgWmVzdOKEoiBydW50aW1lIGJ5IGFzc2VtYmxpbmcgdGhlbSB3aXRoIGFuIDxjb2RlPkFjdGl2YXRvcjwvY29kZT4uCiAgICAgPC9wPgogICAgIDxwPgogICAgICAgICBBY3RpdmF0b3JzIG1ldGhvZHMgYXJlIGNhbGxlZCBhcm91bmQgIjxpPmFjdGl2YXRpb248L2k+IiBhbmQgIjxpPnBhc3NpdmF0aW9uPC9pPiI6IDxjb2RlPmJlZm9yZUFjdGl2YXRpb248L2NvZGU+LApkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXAzL0xpYnJhcnkuamF2YSBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwMy9MaWJyYXJ5LmphdmEKaW5kZXggYTNhOTExNS4uYjk1MTZkYiAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXAzL0xpYnJhcnkuamF2YQorKysgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDMvTGlicmFyeS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5zZXJ2aWNlcy5zdGVwMzsKIAogcHVibGljIGludGVyZmFjZSBMaWJyYXJ5CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDMvTGlicmFyeVNlcnZpY2UuamF2YSBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwMy9MaWJyYXJ5U2VydmljZS5qYXZhCmluZGV4IGNiZGQzYmMuLmJhMDM2NjYgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwMy9MaWJyYXJ5U2VydmljZS5qYXZhCisrKyBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwMy9MaWJyYXJ5U2VydmljZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5zZXJ2aWNlcy5zdGVwMzsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5hY3RpdmF0aW9uLkFjdGl2YXRvcnM7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDMvcGFja2FnZS5odG1sIGIvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXAzL3BhY2thZ2UuaHRtbAppbmRleCA1MmQ1YmI5Li4zNzQzNmQ5IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDMvcGFja2FnZS5odG1sCisrKyBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwMy9wYWNrYWdlLmh0bWwKQEAgLTEsMTUgKzEsMzEgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgogPGJvZHk+CiAgICAgPGgxPlN0ZXAgMyAtIFJlYWRpbmcgdGhlIFNlcnZpY2UgQ29uZmlndXJhdGlvbjwvaDE+CiAKICAgICA8cD4KLSAgICAgICAgU2VydmljZXMgdHlwaWNhbGx5IGhhdmUgY29uZmlndXJhdGlvbi4gQ29uZmlndXJhdGlvbnMgYXJlIGRpcmVjdGx5IHN1cHBvcnRlZCBpbiBRaTRqLiBBCisgICAgICAgIFNlcnZpY2VzIHR5cGljYWxseSBoYXZlIGNvbmZpZ3VyYXRpb24uIENvbmZpZ3VyYXRpb25zIGFyZSBkaXJlY3RseSBzdXBwb3J0ZWQgaW4gWmVzdOKEoi4gQQogICAgICAgICA8Y29kZT5Db25maWd1cmF0aW9uQ29tcG9zaXRlPC9jb2RlPiBpcyBhIHN1YnR5cGUgb2YgPGNvZGU+RW50aXR5Q29tcG9zaXRlPC9jb2RlPi4gVGhhdCBpcyBiZWNhdXNlCiAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFyZSBzdG9yZWQgaW4gRW50aXR5U3RvcmVzLCBjYW4gYmUgbW9kaWZpZWQgaW4gcnVudGltZSBieSBjbGllbnQgY29kZSBhbmQgaGFzCiAgICAgICAgIHRoZSBzYW1lIHNlbWFudGljcyBhcyByZWd1bGFyIGVudGl0aWVzLgogICAgIDwvcD4KICAgICA8cD4KLSAgICAgICAgUWk0aiBhbHNvIGhhbmRsZXMgdGhlIGJvb3RzdHJhcHBpbmcgb2YgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2VzLiBJZiB0aGUgQ29uZmlndXJhdGlvbkNvbXBvc2l0ZSBpcwotICAgICAgICBub3QgZm91bmQgaW4gdGhlIGNvbmZpZ3VyZWQgZW50aXR5IHN0b3JlLCB0aGVuIFFpNGogd2lsbCBhdXRvbWF0aWNhbGx5IGxvY2F0ZSBhIHByb3BlcnRpZXMgZmlsZSBmb3IgZWFjaAorICAgICAgICBaZXN04oSiIGFsc28gaGFuZGxlcyB0aGUgYm9vdHN0cmFwcGluZyBvZiBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZXMuIElmIHRoZSBDb25maWd1cmF0aW9uQ29tcG9zaXRlIGlzCisgICAgICAgIG5vdCBmb3VuZCBpbiB0aGUgY29uZmlndXJlZCBlbnRpdHkgc3RvcmUsIHRoZW4gWmVzdOKEoiB3aWxsIGF1dG9tYXRpY2FsbHkgbG9jYXRlIGEgcHJvcGVydGllcyBmaWxlIGZvciBlYWNoCiAgICAgICAgIHNlcnZpY2UgaW5zdGFuY2UsIHJlYWQgdGhvc2UgcHJvcGVydGllcyBpbnRvIGEgQ29uZmlndXJhdGlvbkNvbXBvc2l0ZSBpbnN0YW5jZSwgc2F2ZSB0aGF0IHRvIHRoZQogICAgICAgICBlbnRpdHkgc3RvcmUgYW5kIHByb3ZpZGUgdGhlIHZhbHVlcyB0byB0aGUgc2VydmljZS4gVGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIHdpdGggdGhlIHNhbWUgbmFtZSBhcwogICAgICAgICB0aGUgc2VydmljZSBpbnN0YW5jZSB3aXRoIHRoZSBleHRlbnNpb24gPGNvZGU+InByb3BlcnRpZXMiPC9jb2RlPiBpbiB0aGUgc2FtZSBwYWNrYWdlIGFzIHRoZSBzZXJ2aWNlLgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA0L0xpYnJhcnkuamF2YSBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNC9MaWJyYXJ5LmphdmEKaW5kZXggMTBjM2RjZC4uZTYyYzRhOSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA0L0xpYnJhcnkuamF2YQorKysgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDQvTGlicmFyeS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5zZXJ2aWNlcy5zdGVwNDsKIAogcHVibGljIGludGVyZmFjZSBMaWJyYXJ5CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDQvTGlicmFyeVNlcnZpY2UuamF2YSBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNC9MaWJyYXJ5U2VydmljZS5qYXZhCmluZGV4IDQ1Y2JhOTMuLmJlNjk2YzUgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNC9MaWJyYXJ5U2VydmljZS5qYXZhCisrKyBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNC9MaWJyYXJ5U2VydmljZS5qYXZhCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiBwYWNrYWdlIG9yZy5xaTRqLnR1dG9yaWFscy5zZXJ2aWNlcy5zdGVwNDsKIAogaW1wb3J0IG9yZy5xaTRqLmFwaS5taXhpbi5NaXhpbnM7CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDUvTGlicmFyeS5qYXZhIGIvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA1L0xpYnJhcnkuamF2YQppbmRleCBhZDRkNDRjLi5iZDdlNTM0IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDUvTGlicmFyeS5qYXZhCisrKyBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNS9MaWJyYXJ5LmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLnNlcnZpY2VzLnN0ZXA1OwogCiBwdWJsaWMgaW50ZXJmYWNlIExpYnJhcnkKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNS9MaWJyYXJ5U2VydmljZS5qYXZhIGIvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA1L0xpYnJhcnlTZXJ2aWNlLmphdmEKaW5kZXggZTkzZjUxMC4uNmY0MGFiYSAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA1L0xpYnJhcnlTZXJ2aWNlLmphdmEKKysrIGIvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA1L0xpYnJhcnlTZXJ2aWNlLmphdmEKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KIHBhY2thZ2Ugb3JnLnFpNGoudHV0b3JpYWxzLnNlcnZpY2VzLnN0ZXA1OwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNi9MaWJyYXJ5LmphdmEgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDYvTGlicmFyeS5qYXZhCmluZGV4IDE2ZmFhYTAuLjUzN2EwYTMgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNi9MaWJyYXJ5LmphdmEKKysrIGIvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA2L0xpYnJhcnkuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuc2VydmljZXMuc3RlcDY7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTGlicmFyeQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA2L0xpYnJhcnlTZXJ2aWNlLmphdmEgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDYvTGlicmFyeVNlcnZpY2UuamF2YQppbmRleCBiNWIwZWU1Li41YzZjODU0IDEwMDY0NAotLS0gYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDYvTGlicmFyeVNlcnZpY2UuamF2YQorKysgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDYvTGlicmFyeVNlcnZpY2UuamF2YQpAQCAtMSwzICsxLDIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogcGFja2FnZSBvcmcucWk0ai50dXRvcmlhbHMuc2VydmljZXMuc3RlcDY7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDQvTGlicmFyeVNlcnZpY2UucHJvcGVydGllcyBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA0L0xpYnJhcnlTZXJ2aWNlLnByb3BlcnRpZXMKaW5kZXggMzQxOTk4OS4uOTBmMzQ5YyAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDQvTGlicmFyeVNlcnZpY2UucHJvcGVydGllcworKysgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNC9MaWJyYXJ5U2VydmljZS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKIHRpdGxlcz1Eb21haW4gRHJpdmVuIERlc2lnbiwgUHJhZ21hdGljIFByb2dyYW1tZXIsIEV4dHJlbWUgUHJvZ3JhbW1pbmcgRXhwbGFpbmVkCiBhdXRob3JzPUVyaWMgRXZhbnMsIEFuZHkgSHVudCwgS2VudCBCZWNrCiAKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA1L0xpYnJhcnlTZXJ2aWNlLnByb3BlcnRpZXMgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNS9MaWJyYXJ5U2VydmljZS5wcm9wZXJ0aWVzCmluZGV4IDM0MTk5ODkuLjkwZjM0OWMgMTAwNjQ0Ci0tLSBhL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA1L0xpYnJhcnlTZXJ2aWNlLnByb3BlcnRpZXMKKysrIGIvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDUvTGlicmFyeVNlcnZpY2UucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiB0aXRsZXM9RG9tYWluIERyaXZlbiBEZXNpZ24sIFByYWdtYXRpYyBQcm9ncmFtbWVyLCBFeHRyZW1lIFByb2dyYW1taW5nIEV4cGxhaW5lZAogYXV0aG9ycz1FcmljIEV2YW5zLCBBbmR5IEh1bnQsIEtlbnQgQmVjawogCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNi9MaWJyYXJ5LnByb3BlcnRpZXMgYi90dXRvcmlhbHMvc2VydmljZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9xaTRqL3R1dG9yaWFscy9zZXJ2aWNlcy9zdGVwNi9MaWJyYXJ5LnByb3BlcnRpZXMKaW5kZXggMzQxOTk4OS4uOTBmMzQ5YyAxMDA2NDQKLS0tIGEvdHV0b3JpYWxzL3NlcnZpY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvcWk0ai90dXRvcmlhbHMvc2VydmljZXMvc3RlcDYvTGlicmFyeS5wcm9wZXJ0aWVzCisrKyBiL3R1dG9yaWFscy9zZXJ2aWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3FpNGovdHV0b3JpYWxzL3NlcnZpY2VzL3N0ZXA2L0xpYnJhcnkucHJvcGVydGllcwpAQCAtMSwzICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCiB0aXRsZXM9RG9tYWluIERyaXZlbiBEZXNpZ24sIFByYWdtYXRpYyBQcm9ncmFtbWVyLCBFeHRyZW1lIFByb2dyYW1taW5nIEV4cGxhaW5lZAogYXV0aG9ycz1FcmljIEV2YW5zLCBBbmR5IEh1bnQsIEtlbnQgQmVjawogCg==